傳統(tǒng)的目標(biāo)檢測算法適用的場景有限临燃,而且維護成本很大。深度學(xué)習(xí)方法應(yīng)用于目標(biāo)檢測蒜田,不僅算法適應(yīng)性好稿械,還可以進行遷移學(xué)習(xí),降低成本冲粤。
1. 基礎(chǔ)概念
深度學(xué)習(xí)目標(biāo)檢測算法中美莫,基于錨框(Anchor)的方法主要分為一階段方法和兩階段方法。
兩階段方法先對感興趣的區(qū)域進行選擇梯捕,然后進一步對候選框內(nèi)做分類和回歸厢呵,最終輸出選擇的框以及對應(yīng)的分類。兩階段的模型有R-CNN系列傀顾,比如R-CNN襟铭,F(xiàn)ast-RCNN,F(xiàn)aster-RCNN等短曾。兩階段模型的優(yōu)點是精度高寒砖,但是速度及較慢。
一階段方法直接對anchor進行回歸和分類嫉拐,得到最終目標(biāo)框和類別哩都,算法有YOLOv2,v3婉徘,SSD漠嵌,RetinaNet等。一階段模型的推理速度較快盖呼,但是相對的精度會下降一些儒鹿。
此外還有一些anchor-free的方法,包括基于關(guān)鍵點的檢測算法以及基于中心檢測算法等塌计。
下面是一些基礎(chǔ)概念和縮寫:
BBox:Bounding Box 邊界框
Anchor:錨框
RoI: Region of Interest 特定的感興趣區(qū)域
Region Proposal: 候選區(qū)域
RPN: Region proposal network 提取候選區(qū)域的網(wǎng)絡(luò)
IoU: Intersaction over Union (Area of Overlap/ Area of Union) 交并比,預(yù)測框的質(zhì)量
mAP:mean average precision
NMS:non-maximum suppression 非極大值抑制
2. YOLO
YOLO系列的模型在保有一定精度的基礎(chǔ)上擁有很快的推理速度挺身,在下面圖中YOLOv3的推理速度遠(yuǎn)超其他模型,因此在實時監(jiān)測領(lǐng)域中有很好的應(yīng)用锌仅。
2.1 YOLOv1
YOLO的名字來源于you only look once章钾,從名字上就道出了YOLO的精髓。
YOLOv1將圖像劃分為S*S個網(wǎng)絡(luò)热芹,物體真實框的中心落在哪個網(wǎng)格上贱傀,哪個網(wǎng)格對應(yīng)的錨框就負(fù)責(zé)檢測物體。
每個網(wǎng)格會預(yù)測一個邊界框以及對應(yīng)的置信度伊脓,這里的置信度反映的是模型認(rèn)為這個框里包含著物體的把握以及它預(yù)測到這個物體的精確程度府寒。所以置信度就等于魁衙。如果物體不存在,那么置信度應(yīng)該等于零株搔。
每個邊界框會預(yù)測5個值剖淀。(x,y)坐標(biāo)表示框相對于網(wǎng)格單元邊界的中心纤房。 w,y是相對于整個圖像預(yù)測寬度和高度纵隔。 最后,置信度預(yù)測表示預(yù)測框與任何真實框之間的IOU炮姨。
模型的檢測網(wǎng)絡(luò)如下圖捌刮,包括24個卷積層和2個全連接層,最終輸出的應(yīng)該是一個舒岸,在圖里是绅作。
在全連接層輸出預(yù)測中,邊界框的寬度和高度進行了歸一化蛾派,落在0和1之間俄认。邊界框的x和y坐標(biāo)參數(shù)化為特定網(wǎng)格單元位置的偏移量,因此它們也被限制在0和1之間 碍脏。
最終層使用線性激活函數(shù)梭依,所有其他層均使用了leaky ReLU。
YOLOv1對于輸出的平方和誤差進行了優(yōu)化典尾,原因是平方和比較好優(yōu)化役拴。
在訓(xùn)練過程中,網(wǎng)格上的每個格子只會輸出一個預(yù)測框钾埂,在這里選取與真實框IoU最大的那個框河闰,一個預(yù)測框只會預(yù)測一個類別。
因此這也限制了YOLO能預(yù)測的物體的數(shù)量褥紫。對于尺寸小數(shù)量多的物體姜性,預(yù)測效果也不是很好。
2.2 YOLOv2,v3
YOLOv2在v1的基礎(chǔ)上進行了優(yōu)化髓考,骨干網(wǎng)絡(luò)使用了DarkNet19部念,并且將輸入圖片給尺寸從224增大到448,并且將網(wǎng)絡(luò)結(jié)構(gòu)設(shè)為全卷積網(wǎng)絡(luò)結(jié)構(gòu)加上Batch Norm氨菇,使用了Kmeans聚類方法來計算anchor儡炼,引入了多尺度訓(xùn)練,使網(wǎng)絡(luò)在訓(xùn)練過程中學(xué)習(xí)不同尺度的圖像查蓉。不過待改進的地方有在小目標(biāo)上召回率不高乌询,靠近的群體目標(biāo)檢測效果不好,檢測精度還有優(yōu)化空間豌研。
YOLOv3使用了更加深的骨干網(wǎng)絡(luò)DarkNet53妹田,同時加入了多尺度預(yù)測唬党,在COCO數(shù)據(jù)集上聚類; 9中不同尺度的anchor鬼佣,在分類上使用sigmoid激活函數(shù)驶拱,支持了目標(biāo)的多分類。YOLOv3的優(yōu)點是推理速度快沮趣,性價比高屯烦,通用性強;缺點是召回率較低房铭,定位精度較差,對于靠近或者遮擋的群體温眉、小物體的檢測能力相對較弱缸匪。
YOLOv3在v1的基礎(chǔ)上做了很多改動。
邊界框預(yù)測
YOLOv3使用聚類預(yù)測到的邊界框作為錨框类溢。網(wǎng)絡(luò)為邊界框預(yù)測4個坐標(biāo)值凌蔬,如果單元格從圖像的左上角偏移了,并且先驗邊界框的寬度和高度為闯冷,則預(yù)測如下圖:
將上圖公式里的反一下砂心,就能通過真實框的坐標(biāo)得到監(jiān)督信息。
YOLOv3給每個邊界框用邏輯回歸預(yù)測一個objectness score蛇耀,如果某個邊界框和真實框重合度比其他都高辩诞,那么它的objectness score應(yīng)該是1。而其他框雖然也與真實框有重疊纺涤,會被忽略掉译暂。
類別預(yù)測
使用的是sigmoid函數(shù),沒有用softmax因為沒必要撩炊。
不同尺度的預(yù)測
YOLOv3使用k-means聚類來確定bounding box priors外永,選擇了9個clusters和3個scales,然后在整個scales上均勻分割clusters拧咳。在COCO數(shù)據(jù)集上伯顶,9個cluster分別為(10×13),(16×30)骆膝,(33×23)祭衩,(30×61),(62×45)谭网,(59×119)汪厨,(116×90) ,(156×198)愉择,(373×326)劫乱。
特征提取
YOLOv3使用了Darknet-53织中,特點是加入了殘差,比之前的網(wǎng)絡(luò)更深了(有53層卷積層所以叫Darknet-53)衷戈。
借一張圖看一下YOLOv3的整個流程:
輸入圖像狭吼,通過DarkNet53進行特征提取,網(wǎng)絡(luò)會經(jīng)過5個階段殖妇,每個階段經(jīng)行一個倍數(shù)為2的下采樣刁笙,也就是說5次的下采樣是2^5=32倍的下采樣。這個32倍的下采樣通過特征提取后得到一個輸出網(wǎng)格谦趣,同時也會經(jīng)過一個上采樣之后疲吸,與16倍的下采樣之后的特征圖進行堆疊,然后進一步進行特征提取得到第二個網(wǎng)格前鹅。32倍與16倍下采樣堆疊得到的特征圖摘悴,再一次通過上采樣,與8倍下采樣的結(jié)果進行堆疊舰绘,得到了第三個網(wǎng)格蹂喻。
每個輸出分支上對應(yīng)著三個尺寸的先驗框(總共33=9種尺度)。經(jīng)過32倍下采樣的網(wǎng)格捂寿,每一個網(wǎng)格對應(yīng)著輸入圖像上3232的區(qū)域口四,適合檢測尺寸較大的目標(biāo),而8倍下采樣的網(wǎng)格適合檢測尺寸小的目標(biāo)秦陋。
輸出特征的高度H和寬度W蔓彩,相當(dāng)于將圖像劃分為H*W個網(wǎng)格,而不是直接在圖像上畫網(wǎng)格踱侣。也就是說32倍下采樣之后得到的粪小,相當(dāng)于在輸入圖像上劃一個的網(wǎng)格,每一個網(wǎng)格對應(yīng)著輸出特征圖上的一個點抡句。
特征圖的C通道上表示預(yù)測框的信息探膊,包括坐標(biāo)信息,目標(biāo)置信度待榔,分類逞壁。
C=B*(1+4+class_num),B為特征圖上分配的錨框個數(shù)锐锣。
損失函數(shù)有三個腌闯,分類損失,定位損失和objectness損失雕憔。分類使用sigmoid激活函數(shù)姿骏,loss是sigmoid cross entropy。定位損失在x,y上使用sigmoid函數(shù)和sigmoid cross entropy損失斤彼,在w,h上使用L1損失分瘦。objectness損失用的是sigmoid激活函數(shù)和sigmoid cross entropy損失蘸泻。
對于與真實框重疊的框,三種損失都要計算
對于沒有真實框重疊的框嘲玫,只計算objectness(0)悦施;對于與真實框重疊但不是最匹配的框,忽略它們去团。
參考資料:
[1]YOLOv1 paper:You Only Look Once: Unified, Real-Time Object Detection
[2]Yolo三部曲解讀——Yolov1
[3]YOLOv3論文解析: An Incremental Improvement
[4]yolo v3 的keras 版本(轉(zhuǎn)載)
[5]YOLOv3 paper:YOLOv3: An Incremental Improvement