茍先太,黃 巍,劉琪芬
(西南交通大學 電氣工程學院,成都 611756)
隨著我國畜牧業(yè)的發(fā)展,作為畜牧業(yè)的基本構成成員,牛的數量也在急劇增加.急劇增加的數量使牛的溯源、認責、投保理賠等問題變得更為嚴峻.牲畜身份認證是解決該一系列問題的主要方法.通過牲畜身份認證,相關部門可以精確地追蹤市場上牛肉制品的來源,這對于保證我國牛肉制品的安全性是至關重要的.但逐年增加的數量也為牲畜牛的身份認證提出了挑戰(zhàn).如何找到一種成本低、穩(wěn)定性高、大容量的身份認證方式是目前我國牲畜牛管理所面臨的主要困難.
傳統(tǒng)的身份認證方法包括耳標、激光打標、芯片植入等,但因為其穩(wěn)定性不高、易損毀、成本高,目前并沒有得到廣泛的使用.目前常使用的是單角度特征編碼的方法,該方法具有穩(wěn)定性高、成本低等優(yōu)點.但隨著牲畜牛的數量逐漸增加,單角度的方法因為不能采集到牛臉的全部特征,所以在容量上無法滿足現在的需求.為了提升容量,目前常用的解決方案為多角度特征編碼,通過采集牛臉各個角度的特征進行編碼.為了保證牛臉的各個角度的特征均得到采集,現在迫切需要得到采集圖片中牛臉的姿態(tài)角度(即α,β,γ三個角度,分別表征牛臉沿著x軸、y軸以及z軸的旋轉角度).
目前國內牛臉姿態(tài)估計研究尚屬空白,而為了保證多角度特征編碼的順利實施,需要得到各個角度的牛臉特征,所以獲得精度高的牛臉姿態(tài)角度非常重要.本文對牛臉姿態(tài)估計進行了相關研究,提出一種cascade 結構,首先使用SSD[1]模型將輸入圖中的所有牛臉檢測出來,按照預測框截圖之后,使用MobileNet[2]對截圖中的牛臉進行姿態(tài)角度估計.從實驗效果來看,檢測精度以及角度估計平均誤差,均在一個較好的水平.
cascade 結構流程如圖1所示.
圖1 cascade 結構主流程圖
傳統(tǒng)方法對牲畜臉部檢測通?;贚BP[3]、SIFT[4]、HOG[5,6]等特征提取算法.在文獻[7]中,采用集成學習方法Adaboost[8]對牛臉進行檢測并取得了較好的效果,但Adaboost 最終效果依賴于弱分類器的選擇,同時算法對離群點較為敏感.
本文擬采用深度學習的方式對牛臉進行檢測.在目標檢測領域中,通常分為two-stage 和one-stage 兩種方案,two-stage 方案主要包括RCNN[9],Fast-RCNN[10],Faster-RCNN[11]等方法,其主要特點是先進行區(qū)域建議(regional proposal,RP),再進行邊界框回歸(bounding box regression);one-stage 方案主要包括SSD(Single Shot MultiBox Detector)、YOLO(You Only Look Once)[12]等,其特點是沒有進行區(qū)域建議,而是直接在特征圖上劃分區(qū)域與邊界框回歸.所以速度相比于two-stage 方案更快,同時可以保持較高的精度.相比于YOLO,SSD 因為采用多尺度特征圖預測,在小物體檢測、精度上都略優(yōu)于YOLO.本文采用SSD 作為牛臉檢測模型,同時對模型進行優(yōu)化.
1.1.1 SSD 網絡結構
SSD 網絡結構如圖2所示,模型基于VGG-16,將最后兩層全連接層變?yōu)榫矸e層,之后添加FCN 網絡進行特征提取.分別抽取Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2 層的feature map 進行多尺度特征提取.
圖2 SSD 網絡結構
因為不同大小的feature map 對應的感受野不同,對應原圖中物體的大小也不同,所以SSD 對不同大小的物體都有較高準確率.
1.1.2 損失函數
SSD 的損失函數由兩部分組成:分類置信度Lconf和坐標誤差Lloc.
式中,N是默認框(default box)的個數.如果N=0,將loss 置為0.
其中分類置信度的損失函數使用的是softmax loss.
坐標誤差損失函數使用的是Smooth L1 loss:
式中,g代表ground truth,l代表預測框(predicted box),cx、cy、w、h分別對應默認框的中心、寬和高.由上式可以看出,SSD 不是直接回歸的邊框坐標,而是從默認框到ground truth 的偏移以及變換.
1.1.3 困難負樣本挖掘
因為SSD 得到負樣本的數量遠遠多于正樣本的數量,如果隨機抽取樣本進行訓練的話,網絡會過于重視負樣本,這樣會使loss 不穩(wěn)定.所以需要將正樣本和負樣本的數量進行平衡.同時,過于簡單的負樣本對于整個模型的訓練幾乎沒有幫助,所以需要選取一些易錯的、分類較為困難的負樣本進行訓練.常用的方法就是困難負樣本挖掘,將正負樣本的比例控制在1:3 左右,這樣模型會取得更好的泛化效果.
為了保證牲畜臉部各個角度的特征都可以得到采集,對于每一個檢測出的牛臉,我們都需要截圖并對截圖進行過濾,保證特征采集的圖片質量.同時,較好的圖片質量也能有效降低臉部姿態(tài)回歸的誤差.通常臉部姿態(tài)是使用空間直角坐標系的三個參數進行描述(即α,β,γ三個角度,分別表征牛臉沿著x軸、y軸以及z軸的旋轉角度).
考慮到cascade 模型速度問題,本文使用輕量級結構MobileNet 作為角度預測模型,MobileNet 使用深度可分離卷積的方法大量降低了模型參數與計算量,同時依然可以保持一個較高的精度.
圖3 MobileNet 網絡模型
MobileNet 的網絡結構如圖3所示,使用了大量的1×1 卷積與深度可分離卷積,減少了大量參數.
1.2.1 深度可分離卷積
深度可分離卷積和傳統(tǒng)的卷積區(qū)別在于傳統(tǒng)的卷積核會對每一個通道進行卷積,而深度可分離卷積僅僅是針對于某一個通道,之后使用1×1 的卷積進行特征融合.如圖4所示.
圖4 深度可分離卷積
其中,DK是 深度可分離卷積核的尺寸,M為輸入特征圖的通道數,N為輸出特征圖的通道數.設輸入特征圖的大小為DF×DF,可分離卷積的計算量為:
圖5 1×1 卷積
相對的,傳統(tǒng)卷積的計算量為:
所以深度可分離卷積相比于傳統(tǒng)卷積的計算量為:
由上式可以看出,深度可分離卷積可以大大減少模型參數與計算量.
在一些對運行速度或者計算機內存有極端要求的場合,還可以通過調整模型的寬度因子與分辨率因子達到減少模型參數、降低計算量的目的.
寬度因子α屬于(0,1],附加于網絡的通道數,意義是新網絡中每一個模塊使用的卷積核數相對于標準MobileNet 的比例;分辨率因子同樣屬于(0,1],附加于每一個模塊的輸入,意義是新模型的輸入大小相對于標準的MobileNet 的比例.結合寬度因子α和分辨率因子β,MobileNet 的計算量為:
由式(7)可知,通過調整寬度因子和分辨率因子可以進一步減少MobileNet 的參數量與計算量.
1.2.2 損失函數
因為模型做的是回歸任務,所以使用回歸任務常用的Huber loss,公式如下.
Huber loss 相較于傳統(tǒng)的L2 loss 有更強的魯棒性,當殘差(residual)很小的時候,loss 函數為L2 范數,殘差大的時候,為L1 范數的線性函數,所以Huber loss 對于離群點不敏感,不易發(fā)生梯度爆炸的問題.同時,超參δ 可以對Huber loss 的函數曲線進行調整,使之更適合模型的訓練.
實驗以牛臉為實驗對象,使用ImageNet[13]中標簽為cattle 的圖片、PASCAL VOC 2012 數據集上標簽為cow 的圖片以及google 中收集的牛臉圖片,選擇大約5000 張圖片使用二維標注軟件labelImg 進行標注.訓練集和測試集按照9:1 的比例進行劃分,該訓練集和測試集用于SSD 模型的訓練與測試.5000 張標注完成的圖片,按照標注得到的ground truth 進行截圖,得到的截圖使用三維標注軟件blender 獲得牛臉的三個姿態(tài)角度(α,β,γ).得到的圖片隨機打亂之后也按照9:1 的比例進行劃分,分別用于MobileNet 的訓練和測試.
本文實驗的開發(fā)平臺為Ubuntu 18,基于tensorflow[14]框架對模型進行構建、訓練與測試.tensorflow 是目前使用做多、最廣的深度學習架構.實驗具體平臺配置如表1所示.
表1 實驗平臺配置
在具體參數設置上,SSD 模型的優(yōu)化器采用RMSProp[15],和其它優(yōu)化器相比,RMSProp 可以對學習率進行自適應衰減,故只需要對模型的初始學習率進行設置即可,設置為0.001.在數據增廣方面,SSD 采用了隨機裁剪、隨機padding 以及色彩扭曲等方式.考慮到模型的最終性能,訓練過程中嘗試使用Focal loss 與更大的輸入尺寸對模型進行訓練.最終模型的輸入尺寸采用的是300×300,Focal loss 對模型效果提升不大,所以沒有采用Focal loss.
和SSD 相似,MobileNet 也采用RMSprop 作為優(yōu)化器,考慮到cascade 模型的速度,適當降低MobileNet 的寬度因子α以及分辨率因子β,測試最終的模型效果.最終模型采用經典MobileNet(即α=1 且β=1).模型輸入大小設置為224×224,因為MobileNet做的是回歸問題,所以模型最后一層由softmax 改為全連接層,最終輸出為三個角度,分別對應預測的α、β以及γ值.損失函數也換成做回歸任務的Huber loss.
本文使用ImageNet 中標簽為“cattle”的圖片按照9:1 的比例劃分為訓練集與測試集,對SSD 模型進行訓練與測試.為更好地說明模型效果,本文的評價指標為精確率(Precision,P),召回率(Recall,R)以及F 值(F-score,F)進行,計算公式如下所示.
為了加強實驗對比性,本文通過設置是否使用Focal loss,分類閾值等參數,訓練多個模型,使用同一個測試集進行測試,實驗結果和檢測效果分別如表2、圖6所示.
表2 不同SSD 模型檢測結果
圖6 SSD 檢測效果圖
從實驗結果來看,Focal loss 對模型整體效果沒有幫助,甚至略低于沒有使用Focal loss 的模型,原因可能是實驗的任務僅僅是牛臉識別,相對于其它的多分類任務更加簡單,Focal loss 不能起到太大的作用.調整閾值可以對準確率以及召回率進行調整.
MobileNet 的訓練數據為SSD 訓練數據按照groundtruth 進行切分,切下來的牛臉使用blender 軟件進行標注,獲得牛臉的x,y,z三個角度.為增加實驗的對比度,本文使用不同的寬度因子α以及分辨率因子β.可以評價指標為預測得到的x,y,z三個角度與其對應ground truth 的平均誤差.實驗結果如下:
表3 不同MobileNet 模型回歸誤差
由實驗結果可知,寬度因子α為1.0 與分辨率因子為1.0 時(即為標準的MobileNet),誤差最小.減小寬度因子和分辨率因子會不同程度上影響模型的效果,角度平均誤差變大.當寬度因子α以及分辨率因子β為0.5 時,誤差最大.分析原因雖然寬度因子和分辨率因子減少的模型參數,降低了計算量.但參數的減少會影響模型的特征表征能力,會使模型精度降低.目前模型的主要誤差來自于標注誤差,因為訓練樣本是人為標注的,會存在7 度左右的誤差.考慮到模型精度和速度的變化關系,本文選用標準的MobileNet 作為角度回歸模型.
本文基于SSD 與MobileNet 提出一種cascade 結構,并在原來的標準網絡上進行微調,通過不同微調模型間的對比,選擇最優(yōu)的模型構建cascade 結構,完成了牛臉檢測與牛臉姿態(tài)估計兩個任務,效果顯著.其中SSD 檢測模型的準確率和召回率均可以控制在一個較好的水平.使用MobileNet 進行角度回歸,角度平均誤差可以達到9 度左右,完全達到使用要求.
目前,cascade 模型可以很好地完成臉部檢測與角度回歸,同時考慮到cascade 模型速度,檢測模型與回歸模型均選擇的是較快的one-stage 模型(SSD)以及輕量級模型(MobileNet),但因為cascade 結構的限制,在模型速度上還有進一步提升的空間.接下來將考慮對模型進行改進,使用一個模型而不是cascade 結構完成牛臉檢測以及姿態(tài)角度回歸.