屈露,蒼巖
哈爾濱工程大學(xué) 信息與通信工程學(xué)院,黑龍江 哈爾濱 150001
近年來,隨著計算機(jī)技術(shù)的蓬勃發(fā)展,深度學(xué)習(xí)技術(shù)在各行各業(yè)掀起了一股熱潮,在農(nóng)業(yè)領(lǐng)域也得到了廣泛的應(yīng)用,“智慧養(yǎng)豬”近兩年也一直是生豬養(yǎng)殖領(lǐng)域的熱詞。在現(xiàn)代化的規(guī)模豬場中,機(jī)器視覺技術(shù)被廣泛地應(yīng)用于各個階段,包括豬只的在欄盤點(diǎn)、趕豬通道出豬盤點(diǎn)、豬只體重、膘體估測等。實例分割技術(shù)將目標(biāo)檢測技術(shù)和語義分割技術(shù)結(jié)合起來,既可以分割出圖像中的目標(biāo),又能確定圖像中每個目標(biāo)的類別。現(xiàn)如今,在豬只的群養(yǎng)飼喂模式下,實例分割技術(shù)的應(yīng)用能高效且較準(zhǔn)確地實現(xiàn)豬只的在欄盤點(diǎn)。傳統(tǒng)的人工盤點(diǎn),比較考驗工作人員的眼力與記憶力,尤其在規(guī)模化豬場的定期與階段性盤點(diǎn)過程中,大量的統(tǒng)計數(shù)據(jù)過程難免會出現(xiàn)誤差且耗時久。實例分割實現(xiàn)豬只的在欄盤點(diǎn)不僅可以大大節(jié)省人力資源消耗,提高豬場的經(jīng)濟(jì)效益,同時大大減少了養(yǎng)殖人員與豬只的接觸,有效提高生物安全級別。當(dāng)豬只處于群體飼喂階段,豬群有聚集在一起的習(xí)性,尤其是在躺臥時,導(dǎo)致機(jī)器拍攝的圖像中存在較多豬體黏連情況,使得圖像分割困難,從而影響豬只盤點(diǎn)的準(zhǔn)確度。
實例分割[1-2]是一個多任務(wù)架構(gòu)網(wǎng)絡(luò),首先通過卷積神經(jīng)網(wǎng)絡(luò)[3]先提取圖像的初級特征,并提取出其中的感興趣區(qū)域(region of interest, ROI);然后對于每個ROI[4]區(qū)域,通過對ROI 池化層處理提取出對應(yīng)的特征,所提取特征共享給檢測目標(biāo)任務(wù)的網(wǎng)絡(luò),完成目標(biāo)檢測、圖像分類與圖像分割任務(wù)。實例分割算法的研究長期以來都有著2 種基線方法,分別是自下而上的基于語義分割的方法和自上而下的基于檢測的方法,二者都屬于雙階段實例分割方法。雙階段的實例分割算法代表是由He 等[5]提出的 Mask R-CNN,Mask R-CNN在Faster R-CNN[6]的預(yù)測框并行的位置添加一個預(yù)測掩碼的分支,這樣的多任務(wù)結(jié)構(gòu)可以在不提升較大的算法復(fù)雜度的情況下提升分割精度,但兩階段實例分割算法在速度上會受到一定的影響。為提升實例分割算法的速度,單階段的實例分割算法應(yīng)運(yùn)而生,單階段實例分割也有2 種思路:1) 基于錨框的單階段實例分割算法,如YOLACT[7]、SOLO[8]等;2)無錨框的單階段實例分割算法,如PolarMask[9]和AdaptIS[10]等?;阱^框的實例分割算法在檢測過程中對于每個候選框都要根據(jù)不同的任務(wù)去設(shè)置其參數(shù),如長寬比、尺度大小以及anchor 的數(shù)量,這使得調(diào)參過程耗費(fèi)時間,而且針對不同的任務(wù),參數(shù)需要進(jìn)行相應(yīng)的調(diào)整,模型的遷移能力也受到影響。2020 年1 月,Adelaide 大學(xué)、東南大學(xué)和華為2012 諾亞方舟實驗室聯(lián)合提出了一種基于無錨框的單階段實例分割Blend Mask[11]算法。該算法結(jié)合了自上而下和自下向上的思路,有效結(jié)合底層的語義信息和實例層的信息來獲得更優(yōu)的效果。
本文對無錨框的單階段Blend Mask 實例分割算法進(jìn)行改進(jìn),針對密集場景下目標(biāo)重疊、相互遮擋導(dǎo)致邊緣輪廓模糊的問題,大大提升檢測和分割的準(zhǔn)確率。
本文提出的Blend Mask 改進(jìn)實例分割算法整體結(jié)構(gòu)如圖1 所示。
圖1 本文提出改進(jìn)后的Blend Mask 算法整體流程
首先,輸入的原始圖像送入基于ResNext-101的特征提取網(wǎng)絡(luò)進(jìn)行特征提取,同時將ResNext-101 基本構(gòu)建塊里的3×3 卷積升級為3×3 的可變形卷積;然后,將原始特征金字塔(feature pyramid network, FPN)提取的特征圖送入檢測器,同時在每個檢測頭后增加一層卷積以預(yù)測頂層注意力得分A。張量A的形狀為N×(K×M×M)×Hl×Wl,其中N為batch size,M×M為注意力圖的分辨率,Hl×Wl為 特征金字塔輸出特征圖經(jīng)一層卷積后的大小。在頂層模塊的輸出傳入混合模塊之前需要進(jìn)行FCOS 的后處理操作,即選取D個邊框預(yù)測及它們對應(yīng)的注意力圖A。將特征金字塔中的低層特征作為底部模塊的輸入用于預(yù)測得分圖,具體實現(xiàn)為對低層特征進(jìn)行卷積和上采樣操作,輸出得分圖的形狀為其中N為batch size,K為得分圖的個數(shù),H×W為輸入特征圖的大小,s為得分圖輸出的步長。最后,將位置敏感得分圖、由檢測頭輸出的目標(biāo)包圍框和頂層注意力得分輸入混合模塊進(jìn)行融合,最終得到分割掩膜圖?;旌夏K的具體實現(xiàn)如下:首先利用Mask RCNN 中的RoIPooler(即采樣率為1 的RoIAlign),在得分圖B上裁剪出檢測頭生成的候選框(P)對應(yīng)區(qū)域的掩膜,并對其重新縮放到固定大小R×R(R為底層RoI 的分辨率)大小的特征圖。對于選出的前D個檢測框?qū)?yīng)的A做一個插值,將注意力圖大小由M×M變成R×R,再在K維度上做softmax,得到一個得分圖集合,最后對每個特征區(qū)域和得分圖直接做element-wise 乘積操作(即把K個bbox 大小的掩膜和對應(yīng)的注意力乘起來),最后將K個維度的結(jié)果求和,得到最終的掩膜。
為解決豬只聚集遮擋導(dǎo)致的漏檢、錯檢問題,本文從特征圖入手,通過將主干網(wǎng)絡(luò)由ResNet-101 替換為ResNext-101,并將主干網(wǎng)絡(luò)的基礎(chǔ)構(gòu)建塊中的普通卷積替換為可變形卷積來改進(jìn)特征提取模塊,改進(jìn)后的網(wǎng)絡(luò)結(jié)構(gòu)具有更好的特征提取能力,且對于不同尺度的物體可以采用自適應(yīng)形狀、尺度的感受野大小,可以有效地提升識別精度。
Blend Mask 算法中的原主干網(wǎng)絡(luò)為ResNet-101,本文中將其升級為ResNext-101,ResNext 是ResNet 的升級版。一般情況下,通過3 種手段來增強(qiáng)卷積神經(jīng)網(wǎng)絡(luò)的表達(dá)能力:1)增加網(wǎng)絡(luò)層次即加深網(wǎng)絡(luò);2)增加網(wǎng)絡(luò)模塊寬度;3)改善卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計。本文通過實驗證明,網(wǎng)絡(luò)的深度繼續(xù)加深會導(dǎo)致準(zhǔn)確率反而下降。另外,增加網(wǎng)絡(luò)的寬度會給模型參數(shù)帶來指數(shù)級的增加。因此,本文選擇將對結(jié)構(gòu)進(jìn)行改善的ResNext-101 作為主干網(wǎng)絡(luò)。ResNext 結(jié)構(gòu)可以在不增加參數(shù)復(fù)雜度的前提下提高準(zhǔn)確率,同時還減少了超參數(shù)的數(shù)量。
在引入ResNext 網(wǎng)絡(luò)后,整體算法在不增加網(wǎng)絡(luò)深度的情況下獲得了更高的精度,但對于遮擋物體的檢測與分割仍存在問題。當(dāng)豬只聚集在一起時,經(jīng)常出現(xiàn)嚴(yán)重的遮擋,甚至豬身被“分割”為2 段的情況,該情況下豬身不再是其原本的形狀,而可能出現(xiàn)千奇百怪的形狀。由于普通卷積的采樣尺寸和形狀具有固定性,這導(dǎo)致不同尺寸和形變的物體在同一層特征圖中具有相同大小的感受野,在發(fā)生未知變化時適應(yīng)性較差,泛化性也較差;另外,對固定位置進(jìn)行采樣會導(dǎo)致網(wǎng)絡(luò)對于特征的提取受局限,提取到的特征具有單一性。為提高小目標(biāo)物體的檢測效果,針對上述2 個問題,本文從對不同尺度的物體采用自適應(yīng)形狀、尺度的感受野大小的方向進(jìn)行改進(jìn)。本文在主干網(wǎng)絡(luò)ResNext 的基礎(chǔ)上引入了可變形卷積,其主要實現(xiàn)方式是用3×3 的可變形卷積替換ResNext 的基本模塊中的3×3 普通卷積。傳統(tǒng)卷積的卷積核為固定的尺寸形狀,可變形卷積則對卷積核的每個元素增加了一個學(xué)習(xí)方向參數(shù),這個額外的學(xué)習(xí)參數(shù)能夠根據(jù)被學(xué)習(xí)目標(biāo)的形狀自動調(diào)整卷積核的學(xué)習(xí)范圍,此改進(jìn)可以很大程度上增強(qiáng)模型的泛化能力??勺冃尉矸e的工作示意如圖2 所示。
圖2 可變形卷積工作示意
圖2 中的小格區(qū)域代表傳統(tǒng)的3×3 卷積的固定尺寸形狀采樣格點(diǎn),其采樣格點(diǎn)的范圍為
采樣完后需對采樣點(diǎn)通過標(biāo)準(zhǔn)卷積得到其對應(yīng)的特征矩陣,輸出特征矩陣為
式中:y(p0)為每個采樣位置對應(yīng)的輸出特征值,w(pn)為卷積權(quán)重,x(p0+pn)為輸入特征值,pn為感受野區(qū)域內(nèi)的所有采樣位置。
圖2 右下為通過可變形卷積后的特征提取結(jié)果圖。首先,根據(jù)輸入的圖像,利用傳統(tǒng)的卷積核提取圖像中的特征獲得特征圖,然后將得到的特征圖作為輸入,對特征圖施加一個卷積層,得到可變形卷積的變形的偏移量。由于是在平面上做平移,需要改變x值和y值2 個方向,故偏移層維度為2N,偏移量Δpn的表達(dá)式為
在獲取學(xué)習(xí)到的方向偏移量后,卷積核可以自適應(yīng)地根據(jù)目標(biāo)物體的尺寸形狀對自身的大小和形狀進(jìn)行調(diào)整,最終卷積核的輸出矩陣為
式中:x(p0+pn+Δpn)為采樣偏移位置的輸入特征值。在網(wǎng)絡(luò)訓(xùn)練的過程中,生成輸出特征和偏移量的卷積核的學(xué)習(xí)是同步進(jìn)行的,偏移量的學(xué)習(xí)是利用插值算法通過反向傳播實現(xiàn)的。將ResNext的基礎(chǔ)構(gòu)建塊中的3×3 普通卷積替換為3×3 的可變形卷積,改進(jìn)后的ResNext 網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。
圖3 改進(jìn)后的ResNext 網(wǎng)絡(luò)結(jié)構(gòu)
本文在原算法的損失函數(shù)基礎(chǔ)上進(jìn)行改進(jìn),設(shè)計了適合于實例分割的損失,其主要從網(wǎng)絡(luò)的分類輸出、目標(biāo)檢測框的定位輸出和掩膜分割輸出3 個部分對訓(xùn)練過程進(jìn)行了多任務(wù)損失函數(shù)[12]的設(shè)計,損失函數(shù)[13]為
Lall=Lcls+αLmask+βLbox
式中:Lcls為分類損失函數(shù);Lbox為目標(biāo)檢測框的定位損失函數(shù);Lmask為掩膜分割的損失函數(shù);系數(shù)α和 β用于平衡多個損失之間的關(guān)系,本文實驗中系數(shù) α和 β均設(shè)為1。
本文實驗中,在分類時采用softmax 進(jìn)行分類任務(wù),Lcls對每個感興趣區(qū)域進(jìn)行分類,若預(yù)測概率為p=[p0,p1,···,pk],則對于某一類別,其分類損失函數(shù)為
Lcls(p,pμ)=logpμ
式中:x、y、w和h分別為對應(yīng)坐標(biāo)的插值,smoothL1的表達(dá)式為
此外,由于本實驗是基于二分情況對豬只和背景進(jìn)行預(yù)測,最終模型結(jié)果只需預(yù)測2 種情況,故本文針對掩膜分割的損失函數(shù),選擇平均二值交叉熵?fù)p失函數(shù)來對應(yīng)類別的掩膜損失。對于每個類別本文預(yù)測得到的概率為p和 1-p,此時表達(dá)式為
式中:N為預(yù)測樣本的個數(shù);yi為樣本i的標(biāo)簽,正類為1,負(fù)類為0;pi為樣本i預(yù)測為正類的概率。
本文所進(jìn)行的所有實驗都是基于Ubuntu18.04操作系統(tǒng),硬件方面,GPU 采用4 塊2080 Ti,單塊GPU 顯存大小為12 GB,CPU 采用Intel Core i9-9900X,運(yùn)行內(nèi)存大小為128 GB。軟件方面,編程語言為 Python,pytorch 版本為1.6.1,CUDA 版本為10.1,采用 TensorFlow 深度學(xué)習(xí)開源框架,使用Pycharm 軟件編寫深度神經(jīng)網(wǎng)絡(luò)層。
本實驗使用的數(shù)據(jù)集采集自廣州廣墾、湖南唐人神2 大豬場,連續(xù)采集多天豬場豬只圖像,隨機(jī)抽取7 d 中全天各時段的群養(yǎng)豬圖像2 000張,人為篩選除去拍攝模糊和夜間光線過暗的圖像數(shù)據(jù),共計1 200 張群養(yǎng)豬圖像數(shù)據(jù)。實驗將1 200張圖像數(shù)據(jù)按2∶1∶2 的比例分為訓(xùn)練集、驗證集和測試集。對訓(xùn)練集使用圖像標(biāo)注工具VIA(VGG image annotator)進(jìn)行標(biāo)注,生成相應(yīng)的.json文件。標(biāo)注時,將每頭豬標(biāo)注為一個獨(dú)立的連通域,一個豬體目標(biāo)輪廓賦予具體的標(biāo)簽pig。本實驗中,標(biāo)簽類別只有pig 和背景(background)2 類。
實驗的流程如圖4 所示。
圖4 實驗流程
具體步驟如下:
1)從采集的有效圖像數(shù)據(jù)中隨機(jī)抽取訓(xùn)練集,保證訓(xùn)練集與驗證集無交叉重復(fù)圖像數(shù)據(jù),并對其進(jìn)行標(biāo)注,形成標(biāo)簽文件,完成訓(xùn)練集的制作;
2)將制作好的數(shù)據(jù)集作為深度卷積網(wǎng)絡(luò)[14]的輸入,首先用原有的Blend Mask 算法網(wǎng)絡(luò)對數(shù)據(jù)進(jìn)行模型訓(xùn)練,并測試其效果;
3)在原有算法的訓(xùn)練模型基礎(chǔ)上對算法進(jìn)行改進(jìn)(包括更換主干網(wǎng)絡(luò)、引入可變形卷積和優(yōu)化損失函數(shù)),對改進(jìn)后的算法進(jìn)行接續(xù)訓(xùn)練;
4)測試并分析改進(jìn)后的算法模型,對比得到分割效果最佳的模型。
對于上述實驗步驟2)中的模型訓(xùn)練過程進(jìn)行具體描述,其過程如下:
①將制作好的數(shù)據(jù)集(包括原始圖像和對應(yīng)的標(biāo)簽文件)作為深度卷積網(wǎng)絡(luò)的輸入,并搭建實驗所用的Blend Mask 網(wǎng)絡(luò);
②對原有的Blend Mask 網(wǎng)絡(luò)訓(xùn)練好的模型進(jìn)行改進(jìn),經(jīng)訓(xùn)練得到改進(jìn)后的Blend Mask 豬只分割模型;
③使用驗證集圖像測試改進(jìn)后的Blend Mask豬只分割模型,得到相應(yīng)的分割圖像;
④采用準(zhǔn)確率指標(biāo)評價豬只分割模型的分割結(jié)果,并根據(jù)評價結(jié)果調(diào)整模型的參數(shù);
⑤重新訓(xùn)練豬只分割模型,直至訓(xùn)練集指標(biāo)與驗證集指標(biāo)接近。
當(dāng)豬群聚集出現(xiàn)遮擋情況時,被遮擋豬只的輪廓信息會出現(xiàn)丟失,影響實例分割的效果,進(jìn)而影響對于豬只數(shù)據(jù)的統(tǒng)計[15-16]。對改進(jìn)前后的Blend Mask 算法網(wǎng)絡(luò)進(jìn)行測試,其檢測效果如圖5 所示。由圖5 可見,引入可變形卷積后的網(wǎng)絡(luò)對于密集遮擋情況下的豬只檢測效果有較好的提升。圖5(a)原圖1 中的豬只由于過度聚集導(dǎo)致豬只相互遮擋,在網(wǎng)絡(luò)結(jié)構(gòu)改進(jìn)前出現(xiàn)豬只漏檢情況,在改進(jìn)后將漏檢的豬只成功分割。類似的,在原圖2 中,圖像左側(cè)欄桿旁邊2 只豬由于相互遮擋且位于邊緣像素較低導(dǎo)致豬身分界線不清晰,在網(wǎng)絡(luò)結(jié)構(gòu)改進(jìn)前將2 頭豬誤分割為1 頭,改進(jìn)后可被正確分割為2 頭,分割效果如圖5(c)所示。
圖5 Blend Mask 網(wǎng)絡(luò)改進(jìn)前后測試結(jié)果對比
本實驗所用網(wǎng)絡(luò)在數(shù)據(jù)集上訓(xùn)練80 個循環(huán)(epochs),每個循環(huán)迭代1 000 次。在相同數(shù)據(jù)集上分別訓(xùn)練并測試當(dāng)主干網(wǎng)絡(luò)為ResNet-101、Res2net-101 和ResNext-101 以及在主干網(wǎng)絡(luò)為Res-Netx-101 并在檢測過程中引入可變形卷積情況下網(wǎng)絡(luò)模型,其Loss 收斂值如表1 所示。其中cls_loss、ctr_loss 和loc_loss 分別對應(yīng)網(wǎng)絡(luò)所用檢測器FCOS檢測過程中的分類損失、回歸損失和定位損失。由表1 可見,改進(jìn)后的網(wǎng)絡(luò)比原網(wǎng)絡(luò)的檢測分類損失和回歸損失各降低0.001,檢測定位損失降低了0.002,分割損失降低了0.005。由此可見,當(dāng)主干網(wǎng)絡(luò)為ResNext-101 并在檢測過程中引入可變形卷積時,其總的損失收斂值最小,網(wǎng)絡(luò)的收斂效果最好。
表1 不同主干網(wǎng)絡(luò)的訓(xùn)練結(jié)果
將本文算法網(wǎng)絡(luò)與原有Blend Mask 算法網(wǎng)絡(luò)在相同的數(shù)據(jù)集上進(jìn)行訓(xùn)練,對其訓(xùn)練得到的模型在相同測試集上分別進(jìn)行測試,對它們的測試結(jié)果進(jìn)行對比分析,2 種網(wǎng)絡(luò)模型在500 個測試集數(shù)據(jù)上的分割性能比較如表2 所示。其中AP(average precision)表示平均精準(zhǔn)度,AP50 表示IoU(intersection over union)閾值為0.5 時的平均精準(zhǔn)度,AP75 表示IoU 閾值為0.75 時的平均精準(zhǔn)度。bbox 表示目標(biāo)檢測對應(yīng)的平均精準(zhǔn)度,segm 表示目標(biāo)分割對應(yīng)的平均精準(zhǔn)度。圖6 為改進(jìn)后Blend Mask 網(wǎng)絡(luò)在不同數(shù)據(jù)源上的分割效果可視化結(jié)果圖。唐人神豬場的豬只較少出現(xiàn)嚴(yán)重堆積情況,對100 張?zhí)迫松駡D像數(shù)據(jù)進(jìn)行測試,其分割準(zhǔn)確率可達(dá)98%。廣墾豬場的豬只密度較大,豬只易出現(xiàn)堆積情況,當(dāng)豬只堆積時導(dǎo)致豬只擠壓、變形以及嚴(yán)重遮擋現(xiàn)象導(dǎo)致出現(xiàn)別個漏檢或?qū)? 頭誤檢為1 頭的情況,同樣對100 張廣墾圖像數(shù)據(jù)進(jìn)行測試,其分割準(zhǔn)確率可達(dá)96%。
表2 Blend Mask 算法改進(jìn)前后網(wǎng)絡(luò)測試結(jié)果對比
圖6 網(wǎng)絡(luò)改進(jìn)前后的分割效果
本文對Blend Mask 實例分割算法進(jìn)行改進(jìn),主要目的是減少分割目標(biāo)間的相互遮擋、目標(biāo)邊緣輪廓界線不清晰導(dǎo)致的漏檢和誤檢問題。在不加深主干網(wǎng)絡(luò)的深度和寬度的前提下,將Blend Mask 算法的主干網(wǎng)絡(luò)改進(jìn)為ResNext-101,同時在檢測過程中引入可變形卷積,通過引入偏移量,增大感受野,同時使感受野可以更好地適應(yīng)不同尺寸、形狀的豬只輪廓,減少了遮擋目標(biāo)的誤檢情況,有利于提高分割準(zhǔn)確率。對Blend Mask 算法原有損失函數(shù)進(jìn)行優(yōu)化,減少了漏檢問題的出現(xiàn)。改進(jìn)后的網(wǎng)絡(luò)分別在2 個不同豬場采集的圖像數(shù)據(jù)上進(jìn)行測試,測試結(jié)果表明,改進(jìn)后的算法網(wǎng)絡(luò)對于密集場景下的目標(biāo)實例分割準(zhǔn)確率有所提升。本文的算法也存在一定的不足,當(dāng)分割目標(biāo)為小目標(biāo)且高度密集的情況下,目標(biāo)的分割效果有待提升,在后續(xù)的研究中,可通過進(jìn)一步改進(jìn)圖像特征提取網(wǎng)絡(luò)和對分割細(xì)節(jié)進(jìn)行優(yōu)化來提升小目標(biāo)在密集情況下的分割準(zhǔn)確度。