使用曲率積分和動(dòng)態(tài)時(shí)間規(guī)整研究抹香鯨識(shí)別!
使用曲率積分和動(dòng)態(tài)時(shí)間規(guī)整,讓我們深入研究抹香鯨識(shí)別!
前言
最近,我們參加了Capgemini的全球數(shù)據(jù)科學(xué)挑戰(zhàn)賽。我與Acores鯨魚研究中心合作,挑戰(zhàn)抹香鯨的識(shí)別任務(wù),用人工智能幫助拯救抹香鯨的生命。
為了完成這項(xiàng)任務(wù),我們收集了過去幾年幾千張的鯨魚照片。在訓(xùn)練數(shù)據(jù)集中,平均每頭鯨魚有1.77張照片,很多動(dòng)物只出現(xiàn)過一次,因此,我們的目標(biāo)是,給定一個(gè)新的圖片,在已有數(shù)據(jù)中找出最相似的。
因此,如果鯨魚已經(jīng)被拍下來,研究人員就可以知道是何時(shí)何地拍的了。
我很自豪地宣布,我們以第三名的成績(jī)結(jié)束了比賽,我們使用暹羅網(wǎng)絡(luò)取得了勝利,但是,由于已經(jīng)有很多關(guān)于這個(gè)架構(gòu)的文章,所以今天將介紹另一個(gè)更有趣、更新穎的方法來解決這個(gè)問題。
方法
本文介紹的方法由Weideman等人提出,算法的主要步驟如下:
基于顏色分析和輪廓檢測(cè)的尾部提取
曲率積分進(jìn)行尾部處理(IC)
與動(dòng)態(tài)時(shí)間規(guī)整(DTW)進(jìn)行尾部比較
所以該方法的預(yù)測(cè)率不如暹羅網(wǎng)絡(luò)好,但是這個(gè)想法非常有趣,值得分享和了解。在許多數(shù)據(jù)科學(xué)項(xiàng)目中,數(shù)據(jù)準(zhǔn)備是最困難的部分,要將鯨魚尾部處理為信號(hào),信號(hào)的質(zhì)量必須非常好。在本文中,我們將花一些時(shí)間來理解信號(hào)處理之前的所有必要步驟。
探索我們的數(shù)據(jù)集,分析圖片
如引言中所述,我們得到了數(shù)千張圖片。乍一看,鯨魚就是鯨魚,所有這些圖片看上去都像是一個(gè)藍(lán)色背景(天空和大海),中間有一個(gè)灰色斑點(diǎn)(尾巴)。
經(jīng)過初步探索之后,我們發(fā)現(xiàn)尾巴的形狀可以作為區(qū)分鯨魚的重要特征,我們確信這對(duì)我們的算法至關(guān)重要。那顏色呢?像素分布中是否有什么有用的信息?
使用Bokeh可視化庫(https://bokeh.org/)來分析每個(gè)圖片中顏色數(shù)量之間的相關(guān)性(綠色與紅色–藍(lán)色與紅色–綠色與藍(lán)色),我們很快發(fā)現(xiàn)圖像中的顏色高度相關(guān)。因此,我們專注于輪廓,然后嘗試通過顏色變化來識(shí)別鯨魚。
基于彩色濾波器的尾部提取
檢測(cè)尾巴輪廓的第一步是在圖片里從天空和海水中提取尾巴,這也是尾部提取中最困難的部分。
首先,我們使用輪廓檢測(cè)算法,但是由于從一個(gè)鏡頭到另一個(gè)鏡頭的陽光不斷變化,因此對(duì)比度發(fā)生了很大變化,輪廓檢測(cè)算法得到結(jié)果總不能令人滿意。
使用顏色提取尾巴
我們?yōu)槊總(gè)通道強(qiáng)度(紅色,綠色,藍(lán)色)繪制灰度圖片
觀察單個(gè)圖片的三個(gè)通道
正如你在上面看到的,對(duì)于大多數(shù)圖片來說,圖片中間的顏色較少,可以按像素強(qiáng)度進(jìn)行過濾。由于尾巴通常是灰色的,因此它們的每種顏色的數(shù)量幾乎相同(R = G = B),但是,海和天空往往是藍(lán)色的,這使該顏色成為過濾的理想選擇。
讓我們看看當(dāng)只保留藍(lán)色值,并且只保留藍(lán)色值<選定的閾值(blue_value < SELECTED_THRESHOLD)的像素時(shí)會(huì)發(fā)生什么。
選定的閾值SELECTED_THRESHOLD的最大值為255,因?yàn)樗窍袼貜?qiáng)度的最大值。
通過這一系列圖片,我們可以確信通過此方法可以很容易提取圖片中的尾巴區(qū)域。但是我們?cè)撊绾芜x擇過濾閾值?
以下是使用10到170(十乘十)的所有值作為單個(gè)圖片的閾值的結(jié)果示例。
根據(jù)藍(lán)色像素的強(qiáng)度,在一張圖片上應(yīng)用17種不同的濾波器:
以下是一些有趣的內(nèi)容:
閾值很小(大約10),大海消失了,但尾巴也消失了
閾值很。ù蠹s20),尾巴的一部分消失了
閾值不太高(大約40),提取的挺好,所有的尾巴都沒有閾值那么藍(lán),但是所有的大海都比閾值藍(lán)。
在中間閾值(大約80)的情況下,尾巴保持完整,但我們只能保留部分海洋
在接近中間值的閾值(約110)的情況下,很難區(qū)分海和尾巴
在較高的閾值(>=140)下,尾巴完全消失,這意味著即使大海也不夠藍(lán),無法通過過濾器選擇。
很明顯應(yīng)該采用SELECTED_THRESHOLD = 40并應(yīng)用filter blue_value < 40。
但是并不是每一張圖片的光照強(qiáng)度都是一樣的,通過將所有這些閾值繪制在隨機(jī)圖片上的結(jié)果,該閾值在10到130之間變化。那么如何選擇合適的值呢?
使用邊界框選擇閾值
通過查看前面的圖片,我們想到了一些東西:正確閾值的正確圖片是外部具有最大空白區(qū)域而內(nèi)部具有最大區(qū)域的圖像,我們希望一些在ImageNet上訓(xùn)練的神經(jīng)網(wǎng)絡(luò)可以對(duì)圖片中的鯨魚進(jìn)行定位,我們決定使用基于ImageNet預(yù)訓(xùn)練的MobileNet。
與原始圖片相比,一批提取的尾巴帶有邊框
如下所示,我們可以非常準(zhǔn)確地確定圖片中尾巴的位置,然后,我們可以在所有圖片中將“尾部-內(nèi)部”與“海部-外部”分開。
為了更好地了解這種分離,對(duì)于訓(xùn)練集的每張圖片,我們將邊界框內(nèi)每個(gè)像素的藍(lán)色值相加,并對(duì)框外的像素進(jìn)行相同的處理。
然后,我們?cè)谙聢D上繪制每個(gè)圖片,內(nèi)部結(jié)果體現(xiàn)在X軸上,外部結(jié)果體現(xiàn)在Y軸上,藍(lán)線代表X = Y。我們可以從此圖形中獲得的含義如下:你離線條越遠(yuǎn),尾巴和海洋之間的分隔就越容易。
我們嘗試根據(jù)與線的距離應(yīng)用過濾器閾值,但這沒有產(chǎn)生任何結(jié)果,經(jīng)過幾次嘗試,我們知道僅根據(jù)圖片的顏色分布還得不到結(jié)果,因此我們決定采用強(qiáng)硬的方法,即除了查看圖片并確定閾值外,我們還為每張圖片應(yīng)用15個(gè)濾波器,對(duì)其進(jìn)行分析,然后自動(dòng)選擇最佳濾波器以進(jìn)行進(jìn)一步處理。
然后對(duì)于給定的圖片,我們將15個(gè)濾波器應(yīng)用了15個(gè)不同的值作為閾值,對(duì)于每個(gè)濾波器,我們計(jì)算邊界框內(nèi)的像素和外面的像素的數(shù)量(過濾后,像素值為0或1,無需再對(duì)強(qiáng)度求和),然后,對(duì)結(jié)果進(jìn)行歸一化,使數(shù)字獨(dú)立于圖像的大小,并將結(jié)果繪制在一個(gè)圖形上。
單個(gè)圖片和不同過濾閾值的邊界框內(nèi)(X軸)和外框(Y軸)的像素?cái)?shù)量。
對(duì)于每張圖片,我們得到的曲線都類似于上面的曲線,這是我們隨著閾值的演變而對(duì)前面的陳述進(jìn)行的數(shù)學(xué)轉(zhuǎn)換。
當(dāng)閾值很小時(shí),尾巴和大海消失了,尾部?jī)?nèi)部或外部均無像素
當(dāng)閾值增加時(shí),出現(xiàn)尾巴,并且X軸的值升高。
直到閾值開始出現(xiàn)在海洋的某些部分,并且外部關(guān)注度開始增長(zhǎng)。
使用線性回歸或?qū)?shù),很容易計(jì)算出正確的閾值:它是圖的兩條線的交點(diǎn)處的閾值。
注意:橙色線是 y = y_of_the_selected_threshold
尾巴提取的最后提示
最后,為了在提取時(shí)得到最好的圖片,當(dāng)我們計(jì)算出最佳閾值(10,20,30,40,…,120,130,140,150)時(shí),假設(shè)是80。我們對(duì)-5/+5值應(yīng)用了過濾器,所以我們有三張照片:藍(lán)色<75,藍(lán)色<80,藍(lán)色<85,然后我們將這些網(wǎng)格圖片中的三個(gè)(0和1)求和,并且只保留結(jié)果像素值等于2的像素,這將作為最后的過濾器,去除尾部的噪音。
結(jié)果
我們可以使用濾波器根據(jù)藍(lán)色像素的強(qiáng)度把尾巴和海洋區(qū)分開來
在過濾之前,需要為每個(gè)圖片找到一個(gè)閾值
使用邊界框是找到此閾值的有效方法
經(jīng)過幾個(gè)小時(shí)的工作,我們最終得到了一個(gè)非常好的尾巴提取器,可以很好地處理具有不同亮度、天氣、海洋顏色、尾巴顏色的尾巴。
一批提取出來的尾巴與原始圖片進(jìn)行的比較
輪廓檢測(cè)
現(xiàn)在已經(jīng)可以定位尾部在圖片中的位置,我們可以進(jìn)行輪廓檢測(cè)了。
在這一步,我們可以使用OpenCV的輪廓檢測(cè)算法,但是通過以下兩個(gè)步驟會(huì)更快一些:
步驟1:使用熵去除尾巴周圍的噪聲
使用熵變僅保留提取的尾巴輪廓
步驟2:保持每列圖片的高光像素
應(yīng)用熵濾波器后檢測(cè)到的尾巴輪廓
此步驟非常簡(jiǎn)單,沒有什么復(fù)雜性。
曲率積分
通過從海中提取尾巴并獲取圖片的上部像素,我們可以把尾巴的后沿作為數(shù)學(xué)信號(hào),F(xiàn)在我們就要處理規(guī)范化問題了,因?yàn)樗袌D片的大小或像素?cái)?shù)量都不相同,同時(shí)到抹香鯨的距離并不總是相同,拍攝時(shí)的方位也可能會(huì)發(fā)生變化。
尾巴方向的示例,同一條鯨的兩張照片之間可能會(huì)有所不同
為了進(jìn)行標(biāo)準(zhǔn)化,我們必須沿著兩個(gè)軸進(jìn)行。首先,我們使用每條尾巴300個(gè)點(diǎn)進(jìn)行信號(hào)比較;然后我們對(duì)最短的插值進(jìn)行插值,并對(duì)最長(zhǎng)的進(jìn)行采樣;其次,我們將0到1之間的所有值歸一化,這導(dǎo)致信號(hào)疊加,如下圖所示。
標(biāo)度信號(hào)疊加
為了解決定向問題,我們使用了曲率積分度量,該度量通過局部評(píng)估將信號(hào)轉(zhuǎn)換為另一個(gè)信號(hào)。然后,在每一步中,我們將信號(hào)的邊緣沿圓形拉直,以使其內(nèi)接為正方形。
曲率積分原理
最后,我們定義曲率如下:
曲率是曲線下到正方形總面積的面積,這意味著直線的曲率值為c = 0.5
因此,我們獲得了標(biāo)準(zhǔn)化信號(hào),與鯨魚和攝影者之間的距離無關(guān)、與鯨魚和攝影者之間的角度無關(guān)、并且與鯨魚和海洋之間的傾角無關(guān)。
然后,對(duì)于每張訓(xùn)練測(cè)試圖片,我們?cè)贗C相移期間創(chuàng)建了半徑分別為5、10和15像素的信號(hào)并將它們存儲(chǔ)起來,用于最后一步:時(shí)間序列之間的比較。
對(duì)于一條尾巴,信號(hào)如下所示:
曲率積分應(yīng)用于帶有3個(gè)不同半徑值的抹香鯨尾緣
現(xiàn)在,讓我們進(jìn)行信號(hào)比較!
動(dòng)態(tài)時(shí)間規(guī)整
動(dòng)態(tài)時(shí)間規(guī)整(DTW,https://en.wikipedia.org/wiki/Dynamic_time_warping) 是一種能夠在兩個(gè)時(shí)間序列之間找到最佳對(duì)齊方式的算法,它通常用于確定時(shí)間序列的相似性,分類以及查找兩個(gè)時(shí)間序列之間的對(duì)應(yīng)區(qū)域。
與歐幾里得距離(指的是兩條曲線之間的距離,逐點(diǎn))相反,DTW距離允許鏈接曲線的不同部分。該算法的工作原理如下:
使用兩條曲線,并創(chuàng)建了兩個(gè)曲線之間的距離矩陣,從左下角到右上角,計(jì)算兩點(diǎn)之間的距離Ai和Bi,計(jì)算兩個(gè)點(diǎn)之間的距離:D(Ai, Bi) = |Ai — Bi] + min(D[i-1, j-1], D[i-1, j], D[i, j-1])。
然后我們計(jì)算從右上角到左下角的權(quán)重較小的路徑,為此,我們?cè)诿恳徊街羞x擇具有最小值的平方。
最后,所選的路徑(下圖中的綠色)指示在序列A的數(shù)據(jù)點(diǎn)到序列B中的對(duì)應(yīng)數(shù)據(jù)點(diǎn)。
這些基本計(jì)算的實(shí)現(xiàn)非常容易。例如,這是一個(gè)根據(jù)兩個(gè)序列s和創(chuàng)建距離矩陣的函數(shù)t。
def dtw(s, t):
""" Computes the distance matrix between two time series
args: s and t are two numpy arrays of size (n, 1) and (m, 1)
"""
# Instanciate distance matrix
n, m = len(s), len(t)
dtw_matrix = np.zeros((n+1, m+1))
for i in range(n+1):
for j in range(m+1):
dtw_matrix[i, j] = np.inf
dtw_matrix[0, 0] = 0
# Compute distance matrix
for i in range(1, n+1):
for j in range(1, m+1):
cost = abs(s[i-1] - t[j-1])
last_min = np.min([
dtw_matrix[i-1, j],
dtw_matrix[i, j-1],
dtw_matrix[i-1, j-1]
])
dtw_matrix[i, j] = cost + last_min
return dtw_matrix
現(xiàn)在讓我們回到我們的抹香鯨!數(shù)據(jù)集的每個(gè)尾巴都轉(zhuǎn)換為“積分曲線信號(hào)”,我們計(jì)算了所有尾巴之間的距離,以發(fā)現(xiàn)最接近的那些尾巴。
然后,當(dāng)接收到一張新圖片時(shí),我們必須使其通過整個(gè)準(zhǔn)備流程:使用藍(lán)色濾波器的尾部提取,使用熵方法進(jìn)行輪廓檢測(cè)以及使用IC進(jìn)行輪廓轉(zhuǎn)換,最后會(huì)得到一個(gè)300x1形狀的張量,最后我們要計(jì)算它到整個(gè)數(shù)據(jù)集中所以樣本的相似度,當(dāng)然這個(gè)過程這很費(fèi)時(shí)。
結(jié)果顯示,當(dāng)我們有兩張相同的鯨魚照片時(shí),在大多數(shù)情況下,兩張照片是最接近的40張,這在2000年中是最好的。但是,如引言中所述,使用暹羅網(wǎng)絡(luò)的結(jié)果要好于該算法,鑒于比賽的時(shí)間,我們不得不研究選擇其他的方法。
使用一半的尾巴和一半的信號(hào)
我們嘗試使用半尾巴特征,如下所示:
尾巴是對(duì)稱的,這將簡(jiǎn)化計(jì)算。
尾巴是不對(duì)稱的,可以通過半尾巴進(jìn)行比較。
盡管進(jìn)行了大量測(cè)試,但這并沒有給我們非常確定的結(jié)果,因?yàn)槲覀冋J(rèn)為我們的分離不夠可靠,我們將需要更多時(shí)間來研究信號(hào)處理帶來的更好分離。
最后的想法
本文中由于圖片的顏色(基本上是藍(lán)色——海洋和天空)以及數(shù)據(jù)集中圖片的不同亮度,我們對(duì)尾巴識(shí)別應(yīng)用了兩種連續(xù)的處理方法。
首先,曲率積分是一種通過查看曲線的局部變化對(duì)信號(hào)進(jìn)行歸一化的方法,然后,我們使用了動(dòng)態(tài)時(shí)間規(guī)整,這是兩條曲線之間的距離計(jì)算方法,即使移動(dòng)了兩條曲線也可能會(huì)發(fā)現(xiàn)兩條曲線之間的相似性。
不幸的是,結(jié)果并不如我所愿,我們無法繼續(xù)使用該解決方案。通過更多的時(shí)間和更多的努力,我深信我們可以改進(jìn)實(shí)現(xiàn)中的每個(gè)步驟,從而獲得更好的模型。
通過所有步驟,實(shí)現(xiàn)它們的不同方法以及參數(shù),監(jiān)視所有轉(zhuǎn)換非常具有挑戰(zhàn)性。正如我們有路線圖一樣,每一步都有其自身的困難,每一次小小的成功都是勝利,并開啟了下一步,這是非常另人興奮的。
我發(fā)現(xiàn)這種方法是非常有趣的,與通常的預(yù)訓(xùn)練CNN模型完全不同。希望你也喜歡本文中這種方法的優(yōu)點(diǎn)。
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
即日-10.29立即報(bào)名>> 2024德州儀器嵌入式技術(shù)創(chuàng)新發(fā)展研討會(huì)
-
10月31日立即下載>> 【限時(shí)免費(fèi)下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
-
即日-11.13立即報(bào)名>>> 【在線會(huì)議】多物理場(chǎng)仿真助跑新能源汽車
-
11月14日立即報(bào)名>> 2024工程師系列—工業(yè)電子技術(shù)在線會(huì)議
-
12月19日立即報(bào)名>> 【線下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
即日-12.26火熱報(bào)名中>> OFweek2024中國(guó)智造CIO在線峰會(huì)
推薦專題
- 1 Intel宣布40年來最重大轉(zhuǎn)型:年底前裁員15000人、拋掉2/3房產(chǎn)
- 2 因美封殺TikTok,字節(jié)股價(jià)骨折!估值僅Meta1/5
- 3 宏山激光重磅發(fā)布行業(yè)解決方案,助力智能制造產(chǎn)業(yè)新飛躍
- 4 國(guó)產(chǎn)AI芯片公司破產(chǎn)!白菜價(jià)拍賣
- 5 具身智能火了,但規(guī)模落地還需時(shí)間
- 6 國(guó)產(chǎn)英偉達(dá)們,抓緊沖刺A股
- 7 三次錯(cuò)失風(fēng)口!OpenAI前員工殺回AI編程賽道,老東家捧金相助
- 8 英特爾賦能智慧醫(yī)療,共創(chuàng)數(shù)字化未來
- 9 英偉達(dá)的麻煩在后頭?
- 10 將“網(wǎng)紅”變成“商品”,AI“爆改”實(shí)力拉滿
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市