李 頎,李煜哲
(陜西科技大學 電子信息與人工智能學院,陜西 西安 710021)
豬舍清洗是現(xiàn)代化養(yǎng)豬生產(chǎn)不可或缺的重要部分,目前國內(nèi)畜牧業(yè)的智能化程度還處于低級階段,對豬舍的清洗大部分仍是由人工完成的,耗費人力,效率較低。現(xiàn)有的智能清洗設(shè)備多依賴于進口且成本高,設(shè)備普及率低,不具有自適應性,且無法進行全方位清洗。因此,高效率、低成本、適應性廣的豬舍清洗智能設(shè)備的開發(fā)是研究的熱點之一。豬舍的清洗目標包括地面、墻面、柵欄、擋板、喂料器等,豬舍清洗設(shè)備結(jié)合清洗目標檢測技術(shù)將會成為一個全新的技術(shù)點,根據(jù)檢測到豬舍清洗目標的不同采取不同的清洗方式,使豬舍的清洗變得更加智能化。
因為豬舍內(nèi)光線較弱,對比度差,所提取的清洗目標的特征信息不能有效利用,并且豬舍內(nèi)清洗目標和背景的顏色較為相似,造成檢測準確率低;因此,弱光條件下對豬舍清洗目標的檢測存在一定的困難。目標檢測算法分為2類,傳統(tǒng)的目標檢測算法和基于深度學習的目標檢測算法。傳統(tǒng)的目標檢測提出的方法大多基于人工的特征提取,在計算復雜度高和場景復雜的情況下魯棒性差。基于深度學習的目標檢測算法是利用深度學習技術(shù)自動抽取輸入圖像的隱藏特征信息,對樣本進行更高精度的分類和預測,與傳統(tǒng)算法相比,基于深度學習的目標檢測算法具有速度快、準確率強、魯棒性高的特點。目前基于深度學習的目標檢測算法分為兩階段(two-stage)目標檢測算法和一階段(one-stage)目標檢測算法[1]。兩階段目標檢測算法在第一階段生成區(qū)域建議,在第二階段對感興趣區(qū)域的內(nèi)容進行分類和回歸,對目標的識別精度較高但是速度較慢,常見的算法有R-CNN(region-convolutional neural network,區(qū)域卷積神經(jīng)網(wǎng)絡)[2]、SPP-Net(spatial pyramid pooling network)[3]、Fast-RCNN[4]、Faster-RCNN[5]等。一階段目標檢測算法將目標任務看作是對整幅圖像的回歸任務,相比于兩階段算法識別精度低,但是速度快,常見的算法有YOLO(you only look once)系列的算法[6-8]、SSD(single shot multibox detector)算法[9]。
豬舍的清洗目標包括地面、墻面、擋板、柵欄、喂料器等,本文主要對柵欄、擋板、喂料器這3種清洗目標進行檢測識別。針對豬舍環(huán)境光線較弱導致檢測準確率下降的問題,本文采用基于雙邊濾波的retinex算法在輸入檢測網(wǎng)絡之前對輸入圖像進行預處理,減小弱光條件對豬舍內(nèi)圖像檢測的影響[10]。由于在豬舍進行清洗時對設(shè)備的實時性要求較高,本文采用一階段目標檢測算法Yolov5對豬舍內(nèi)的清洗目標進行檢測識別。豬舍環(huán)境中,清洗目標和背景顏色相近,導致豬舍背景下清洗目標特征不明顯、檢測準確率低,本文采用改進的YOLOv5網(wǎng)絡,在主干網(wǎng)絡(backbone)中引入卷積注意力機制模塊和通道注意力機制(convolutional block attention module,CBAM)以增強清洗目標在豬舍背景下的顯著度[11],提高清洗目標的檢測精度。在攝像頭采集豬舍內(nèi)圖像的時候,由于拍攝角度問題,存在柵欄、擋板、喂料器之間的相互遮擋,導致漏檢。本文對非極大值抑制(non-maximum suppression, NMS)算法進行改進,采用DIoU-NMS算法篩選出候選框,提高在遮擋情況下豬舍清洗目標檢測的準確率。
YOLOv5分為輸入端(input)、主干網(wǎng)絡、頸部網(wǎng)絡(neck)、預測端(prediction)4個部分[12]。
input輸入端采用mosaic數(shù)據(jù)增強的方式,自適應錨框計算和自適應圖片縮放。mosaic數(shù)據(jù)增強采用4張圖片通過縮放、裁剪、隨機排布的方式進行拼接,豐富了數(shù)據(jù)集,增加了很多小目標,提高了魯棒性;針對不同的數(shù)據(jù)集,設(shè)置初始的錨框值,在網(wǎng)絡訓練中,在初始錨框的基礎(chǔ)上輸出預測框,進而和真實值進行比對,計算兩者差距,再反向更新,迭代網(wǎng)絡參數(shù),獲得最佳錨框值。YOLOv5中錨框的初始設(shè)定值默認為(10、13、16、30、33、23 pixel),(30、61、62、45、59、119 pixel),(116、90、156、198、373、326 pixel)。在目標檢測任務中,大特征圖含有更多小目標信息,通常在大特征圖上檢測小目標,因此大特征圖上的錨框數(shù)值通常設(shè)置為小數(shù)值,小特征圖上數(shù)值設(shè)置為大數(shù)值檢測大的目標。在目標檢測算法中,根據(jù)圖片大小不同,進行自適應圖片的縮放填充,能夠提升網(wǎng)絡的推理速度。
backbone主干網(wǎng)絡包含切片結(jié)構(gòu)(focus)、卷積塊(CBL)、跨階段局部網(wǎng)絡(cross stage partial networks, CSPNet)模塊和空間金字塔池化(spatial pyramid pooling, SPP)模塊。通過切片結(jié)構(gòu)對圖片進行切片操作,將高分辨率的特征圖拆分成多個低分辨率的特征圖,減少下采樣帶來的信息損失,在YOLOv5中將608 pixel×608 pixel×3 pixel的圖片拆分成304 pixel×304 pixel×12 pixel的特征圖,經(jīng)過32個卷積核卷積得到304 pixel×304 pixel×32 pixel的特征圖。在主干網(wǎng)絡中卷積層(Conv)、歸一化層(batch normalization, BN)、激活函數(shù)(leaky relu)構(gòu)成了卷積塊CBL。CSP模塊是將原輸入分支之后再進行concat操作,使模型能學習更多的特征,在降低計算量的同時保證準確性。YOLOv5設(shè)計了2種CSP結(jié)構(gòu):CSP1_X應用于主干網(wǎng)絡中,CSP1_X將原輸入分成2個分支,一個分支進行卷積操作使得通道數(shù)減半,另一個分支進行殘差操作,然后連接(concat)2個分支,使輸入與輸出大小相同,同時學習到更多的特征;CSP2_X應用于頸部網(wǎng)絡neck中,由于neck網(wǎng)絡深度較淺,CSP2_X將CSP1_X中的resunit換成了2×X個CBL??臻g金字塔池化SPP結(jié)構(gòu)使用最大池化方式對不同尺度的特征圖進行融合,提高感受野的尺寸,提取豬舍清洗目標的重要特征,節(jié)省計算成本。
neck采用特征金字塔(feature pyramid networks, FPN)結(jié)構(gòu)和金字塔注意網(wǎng)絡(pyramid attention network, PAN)結(jié)構(gòu),如圖1所示。YOLOv5使用3種特征圖(19 pixel×19 pixel、38 pixel×38 pixel、76 pixel×76 pixel)進行多尺度檢測。FPN通過上采樣的方式傳遞自頂向下的強語義特征,PAN通過下采樣的方式傳遞自底向上的強定位特征,從不同的主干層對不同的檢測層進行參數(shù)聚合,實現(xiàn)不同尺度的特征融合,將主干網(wǎng)絡所提取的特征進行增強處理,對豬舍清洗目標的預測更加精準。
圖1 特征金字塔(FPN)+金字塔注意網(wǎng)絡(PAN)結(jié)構(gòu)Fig.1 The structure of feature pyramide network (FPN)+pyramid attention network (PAN)
prediction通過損失函數(shù)和非極大值抑制預測目標邊框。使用CIoU_Loss算法計算邊界框回歸損失,非極大值抑制(NMS)用于去除重疊的檢測框,保留概率最大的候選框作為最終的預測框,輸出包含預測圖像中的清洗目標位置和分類信息向量。
本文對弱光條件下豬舍的柵欄、擋板、喂料器進行檢測,清洗目標如圖2所示。在輸入YOLOv5網(wǎng)絡之前先采用基于雙邊濾波的retinex算法對采集的豬舍內(nèi)圖像進行增強,減小弱光條件下對豬舍內(nèi)圖像的影響,經(jīng)過預處理后將處理過的圖片送入目標檢測網(wǎng)絡。將CBAM模塊引入YOLOv5模型的backbone主干網(wǎng)絡中,增強清洗目標在豬舍背景下的顯著度,使網(wǎng)絡能夠提取出更多特征信息,提高對清洗目標的檢測準確率。為處理遮擋的問題,邊界框回歸損失選用CIoU損失函數(shù)對模型進行收斂,采用改進的DIoU-NMS算法篩選出候選框。改進的YOLOv5算法框架如圖3所示。
圖2 豬舍清洗目標Fig.2 Piggery cleaning target
Conv,卷積;BN,歸一化;CBL,卷積塊;CSPNet,跨階段局部網(wǎng)絡;SPP,空間金字塔池化;Concat,張量拼接;Leaky relu,激活函數(shù);Res unit,殘差組件;CBAM,輕量級的卷積注意力模塊。Conv, Convolution; BN, Batch normalization; CBL, Convolution block; CSPNet, Cross stage partial networks; SPP, Spatial pyramid pooling; Concat, Concatenates tensors; Leaky relu, Activation function; Res unit, Residual component; CBAM, Convolutional block attention module.圖3 本文改進的YOLOv5算法框架Fig.3 Algorithm framework of the improved YOLOv5 network
Retinex是一種通過模擬人的視覺系統(tǒng)調(diào)節(jié)圖像顏色和亮度的圖像增強方法[13],若原始圖像為S(x,y),亮度圖像為L(x,y),反射圖像為R(x,y),由于人的視覺模型和對數(shù)域模型相似,可以得到單尺度的Retinex算法公式,如式(1)所示。
Ri(x,y)=logSi(x,y)-log[G(x,y)*Si(x,y)]。
(1)
式(1)中:i是第i個顏色通道,單通道圖像的i=1,*表示卷積運算;G(x,y)為標準高斯環(huán)繞函數(shù),其計算方法如式(2)所示。
(2)
式(2)中:λ滿足?G(x,y)dxdy=1;σ是尺度參數(shù)。
雙邊濾波(bilateral filter)的核函數(shù)是空間域核和像素范圍域核的綜合結(jié)果,能夠較好保存邊緣效果。雙邊濾波定義如式(3)所示。
(3)
歸一化參數(shù)如式(4)所示。
(4)
式(3)、(4)中:c(ξ,x)表示臨近點ξ與中心點x之間的距離;s[f(ξ),f(x)]表示臨近點ξ與中心點x之間的亮度相似度如式(6)所示;f(x)和h(x)分別表示輸入和輸出圖像在中心點x的亮度值。
將雙邊濾波擴展到高斯核:
(5)
(6)
式(5)、(6)中:d(ξ,x)表示2點之間的歐氏距離;δ[f(ξ),f(x)]表示2個亮度值之差。
基于雙邊濾波的Retinex算法實現(xiàn)首先是在輸入圖像到網(wǎng)絡之前,通過單尺度Retinex算法對豬舍內(nèi)圖像取對數(shù),然后做局部對比度增強,提高圖像的對比度,為更好地控制圖像亮度效果,同時對取對數(shù)后的豬舍圖像采用基于雙邊濾波的亮度估計方法估計亮度?;陔p邊濾波的Retinex算法工作流程如圖4所示。
圖4 基于雙邊濾波的Retinex豬舍圖像增強算法Fig.4 Retinex piggery image enhancement algorithm based on bilateral filtering
利用基于雙邊濾波的Retinex圖像增強算法,對弱光條件下豬舍的圖像進行增強處理,效果如圖5所示。
a,圖像增強前;b,圖像增強后。a, Before image enhancement; b, After image enhancement.圖5 豬舍弱光圖像增強Fig.5 Low-light image enhancement in the piggery
由于豬舍環(huán)境中清洗目標和背景顏色相似,清洗目標的特征不明顯,對豬舍清洗目標的檢測較為困難。為加強對豬舍清洗目標的檢測能力,通過在YOLOv5模型的backbone結(jié)構(gòu)中引入注意力機制,節(jié)省計算資源,加強算法對清洗目標的特征提取,關(guān)注重要特征,對一些不必要特征進行過濾,引入的CBAM結(jié)構(gòu)如圖6所示。
圖6 CBAM模塊基本結(jié)構(gòu)Fig.6 The structure of CBMA model
通道注意力機制通過特征內(nèi)部之間的關(guān)系來實現(xiàn)。特征圖的每個通道都被視作一個特征檢測器,所以通道特征聚焦的是圖像中有用的信息是什么。為更高效地計算通道注意力特征,壓縮特征圖的空間維度,將輸入的特征圖經(jīng)過并行的平均池化(AvgPool)和最大池化(MaxPool)層,使提取到的豬舍清洗目標特征更全面、更豐富,通道注意力機制公式如式(7)所示。
Mc(F)=σ{MLP[APool(F)]+MLP[MPool(F)]}
(7)
空間注意力機制通過對特征圖空間內(nèi)部的關(guān)系來產(chǎn)生空間注意力特征圖,空間注意力聚焦于特征圖上的有效信息在哪里。為計算空間注意力,首先在通道維度平均池化和最大池化,然后將他們產(chǎn)生的特征圖拼接起來,在拼接后的特征圖上,使用卷積操作來產(chǎn)生最終的空間注意力特征圖,計算如式(8)所示,f7×7是7×7大小的卷積核。
Ms(F)=σ{f7×7[APool(F);MPool(F)]}
(8)
式(8)中Ms(F)表示空間注意力特征。
CIoU_Loss考慮目標框回歸函數(shù)的3個重要幾何因素——重疊面積、中心點距離和長寬比。CIoU損失函數(shù)如式(9)所示,b和bgt是兩個矩形框的中心點,ρ表示兩個矩形框的歐氏距離,c表示兩個矩形框的對角線距離,v是衡量長寬比一致性的參數(shù)。
(9)
在目標檢測的后處理過程中,針對很多目標框的篩選,通常需要NMS操作。對于豬舍內(nèi)出現(xiàn)的清洗目標,類似于擋板、柵欄、喂料器相互重疊或者遮擋的情況,本文采用DIoU-NMS的方式,通過考慮邊界框中心的位置信息中心點較遠的box可能位于不同的對象上,處理遮擋問題,效果優(yōu)于NMS。DIoU-NMS的si決定一個box是否被刪除,公式如式(10)所示。
(10)
式(10)中:si是分類得分;ε是NMS閾值;RDIoU是2個box中心點之間的距離。
由于本研究應用于畜牧清洗自動駕駛車,豬舍清洗目標的數(shù)據(jù)集來自河南新大牧業(yè)股份有限公司,每張圖片中應至少包含所要檢測的柵欄、擋板、喂料器這3種清洗目標中的1種,數(shù)據(jù)集中存在光線變化和清洗目標相互遮擋的場景。對采集到的數(shù)據(jù)做平移、旋轉(zhuǎn)、變換操作,豐富數(shù)據(jù)集,提高模型的泛化能力與魯棒性。數(shù)據(jù)集總共有30 000張,其中訓練集有21 000張,測試集5 000張,驗證集4 000張。將圖片尺寸縮放為608 pixel×608 pixel,利用Imglabel軟件對圖片中的清洗目標進行標注。
本文的算法是在深度學習框架Pytorch上實現(xiàn)的,實驗所用硬件為單個具有16 GB內(nèi)存的NVIDIA GeForce RTX 2080Ti GPU,操作系統(tǒng)為Ubuntu18.04,算法開發(fā)基于Python語言。本文實驗過程中的網(wǎng)絡模型參數(shù)設(shè)置:Batch_size為64,權(quán)重衰減因子為0.000 1,訓練迭代次數(shù)為300,學習率初值為0.001。
本實驗中采取的豬舍清洗目標檢測的評價標準包括檢測準確率(預測結(jié)果為正類的樣本占被預測為正類的樣本的比例,precision,P)、平均準確度(mean average precision, mAP)、召回率(正確預測的正類樣本所占原樣本的比例,recall,R)。
(11)
(12)
(13)
式(11)~(13)中:P表示檢測準確率;R表示召回率;PmA表示平均準確度;PT(true positives)表示實際為清洗目標且識別正確的個數(shù);PF(false positives)表示實際為非清洗目標但被錯誤識別為清洗目標的個數(shù);NF(false negatives)表示實際為清洗目標但是未檢測為清洗目標的個數(shù);AP(average precision)為精度-召回率曲線下的面積,表示在不同召回率上的平均精度;C是類別個數(shù)。
對改進的YOLOv5算法進行訓練,訓練完成后繪制模型的損失函數(shù)變化曲線圖,結(jié)果如圖7所示,100次迭代后損失函數(shù)值劇烈下降,后200次迭代將學習率降為0.000 1,當?shù)?00輪時趨于穩(wěn)定,收斂在0.06左右,改進后模型的學習效果較為理想。
圖7 模型的損失函數(shù)變化曲線Fig.7 Loss function change curve of model
為方便對改進效果進行分析,本文設(shè)計消融實驗以驗證各項改進的有效性,結(jié)果如表1所示。由表1可知,進行圖像增強、添加CBAM模塊和修改邊框回歸損失函數(shù)都提高了檢測性能。在采集到的豬舍內(nèi)圖像輸入檢測網(wǎng)絡之前進行圖像增強,減小光線較差時對檢測精度的影響,使模型的mAP提升了1.2百分點;通過加入CBAM模塊,融合了沿通道和空間兩種維度上的注意力權(quán)重,增大網(wǎng)絡的感受野,加強了模型對于特征圖中關(guān)鍵信息的關(guān)注,有利于特征圖信息的表達,使網(wǎng)絡學習到更多有效信息,網(wǎng)絡模型的mAP指標提升了4.0百分點;最后將CIoU_loss作為目標邊界框回歸的損失函數(shù),用DIoU-NMS算法篩選出候選框,使得在清洗目標部分遮擋時模型的定位更加精準,模型在原基礎(chǔ)上mAP提高了0.5百分點。3種改進方法都會使模型的mAP有所提升,結(jié)合3種改進方式改進后的模型mAP為96.8%,相較于原YOLOv5的mAP提升了7.1百分點。證明該改進方法對于光線較弱、存在遮擋的清洗目標具有較好的檢測效果。
表1 消融實驗結(jié)果
使用本文自采的豬舍清洗目標測試集,將本文算法同F(xiàn)aster R-CNN、SSD主流的檢測網(wǎng)絡模型做對比驗證,得到的結(jié)果如表2所示。從表2可以看出,Faster R-CNN是兩階段網(wǎng)絡,檢測精度會比一階段網(wǎng)絡高,但是實時性較差,一階段SSD網(wǎng)絡的檢測精度較低,但是檢測速度方面高于Faster R-CNN。本文算法在檢測速度上也有所提高,檢測準確率和召回率上均有所提升,相較于雙階段目標檢測網(wǎng)絡Faster R-CNN平均準確度提高了2.7百分點,檢測速度提升了17 FPS;相較于一階段的SSD檢測網(wǎng)絡平均準確度提高了13.9百分點;相較于原始YOLOv5算法,檢測準確率和召回率分別提高7.3和7.6百分點,平均準確度提高7.1百分點。在本文數(shù)據(jù)集上本文算法取得實驗結(jié)果好于Faster R-CNN、SSD和原始YOLOv5算法。
為驗證對豬舍圖像的預處理是否能提高豬舍內(nèi)清洗目標檢測率,本文取存在光照較差、清洗目標存在柵欄和擋板之間部分遮擋情況的豬舍內(nèi)場景視頻進行檢測。檢測平均速度為30 FPS,弱光預處理前和預處理后檢測對比結(jié)果如圖8所示,對柵欄和擋板的檢測置信度平均提高了0.03%。
圖8 預處理前后清洗目標檢測結(jié)果Fig.8 Target test results before and after pretreatment
為驗證引入注意力機制改進YOLOv5算法和對改進后的YOLOv5算法邊框回歸損失函數(shù)對遮擋清洗目標檢測準確率的提升,將FasterR-CNN、SSD、YOLOv5和改進前后的算法中存在遮擋情況的數(shù)據(jù)集進行對比,檢測結(jié)果如圖9所示。
a,無遮擋;b,部分遮擋且背景復雜;c,部分遮擋且背景簡單。a, No occlusion; b, Partial occlusion and complex background; c, Partial occlusion and simple background.圖9 不同算法遮擋情況清洗目標檢測結(jié)果Fig.9 Clean target detection results for different algorithms
實驗(a):目標無遮擋情況下,Faster R-CNN和改進后的YOLOv5算法對清洗目標的檢測準確率高于YOLOv5和SSD算法。
實驗(b):清洗目標部分遮擋并且背景復雜的情況下,相比于改進后的YOLOv5算法檢測結(jié)果,SSD算法未能檢測出遮擋的柵欄和擋板,YOLOv5算法未能檢測出遮擋的柵欄,Faster R-CNN沒有檢測出遮擋面積較大的擋板。
實驗(c):清洗目標部分遮擋并且背景簡單的情況下,由于清洗目標與背景顏色較為相近,Faster R-CNN、SSD、YOLOv5對于遮擋的目標都存在漏檢的情況,改進后的YOLOv5算法通過加入CBAM模塊,提高了清洗目標的檢測精度,較好地解決了漏檢的情況。
當出現(xiàn)遮擋時,被遮擋的清洗目標部分特征消失,在遮擋發(fā)生的過程中,可對遮擋面積小于80%的清洗目標進行準確檢測。從圖9中可以看出本文方法對遮擋場景中柵欄和擋板可實現(xiàn)高精度的檢測,由此可證明本文算法提高了檢測的精度與魯棒性。
本文對豬舍中柵欄、擋板、喂料器3種清洗目標檢測問題進行探究,首先,通過在河南新大牧業(yè)股份有限公司采集豬舍場景數(shù)據(jù),構(gòu)建了較為全面的清洗目標數(shù)據(jù)集,同時對采集的數(shù)據(jù)集進行擴充,將數(shù)據(jù)分為訓練集、驗證集和測試集;然后,為提高在弱光條件下對豬舍清洗目標的檢測能力,采用基于雙邊濾波的Retinex算法對輸入圖像進行預處理,減小弱光條件對豬舍內(nèi)圖像的影響;最后,通過對YOLOv5算法的改進,在backbone中引入CBAM注意力機制來增強清洗目標在豬舍背景下的顯著度,提高清洗目標的檢測精度,采用DIoU-NMS算法篩選出候選框,提高清洗目標相互遮擋情況下豬舍清洗目標的檢測準確率。實驗結(jié)果表明,相較于YOLOv5算法,改進后的YOLOv5網(wǎng)絡模型在弱光條件下和目標部分遮擋的情況下有更好的適應性,清洗目標檢測的平均精度為96.8%,檢測平均速度為30 FPS,滿足豬舍進行清洗時對目標檢測的實時性要求,為后續(xù)將豬舍清洗目標檢測應用到畜牧自動清洗車中提供了良好的基礎(chǔ)。