王文成 蔣慧 喬倩 祝捍皓 鄭紅
[摘要]魚類識(shí)別在漁業(yè)資源研究、魚類知識(shí)科普、水產(chǎn)養(yǎng)殖加工、魚類稀有物種保護(hù)等領(lǐng)域有著廣泛的應(yīng)用前景。為了準(zhǔn)確對(duì)采集的圖像進(jìn)行分類識(shí)別,提出一種基于Keras深度學(xué)習(xí)框架的魚類圖像識(shí)別算法,以ResNet50為基礎(chǔ)網(wǎng)絡(luò)框架,使用混淆矩陣優(yōu)化分類器對(duì)圖像的自動(dòng)分類模型。利用該模型對(duì)10種魚類進(jìn)行分類識(shí)別,結(jié)果顯示正確識(shí)別率達(dá)到了93.33%。
[關(guān)鍵詞]深度學(xué)習(xí);ResNet50網(wǎng)絡(luò);混淆矩陣;Keras框架;魚類圖像識(shí)別
[中圖分類號(hào)]TP391.41 [文獻(xiàn)標(biāo)識(shí)碼]A
21世紀(jì)計(jì)算機(jī)技術(shù)迅速發(fā)展,人工智能滲透到各個(gè)領(lǐng)域。 機(jī)器視覺是人工智能領(lǐng)域的一個(gè)重要分支,它主要用于模仿人類視覺功能的機(jī)器,通過對(duì)目標(biāo)圖像進(jìn)行特征提取并加以分析理解,最終實(shí)現(xiàn)目標(biāo)的分類識(shí)別。目前機(jī)器視覺技術(shù)已經(jīng)被用到多字體漢字識(shí)別、中藥飲片圖像識(shí)別、車標(biāo)識(shí)別算法研究等領(lǐng)域。魚類識(shí)別在漁業(yè)資源研究、魚類知識(shí)科普、水產(chǎn)養(yǎng)殖加工、魚類稀有物種保護(hù)、等領(lǐng)域有著廣泛的應(yīng)用前景。近年來,國(guó)內(nèi)外學(xué)者針對(duì)基于機(jī)器視覺技術(shù)在魚類分類識(shí)別上的應(yīng)用進(jìn)行了諸多的研究,分類識(shí)別的方法涉及到基于特征值、相關(guān)系數(shù)法、分級(jí)分類法、支持向量機(jī)、神經(jīng)網(wǎng)絡(luò)等方法。
C.Spampinato等通過利用灰度直方圖的統(tǒng)計(jì)矩提取的紋理特征平均正確識(shí)別率約為92%。杜偉東等利用基于支持向量機(jī)結(jié)合聲散射數(shù)據(jù)決策層融合方法,對(duì)魚類進(jìn)行圖像分類識(shí)別,準(zhǔn)確率在 90%以上。張俊龍等提出基于一種深度學(xué)習(xí)的海底觀測(cè)視頻中魚類識(shí)別方法,首先利用背景差分法過濾掉不包含魚類的圖片,對(duì)海洋魚類識(shí)別準(zhǔn)確率的幅度提升了23%。
從已報(bào)道的研究結(jié)果中可以了解到,在各項(xiàng)分類方法中,特征值識(shí)別算法簡(jiǎn)單、易于操作,但是識(shí)別率不高;相關(guān)系數(shù)識(shí)別,算法簡(jiǎn)潔,識(shí)別準(zhǔn)確率也較高,但應(yīng)用范圍窄;分級(jí)分類算法運(yùn)算量太大;支持向量機(jī)算法靈活多變,識(shí)別率很高,但是存在對(duì)大規(guī)模訓(xùn)練樣本難以實(shí)施、而且需要手動(dòng)選擇特征值問題;相比較來說卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)具備自主學(xué)習(xí)能力,魯棒性比較好。但CNN需要獲取大量的訓(xùn)練數(shù)據(jù),隨著神經(jīng)網(wǎng)絡(luò)層數(shù)的增加,計(jì)算復(fù)雜度提高,訓(xùn)練模型的周期增長(zhǎng)。隨著網(wǎng)絡(luò)的深入,訓(xùn)練集準(zhǔn)確度出現(xiàn)降低現(xiàn)象,影響識(shí)別效果和準(zhǔn)確性。
基于上述分析,本文提出一種基于Keras深度學(xué)習(xí)框架的魚類圖像識(shí)別算法,使用混淆矩陣(Confusion matrix)清晰的輸出識(shí)別數(shù)量,softmax概率分類器輸出識(shí)別的準(zhǔn)確率,對(duì)巴鰹魚、大菱鲆、頜針魚、黑鯛魚、黃鰭鯛、金錢魚、鱸魚、綠鰭魚、銀鯧魚、鯔魚10種魚進(jìn)行分類 和識(shí)別進(jìn)行探索研究。
1技術(shù)路線
Y.Lecun等人提出最初將深度學(xué)習(xí)應(yīng)用在目標(biāo)識(shí)別中。在CNN的深度結(jié)構(gòu)中,每個(gè)模塊包含卷積層和池化層,這些模塊是逐個(gè)堆疊。卷積層共享權(quán)重,池化層通過對(duì)卷積層的輸出進(jìn)行采樣來降低下一層的數(shù)據(jù)速率。因此,圖像可以用作直接輸入,繁瑣的特征提取過程得以消除。
1.1 ResNet結(jié)構(gòu)圖
在CNN的深度結(jié)構(gòu)中,隨著網(wǎng)絡(luò)層的深入,會(huì)出現(xiàn)梯度耗散和梯度爆炸問題,導(dǎo)致訓(xùn)練集準(zhǔn)確率下降。這一問題可以通過殘差網(wǎng)絡(luò)解決,使得網(wǎng)絡(luò)的性能在深度增加的同時(shí)也得以提升。圖1為殘差塊結(jié)構(gòu)圖,其中ResNet包含了兩種映射:一種是身份映射,是指圖1中的曲線,另一種是殘差映射,指的是除了“曲線”之外的部分,所以最終輸出為,身份映射,顧名思義,是指自身,它是x的公式,殘差映射是指“差”,即x,y所以殘差指的是F(x)。
1.2 ResNet50網(wǎng)絡(luò)模型
ResNet50中包含了49個(gè)卷積層和1個(gè)全連階層,其中,第二至第五階段中的ID BLOCK x2代表的是兩個(gè)不改變尺寸的殘差塊,CONV BLOCK代表的是添加尺度的殘差塊,每個(gè)殘差塊包含三個(gè)卷積層,因此有1 + 3×(3+4+6+3) = 49個(gè)卷積層,結(jié)構(gòu)如圖2所示。
圖2中的CONV是卷積操作的卷積層,Batch Norm是批量正則化處理,Relu是激活函數(shù),MAX POOL表示最大池化操作,AVG POOL表示全局平均池化層操作,stage1到stage5表示殘差塊。輸入數(shù)據(jù)的大小為256 × 256 × 3,由于ResNet50神經(jīng)網(wǎng)絡(luò)輸入數(shù)據(jù)大小為224 × 224 × 3,所以需要在輸入數(shù)據(jù)前面進(jìn)行圖像預(yù)處理,把大小不規(guī)格數(shù)據(jù)的裁剪成指定的大小的數(shù)據(jù),進(jìn)行歸一化處理,針對(duì)整個(gè)訓(xùn)練集圖片,每個(gè)通道平均減去訓(xùn)練集的通道平均值。經(jīng)過殘差塊的連續(xù)卷積運(yùn)算后,圖像像素矩陣的通道數(shù)量越來越深,然后通過Flatten圖層將圖像像素Matrix的大小更改為batch_size×2048。最后,圖像像素矩陣大小輸入到完整連接層FC[14],相應(yīng)的類別概率由softmax分類器輸出。
1.3? ? softmax分類器和混淆矩陣
分類問題中使用的softmax函數(shù)可以用下面的式(1)表示。
exp(x)是以自然常數(shù)e為底的指數(shù)函數(shù)。假如等式(1)在輸出層中有m個(gè)神經(jīng)元,并且第t個(gè)神經(jīng)元的輸出是,如等式(1)所示,softmax函數(shù)的分子是輸入變量的指數(shù)函數(shù),分母是所有輸入變量的指數(shù)函數(shù)的和。然而,在計(jì)算機(jī)上運(yùn)行上述方程存在一定的缺陷,這就是溢出問題。softmax函數(shù)的實(shí)現(xiàn)是執(zhí)行指數(shù)函數(shù),但此時(shí)指數(shù)函數(shù)的值很容易變得很大。所以softmax函數(shù)的實(shí)現(xiàn)可以像(2)這樣進(jìn)行改進(jìn),這里的C可以使用任何值,但為了防止溢出,通常使用輸入變量的最大值。
混淆矩陣是除了ROC(Receiver Operating Characteristic)曲線和AUC(Area Under Curve)之外的另一個(gè)判斷分類好壞程度的方法。
以下有幾個(gè)概念需要先說明:
TP(True Positive): 真實(shí)為0,預(yù)測(cè)也為0
FN(False Negative): 真實(shí)為0,預(yù)測(cè)為1
FP(False Positive): 真實(shí)為1,預(yù)測(cè)為0
TN(True Negative): 真實(shí)為1,預(yù)測(cè)也為1
precision=:預(yù)測(cè)為0的準(zhǔn)確率;
sensitivity=recall=:真實(shí)為0的準(zhǔn)確率;
f1score = 2* precision* recall / precision + recall
2? ? 實(shí)驗(yàn)
2.1? ? 實(shí)驗(yàn)平臺(tái)
實(shí)驗(yàn)平臺(tái)是Keras,一個(gè)基于Python語言的深度學(xué)習(xí)框架。硬件環(huán)境為Inter(R) Xeon(R) Silver 4116 CPU @ 2.10GHz,使用Windows Server 2012 R2 Datacenter服務(wù)器,基礎(chǔ)配置為Anaconda,Python3.7版本,Python終端進(jìn)行了OpenCV、Keras環(huán)境的搭建。
2.2? ? 選用的數(shù)據(jù)集
本文采用的數(shù)據(jù)集是自己手動(dòng)在網(wǎng)絡(luò)上收集的圖片和部分自己拍攝所得,有10種魚類,共有圖片908張,10種魚類圖片如圖3所示。分別為巴鰹魚、大菱鲆、頜針魚、黑鯛魚、黃鰭鯛、金錢魚、鱸魚、綠鰭魚、銀鯧魚、鯔魚,按訓(xùn)練集807
驗(yàn)證集101分層采樣,并且采取相同的預(yù)處理操作,以保證驗(yàn)證和測(cè)試結(jié)果的準(zhǔn)確性最后將數(shù)據(jù)分成大小為相同的的批次,方便后續(xù)模型的訓(xùn)練。
2.3實(shí)驗(yàn)結(jié)果分析
在多分類任務(wù)中,不適合使用PR曲線和ROC曲線來進(jìn)行指標(biāo)評(píng)價(jià),但我們?nèi)钥梢酝ㄟ^混淆矩陣來進(jìn)行處理??梢酝ㄟ^matplotlib的matshow()函數(shù),分類結(jié)果的好壞能直接顯示出來,圖4展示了混淆矩陣的結(jié)果。
通過圖4我們可以直觀的看出各種魚的數(shù)量,分別為頜針魚62、鯔魚135、金錢魚90、大菱鲆113、銀鯧魚84、黑鯛魚105、鱸魚101、黃鰭鯛93、綠鰭魚75、巴鰹魚32,通過以上數(shù)據(jù)繪制統(tǒng)計(jì)表1。
表1顯示了誤差數(shù)據(jù)的圖像結(jié)果,將混淆矩陣的每個(gè)值除以相應(yīng)類別中的圖像總數(shù)。計(jì)算出10種魚的f1score分比為頜針魚1.00、鯔魚0.985、金錢魚1.00、大菱鲆1.00、銀鯧魚1.00、黑鯛魚1.00、鱸魚0.99、黃鰭鯛0.877、綠鰭魚0.987、巴鰹魚1.00,通過f1score可以看出分類指標(biāo)很好。
神經(jīng)網(wǎng)絡(luò)中超參數(shù)的取值對(duì)模型的性能有很大的影響.實(shí)驗(yàn)中設(shè)定學(xué)習(xí)率為固定的值0.0001,批次大小為4,訓(xùn)練集數(shù)據(jù)807,驗(yàn)證集數(shù)據(jù)101,梯度參數(shù)更新方法采用SGD+momentum,迭代次數(shù)6000次,ResNet50模型經(jīng)過30epoch訓(xùn)練,在訓(xùn)練集上的準(zhǔn)確率在99%以上,在驗(yàn)證集上正確率為93.33%,模型訓(xùn)練到20epoch時(shí),訓(xùn)練集上的誤差幾乎降至為零,驗(yàn)證集上的誤差也降到了0.2以下,驗(yàn)證集上的平均誤差為0.28,說明該模型收斂速度較快,識(shí)別精度高,驗(yàn)證集上的準(zhǔn)確率較高,誤差比較低。并且模型在驗(yàn)證集上的誤差比訓(xùn)練機(jī)上的誤差低,說明很好的抑制了過擬合,對(duì)圖像識(shí)別效果較好,ResNet50模型在訓(xùn)練集和驗(yàn)證集上的準(zhǔn)確率、誤差如圖5所示。
3 結(jié)語
本文從深度學(xué)習(xí)的角度出發(fā),利用卷積神經(jīng)網(wǎng)絡(luò)在計(jì)算機(jī)視覺中的優(yōu)勢(shì),提出了一種基于Keras深度學(xué)習(xí)框架的魚類圖像識(shí)別算法,以及使用混淆矩陣實(shí)現(xiàn)分類識(shí)別精確度。ResNet50卷積神經(jīng)網(wǎng)絡(luò)包含卷積層、批規(guī)范層、池化層、全連接層以及softmax層,采用SGD+momentum優(yōu)化算法對(duì)模型參數(shù)進(jìn)行更新。該模型能夠抑制過擬合,收斂速度較快,訓(xùn)練時(shí)間較短,殘余網(wǎng)絡(luò)解決了深度網(wǎng)絡(luò)訓(xùn)練艱難的問題,提高了性能。模型平均準(zhǔn)確率為93.33%,模型具有較高的識(shí)別精度和魯棒性。該模型不僅可以應(yīng)用在魚類圖像分類識(shí)別中,也可以用于其他動(dòng)物的圖像分類識(shí)別,比如鳥類。
雖然ResNet50模型達(dá)到預(yù)期的分類識(shí)別效果,但是,由于本文采用的數(shù)據(jù)集是自己手動(dòng)在網(wǎng)絡(luò)上收集的圖片和部分自己拍攝所得,背景干擾強(qiáng)度不是很大,而且數(shù)據(jù)集數(shù)量不是很多,以后需要增加更多的圖片數(shù)量進(jìn)行訓(xùn)練、驗(yàn)證,在強(qiáng)背景干擾情況下做出更高的識(shí)別精度。
[參考文獻(xiàn)]
[1] Chai W J,Wang L M.Recognition of Chinese characters using deep convolutional neural network[J].Journal of Image and Graphics,2018,23(3):0410-0417.
[2] 孫鑫,錢會(huì)南.基于深度卷積網(wǎng)絡(luò)的中藥飲片圖像識(shí)別[J].世界科學(xué)技術(shù)-中醫(yī)藥現(xiàn)代化,2017,19(2):218-222.
[3] 陳小娥, 楊薇薇.基于深度學(xué)習(xí)的車標(biāo)識(shí)別算法的研究與實(shí)現(xiàn)[J].長(zhǎng)春工程學(xué)院學(xué)報(bào)(自然科學(xué)版),2017,18(2):117-120.
[4] 基于機(jī)器視覺的大黃魚形態(tài)參數(shù)快速檢測(cè)方法[J].集成技術(shù), 2014(5):45-51.
[5] 涂兵, 王錦萍, 王思成,等.基于背部輪廓相關(guān)系數(shù)算法的淡水魚種類識(shí)別研究[J].計(jì)算機(jī)工程與應(yīng)用,2016,52(16):162-166.
[6] Hu J,Li D,Duan Q,et al. Fish species classification by color, texture and multi-class support vector machine using computer vision[J]. Computers and Electronics in Agriculture,2012,88(none):133-140.
[7] 李彥冬, 郝宗波, 雷航. 卷積神經(jīng)網(wǎng)絡(luò)研究綜述[J]. 計(jì)算機(jī)應(yīng)用, 2016, 36(9):2508-2515.
[8] 杜偉東,李海森,魏玉闊,等.基于SVM的決策融合魚類識(shí)別方法[J]. 哈爾濱工程大學(xué)學(xué)報(bào),2015(5):623-627.
[9] 張俊龍,曾國(guó)蓀,覃如. 基于深度學(xué)習(xí)的海底觀測(cè)視頻中魚類的識(shí)別方法[J]. 計(jì)算機(jī)應(yīng)用,2019,39(2):72-77.
[10] Lécun Y, Bottou L,Bengio Y,et al. Gradient-based learning applied to document recognition[J].Proceedings of the IEEE,1998, 86(11):2278-2324.
[11] 王恒,李霞,劉曉芳,等.基于ResNet50網(wǎng)絡(luò)的乳腺癌病理圖像分類研究[J].中國(guó)計(jì)量大學(xué)學(xué)報(bào),2019,30(1):72-77.
[12] 林明旺. 深度學(xué)習(xí)在魚類圖像識(shí)別與分類中的應(yīng)用[J]. 數(shù)字技術(shù)與應(yīng)用, 2017(4):96-97.