本文並不是詳細介紹yolo工作原理以及改進發展的文章,只用做作者本人回想與提綱。
1.yolo是什么
輸入一張圖片,輸出圖片中檢測到的目標和位置(目標的邊框)
yolo名字含義:you only look once
對於yolo這個神經網絡:
(Assume s*s柵格, n類可能對象, anchor box數量為B)
Input 448*448*3
Output s*s*(5 * B +n)的tensor
2.CNN目標檢測之yolo
在目標檢測領域,DPM方法采用滑動窗口檢測法將原圖片切出一小塊一小塊,先選區再卷積提取特征,先整張圖卷積提取特征再選區,然后投入神經網絡進行圖像分類操作處理。RCNN方法采用region proposal來生成整張圖像中可能包含待檢測對象的可能的bounding boxes然后用分類器評估這些boxes,再post processing來改善bounding box並消除重復的目標,最后基於整個場景中其他物體重新對boxes打分(這些環節都是分開訓練)。其實都是把目標檢測問題轉化成了一個分類問題。2015年yolo論文公開,提出了一種新思路,將目標檢測問題轉化成了一個regression problem。Yolo 從輸入的圖像,僅僅經過一個神經網絡直接得到bounding box和每個bounding box所屬類別的概率。正因為整個過程下來只有一個神經網絡,所以它可以進行端到端的優化。
Yolo優缺點:速度極快;在背景上預測出不存在物體的概率要低;能夠學習抽象的特征,可用於藝術畫像等。但定位偶爾出現錯誤。
3.Unified Detection
先分s*s個柵格;
每一個柵格預測B個bounding boxes以及每個bboxes的confidence score。
Confidence score =P(Object) * IOUtruth_pred
若bbox包含物體,則P(Object)=1,否則為0
每一個柵格預測n個條件類別概率P(Classi|Object)——在一個柵格包含一個Object的前提下它屬於某個類的概率。為每一個柵格預測一組類概率。
在測試的非極大值抑制階段,對於每個柵格:將每個bbox的置信度和類概率相乘,
class-specific confidence scores=Confidence * P(Classi|Object) = P(classi) * IOU,
結果既包含了類別信息又包含了對bbox值的准確度。然后設置一個閾值,把低分的濾掉,剩下的投給非極大值抑制,然后得到最終標定框。
4.模型訓練
首先預訓練一個分類網絡。在 ImageNet 1000-class competition dataset上預訓練一個分類網絡,這個網絡是Figure3中的前20個卷機網絡+average-pooling layer(平均池化層)+ fully connected layer(全連接層) (此時網絡輸入是224*224)。
然后訓練我們的檢測網絡。轉換模型去執行檢測任務,《Object detection networks on convolutional feature maps》提到說在預訓練網絡中增加卷積和全鏈接層可以改善性能。在作者的例子基礎上添加4個卷積層和2個全鏈接層,隨機初始化權重。檢測要求細粒度的視覺信息,所以把網絡輸入把224*224變成448*448。