劉 偉,王 芳,張蘇楠,郭 融
(太原理工大學 電氣與動力工程學院,山西太原 030024)
機器視覺監控作為人工智能的重要應用之一,在圈養豬養殖監測中具有非接觸、可持續的優點(高云等,2019)。圈養豬目標檢測是豬群生活狀態監測的基礎。高云等(2017)運用分水嶺算法分割豬群個體目標,并繪制軌跡圖線,分析得到豬只運動信息。但豬圈環境條件差、多只豬相互遮擋,傳統方法得到結果可靠性低。
卷積網絡通過卷積池化操作,能更本質的對目標進行描述。楊阿慶等(2017)設計了哺乳母豬全卷積網絡,實現哺乳母豬區域分割,對輕微光線變化和母豬與仔豬粘連等情況有較好的檢測效果。這類研究多是針對白天養殖情況,對夜間圈養豬的監測研究較少,不能滿足豬養殖管理的全天候實際需求(王冬雪等,2019)。
基于SSD(Liu等,2016)目標檢測算法,提出焦點損失和二次遷移學習的SSD建模方法,結合軟非極大抑制對夜間豬舍環境下的圈養豬目標進行實時檢測,并通過圈養豬位置信息對夜間豬群的分布情況進行分析,進而監測夜間豬群舒適度。
本文主要采用自建數據集作為整個試驗的數據。原始數據采集于山西某豬場某欄圈養豬2017年7月3日至2017年7月12日的全天視頻。
本文從日間和夜間圈養豬視頻中以隔幀抽取的方式分別獲得原始圖像數據,并剔除較為相似的樣本,以提高樣本集的質量。由此得到日間有效數據1214幀,夜間有效數據513幀,以labelImg手工標注總計7728個日間圈養豬目標和3229個夜間圈養豬目標。將日間和夜間的圈養豬樣本庫分別劃分成訓練集、驗證集和測試集3個子集,各子集內樣本均為隨機選取,互無交集,且數量比為3∶1∶1。
2.1 焦點損失SSD豬目標檢測網絡SSD的結構如圖1所示,以多層特征圖生成默認框,用于檢測豬目標。令特征圖大小為m×n,每個特征圖單元點設置k個默認框,所以單層特征圖生成默認框個數D如式(1):
經典SSD算法的置信損失函數Lconf通常采用交叉熵函數(Cross Entropy)形如式(2):
式中,p是模型對豬目標預測的置信度,y表示樣本類別。為簡化式(2),定義pt如式(3)所示:
則可以得到豬目標檢測的置信損失函數如式(4)所示:
由式(1)可計算SSD在訓練時會生成8732(38^2×4+19^2×6+10^2×6+5^2×6+3^2×4+1^2×4)個默認框。默認框與豬標簽匹配成功該框才被判定為正樣本,多數默認框會被判定為背景樣本,即負樣本。在訓練過程中正、負樣本極度不均衡(Lin等,2020)。為了平衡正負樣本數量差異對損失的影響,在式(4)的基礎上添加一個平衡因子αt,αt形式如式(5)所示:
加入平衡因子后的交叉熵形如式(6):
通過αt給定豬樣本和背景樣本的權重值,削弱正負樣本不均衡對損失值的影響。背景樣本中大多數是簡單樣本,這些簡單樣本降低了少數較難識別的樣本對損失值的影響,導致訓練的模型漏檢率偏高。在式(6)中引入(1-pt)γ參數降低簡單樣本對整體損失值貢獻的比重,得到置信損失函數如式(7)所示:
式中γ為可調參數,范圍為[0,+ ∞)。若豬目標被判定為背景pt值很小時,權重因子的值接近1,損失值與原損失函數形式基本相同,保持較大數值;若背景被判定為背景,則權重因子值接近0,不會主導損失變化。為更好的平衡樣本權重,本文選擇α為0.75,γ為2。
2.2 軟非極大抑制傳統的非極大抑制方法會將概率高的默認框周圍的其他同類目標默認框直接移除。夜間溫度較低且圈養豬性喜扎堆,存在目標遮擋問題,非極大抑制算法會導致部分遮擋目標漏檢(Bodla等,2017)。
為解決上述問題,引入軟非極大抑制算法使高概率默認框周圍的其他概率較高的豬目標默認框對應概率降低,兩框越接近,動態因子越小,保留高概率默認框周圍距離該框相對較遠的周圍框,以此來提高對圈養豬遮擋目標的檢測能力。軟化非極大抑制算法如式(8)所示:
式中,S表示置信概率,IOU為最高概率的豬目標默認框和該框周圍其他概率較高的豬目標默認框的交并比。以交并比為判別因素,兩者越靠近,交并比的值越大,概率降低越大,以此摒棄針對同一只豬目標產生的默認框;兩者越遠,交并比的值越小,概率降低越小,以此保留針對遮擋目標產生的默認框。
2.3 基于二次遷移學習的SSD訓練方法深度學習對訓練樣本量的要求較高,夜間樣本數據雖然在初期易獲取,但有效樣本較少。遷移學習利用少量樣本數據對已經由大量樣本訓練好的模型權值進行更新,實現權值共享,可以跳過模型初始階段所需大量計算損耗,降低訓練深度學習模型對數據量的要求(吳國琴,2017)。圈養豬日間樣本量相較深度學習所需樣本量少,但與夜間樣本量相比較充足。因此,研究采用二次遷移學習的方法訓練,即如下步驟:
Step1:由COCO大規模數據訓練好的SSD模型作為基礎SSD模型;
Step2:以數量相對較多的日間圈養豬數據微調基礎SSD模型參數,建立日間圈養豬檢測SSD模型;
Step3:用夜間圈養豬樣本數據進一步微調日間圈養豬檢測SSD模型,建立夜間圈養豬檢測SSD模型。
最終得到的訓練模型,充分利用日間和夜間樣本數據,解決夜間樣本量少的問題,同時減少,模型初始訓練所需時間。
不同生長階段的圈養豬對豬舍溫度的要求不同(謝濤等,2019),而且對溫度調節能力較差。當豬舍溫度低,容易導致豬免疫力下降而患感冒等疾病,圈養豬分布聚攏。當豬舍溫度高,豬的進食量減少,分布較分散。
通過對夜間圈養豬目標檢測獲取目標框,求出目標框中心點,根據兩中心點間距離判定兩個豬目標是否相互靠攏,獲取圈養豬聚攏堆數C和獨立休息圈養豬個數K;通過如下步驟計算圖像中C和K的值:
Step1:將所有夜間圈養豬目標框中心點POINTi放入SET母集,初始化C和K的值為0,初始化UP子集和DOWN子集為空集;
Step2:判斷SET母集是否為空,若為空,輸出圈養豬聚攏堆數C和獨立圈養豬個數K,本張圖像判斷結束;否則,進行下一步;
Step3:從SET母集中取出一個中心點POINTi,即 SET=SET-{POINTi};
Setp4:將POINTi與SET母集其余中心點依次判斷是否靠攏;若無靠攏的中心點,則為獨立豬目標,K加1,返回Setp2;若有靠攏中心點,將所有靠攏中心點從母集中依次取出放入UP子集,SET=SET-UP;
Step5:依次判斷并取出SET母集中與UP子集中心點靠攏的中心點ADJACENTj放入DOWN子集,SET=SET-DOWN;
Step6:將DOWN子集賦值給UP子集,清空DOWN子集;
Step7:判斷UP子集是否為空;若UP子集為空(即母集中再無中心點與豬聚攏堆內中心點靠攏,堆中豬目標中心點已全部從母集中取出),C加1,重復Step2-Step7;否則重復Step5-Step7;
由此針對本文試驗得到如下豬群分布情況判別規則:C為1或2且K不大于1,豬群分布情況為過度聚攏;C不為0且K大于1,豬群為分布適宜;C為0,豬群為過度分散。
4.1 日間豬目標檢測試驗本試驗工作站的硬件配置為CPU:AMD Ryzen 5-2600,GPU:NVIDIA RTX2060,豬目標檢測模型的訓練均在tensorflow上展開。基于上述環境,訓練時,每批次樣本為16張,學習率初始為4×10-3,之后每20000步衰減為上一次學習率的0.95倍,共設置200000步。
圖2所示為基于一次遷移和焦點損失的軟化非極大抑制SSD日間圈養豬模型對日間豬視頻的檢測結果。可以看出,在地上有尿漬和水漬時,模型對輕微遮擋目標也有較好的檢測結果。
改進后的SSD對日間圈養豬的檢測召回率達到94.39%,mAP達到94.89%,每幀檢測時間為0.104 s。
4.2 SSD模型夜間豬目標檢測試驗以日間圈養豬模型再次使用遷移學習訓練得到SSD夜間圈養豬檢測模型。為了驗證所提方法有效性進行對比試驗,結果如表1所示。由表1可知,與經典SSD相比,所提算法在召回率和平均精確率上都有明顯提升,能更好的對夜間環境下豬目標進行檢測,為豬群分布情況的判斷和舒適度監測提供判斷依據。

表1 不同策略SSD模型夜間檢測結果對比
4.3 夜間豬群舒適度判斷圖3給出了夜間豬群分布情況圖,表2為夜間豬群舒適度判斷表。
圖3(a1)和(a2)圈中多只豬聚攏,最多只有一只豬未聚攏,豬舍偏冷。圖3(b1)和(b2)圈中有豬只聚攏,且至少兩只豬未聚攏,豬群分布適宜,豬舍溫度適宜。圖3(c1)和(c2)圈中所有豬分散,無聚攏豬只,此時豬舍偏熱。經試驗驗證,所提方法可以對夜間圈養豬進行準確的目標檢測,并通過豬群分布情況判斷當前豬舍圈養豬舒適度,與現實豬舍溫度情況相符合。
為了實時檢測夜間圈養豬,并對夜間豬群舒適度進行監測,提出一種基于改進SSD算法檢測夜間圈養豬目標,再由目標框位置分析豬群分布情況,由此判定當前豬群舒適度。試驗結果表明,所提方法能實時準確監測豬群舒適度,有助于進一步實現養殖業自動化。

表2 夜間豬群舒適度判斷