王文成 ,蔣 慧 ,喬 倩 ,祝捍皓 ,鄭 紅
(1.浙江海洋大學 船舶與機電工程學院,浙江 舟山 316022;2.浙江海洋大學 海洋科學與技術(shù)學院,浙江 舟山 316022)
海洋作為地球上最大的生態(tài)系統(tǒng)包含極其豐富的生物和非生物資源。雖然我國海洋面積有300多萬平方千米,但是漁業(yè)資源作為海洋資源中重要的一項資源,近年來呈現(xiàn)逐漸衰退趨勢[1]。對周圍海域內(nèi)海底環(huán)境進行實時監(jiān)測,分析研究海域中代表性魚類的分布概況及生活習性,對于漁業(yè)資源可持續(xù)發(fā)展、探測未知生物資源有著重要意義。
目標識別是計算機視覺領(lǐng)域重要的研究方向之一。隨著科學技術(shù)的進步、計算硬件設(shè)備水平的提高,基于深度學習的目標識別檢測方法受到了人們廣泛關(guān)注。杜衛(wèi)東等[2]提出一種基于支持向量機(SVM)的多方位聲散射數(shù)據(jù)決策融合的魚類識別方法,識別準確率達到 90%以上,姚潤璐等[3]通過分割魚體,獲得魚肚、魚背圖像,通過提取紋理特征和形狀特征,識別率達到75%,相較于傳統(tǒng)的目標檢測算法,基于卷積神經(jīng)網(wǎng)絡(CNN)的目標檢測算法通過學習自動提取顏色、輪廓等底層的特征和更高級、抽象的特征,然后利用分類模型進行分類檢測,其檢測結(jié)果具有更高的精度和魯棒性。林明旺等[4]采用VGG16 模型進行魚類分類識別,但是數(shù)據(jù)集背景干擾強度大,雖然進行微調(diào),穩(wěn)定性仍然不好。王文成等[5]用ResNet50 網(wǎng)絡模型對十種魚類做了分類識別,準確率達到了93.33%,但是數(shù)據(jù)集數(shù)量有限,識別精度不高;張俊龍等[6]提出在預處理過程中使用權(quán)重化卷積操作,對海洋魚類識別準確率提升23%,在視頻觀測中精準識別魚類;梁紅等[7]通過對圖像進行水下降噪的方法,并且對預訓練的網(wǎng)絡微調(diào)參數(shù),在海洋魚類數(shù)據(jù)集上識別準確率達到85.08%。
基于CNN 的目標檢測算法依據(jù)是否需要提取候選區(qū)域分為:基于有候選區(qū)域的目標檢測算法和基于無候選區(qū)域的目標檢測算法兩種。區(qū)域卷積神經(jīng)網(wǎng)絡(R-CNN)[8]、快速區(qū)域卷積神經(jīng)網(wǎng)絡(Fast R-CNN)[9]、超快速區(qū)域卷積神經(jīng)網(wǎng)絡(Faster R-CNN)[10],都屬于代表性的基于候選區(qū)域的目標檢測算法。該類算法從圖像中事先提取一系列可能的對象候選區(qū)域,然后從這些候選區(qū)域中提取特征并進行判斷分類。2019 年,袁紅春等人[11]利用 Faster R-CNN 目標檢測方法應用到水下魚類種類識別中,識別準率達到98.12%。該類算法的檢測準確率較高,但是處理速度較慢。無候選區(qū)域的目標檢測算法的代表性算法有單級式目標檢測(YOLO)[12]、單點多盒檢測器(SSD)[13]及其改進的算法YOLO v2[14]和深度監(jiān)督對象檢測器(DSOD)。此類算法去除候選區(qū)域提取過程,使用神經(jīng)網(wǎng)絡直接將一整張圖片輸入神經(jīng)網(wǎng)絡,然后預測出bounding box 的坐標和物體的類別、置信度,檢測物體速度較快。李慶忠等[15]對 YOLO 實時目標檢測算法進行了改進,采用遷移學習法訓練網(wǎng)絡,預處理中圖像增強以及視頻幀數(shù)檢測速率上做了改變,該算法提升了對海底小目標檢測的性能,但存在檢測精度低、檢測小目標會有遺漏等問題。SSD 算法同時融合了proposal-free 的提取和Faster R-CNNs算法的優(yōu)點,與其他檢測算法相比,即使輸入圖像尺寸小,SSD 依然有更好的精度。DSOD 是一種改進的SSD 網(wǎng)絡框架算法。相比于 SSD 目標檢測算法,DSOD 整個網(wǎng)絡采用密集的短連接和通道拼接技術(shù),使得DSOD 的模型參數(shù)更小,同時能直接在目標數(shù)據(jù)集上進行訓練,而無需在 ImageNet、COCO、PASCAL VOC 等公開數(shù)據(jù)集上進行預訓練。
基于上述的分析,由于分類識別和檢測任務在統(tǒng)計分布和損失函數(shù)的差異,存在學習上的偏差,為了解決這個問題,本文利用深度監(jiān)督對象檢測器(DSOD)方法對選定魚類圖像進行檢測分類識別研究,該模型具有高效的目標檢測網(wǎng)絡,保持了處理速度,提升了對小目標的檢測性能。
CNN 是當前深度學習算法實現(xiàn)的主要途徑,每個模塊主要由數(shù)據(jù)輸入層、卷積層、激勵層、池化層和全連接層堆疊在一起組成。一般來說網(wǎng)絡層越深,訓練得到的效果就越好,但是有時候有些網(wǎng)絡會出現(xiàn)過擬合的現(xiàn)象,需要進行微調(diào)并不斷測試。引入殘差網(wǎng)絡可以很好地抑制過擬合現(xiàn)象,ResNet網(wǎng)絡模型就用到了殘差結(jié)構(gòu)[16],CNN 各卷積層共享權(quán)重,減少很大一部分參數(shù),提高模型的計算效率。池化層通過對卷積的輸出進行采樣來降低下一層的數(shù)據(jù)速率,可以將圖像用作直接輸入,消除復雜的提取 FeatureMap 的過程。
ResNet50 包含 49 個卷積層和 1 個全連接層。其中,第二至第五階段的ID BLOCK×2 表示兩個大小不變的殘差,CONV BLOCK 表示增加比例的殘差,每個殘差該塊包含三個卷積層,結(jié)構(gòu)如圖1 所示。
圖1 中的 CONV 是卷積操作的卷積層,Batch-Norm 是批量正則化處理,ReLU 是激活函數(shù),MAX POOL 表示最大池化操作,AVG POOL 表示全局平均池化層操作,stage1 到stage5 表示殘差塊。輸入層把不同圖片的裝換為224×224 的大小進行輸入,激活函數(shù)使用 ReLU,即f(x)=max(0,x),最后一層是全連接層,需要將與每個類別對應的計算得分轉(zhuǎn)換為與總和為1 的每個類別對應的概率值,使用Softmax函數(shù)進行分類,即。
圖1 網(wǎng)絡模型
DSOD 方法是一種類似于SSD 的多尺度proposalfree 檢測框架,不需要提取候選框,也不需要預訓練過程,能夠從頭開始訓練模型,并達到很好的檢測效果。DSOD 的網(wǎng)絡結(jié)構(gòu)可以分為兩部分:用于特征提取的主干網(wǎng)絡和多尺度預測網(wǎng)絡。主干網(wǎng)絡是深度監(jiān)督DenseNets 結(jié)構(gòu)的一種變體,由一個主干塊、四個密集塊、兩個過渡層和兩個w/o 組成池過渡層。如圖2 所示,DSOD 的架構(gòu)由一個主干(Stem)模塊、四個密集(Dense Block)模塊、兩個過渡層(Transition Layer)模塊和兩個無池化層的過渡層(Transition w/o Pooling Layer)模塊組成。其中主干模塊由 3 個 3×3的卷積層和一個2×2 的最大池化層組成,第一個卷積層的步長為2,另外兩個卷積層步長為1,池化層步長為 2;密集模塊是由 1×1 的卷積層和 3×3 的卷積層組成的,卷積層數(shù)量密集排列;過渡層由1×1卷積層和 2×2 的最大池化層組成,步長為 2;無池化層的過渡層只有一個1×1 卷積層。最先進的對象檢測器過分依賴在大規(guī)模數(shù)據(jù)集上預訓練成的網(wǎng)絡,分類和檢測任務在統(tǒng)計分析與損失函數(shù)上的差別,存在學習偏差,DSOD 模型是為了解決這兩個方面的問題而產(chǎn)生的模型。
本文實驗所需的數(shù)據(jù)均來源于手動搜集的網(wǎng)絡圖片,四種魚類,分別為大菱鲆、黃鰭鯛、金錢魚、鯔魚,共 1 123 張圖像,每種魚類設(shè)置驗證集42張圖像,并采取相同的預處理操作,以確保最終驗證的準確性和測試結(jié)果將數(shù)據(jù)分成相同大小的批次,方便后續(xù)模型訓練。
基于 PyTorch 框架實現(xiàn)的檢測器。所有的模型都是在 NVidia GTX2080Ti GPU 上用 SGD 求解器從零開始訓練的。由于DSOD 特征映射的每個尺度都由多個分辨率串聯(lián)而成,因此采用L2 歸一化技術(shù)[17]。大多數(shù)訓練設(shè)置都遵循SSD,包括默認框的數(shù)據(jù)擴充、規(guī)模和高寬比,有自己的學習速率調(diào)度和小批量大小設(shè)置。細節(jié)將在實驗部分給出。
課題組在前期研究中針對10 種魚類進行分類識別,十種魚類分別為鯔魚、巴鰹魚、金錢魚、銀鯧魚、大菱鲆、鱸魚、頜針魚、黃鰭鯛、綠鰭魚、黑鯛魚,共 908 張圖像,設(shè)置訓練集 807,驗證集 101 進行分層采樣。前期研究的實驗結(jié)果如表1 所示,分別從 precision、recall、f1-score 的這幾個指標中反映出來,計算這些指標有四個概念:TP、FP、TN、FN,從表1 可以看出,該模型的準確率和召回率都比較高。
表1 分類識別實驗結(jié)果
圖2 DSOD 架構(gòu)
本文實驗選擇其中四種魚類,分別為大菱鲆、黃鰭鯛、金錢魚、鯔魚,并且增加了每種魚類的數(shù)量,共 1 123 張圖像,每種魚類設(shè)置驗證集 42 張圖像,剩余的圖片用作訓練學習。本文是在 PyTorch 框架下,使用 ResNet50 網(wǎng)絡模型進行實驗,分類識別用的優(yōu)化器是Adam,該模型的參數(shù)設(shè)置如下,學習率 1e-4,lr_decay=1e-4,weight_decay=1e-4。如 圖3(a)所示,橫坐標為迭代次數(shù),縱坐標為損失。從圖中可以看出隨著迭代次數(shù)的增加損失值逐漸下降,迭代次數(shù)2 000 次之前下降速率較快,往后曲線逐漸平穩(wěn)。圖3(b)所示為隨迭代次數(shù)的增加識別準確率的變化,從圖中可以看出隨著迭代次數(shù)的增加準確率逐漸增加,當?shù)螖?shù)為2 000 次的時候,訓練準確率達到90%以上,當?shù)螖?shù)達到8 000 次的時候,訓練準確率達到95%以上,之后持續(xù)為平穩(wěn)狀態(tài)。同時,數(shù)據(jù)結(jié)果顯示該模型收斂速度快,識別精度高,驗證集誤差小。
圖4 所示為利用 PyQt5 做的 GUI 可視化界面,在界面中有魚類識別和魚類視頻檢測兩個功能檢測窗口,在魚類識別窗口中有選擇圖片、預測、實際類別、預測類別以及退出這幾個功能。當從數(shù)據(jù)庫中隨意選擇一個圖片進行預測,如圖4(a)所示,系統(tǒng)給出的實際類別是金錢魚。通過點擊預測功能按鈕,圖4(b)給出預測類別為金錢魚,與圖(a)給出的實際類別相同。本文經(jīng)過多次實驗測試,圖(a)中的實際類別和圖(b)中的預測類別總是一致的,預測準確率是很高的,PyQt5 可視化界面中都能準確呈現(xiàn)出來識別種類,GUI 可視化界面能夠直觀地反映識別的準確度。
本文用于實驗檢測的視頻來源于Labeled fishesin the wild[18]。目標檢測的訓練配置參數(shù)如下,初始學 習 率 0.01,momentum=0.9,weight_decay=5e-4,學習率采用自適應的學習率下降策略,當學習率停滯不降一定次數(shù)之后,降低學習率。目標檢測結(jié)果如圖5所示,通過圖(a)可以發(fā)現(xiàn),該檢測框架對于比較小的物體也能夠檢測出來,圖中有一些小的目標,由于水下的惡劣環(huán)境的原因,并沒有完全檢測出來,在水下基礎(chǔ)設(shè)施較好的情況下,可以達到較好的檢測效果,視頻中出現(xiàn)的魚類都能準確地標注出來,檢測效果很明顯,而且DSOD 繼承了 SSD 的檢測速度快的優(yōu)點,對于遺漏小目標的缺點得到提升。
圖3 準確率與損失變化
圖4 PyQt5 可視化界面
圖5 水下實時跟蹤檢測
DSOD 方法是一種類似于SSD 的多尺度proposalfree 檢測框架,引入了密集網(wǎng)絡(Densents)的思想,即將某些層的輸入進行變換并與密集網(wǎng)絡結(jié)合,DSOD 的參數(shù)數(shù)量大大減少。DSOD 不需要預訓練模型的檢測算法,訓練檢測網(wǎng)絡從零開始訓練,能達到最先進的精度,快速的處理速度,與從大數(shù)據(jù)訓練而來的復雜模型相比,更好的模型結(jié)構(gòu)可以實現(xiàn)相似或更好的性能。
本文從深度學習的角度出發(fā),利用卷積神經(jīng)網(wǎng)絡在計算機視覺中的優(yōu)勢,提出了一種基于PyTorch深度學習框架的魚類圖像識別算法,以ResNet50 為網(wǎng)絡模型,采用Adam 優(yōu)化算法對模型參數(shù)進行更新。在 PyQt5 可視化界面中,實驗結(jié)果預測值和實際值正確率很高。該模型能夠抑制過擬合,收斂速度較快,訓練時間較短,殘差網(wǎng)絡解決了深度網(wǎng)絡訓練艱難的問題,提高了性能。提出了一種基于深度監(jiān)督的DSOD 框架,該框架可以對目標檢測器進行從無到有的學習。該模型檢測速率快,對于目標檢測遺漏較少。該算法在水產(chǎn)養(yǎng)殖、保護漁業(yè)資源方面都有廣闊的應用前景。