屈露,蒼巖
哈爾濱工程大學 信息與通信工程學院,黑龍江 哈爾濱 150001
近年來,隨著計算機技術的蓬勃發展,深度學習技術在各行各業掀起了一股熱潮,在農業領域也得到了廣泛的應用,“智慧養豬”近兩年也一直是生豬養殖領域的熱詞。在現代化的規模豬場中,機器視覺技術被廣泛地應用于各個階段,包括豬只的在欄盤點、趕豬通道出豬盤點、豬只體重、膘體估測等。實例分割技術將目標檢測技術和語義分割技術結合起來,既可以分割出圖像中的目標,又能確定圖像中每個目標的類別。現如今,在豬只的群養飼喂模式下,實例分割技術的應用能高效且較準確地實現豬只的在欄盤點。傳統的人工盤點,比較考驗工作人員的眼力與記憶力,尤其在規模化豬場的定期與階段性盤點過程中,大量的統計數據過程難免會出現誤差且耗時久。實例分割實現豬只的在欄盤點不僅可以大大節省人力資源消耗,提高豬場的經濟效益,同時大大減少了養殖人員與豬只的接觸,有效提高生物安全級別。當豬只處于群體飼喂階段,豬群有聚集在一起的習性,尤其是在躺臥時,導致機器拍攝的圖像中存在較多豬體黏連情況,使得圖像分割困難,從而影響豬只盤點的準確度。
實例分割[1-2]是一個多任務架構網絡,首先通過卷積神經網絡[3]先提取圖像的初級特征,并提取出其中的感興趣區域(region of interest, ROI);然后對于每個ROI[4]區域,通過對ROI 池化層處理提取出對應的特征,所提取特征共享給檢測目標任務的網絡,完成目標檢測、圖像分類與圖像分割任務。實例分割算法的研究長期以來都有著2 種基線方法,分別是自下而上的基于語義分割的方法和自上而下的基于檢測的方法,二者都屬于雙階段實例分割方法。雙階段的實例分割算法代表是由He 等[5]提出的 Mask R-CNN,Mask R-CNN在Faster R-CNN[6]的預測框并行的位置添加一個預測掩碼的分支,這樣的多任務結構可以在不提升較大的算法復雜度的情況下提升分割精度,但兩階段實例分割算法在速度上會受到一定的影響。為提升實例分割算法的速度,單階段的實例分割算法應運而生,單階段實例分割也有2 種思路:1) 基于錨框的單階段實例分割算法,如YOLACT[7]、SOLO[8]等;2)無錨框的單階段實例分割算法,如PolarMask[9]和AdaptIS[10]等。基于錨框的實例分割算法在檢測過程中對于每個候選框都要根據不同的任務去設置其參數,如長寬比、尺度大小以及anchor 的數量,這使得調參過程耗費時間,而且針對不同的任務,參數需要進行相應的調整,模型的遷移能力也受到影響。2020 年1 月,Adelaide 大學、東南大學和華為2012 諾亞方舟實驗室聯合提出了一種基于無錨框的單階段實例分割Blend Mask[11]算法。該算法結合了自上而下和自下向上的思路,有效結合底層的語義信息和實例層的信息來獲得更優的效果。
本文對無錨框的單階段Blend Mask 實例分割算法進行改進,針對密集場景下目標重疊、相互遮擋導致邊緣輪廓模糊的問題,大大提升檢測和分割的準確率。
本文提出的Blend Mask 改進實例分割算法整體結構如圖1 所示。

圖1 本文提出改進后的Blend Mask 算法整體流程
首先,輸入的原始圖像送入基于ResNext-101的特征提取網絡進行特征提取,同時將ResNext-101 基本構建塊里的3×3 卷積升級為3×3 的可變形卷積;然后,將原始特征金字塔(feature pyramid network, FPN)提取的特征圖送入檢測器,同時在每個檢測頭后增加一層卷積以預測頂層注意力得分A。張量A的形狀為N×(K×M×M)×Hl×Wl,其中N為batch size,M×M為注意力圖的分辨率,Hl×Wl為 特征金字塔輸出特征圖經一層卷積后的大小。在頂層模塊的輸出傳入混合模塊之前需要進行FCOS 的后處理操作,即選取D個邊框預測及它們對應的注意力圖A。將特征金字塔中的低層特征作為底部模塊的輸入用于預測得分圖,具體實現為對低層特征進行卷積和上采樣操作,輸出得分圖的形狀為其中N為batch size,K為得分圖的個數,H×W為輸入特征圖的大小,s為得分圖輸出的步長。最后,將位置敏感得分圖、由檢測頭輸出的目標包圍框和頂層注意力得分輸入混合模塊進行融合,最終得到分割掩膜圖。混合模塊的具體實現如下:首先利用Mask RCNN 中的RoIPooler(即采樣率為1 的RoIAlign),在得分圖B上裁剪出檢測頭生成的候選框(P)對應區域的掩膜,并對其重新縮放到固定大小R×R(R為底層RoI 的分辨率)大小的特征圖。對于選出的前D個檢測框對應的A做一個插值,將注意力圖大小由M×M變成R×R,再在K維度上做softmax,得到一個得分圖集合,最后對每個特征區域和得分圖直接做element-wise 乘積操作(即把K個bbox 大小的掩膜和對應的注意力乘起來),最后將K個維度的結果求和,得到最終的掩膜。
為解決豬只聚集遮擋導致的漏檢、錯檢問題,本文從特征圖入手,通過將主干網絡由ResNet-101 替換為ResNext-101,并將主干網絡的基礎構建塊中的普通卷積替換為可變形卷積來改進特征提取模塊,改進后的網絡結構具有更好的特征提取能力,且對于不同尺度的物體可以采用自適應形狀、尺度的感受野大小,可以有效地提升識別精度。
Blend Mask 算法中的原主干網絡為ResNet-101,本文中將其升級為ResNext-101,ResNext 是ResNet 的升級版。一般情況下,通過3 種手段來增強卷積神經網絡的表達能力:1)增加網絡層次即加深網絡;2)增加網絡模塊寬度;3)改善卷積神經網絡結構設計。本文通過實驗證明,網絡的深度繼續加深會導致準確率反而下降。另外,增加網絡的寬度會給模型參數帶來指數級的增加。因此,本文選擇將對結構進行改善的ResNext-101 作為主干網絡。ResNext 結構可以在不增加參數復雜度的前提下提高準確率,同時還減少了超參數的數量。
在引入ResNext 網絡后,整體算法在不增加網絡深度的情況下獲得了更高的精度,但對于遮擋物體的檢測與分割仍存在問題。當豬只聚集在一起時,經常出現嚴重的遮擋,甚至豬身被“分割”為2 段的情況,該情況下豬身不再是其原本的形狀,而可能出現千奇百怪的形狀。由于普通卷積的采樣尺寸和形狀具有固定性,這導致不同尺寸和形變的物體在同一層特征圖中具有相同大小的感受野,在發生未知變化時適應性較差,泛化性也較差;另外,對固定位置進行采樣會導致網絡對于特征的提取受局限,提取到的特征具有單一性。為提高小目標物體的檢測效果,針對上述2 個問題,本文從對不同尺度的物體采用自適應形狀、尺度的感受野大小的方向進行改進。本文在主干網絡ResNext 的基礎上引入了可變形卷積,其主要實現方式是用3×3 的可變形卷積替換ResNext 的基本模塊中的3×3 普通卷積。傳統卷積的卷積核為固定的尺寸形狀,可變形卷積則對卷積核的每個元素增加了一個學習方向參數,這個額外的學習參數能夠根據被學習目標的形狀自動調整卷積核的學習范圍,此改進可以很大程度上增強模型的泛化能力。可變形卷積的工作示意如圖2 所示。

圖2 可變形卷積工作示意
圖2 中的小格區域代表傳統的3×3 卷積的固定尺寸形狀采樣格點,其采樣格點的范圍為
采樣完后需對采樣點通過標準卷積得到其對應的特征矩陣,輸出特征矩陣為
式中:y(p0)為每個采樣位置對應的輸出特征值,w(pn)為卷積權重,x(p0+pn)為輸入特征值,pn為感受野區域內的所有采樣位置。
圖2 右下為通過可變形卷積后的特征提取結果圖。首先,根據輸入的圖像,利用傳統的卷積核提取圖像中的特征獲得特征圖,然后將得到的特征圖作為輸入,對特征圖施加一個卷積層,得到可變形卷積的變形的偏移量。由于是在平面上做平移,需要改變x值和y值2 個方向,故偏移層維度為2N,偏移量Δpn的表達式為
在獲取學習到的方向偏移量后,卷積核可以自適應地根據目標物體的尺寸形狀對自身的大小和形狀進行調整,最終卷積核的輸出矩陣為
式中:x(p0+pn+Δpn)為采樣偏移位置的輸入特征值。在網絡訓練的過程中,生成輸出特征和偏移量的卷積核的學習是同步進行的,偏移量的學習是利用插值算法通過反向傳播實現的。將ResNext的基礎構建塊中的3×3 普通卷積替換為3×3 的可變形卷積,改進后的ResNext 網絡結構如圖3所示。

圖3 改進后的ResNext 網絡結構
本文在原算法的損失函數基礎上進行改進,設計了適合于實例分割的損失,其主要從網絡的分類輸出、目標檢測框的定位輸出和掩膜分割輸出3 個部分對訓練過程進行了多任務損失函數[12]的設計,損失函數[13]為
Lall=Lcls+αLmask+βLbox
式中:Lcls為分類損失函數;Lbox為目標檢測框的定位損失函數;Lmask為掩膜分割的損失函數;系數α和 β用于平衡多個損失之間的關系,本文實驗中系數 α和 β均設為1。
本文實驗中,在分類時采用softmax 進行分類任務,Lcls對每個感興趣區域進行分類,若預測概率為p=[p0,p1,···,pk],則對于某一類別,其分類損失函數為
Lcls(p,pμ)=logpμ
式中:x、y、w和h分別為對應坐標的插值,smoothL1的表達式為
此外,由于本實驗是基于二分情況對豬只和背景進行預測,最終模型結果只需預測2 種情況,故本文針對掩膜分割的損失函數,選擇平均二值交叉熵損失函數來對應類別的掩膜損失。對于每個類別本文預測得到的概率為p和 1-p,此時表達式為
式中:N為預測樣本的個數;yi為樣本i的標簽,正類為1,負類為0;pi為樣本i預測為正類的概率。
本文所進行的所有實驗都是基于Ubuntu18.04操作系統,硬件方面,GPU 采用4 塊2080 Ti,單塊GPU 顯存大小為12 GB,CPU 采用Intel Core i9-9900X,運行內存大小為128 GB。軟件方面,編程語言為 Python,pytorch 版本為1.6.1,CUDA 版本為10.1,采用 TensorFlow 深度學習開源框架,使用Pycharm 軟件編寫深度神經網絡層。
本實驗使用的數據集采集自廣州廣墾、湖南唐人神2 大豬場,連續采集多天豬場豬只圖像,隨機抽取7 d 中全天各時段的群養豬圖像2 000張,人為篩選除去拍攝模糊和夜間光線過暗的圖像數據,共計1 200 張群養豬圖像數據。實驗將1 200張圖像數據按2∶1∶2 的比例分為訓練集、驗證集和測試集。對訓練集使用圖像標注工具VIA(VGG image annotator)進行標注,生成相應的.json文件。標注時,將每頭豬標注為一個獨立的連通域,一個豬體目標輪廓賦予具體的標簽pig。本實驗中,標簽類別只有pig 和背景(background)2 類。
實驗的流程如圖4 所示。

圖4 實驗流程
具體步驟如下:
1)從采集的有效圖像數據中隨機抽取訓練集,保證訓練集與驗證集無交叉重復圖像數據,并對其進行標注,形成標簽文件,完成訓練集的制作;
2)將制作好的數據集作為深度卷積網絡[14]的輸入,首先用原有的Blend Mask 算法網絡對數據進行模型訓練,并測試其效果;
3)在原有算法的訓練模型基礎上對算法進行改進(包括更換主干網絡、引入可變形卷積和優化損失函數),對改進后的算法進行接續訓練;
4)測試并分析改進后的算法模型,對比得到分割效果最佳的模型。
對于上述實驗步驟2)中的模型訓練過程進行具體描述,其過程如下:
①將制作好的數據集(包括原始圖像和對應的標簽文件)作為深度卷積網絡的輸入,并搭建實驗所用的Blend Mask 網絡;
②對原有的Blend Mask 網絡訓練好的模型進行改進,經訓練得到改進后的Blend Mask 豬只分割模型;
③使用驗證集圖像測試改進后的Blend Mask豬只分割模型,得到相應的分割圖像;
④采用準確率指標評價豬只分割模型的分割結果,并根據評價結果調整模型的參數;
⑤重新訓練豬只分割模型,直至訓練集指標與驗證集指標接近。
當豬群聚集出現遮擋情況時,被遮擋豬只的輪廓信息會出現丟失,影響實例分割的效果,進而影響對于豬只數據的統計[15-16]。對改進前后的Blend Mask 算法網絡進行測試,其檢測效果如圖5 所示。由圖5 可見,引入可變形卷積后的網絡對于密集遮擋情況下的豬只檢測效果有較好的提升。圖5(a)原圖1 中的豬只由于過度聚集導致豬只相互遮擋,在網絡結構改進前出現豬只漏檢情況,在改進后將漏檢的豬只成功分割。類似的,在原圖2 中,圖像左側欄桿旁邊2 只豬由于相互遮擋且位于邊緣像素較低導致豬身分界線不清晰,在網絡結構改進前將2 頭豬誤分割為1 頭,改進后可被正確分割為2 頭,分割效果如圖5(c)所示。

圖5 Blend Mask 網絡改進前后測試結果對比
本實驗所用網絡在數據集上訓練80 個循環(epochs),每個循環迭代1 000 次。在相同數據集上分別訓練并測試當主干網絡為ResNet-101、Res2net-101 和ResNext-101 以及在主干網絡為Res-Netx-101 并在檢測過程中引入可變形卷積情況下網絡模型,其Loss 收斂值如表1 所示。其中cls_loss、ctr_loss 和loc_loss 分別對應網絡所用檢測器FCOS檢測過程中的分類損失、回歸損失和定位損失。由表1 可見,改進后的網絡比原網絡的檢測分類損失和回歸損失各降低0.001,檢測定位損失降低了0.002,分割損失降低了0.005。由此可見,當主干網絡為ResNext-101 并在檢測過程中引入可變形卷積時,其總的損失收斂值最小,網絡的收斂效果最好。

表1 不同主干網絡的訓練結果
將本文算法網絡與原有Blend Mask 算法網絡在相同的數據集上進行訓練,對其訓練得到的模型在相同測試集上分別進行測試,對它們的測試結果進行對比分析,2 種網絡模型在500 個測試集數據上的分割性能比較如表2 所示。其中AP(average precision)表示平均精準度,AP50 表示IoU(intersection over union)閾值為0.5 時的平均精準度,AP75 表示IoU 閾值為0.75 時的平均精準度。bbox 表示目標檢測對應的平均精準度,segm 表示目標分割對應的平均精準度。圖6 為改進后Blend Mask 網絡在不同數據源上的分割效果可視化結果圖。唐人神豬場的豬只較少出現嚴重堆積情況,對100 張唐人神圖像數據進行測試,其分割準確率可達98%。廣墾豬場的豬只密度較大,豬只易出現堆積情況,當豬只堆積時導致豬只擠壓、變形以及嚴重遮擋現象導致出現別個漏檢或將2 頭誤檢為1 頭的情況,同樣對100 張廣墾圖像數據進行測試,其分割準確率可達96%。

表2 Blend Mask 算法改進前后網絡測試結果對比

圖6 網絡改進前后的分割效果
本文對Blend Mask 實例分割算法進行改進,主要目的是減少分割目標間的相互遮擋、目標邊緣輪廓界線不清晰導致的漏檢和誤檢問題。在不加深主干網絡的深度和寬度的前提下,將Blend Mask 算法的主干網絡改進為ResNext-101,同時在檢測過程中引入可變形卷積,通過引入偏移量,增大感受野,同時使感受野可以更好地適應不同尺寸、形狀的豬只輪廓,減少了遮擋目標的誤檢情況,有利于提高分割準確率。對Blend Mask 算法原有損失函數進行優化,減少了漏檢問題的出現。改進后的網絡分別在2 個不同豬場采集的圖像數據上進行測試,測試結果表明,改進后的算法網絡對于密集場景下的目標實例分割準確率有所提升。本文的算法也存在一定的不足,當分割目標為小目標且高度密集的情況下,目標的分割效果有待提升,在后續的研究中,可通過進一步改進圖像特征提取網絡和對分割細節進行優化來提升小目標在密集情況下的分割準確度。