高 云 郭繼亮 黎 煊 雷明剛 盧 軍 童 宇
(1.華中農業大學工學院, 武漢 430070; 2.生豬健康養殖協同創新中心, 武漢 430070;3.華中農業大學動物科技學院動物醫學院, 武漢 430070; 4.華中農業大學理學院, 武漢 430070)
機器視覺技術是檢測豬養殖狀況、評價豬福利的重要技術手段之一,具有易安裝、無侵入、設備平價等優點。目前,機器視覺技術較多應用于單體豬只的監測,主要用于識別豬只飲水行為[1]及監測豬只的飲水量[2-3]、監測母豬的分娩行為[4]、檢測生豬的瘦肉率[5]、監測豬只藍耳病疫情[6]等。對于群體飼喂階段,由于豬群有聚集在一起的習性,特別是躺臥時,當使用機器視覺跟蹤監測豬只時,圖像中存在較多的粘連豬體,且分割困難。目前要對群養豬個體進行追蹤和監測,尚未有較為成熟的應用。但群養模式無論是在種豬場還是商品肉豬場均占有較大的比重[7-8],對群養豬行為進行監測有利于全面改進豬場養殖管理水平,提高豬場的生產效率,從而提高豬場的經濟效益。因此,解決群養豬圖像中粘連豬體的分割問題是實現群豬視覺追蹤和監測的關鍵步驟。
為了分割群養豬圖像中的粘連豬體,采用傳統數字圖像處理結合模式識別的方法已有較多研究[9-13]。卷積神經網絡(Convolutional neural network,CNN)方法[14-20]能夠在背景知識不清晰,推理規則不明確情況下,通過訓練,自動提取圖像中目標特征,避免了通過人為觀察來設計算法提取目標特征的過程,得到的算法模型普適性較強。GIRSHICK等[21]提出了將R-CNN(Regions with CNN)應用到候選區域(Region proposal)的策略,訓練模型用于定位目標物和圖像分割,其分割的精度、效率均不高。為了提高分割精度,LONG等[22]對 CNN 進行改進,提出了全卷積網絡(Fully convolutional networks,FCN)的圖像語義分割算法,主要用來理解場景中存在的感興趣對象,實現像素級別的分割,有研究人員也將該方法應用到母豬個體識別和分割方面[23]。語義分割可以分割出同一類物體,但無法分割出同一類物體中的不同個體,不適用于分割群養豬中的粘連豬個體。
實例分割主要用來分割同類物體的不同個體。SILBERMAN等[24]在2014年用實例分割來分析室內場景。LI等[25]實現了全卷積端到端實例分割模型(Fully convolutional instance-aware semantic segmentation,FCIS)。實例分割是一個多任務架構網絡,通過卷積神經網絡先提取初級特征,并提出感興趣區域(Region of interest,ROI)。對于每個ROI區域,通過對ROI池化層處理提取出對應的特征。所提取特征共享給檢測目標任務的網絡,完成目標檢測、圖像分割與圖像分類任務。實例分割將圖像中不同類別和個體的感興趣對象分別進行分割和標記[26]。HE等[27]構建的Mask R-CNN網絡將實例分割推上了一個新的高度,對各種不同的粘連物體表現出了很好的分割性能。 ZHANG等[28]對道路兩側粘連汽車圖像進行了實例分割研究。WARD等[29]采用深度學習網絡Mask R-CNN實現了植物葉片的實例分割。實例分割框架在語義分割的基礎上,將相互粘連的同一類對象分割為不同的實例個體,為豬群中粘連個體的分割提供了可能性。目前還未見將實例分割用于粘連豬體分割的研究。
本文采用深度學習方法,對實例分割網絡進行修改,并將其用于對群豬圖像中的粘連豬體進行分割。通過對網絡進行訓練,得到有效的分割模型,并通過試驗驗證算法的可行性與有效性。
于2018年3月12日— 4月8日在華中農業大學試驗豬場進行圖像數據采集,6頭9.6 kg左右的大白保育豬養殖在環境多變量控制養殖箱內。環境多變量控制養殖箱[30]是課題組按集約化豬舍設計標準設計的,已申請專利。根據養殖豬頭數,按集約化豬場的豬只需占空間面積,設計豬欄的長、寬為2.0 m×2.0 m。豬舍內的料槽和鴨嘴式飲水器為商用豬舍產品。豬舍底部為全漏縫地板,地板下有水泡糞糞池,按照水泡糞的模式,水面超出10 cm,糞池容量設計為一周抽糞一次。箱內用LED燈照明,豬生活區域照度根據豬場光照標準控制在50 lx左右[31]。1080 p高清攝像頭安裝于箱頂部正中間,垂直向下,采集RGB圖像,鏡頭距漏縫地板高度為180 cm,如圖1所示。采集速率為3幀/s,圖像為1 920像素×1 080像素的RGB彩色圖像,存儲為JPG格式。

圖1 圖像采集平臺Fig.1 Image acquisition platform 1.高清攝像頭 2.數據線 3.計算機 4.環境多變量控制養殖箱
已有研究采用FCN對粘連情況復雜的圖像進行分割。FCN是一種深度學習的全卷積神經網絡模型,其處理分割問題時性能較好。FCN網絡的優勢[32]包括:①去掉了末端的全連接層,用卷積層代替,實現端到端的卷積網絡訓練。②對圖像的每個像素都進行預測分類,實現像素級分割。但對于粘連嚴重的豬群圖像,FCN網絡結構[32]上采樣采取簡單的反卷積方式,這種方式的上采樣使得圖像失去了許多細節特征,導致最終分割圖中豬體輪廓模糊,難以對粘連嚴重的豬群進行很好的分割。
Mask R-CNN網絡是一種實例分割(Instance segmentation)[27]方法,其檢測出每個目標,并用邊界框、標簽和不同顏色掩模對目標個體進行分割描述。Mask R-CNN網絡結構基于REN等[33]提出的Faster R-CNN框架,該框架將特征抽取、方案(Proposal)提取、bounding box 回歸、分類整合在同一個網絡中。Mask R-CNN網絡結構是在Faster R-CNN框架分類和回歸層之后增加了一個針對每一個ROI的FCN網絡分支,實現對圖像目標進行實例分割。Mask R-CNN網絡采用ROIAlign操作替換了ROIPool操作,保留目標空間位置的精度。ROIAlign是一個修正空間量化特征提取錯位的層[27],利用雙線性插值計算輸入對應ROI bin上的4個坐標值,作用是保留其網絡輸入和輸出之間的像素到像素的空間位置精度。Mask R-CNN網絡將判斷類別(Class)和輸出掩模(Mask)這兩個任務解耦合,用平均二值交叉熵損失對每個目標獨立地預測一個二值掩模,避免引入類別間競爭,大大提高了分割性能。本文中的每個目標即為豬群中的每頭豬只區域,對每頭豬只預測一個二值掩模。
本文在Mask R-CNN網絡結構的基礎上,對Mask R-CNN網絡框架的網絡深度和寬度進行優化調整,在已經有一定訓練基礎的參數上,進行遷移學習,用粘連群養豬圖像作為訓練集,比較不同層數和不同卷積核的網絡模型的分割準確率,確定較優的分割粘連豬體圖像的網絡參數和模型。
最終,本文確定優化模型為PigNet,其網絡較Mask R-CNN網絡做了兩點優化改進:①針對本文試驗場景中類別單一的不同實例對象,將Mask R-CNN主干網絡第4階段卷積的69層卷積層結構調整為12層(PigNet),這樣不僅防止了特征損耗,而且減少了卷積運算量。②Mask R-CNN網絡的Mask分支最后一層卷積層通道數80修改為2(PigNet),代表類別數為兩類(pig類和background類)。PigNet具體網絡結構如圖2所示。

圖2 PigNet網絡結構Fig.2 PigNet network structure
PigNet主干網絡采用44層卷積層,有5個卷積階段,每1階段的卷積均采用殘差學習結構 (Building block)[34],如圖3所示,藍色弧線包含的3個卷積層結構中,3×3×256層表示卷積核為3×3、通道數為256的卷積層(圖3中類似的結構,依此類推),1 024表示向量維數為1 024的全連接層。殘差學習結構的首端和末端采用1×1卷積核,中間采用3×3卷積核。殘差學習結構的優點在于:其極大地降低了參數的數目,減少計算量的同時保持了精度,如第2階段的第1個1×1的卷積將256維通道降到64維,然后再通過1×1卷積恢復到256維通道。殘差學習結構有很多的旁路即藍色弧線,將輸入直接連接到后面的層,一定程度上解決特征損耗、梯度消失等訓練問題。第1階段卷積層后連接有BatchNorm層、Scale層、ReLU激活層,之后連接有池化層,采用卷積核為3×3的Max pooling操作。BatchNorm層和Scale層作用是批量歸一化,ReLU激活層有利于訓練收斂更快。后面的每層卷積層的滑動步長(Stride)為 2 個像素,經過一個殘差學習結構的卷積、池化把尺寸縮小至原來的1/4,PigNet主干網絡滑動步長不停的縮減尺寸,輸出通道數持續增加,達到2 048。

圖3 PigNet主干網絡結構Fig.3 Backbone network structure of PigNet
主干網絡的特征提取分兩方面:一方面是網絡模型的conv4_12卷積層輸出的特征圖(Feature map)經過區域候選網絡(Region proposal networks,RPN)計算處理,提供計算后提取的特征信息;另一方面是繼續向前傳播,生成特征圖。主干網絡所提取的特征圖由ROIAlign層處理。RPN的作用是更快地選取ROI。ROIAlign從ROI提取特征并保留輸入和輸出之間的像素的精準空間位置。從ROI分出來兩個分支,一個分支經過7×7卷積核、通道數256的卷積層,再經過兩個1 024維特征向量的全連接層,最后完成預測類別和回歸框任務;另一Mask分支經過5次14×14卷積核、通道數為256的卷積層運算,再進行上采樣生成 28×28的特征圖,最后使用28×28卷積核、通道數為2的卷積層對每個ROI目標(本文為每頭豬只)預測輸出一個掩模。
PigNet實例分割網絡的損失函數包括3部分,公式[27]為
L=Lcls+Lbox+Lmask
(1)
式中L——損失函數
Lcls——分類誤差
Lbox——檢測誤差
Lmask——分割誤差
Lcls、Lbox利用全連接層處理,預測出每個ROI的所屬類別和回歸框坐標值。Lmask對每個ROI的目標進行分割,并賦予掩模表示。Class分支、Box分支、Mask分支共享卷積計算得出ROI。對于每個ROI,Lcls負責預測該目標的類別,若預測感興趣區域ROI為pig類,則在分割該ROI過程的損失時只使用pig類的相對熵誤差作為誤差值進行計算,其他類別(如background類)的相對熵誤差不參與到該ROI的損失函數中,避免了類別間競爭。Lbox用來控制該目標的回歸框的位置坐標。Lmask用來控制該目標生成精準的掩模。Class分支預測感興趣區域ROI為pig類,則Lmask僅僅單獨考慮ROI目標的回歸框的pig類別相對熵誤差來預測該感興趣區域屬于pig類別的像素點,精準地分割出目標輪廓,分割得到不同層深度的精準輪廓位置坐標信息,分割圖中使用不同顏色的掩模來表示不同層深度的目標。對于本文測試圖像,PigNet網絡模型卷積計算得6個感興趣區域,Lcls預測每個感興趣區域類別為pig,Lbox預測6個目標的回歸框的位置坐標,Lmask采用平均二值交叉熵損失并使用Sigmoid函數對6個回歸框的位置均獨立地預測一個二值掩模,6個目標分割的目標輪廓信息放置在6個不同層深度,在分割圖中用6種不同顏色的掩模來表示6個目標。對于數量更多的豬群圖像,PigNet模型對每個豬體分割生成一個對應的二值掩模。
本文網絡激活函數采用修正線性單元(Rectified linear units,ReLU)和基于批量隨機梯度下降法(Mini-batch stochastic gradient descend)的優化模型,使用GPU運算。批量訓練的方法將數據集數據分為多個批次,設置迭代次數為10,每個批次訓練系數為100,隨著迭代次數的增加,網絡損失函數損失收斂,訓練集和驗證集的準確率趨于穩定,調整動量因子參數為0.9,正則化權重衰減系數為0.000 1,網絡權重參數的基礎學習率為0.001。
本文分割算法處理平臺為臺式計算機,處理器為 Inter Core i5-7500,主頻為3.40 GHz,32 GB內存,2TB 硬盤,顯卡為NVIDA GeForce GTX1060。軟件環境為Windows 10 64位系統,編程語言為Python,采用TensorFlow深度學習開源框架,使用Microsoft visual studio軟件編寫深度神經網絡層。
連續采集28 d圖像,包含了群養豬日常生活的吃食、飲水、躺臥、運動等多種行為的圖像樣本。為了確保訓練樣本的多樣性,本文抽取試驗前5 d中全天各時段不同行為狀態下的群養豬圖像2 000幅作為訓練集。為了確保驗證集與訓練集之間無重疊圖像數據,抽取第6、7天的各個時段的群養豬圖像500幅作為驗證集,總計2 500幅群養豬圖像樣本。
使用Labelme軟件制作訓練數據集。標注時,將每頭豬標注為一個獨立的連通域。試驗對象為6頭保育豬,因此每幅圖像中標出6頭豬個體連通域,即6個目標,人工每采集一個豬體目標輪廓就給該豬體目標賦予具體的標簽。6個豬體目標標簽依次命名為pig1、pig2、…、pig6。標注完一幅圖像后得到一個對應的.json文件。解析.json文件,提取中位深度為24位的label.png標簽圖像,再將24位label.png圖像轉換為8位的label.png圖像,完成一幅圖像數據的制作。
若將6個豬體目標直接標簽標注為pig,則6個目標會放置在同一個通道層,被識別為同一目標對象。若把6個豬體目標命名為不同的標簽,將會被識別為6個不同對象。因此在圖像中用6種不同顏色表示,對應Mask R-CNN網絡對不同的實例目標需要放在不同層中的輸入要求。但是上述標注后6個不同的標簽代表6個類別,而在主網絡訓練中要求6個豬體目標是屬于1個類別標簽,即pig大類別標簽。本文采用w×h×n三維數組將在6個深度層的6個類別轉換為在6個深度層的1個類別,作為Mask R-CNN網絡的輸入。w和h分別為輸入圖像的長和寬,n為輸入圖像中實例目標的豬頭數,本文設為6。讀取6個豬體目標的類別標簽為pig。
由于本研究的目是分割粘連的群養豬,準確識別出獨立的豬個體目標位置和個數,而圖像中豬個體區域的像素級別的差別,不在本文的研究范圍內。因此分割算法將圖中的自然豬個體分割成獨立的連通域,即判為分割正確。本文采用準確率指標[35]評價PigNet模型分割效果,準確率為分割模型正確分割豬個體的圖像數占驗證集圖像數的百分比。
使用已在COCO(Common objects in context)數據集上訓練好的Mask R-CNN模型權重對群養豬圖像分割網絡PigNet進行初始化(Fine-tuning)[36]。COCO 數據集由微軟提供,數據集中含有類別、位置信息等圖像目標的標注信息,是大多數深度神經網絡圖像分割算法性能評價的常用數據集。COCO數據集不包含豬,但包含了貓、狗、馬、羊、牛等四肢行走動物作為訓練對象,訓練集包含數十萬幅圖像。訓練好的Mask R-CNN模型其權重已包含了動物的常見特征,在此基礎上使用遷移學習方法來訓練群養豬圖像分割網絡PigNet,可以更快地學習豬只特征,大大地縮短了訓練模型的時間。
為了進行效果對比,使用PigNet模型與基于ResNet101網絡的Mask R-CNN模型及其改進模型對圖像進行分割,對比分析其分割結果。
群養豬圖像的具體分割試驗流程如圖4所示,具體步驟如下:
3.4 在高寒沙區利用機械固沙和生物固沙相結合,無灌溉條件下扦插、直播造林相結合的植被恢復綜合技術,是改善沙區生態環境的最有效的手段之一。
(1)從采集的群養豬圖像數據中抽取訓練集,其中訓練圖像盡量包含群養豬日常4種不同形態圖像,且驗證集與訓練集無交叉重復數據。
(2)使用Labelme軟件對訓練集圖像進行標注,對應標簽圖像,完成訓練集的制作。
(3)將制作好的數據集作為深度卷積網絡的輸入。
(4)搭建群養豬分割卷積網絡PigNet網絡。
(5)以Mask R-CNN網絡訓練好的模型作為群養豬圖像分割網絡PigNet的初始化(Fine-tuning),經訓練得PigNet模型。
(6)使用驗證集圖像測試群養豬圖像分割模型——PigNet模型,得分割圖像。
(7)采用準確率指標評價PigNet模型的分割結果。
(8)根據評價結果調整PigNet模型的參數。
(9)重新訓練PigNet模型,重復步驟(5)~(8),直至訓練集指標與驗證集指標接近。

圖4 群養豬圖像分割試驗流程圖Fig.4 Flow chart of group pig image segmentation test
分析PigNet模型的識別過程,模型的部分卷積層的可視化輸出如圖5所示。從圖5中可以看出,每層卷積提取出的特征各有側重,使PigNet模型學習豬個體顏色特征、形狀特征、紋理特征等特征。隨著卷積層層數的增多,PigNet模型學習的特征信息越來越趨于抽象,使PigNet模型學習了更為深度的豬個體特征。

圖5 群養豬圖像分割網絡算法的卷積特征圖可視化Fig.5 Convolutional characteristic map visualization of pig image segmentation network algorithms
已訓練的PigNet模型在2 000幅訓練集、500幅驗證集上的分割結果用評價指標分析,結果如表1所示。其中,訓練集4種行為圖像各500幅,驗證集4種行為圖像各125幅。由表1可知,PigNet模型在訓練集和驗證集上均取得較好的分割結果,總分割準確率均大于85.00%,訓練集為86.15%,驗證集為85.40%。在各行為樣本中,PigNet模型對吃食、飲水、運動等行為圖像分割性能較好,訓練集和驗證集準確率均不小于86.40%。驗證集對運動行為圖像分割準確率高達92.00%。躺臥樣本圖像中豬體粘連情況最為嚴重,所有的樣本圖像中都有嚴重的豬體粘連現象,其它行為樣本中,粘連現象都不同程度地出現,如圖6所示。算法的總體準確率及每種行為的驗證集準確率與訓練集近似,較訓練集略低,表明PigNet模型泛化性能較好。

表1 PigNet分割評價指標分析Tab.1 Analysis of PigNet segmentation evaluation index
PigNet模型對分割不同形態的粘連群養豬具有較好的分割性能。如圖6所示,不同行為下,豬體有保持直線、彎曲、多豬粘連等情況,并未影響分割準確率。由于攝像頭并未將整個豬欄區域完全覆蓋,有些豬體超出圖像范圍,算法對拍攝不完整的豬體分割也較為準確,如圖6a、6c、6d所示。圖6d的分割難度最大,所有的豬只都聚集在一起,造成某些豬的部分豬體被其它豬只遮擋,導致無法拍攝部分豬只完整輪廓,算法也可準確將其分開,說明PigNet網絡模型對粘連豬群能有效分割。

圖6 不同行為測試圖像的分割結果Fig.6 Segmentation results of diversity behavioral images
在用本文算法完成分割的樣本中,兩類行為模式的樣本出現少量錯誤,如群養豬的運動和吃食圖像,如圖7所示。豬只個體存在頭部與頭部、頭部與尾部粘連嚴重或跨爬行為,造成圖像中的單個豬體被分為兩部分,從而引起分割錯誤。

圖7 分割錯誤圖像Fig.7 Split error images
為了得到較優的分割粘連豬體圖像的網絡參數和模型,本文分別對Mask R-CNN主干網絡的卷積層數和寬度進行了調整。調整后的網絡結構模型的參數設置、分割準確率如表2所示。從表2可以看出,網絡模型的深度對分割準確率有明顯的影響。改進模型1的準確率最高,從最終圖像分割的質量來看,改進模型4~8的過分割現象明顯,故較101層和200層卷積深度,44層卷積層深度是較為適合豬群分割的層數。同時,改進模型的第1階段的conv1卷積層采用不同卷積核,影響了網絡提取的豬體特征,最終體現在了網絡模型的分割準確率。由表2可看出,改進模型1、4、6的分割準確率均高于同一網絡深度的其他改進模型。如改進模型1較改進模型3,其分割準確率高出0.6個百分點。從表2整體來看,卷積層數對網絡分割準確率影響較大,卷積核對網絡分割準確率影響較小。本文采用改進模型1為分割粘連豬體圖像的模型,即確定PigNet模型卷積層數為44,第1階段的conv1卷積層卷積核為7×7。

表2 改進網絡的參數設置和分割準確率Tab.2 Parameter setting and segmentation accuracy of improved network
將本文算法模型與Mask R-CNN模型的分割效果進行對比。采用同樣的2 000個訓練樣本和500個驗證樣本,訓練Mask R-CNN(ResNet101-FPN)模型。兩種網絡模型在500個驗證樣本上的分割性能比較如表3所示。

表3 不同分割模型的性能比較Tab.3 Comparison of different segmentation networks performances
本文算法模型相較Mask R-CNN(ResNet101-FPN)模型,其準確率高11.40個百分點,說明主干網絡的卷積層不是越深越好,合適的卷積層深度有利于分割性能的提高。本研究的目的是分割粘連的群養豬,獲得獨立連通域的豬個體。增加網絡卷積層運算和粘連豬體的權重因子,有利于提高分割準確率,但同時也容易導致分割性能的過擬合,將豬體部分區域分割為一個豬個體,造成同一目標豬個體的過分割,如圖7所示。本文算法模型相較Mask R-CNN(ResNet101-FPN)模型較好地權衡了分割性能和模型過擬合,一定程度上減少了卷積參數,精簡了模型,同時使模型分割性能略有提高。
本文算法模型比Mask R-CNN(ResNet101-FPN)模型的單幅圖像分割處理時間縮短了30 ms。本文算法模型的層結構較Mask R-CNN(ResNet101-FPN)模型,精簡了卷積層結構,也減少了單幅圖像的分割處理時間。
(1)提出了基于實例分割框架的粘連豬體圖像分割算法PigNet網絡模型,有效地解決群養豬俯視圖像中難以解決的豬體粘連問題。PigNet網絡模型在Mask R-CNN主干網絡基礎上建立PigNet主干網絡,經過區域候選網絡提取的特征和主干網絡前向傳播提取的特征均被ROIAlign所共享。ROIAlign操作從ROI提取特征并保留輸入和輸出之間的像素精準空間位置。從ROI分出兩個分支,一個分支完成預測類別和回歸框任務,另一Mask分支對每個ROI的目標預測輸出一個掩模。
(2)PigNet模型在訓練集和驗證集上均取得較好的結果,總分割準確率均大于85.00%,訓練集為86.15%,驗證集為85.40%。與Mask R-CNN模型及其改進模型進行分割效果對比,PigNet網絡模型驗證集的準確率較Mask R-CNN(ResNet101-FPN)模型高11.40個百分點,且分割運算時間較Mask R-CNN(ResNet101-FPN)模型短30 ms。本文算法模型對不同形態、粘連嚴重的群養豬分割效果較好,能準確地分割粘連嚴重的豬群圖像,可用于各種群養行為模式下的粘連豬體分割。