孫小龍 潘 豐
(江南大學輕工過程先進控制教育部重點實驗室 無錫 214122)
中國不僅是一個海洋大國,更是一個海產養殖大國,2020 年,全國海產品總產量為3082.72 萬噸,其中貝類海產品總產量為1516.27 萬噸,占比49.19%[1]。豐富的海產品為人們的餐桌提供更多選擇之余,也為漁民帶來了致富之路?,F在,每天都有數量龐大的海產品送往國內外各地的市場。貝類海產品的等級分選能夠直接影響著貝類海產品的銷售價格,按照規格大小分級進行出售能夠明顯提高售價,帶來更高利潤,因此高效、高精度的對貝類海產品進行等級分選顯得尤為重要。
傳統的貝類海產品等級分選方法為人工分選,即依賴人的眼睛看,手工稱重的方法進行分級,這種分級方式的缺點明顯,分級速度慢、精度低,同時耗費大量的人力,不利于生產的自動化。稱重分級設備出現,很大程度上提升了貝類海產品等級分選的精度和效率,但是這種分級方法的決定要素只有重量,當水產表面附著冰水混合物時會對分級的精度造成一定的影響。同時具有稱重和視覺檢測功能的新一代分級設備具有更好的精度,然而在視覺檢測部分,仍然存在著許多不足,如精度低,速度慢,泛化性差等缺點[2],而良好的圖像分割算法有利于對產品的外觀和尺寸等進行檢測。
近些年來,深度學習在圖像處理領域迅速發展,Berkeley 團隊提出圖像分割算法FCN(Fully Convolutional Networks)[3],使用卷積層替代全連接層,可以使用任意大小的圖像作為網絡的輸入,取得了不錯的效果。Ronneberger 等提出的U-Net 網絡[4],給出了一個具體的編碼器-解碼器網絡結構,編碼器用于特征提取,解碼器恢復目標的細節和相應的空間維度。王井東等提出的HRNet[5],與其它網絡不同的是,特征提取部分使用了不同分辨率的特征圖并聯,同時保留著高分辨率和低分辨率的特征,在并聯的基礎上,添加不同分辨率特征圖之間的信息交互,得到了非常好的效果。
本文提出了一種編/解碼模式的貝類海產品分割算法,受到HRNet 網絡和ShuffleNet 網絡[6]的啟發,編碼模塊采用并聯雙分支網絡結構,來減少空間細節的損失,獲得多尺度特征,使用帶有深度卷積的殘差模塊作為基礎層,提升網絡的運行速度,同時添加注意力機制,產生更具分辨性的特征表示,提高分割的精度;使用多任務分割分類解碼器代替多分類分割解碼器,避免一個目標中出現多個類別的分割結果;在分割解碼器部分,融合多尺度的特征,提高對不同大小目標的表示能力,同時保留圖像的空間細節和深層語義特征;添加一個分類解碼器,獲得目標的具體類別。
本文提出的編碼-解碼模式的貝類海產品分割算法如圖1所示,輸入的是工業相機采集的RGB圖像,輸出的是一個二值化圖像和當前圖像的類別。

圖1 網絡結構圖
本文提出一種編/解碼模式的貝類海產品分割算法,主要包含三個部分:編碼模塊,分割解碼模塊和分類解碼模塊。網絡結構如圖1所示。
編碼模塊:在貝類海產品圖像中,需要分割的目標尺寸差異大,具有不同的尺度,并且目標邊緣不規則。在傳統的圖像分割領域,為了解決多尺度下的目標分割問題,獲得圖像的多尺度信息,通常會進行一系列的下采樣操作,如UNet,但是隨著網絡深度的增加,圖像的空間細節會逐漸損失,常見的方法,如VNet 網絡[7],采用跳級連接來恢復解碼器模塊中的圖像細節,進一步加強不同深度語義信息的融合。然而,由于較深的編碼器模塊缺乏低層語義特征和空間信息,因此無法很好地對貝類海產品的邊緣結構進行判斷。為了改善這個問題,本文采用并聯雙分支網絡結構,同時使用兩種不同分辨率的特征圖分支,同時保留高層和低層語義特征,為了更進一步進行不同尺度信息之間的交互,并聯分支之間通過上采樣和下采樣操作進行了兩次特征交互融合。由于高分辨率特征(低層特征)會給網絡的實時性帶來不利影響,本文設計了一種帶有通道分離和混洗的殘差模塊,主要由深度卷積、普通卷積和注意力模塊組成,可以顯著提升網絡運行速度,如圖2所示。

圖2 殘差模塊
殘差模塊:由三條分支構成,第一條分支為SE(Sequeeze-Excitation)模塊[8],解決卷積過程中特征層的不同通道所占的重要性不同帶來的損失問題,這里使用的是SE 模塊的一種變體,首先對輸入的每個通道進行全局平均池化操作,然后使用一個具有非線性的全連接層,最后使用一個Sigmoid 激活函數生成通道權值,相比于原始的SE 模塊,具有更少的參數量和更優的效果。
第二條分支為主分支,模塊的輸入首先經過一個通道分離操作,將原始輸入按照通道數分為兩組,這樣將卷積運算限制在每個組內,能夠顯著地降低模型的計算量,同時,因為基礎模塊的輸出通道數是輸入通道數的兩倍,當輸入通道數和輸出通道數的值接近1∶1 時,能減少內存訪問成本,所以這里的通道分離操作既能夠減少計算量,又能夠降低內存訪問成本。當輸入經過通道分離操作分成兩組后,其中一組輸入到一個3×3 的深度卷積,另一組輸入到一個3×3 的普通卷積,同時在每一個卷積后面都加上批歸一化層(Batch Normalization,BN)和ReLU 激活函數,深度卷積能夠降低參數量,但缺少通道間的信息交互,普通卷積參數量較大,通道間有著信息交流,兩者組合在一起,在參數量和信息交互中做了平衡,然后將兩組輸出按照通道順序上連接在一起。第三條分支為跳躍連接[9],在這里可以解決網絡層數較深的情況下梯度消失的問題,同時有助于梯度的反向傳播,加快訓練過程。最后,將三個分支的輸出疊加起來。由于通道分離操作使得模型的信息交互限制在了各個組內,組與組之間缺少有效的信息交互,這會影響模型的表示能力,因此在最后添加一個通道混洗操作,進行組間信息的交換。
下采樣模塊:當特征圖的大小變為原來的1/2時,都會串聯一個下采樣模塊,下采樣模塊由兩個部分組成,分別是最大池化層和步長為2 的3×3 卷積層,并將它們的輸出疊加后串聯批歸一化層和Relu激活函數。其結構如圖3所示。

圖3 下采樣模塊
由于從分選現場采集的貝類海產品圖像中,每張圖像中只包含一個貝類海產品,為了提高分割的準確率,使用多任務分割分類解碼器代替了傳統的多分類分割解碼器,這樣可以保證同一圖像中只得到同一類貝類海產品的分割結果;解碼模塊分成兩個部分,一個部分為分割解碼模塊,其輸出為一個二值化圖像,通過識別每個像素點是前景還是背景來預測出目標的位置和尺寸;另一個部分為分類解碼模塊,其輸出值為當前圖像中貝類海產品的類別。
分割解碼模塊:下采樣倍數小的特征層感受野較小,特征圖較大,保存的貝類海產品的空間細節較多,對貝類海產品的邊緣細節的還原較好,同時對于尺寸較小的貝類海產品更加友好。下采樣倍數較大的特征層感受野大,語義信息表征能力強,能夠使網絡更準確的分割出貝類海產品。所以為了獲得更好的表征能力,進行了多尺度融合的操作,具體而言,對32 倍下采樣的特征圖進行上采樣操作,變換為尺度與8 倍下采樣的特征圖相同的尺度,并添加3×3卷積、批歸一化和Relu激活函數,與8 倍下采樣的特征圖進行通道方向的連接,進行同樣的操作變換到4 倍下采樣的特征圖,就完成了多尺度融合的操作。最后再添加3×3 卷積和上采樣的分割頭部,就得到了與原圖大小一致的特征圖。
分類解碼模塊:用于分類任務的卷積神經網絡,網絡末端通常是幾層的全連接層,這是因為普通卷積層的特性是局部連接和權值共享,它的特征提取過程是局部的,對位置不敏感的,對于分類任務,不僅需要考慮輸入圖像中的各個元素,還需要考慮它們之間的關聯關系。而全連接層的每個輸出分量都與所有的輸入分量相連,并且連接權重都是不相同的,但是全連接層存在著參數量大,計算速度慢的缺點。全局平均池化[10]同樣可以提取全局信息,并且有著參數量和計算量低的優點,同時可以知道特征圖上哪個部分對最后的分類貢獻最大。所以分類解碼模塊由全局平均池化層構成,在編碼層的并聯結構的低分辨率分支后,連接一個1×1 卷積層、批歸一化層和Relu 激活函數,再連接一個最大池化層,得到最后的分類輸出,得到當前圖像中的貝類海產品的類別。
本文提出的算法是多任務模型,共有分割和分類兩個任務輸出,故算法訓練的損失函數需要同時考慮分割和分類,總的損失函數定義如下:
其中Lclas為分類輸出的損失函數,Lseg為分割部分的損失函數,β為分類損失和分割損失在總損失函數中的權重參數,這里取0.7。
分類部分的損失函數使用的是交叉熵損失,其公式定義如下:
其中,pi為樣本標簽,qi為預測輸出。
分割部分的輸出是基于像素點的二分類,由于最終需要的結果是需要分割出目標的區域,而Dice損失函數正是基于區域的損失函數,這與我們的真實目標最大化IoU 度量相近,而且Dice 能夠優化樣本不均衡問題,所以選擇Dice損失函數作為分割部分的損失函數,其定義如下:
其中,q代表真實值,p代表網絡的預測值,v代表每個圖像塊的體素點的個數。
本文的數據集來自分選現場采集的真實數據,共有900 張由工業相機采集的現場圖像,尺寸為640×480,包含三類貝類海產品:生蠔、鮑魚和海螺,每類有300張圖像。訓練集、測試集隨機劃分為8:2,即訓練集含有720張圖像,測試集有180張圖像。
為了提高分割和分類的精度,同時提高模型的泛化性能,本文對數據進行了數據增廣操作:第一,考慮到圖像的多尺度變化,采用了隨機縮放裁剪的操作,具體來說,先利用隨機數生成函數隨機生成一個0.5~1.5 之間實數f,再將圖像縮放到原來的f倍,最后再隨機裁剪出一個640×480 的圖像用于訓練。第二,為了增強數據的多樣性,對圖像采用了隨機左右翻轉、隨機亮度對比度變化和隨機旋轉一定角度的方法。第三,為了加速網絡的收斂,對輸入圖像進行歸一化和標準化,歸一化將圖像歸一化到[0,1]區間內,標準化通過計算數據集的均值和方差,對所有像素點進行標準化。
實驗中,所有網絡均使用Kaiming 初始化[11]的方法對網絡的權重進行初始化,使用SGD 優化器,其參數為momentum=0.9,decay=1e-5,學習率使用的warm up和指數衰減策略,其基礎學習率為0.01,warm up 階段的epoch 設置為5,訓練的batch size 取16,epoch取72。
為了定量地評估本文算法的性能,本文選用平均交并比(mean Intersection over Union,mIoU)作為分割精度評價指標,其定義如下。
其中,pii表示真實值為i、預測值為i的像素點數量,pij表示真實值為i、被預測為j的像素點數量,pji表示真實值為j、預測值為i的像素點數量,k+1 是類別個數,包含背景類。當mIoU接近1時候,預測值越逼近真實值。
分類效果評價指標為F1 score,其定義如下:
其中,TP(true positive)為真陽性,FP(false positive)表示假陽性,FN(false negative)表示假陰性。
推理速度評價指標為FPS,定義如下:
其中Time為單張圖片的推理時間。
3.4.1 數據增廣對實驗結果的影響
本文對未進行數據增廣的數據集和進行過數據增廣的數據集分別采用本文提出的網絡進行訓練,進行相同的訓練批次后,結果如表1所示。

表1 不同數據增廣實驗結果對比
從實驗的結果來看,經過數據增廣的分割精度明顯高于未經過數據增廣的分割精度。本文的數據增廣操作,由于添加的隨機縮放裁剪的操作,在一定程度上可以增強對小樣本的分割能力,同時增加樣本多樣性,增強泛化性,提高實驗精度。海產品圖像測試集部分分割結果如圖4所示。

圖4 分割結果對比
3.4.2 分割部分不同loss對實驗結果的影響
由于實驗數據集的目標尺寸差異較大,前景背景的占比不平衡,會使得模型的訓練困難。常用的交叉熵損失函數有著一個明顯的缺陷,對于只分割前景和背景時,當前景像素的數量遠遠小于背景像素的數量時,損失函數中的背景像素值占據主導作用,導致模型嚴重偏向于背景,導致效果不好。為了證明本文選擇的Dice損失函數在當前數據集中能夠有效提升分割效果,本文分別使用交叉熵損失函數和Dice損失函數進行模型訓練,結果如表2所示。

表2 不同損失函數實驗結果對比
由實驗結果來看,使用Dice損失函數可以有效地提升分割精度,主要原因是因為Dice損失函數是基于區域的損失函數,這與最大化IoU 度量的目標相近,而且Dice能夠優化樣本不均衡問題。
3.4.3 分割部分不同算法對比結果
為了驗證本文所提出算法的性能,使用已有的實時分割算法與本文的分割輸出部分進行比較,算法對比結果如表3所示。

表3 不同分割算法的比較
對比發現,在當前場景中,本文提出的方法在mIoU 和FPS 指標上都不同程度的優于其它算法,分別達到96.693%,108FPS。這說明本文提出的算法適用于貝類海產品分割,模型的運行速度快,適用于算法的工業落地。
本文建立了貝類海產品分割的數據集,提出了一種編/解碼模式的輕量型貝類海產品分割算法。一方面在編碼模塊采用并聯雙分支結構,增強網絡的深層語義特征表示能力和空間細節特征表示能力;另一方面,使用通道分離混洗模塊和深度分離卷積減少模型的參數量和計算量,提升網絡的推理速度;最后通過多尺度融合,充分提取上下文多尺度信息。實驗結果表明,本文方法能夠有效地提取貝類海產品的目標區域,分割效果好,推理速度快。