李海濤,王 騰,王印庚
1(青島科技大學信息科學與技術學院,青島 266061)
2(中國水產科學研究院 黃海水產研究所,青島 266071)
我國海水養殖業規模龐大,普遍是粗放型的養殖模式,養殖戶僅憑個人經驗和盲目投藥,給海水養殖業帶來巨大的養殖風險,使養殖區病害泛濫惡化,過量投藥還會造成藥物殘留,帶來生態風險.2019年我國水產行業因病害造成的損失達到450億元,病害問題已成為影響我國海水養殖業發展的重大障礙.
早期的海水養殖病害診斷多是根據病癥描述得出結論,葉嬋[1]實現了對蝦病害防治專家系統,該系統利用BP神經網絡建立了對蝦癥狀文字描述與疾病之間的關系,但在實際應用中會存在語義理解上的誤差,難以推廣.而海水養殖生物病害受到生物本體免疫力、養殖區水質、致病病原體等多方面影響,會在病灶形態、輪廓、顏色、位置、紋理等方面產生明顯的視覺差異,病害圖像中包含了大量病癥信息,因此非常適合借助圖像識別技術進行病害診斷.宋健[2]基于形狀特征實現了魚病圖像診斷,該方法在分類時具有處理速度快、魯棒性高、易于實現等優點,但對于病害圖像中所表現出來的全部特征,這種方法所獲取的信息并不多.隨著機器學習的發展,學者們逐漸開始采用神經網絡去獲取圖像中高緯度的病癥特征,Shaveta Malik[3]應用神經網絡算法對魚類病害圖片分類,有效提升了魚病診斷的效率.近年,由牛津大學提出的VGG卷積神經網絡模型在圖像分類和目標檢測任務中表現出優良性能,本文基于傳統的VGG-16網絡建立起海水養殖病害診斷模型,并優化了梯度下降算法,解決了模型過擬合問題.該模型可根據病害圖像快速準確地診斷出對應病癥,為養殖戶提供及時、準確的病害信息,致力于減少病害造成的損失.
VGG[4]網絡是牛津大學計算機視覺組和Google DeepMind公司共同研發出的一種深度卷積網絡,該模型被提出時,因為它的高效和簡潔,很快成為當時最通用的卷積神經網絡模型.它在圖像分類任務中表現出非常好的效果,而其變形結構VGG-16的表現更加突出,故而本文采用VGG-16卷積神經網絡模型.
VGG-16作為卷積神經網絡中分類性能優良的網絡模型,它把卷積層發展為卷積塊的概念,使網絡模型擁有更廣闊的感受野,還能降低網絡參數;VGG-16通過多次使用ReLU激活函數,可實現更多的線性變換,學習能力也更強.VGG-16網絡模型含有13個卷積層、5個最大池化層、3個全連接層和1個輸出層(Softmax),其網絡模型結構如圖1所示.

圖1 VGG-16網絡結構
VGG-16網絡將3×3卷積核和2×2最大池化層排列組合,可提取出輸入圖像中大量細節特征.3×3卷積核的堆疊組合可以實現和5×5或7×7卷積核相同的效果,相比單個大尺寸卷積核,小尺寸卷積核的組合運用可具備更好的非線性特征.
使用卷積神經網絡進行圖像分類任務時,識別精度、仿真速度以及內存消耗是研究的目標,為進一步提升模型識別準確率、縮減訓練時間與資源占用,因此需要在已有VGG-16網絡基礎上進行優化.
網絡模型優化方法有很多,可以調整網絡深度、修改卷積核尺寸、更改激活函數、優化梯度下降、平衡數據集、降低過擬合、優化遷移學習等等,其中梯度下降優化算法在卷積神經網絡中較為常用.本文采用了隨機梯度下降[5]的優化算法,它的特點是每當更新權重時還會更新每個樣本的梯度,學習速度快;相對于其他梯度下降算法,尤其是在數據冗余的時候,該算法能更加有效地利用數據信息.隨機梯度下降算法每當更新參數時僅使用一個樣本x(i)及其所對應的標簽y(i),梯度運算公式如式(1):

網絡模型訓練完成后,需要評估其識別性能和損失值.本模型中的損失值通過運用對數損失函數計算,其運算公式如式(2):

模型在訓練集上識別率較高,而在驗證集準確率較低,即模型的泛化性能不強,這就是過擬合現象,卷積神經網絡中過擬合現象是一個重要問題.本文綜合運用了多個降低過擬合的方法優化VGG-16模型,主要包括了Dropout方法、數據集擴增方法、Batch Normalization方法、遷移學習方法.
Dropout方法[6]通過隨機地丟棄訓練所得的信息,從而減少模型過擬合.該方法應用于激活層之后,每次反向傳播時按一定比例對激活層的隱藏節點隨機采樣,使得全連接網絡具有一定的稀疏化,從而減輕了不同特征的協同效應;由于隱含節點都是以一定概率隨機出現,因此兩個神經元不會每次都同時出現,從而減少了神經元之間的共適應關系,可提高網絡的魯棒性.
卷積神經網絡對于不同位置、視角、尺度甚至光照的組合都可以進行穩健的分類,于是可以利用基本變換對數據集進行有效擴充.數據集擴增即通過裁剪、旋轉、插值、錯切等圖像變換手段處理原始圖片樣本集,不僅獲得了更多的訓練樣本圖片,還通過增加訓練時的擾動使模型在更加復雜的環境下也能保持很好的檢測精度,有效解決了深度學習因數據不足造成的模型表達能力差、過度擬合等問題.
隨著網絡結構深度的增加,輸入數據經過多個中間層運算之后,數據分布的偏移將越來越大,樣本特征也變得分散,這會導致神經網絡學習速度緩慢甚至難以學習.為解決上述問題引入的Batch Normalization方法[7]就是在每層輸入之前插入一個歸一化層,采用均值標準化的方法規范化VGG-16網絡激活函數的輸入值,使輸入樣本值的均值為0,方差為1,即將偏移的分布規范化為標準分布.Batch Normalization方法使得激活輸入值落在非線性函數對輸入比較敏感的區域,這樣輸入的小變化就會使損失函數發生較大的變化,能大大加快損失函數收斂速度,提高模型訓練精度.
遷移學習[8]是將已經訓練好的模型應用到新的任務中,不僅節省了訓練時間,還縮小了訓練數據需求量.同時由于本次研究所用圖像數量少、采集成本高,數據量難以支撐網絡訓練,采用遷移學習方法可以解決圖像數據量不足的問題.利用VGG-16在ImageNet數據集上的預訓練模型進行相關知識的遷移,優化各卷積層和池化層的參數,在降低過擬合問題的同時還減少了模型訓練時間.
對蝦是我國海水養殖業的重要養殖生物,本文根據對蝦病害分類綱要,選出白斑病、紅腿病、紅體病、黃鰓病、腸炎、黑斑病6種最常見病害作為研究對象,另外采集一部分無病害的圖樣做對照,構建對蝦病害圖庫,如表1所示.

表1 對蝦病害圖庫
本次研究使用的病害數據來源于多個方面:中國水產科學研究院黃海水產研究所深耕水產養殖病害研究數十年,收錄了數百種水產病害圖像,是本次研究的重要數據來源;智慧水產云服務平臺、水產養殖網等多家權威網站也為本次研究補充了大量圖樣數據.為了保障圖片庫質量,本文使用的圖庫均由經驗豐富的行業專家整理完成,各病種示例圖片如圖2.各病種的病斑特征如表2所示.

圖2 對蝦病害圖例

表2 對蝦常見6類病害特征
本文模型訓練和測試均在Tensorflow 環境下進行,模型搭建采用開源框架實現,硬件設備:處理器為AMD 2600X,GPU為NVIDIA GTX1080TI.模型訓練和測試流程如下:
1)數據預處理.通過平移、縮放、旋轉、錯切等圖形變換手段在原始病害圖像庫上產生更多樣的訓練樣本圖片,一方面可增加訓練數據量,另一方面能夠提升模型的泛化能力.其次,還需要調整圖片的大小,便于統一注入網絡進行訓練.
2)輸入水產病害圖樣.從1)生成的病害圖像庫中抽取病害圖片,作為訓練樣本集進行輸入.
3)將VGG-16卷積神經網絡應用于海水養殖病害診斷,構建如圖3所示的海水養殖病害診斷模型:輸入224像素×224像素×3向量的RGB圖像,首先經過兩個卷積層,兩個卷積層的卷積核大小為3×3,卷積核數量均為64,滑動步長為1,經兩次卷積+ReLU運算后的尺寸變為224×224×64;再經過一層最大池化層,它采用的池化單元尺寸為2×2,步長為2,該池化層使尺寸減半,變為112×112×64;接著經過兩個卷積層,經128個3×3的卷積核作兩次卷積+ReLU運算,尺寸變為112×112×128;再經過一層最大池化層,池化單元尺寸大小為2×2,步長為2,輸出為56×56×128;隨后經過3個卷積層,卷積核大小均為3×3,卷積核數量均為256,步長為1,輸出均為56×56×256;再經過最大池化層,池化單元尺寸大小為2×2,步長為2,輸出為28×28×256;接著經過3個卷積層,卷積核大小均為3×3,卷積核數量均為512,步長為1,輸出均為28×28×512;再經過一層最大池化層,池化單元尺寸大小為2×2,步長為2,輸出為14×14×512;后面經過3個卷積層,卷積核大小為3×3,卷積核數量均為512,步長為1,輸出均為14×14×512;再經過一層最大池化層,池化單元尺寸大小為2×2,步長為2,輸出為7×7×512;隨后經過兩個包含4096個隱藏節點的全連接層及ReLU,最后一層輸出層包含7個節點,對應本次診斷的7種病害診斷結果,進行Softmax分類.

圖3 海水養殖病害診斷模型
本文提出的病害診斷模型在卷積層均采用3×3尺寸的卷積核,并由2個或3個卷積核連續排列,可以獲得更大的感受野效果;卷積核滑動步長為1,并利用padding 邊界填充使卷積層前后圖像維數不變;模型中的池化層選用2×2尺寸的池化窗口,步長為2,用于降低卷積后的特征圖尺寸,實現少量參數對特征的表示;全連接層是連續3個全連接的堆疊組合,通道數分別是4096、4096、7個;網絡末尾是由具有7個標簽的Softmax分類器作為輸出;在已有網絡基礎上采用隨機梯度下降算法更新模型參數;模型在激活函數之前應用批歸一化方法,在全連接層執行Dropout方法,系數分別為0.7、0.5,通過Xavier方法對全連接層的參數進行初始化,并以測試集識別性能作為網絡模型的評判依據.
4)模型訓練.加載ImageNet上的VGG-16 預訓練模型,通過遷移學習方式優化病害識別模型參數,主要優化13個卷積層和池化層的參數.設定動量參數、學習速率和迭代次數,通過損失函數的迭代,優化網絡各層參數.本次研究中,每執行10次迭代訓練,都要在測試集上測試模型準確率,從Tensorboard 中繪制測試集準確率和損失量曲線如圖4所示.

圖4 模型訓練過程圖
5)模型測試.選擇測試數據集進行模型測試,以檢驗模型的性能和精確度.
圖4(a)展示了網絡模型在驗證集上的識別準確率變化曲線,橫軸表示迭代訓練次數,縱軸為準確率,圖4(b)為損失量變化曲線,橫軸為迭代次數,縱軸為損失量.綜合圖4(a)、圖4(b)可知,當迭代頻次較低時,網絡對訓練數據的學習不充分,在驗證集的識別準確率也不理想,隨著訓練的迭代進行,圖像在驗證集的識別準確率持續上升,且最終穩定在較高水平.可見,本文構建的網絡模型,在保持了識別精度的同時具有較強的收斂性能.本研究所用模型在擴增過的訓練集上訓練500輪之后,在驗證集上的識別精度達到了90%,取得了優良的識別性能.
為比較本文研究與其他模型的性能差異,本次研究將BP神經網絡、支持向量機2種淺層網絡,以及AlexNET、GoogLeNET、傳統VGG-16NET 等3種深層神經網絡作為對照模型,與本研究模型進行對照分析,結果如表3所示.

表3 海水養殖病害識別模型測試結果
由表3對比可知,AlexNET、GoogLeNET、傳統VGG-16NET與本文研究模型共4種深層神經網絡模型均大幅優于BP神經網絡、支持向量機2種淺層網絡.在深層神經網絡中,由于傳統VGG-16NET模型和本研究模型的特征提取是通過3×3尺寸卷積核的堆疊組合,提取出病害區域內更多非常細小的特征,因此,傳統VGG-16NET模型和本研究模型優于AlexNET和GoogleNET;同時,本研究模型綜合采用了隨機梯度下降算法和一系列降低過擬合的方法,在測試集中略優于傳統VGG-16NET模型.由上述對比試驗中可知,本文提出的模型具備更優良的識別能力,能更好地辨識病害類別.
本文構建了一個基于VGG-16的海水養殖病害診斷模型,使用隨機梯度下降算法更新網絡權重,并用數據集擴增、Dropout方法、Batch Normalization方法、遷移學習方法優化了模型,有效提升了訓練效率和模型識別率,降低了過擬合.實驗結果顯示此模型具有很高的識別精度,具有一定的擴展性和推廣價值,達到了預期目標.