DBFace,被《機器之心》扒出來的輕量級高精度人臉檢測模型
上周末,一篇題為《模型僅有7M:輕量級高精度人臉識別方法DBFace》的文章在國內(nèi)頭部的專業(yè)人工智能媒體《機器之心》上首發(fā)后,即被新浪科技、CSDN、機器學(xué)習(xí)研究會等多家科技/垂直類(自)媒體進行了轉(zhuǎn)載。
而對DBFace這個名字,業(yè)內(nèi)人士更是很容易就能聯(lián)想到人工智能頭部企業(yè)深蘭科技(DeepBlue)。果不其然,這個模型的創(chuàng)建者,這是來自深蘭科技下屬深蘭科學(xué)院算法研究所的兩位“高手”——劉安奇、杜金偉。
據(jù)了解,該模型起初只是被放在了Github上,沒想到被《機器之心》扒了出來,而且短短3天時間,這個開源的模型就新增了近300次使用。
今天,就跟隨這兩位算法大咖,一起來看看DBFace是如何誕生的。
1. 網(wǎng)絡(luò)選擇
DBFace的初衷是設(shè)計一款輕量級的人臉檢測器,能夠在邊緣計算上有效的使用,加上因為疫情緣故,對于hard類(例如戴上口罩)人臉檢測顯得尤為重要。因為CenterNet具有后處理的簡潔高效性,以及對小目標(biāo)友好等特點。綜合性能和速度的考慮下,我們選擇了CenterNet結(jié)構(gòu)做檢測任務(wù), 采用MoblienetV3做backbone。相較于MobilenetV2, MobilenetV3在其基礎(chǔ)上新增了 SE 、Hard-Swish Activation等模塊,兼顧Infernce速度的同時并提升網(wǎng)絡(luò)性能 。結(jié)構(gòu)如下:
對于任務(wù)頭的設(shè)計,我們引入了SSH的DetectModule和ContextModule,經(jīng)實驗驗證該模塊能有效的提升DBFace算法的檢出性能
對于上采樣設(shè)計,我們采用Upsample+Conv+Act的方式,避免使用反卷積造成可能的鋸齒問題
2.Loss定義
整個網(wǎng)絡(luò)由三部分Loss組成:熱力圖(HeatMap)損失, 位置坐標(biāo)偏移量(BoundingBox)損失,關(guān)鍵點(Landmark)損失
2.1 HeatMap 損失:Focal Loss
Focal loss,該損失函數(shù)是在標(biāo)準(zhǔn)交叉熵?fù)p失基礎(chǔ)上修改得到的?梢酝ㄟ^減少易分類樣本的權(quán)重,使得模型在訓(xùn)練時更專注于難分類的樣本,從而能有效的緩解類別不均衡帶來的網(wǎng)絡(luò)注意力偏差問題
這里γ取2,y=1時,α為正樣本的權(quán)重,參照CenterNet,定義為目標(biāo)周圍半徑處3*3范圍為1,其他為0,目的是加強正樣本的訓(xùn)練權(quán)重。y=0時,α為(1 - gt)4,此時GT是一個基于目標(biāo)計算的橢圓高斯圖,參照TTFNet(Training-Time-Friendly Network for Real-Time Object Detection)
2.2 位置坐標(biāo)偏移量損失: GIoU Loss
目前大部分目標(biāo)檢測中主流的邊界框優(yōu)化采用的都是BBox的回歸損失(MSE loss, L1-smooth loss等),該種方式通過距離計算損失值,從而忽略了檢測框本身最顯著的性質(zhì)IoU。如下圖所示,在L1及L2范數(shù)取到相同的值時,實際上檢測效果卻是差異巨大的,直接表現(xiàn)就是預(yù)測和真實檢測框的IoU值變化較大,這說明L1和L2范數(shù)不能很好的反映檢測效果。
通過IOU作為Loss來優(yōu)化任務(wù),其缺點在于:
a.預(yù)測框bbox和ground truth bbox如果沒有重疊,IOU就始終為0并且無法優(yōu)化。其損失函數(shù)失去了可導(dǎo)的性質(zhì)。
b.IOU無法分辨不同方式的對齊,例如方向不一致等情況
GIOU則能很好的解決上面兩個問題
假設(shè)現(xiàn)在有兩個任意的bbox A和B,我們要找到一個最小的封閉形狀C,讓C可以將A和B包圍在里面,然后我們計算C中沒有覆蓋A和B的面積占C總面積的比例,然后用A和B的IOU值減去這個比值。
2.3人臉關(guān)鍵點Landmark回歸:WingLoss
由于SmoothL1 Loss對于較大誤差時比較敏感,但是對中小誤差則比較不敏感,而導(dǎo)致關(guān)鍵點無法得到精細結(jié)果,因此考慮加重對中小誤差的關(guān)注,對比試驗后,選擇WingLoss(Wing Loss for Robust Facial Landmark Localisation with Convolutional Neural Networks)作為landmark訓(xùn)練loss
WingLoss
這里我們采用了w=10,e=2,同時為了避免landmark相對人臉中心和寬高帶來的累積誤差,因此我們對landmark是相對于人臉中心點的方式進行訓(xùn)練
3.?dāng)?shù)據(jù)增廣
random filp、random scaling、color jittering、randomly crop square patch、image compress
檢測結(jié)果及精度驗證
4.實際運行
項目地址
下載代碼后main.py提供基于圖像和攝像頭的案例,我們稍加修改后:
把圖像放到datas目錄下,執(zhí)行后,結(jié)果在detect_result中,我們看到如我們預(yù)期的結(jié)果:
下圖,對于戴口罩人臉的檢測(訓(xùn)練時并未使用戴口罩?jǐn)?shù)據(jù),因此將會加入戴口罩?jǐn)?shù)據(jù)進行訓(xùn)練以優(yōu)化模型的效果)

請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字