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