經典的目標檢測網絡RCNN系列分為兩步,目標proposal和目標分類。而Faster-RCNN中把目標proposal和目標分類作為壹個網絡的兩個分支分別輸出,大大縮短了計算時間。而Yolo系列則把這兩個分支都省了,只用壹個網絡同時輸出目標的位置和分類。
輸入:壹張圖片
輸出:把每張圖片分成SxS個方格,對每個方格,輸出壹個B*5+C維的數組。其中B是該方格預測方框的數目,包含(x,y,w,h,s),s表示方框的置信度,C表示需要預測的類別數。
在YOLO中,S=7, B=2,PASCAL VOC有20類,所以C=20,B*5+C=30。
YOLO網絡結構主要分為兩個部分,第壹部分是特征提取網絡,主要是為了提取物體的通用特征,壹般在ImageNet上進行預訓練;第二部分是後處理網絡,目的是回歸出待檢測物體的坐標和類別。
第壹個版本的YOLO的特征提取網絡有24個卷積層和2個全連接層。網絡結構如下圖。
可以看出,這個網絡中主要采用了1x1卷積後跟著3x3卷積的方式。
特征提取網絡采用了前20個卷積層,加壹個avg-pooling層和壹個全連接層,對ImageNet2012進行分類,top-5正確率為88%,輸入分辨率為224x224。
檢測時,將輸入分辨率改為448x448,因為網絡結構是全卷積的,所以輸入分辨率可以改變,整個網絡輸出為7x7x30維的tensor。
接下來要重點將壹下這個損失函數。
用網絡直接回歸物體的坐標是很難的,這裏對要回歸的物體的坐標進行了壹些轉化。物體方框的長w和寬h分別除以圖片的長和寬;x和y坐標分別表示對應方格坐標的偏移,分別除以方格的長和寬;它們都在0到1之間。
損失函數分為多個部分:
其中,其中i表示第i個方格,j表示該方格預測出的第j個方框。 表示物體obj的實際方框與第i個方格有 對應關系 ,即obj的中心落在第i個方格中; 表示物體obj的實際方框與第i個方格預測的第j個方框有 對應關系 ,即obj的中心落在第i個方格中,並與它的第j個預測方框的IOU最大。
可以看到損失函數包括5個部分。第壹部分是x,y坐標;第二部分是w,h,采用根號使得小方框size變化的損失比大方框size變化的損失大;第三部分是方框置信度損失,回歸目標是預測方框與實際方框的IOU值;前三部分都只在預測方框和實際方框有對應關系時才計算loss;第四部分是沒有對應物體的方框置信度損失,實際的置信度都是0;第五部分是分類損失,當方格與物體有對應關系時,才計算分類損失。
因為在圖片中很多方格都不包含物體,使得方格預測方框的置信分數趨於0。所以對包含物體的方格加大權重,對不包含物體的方格減小權重。論文中有 。
YOLO-v2在YOLO-v1的版本上做了壹些改進。
主要利用了NIN的思想。有19個卷積層和5個maxpooling層,實現了72.9%的top-1正確率和91.2%的top-5正確率。在448x448的分辨率上,實現了76.5%的top-1正確率,和93.3%的top-5正確率。網絡結構如下圖所示。
修改成detection網絡時,刪除了最後的卷積層,添加了3個3x3x1024的卷積層,和壹個1x1x125的卷積層,在最後的3x3x512層和導數第二層之間添加了壹個paththrough進行特征concat。
開始學習率是0.001,在60和90個epoch時乘以0.1。
另外,YOLO-v2利用WordTree,將分類和檢測任務進行聯合訓練,對於沒有方框標註的物體也能預測出其方框,能夠對詞典中9000個概念進行預測。YOLO-v2也叫做YOLO9000。
YOLO-v3在YOLO-v2的基礎上進行了壹些改進。
Darknet-53和Resnet-152正確率相同,但速度是2倍。
總的來說,我覺得,YOLO的發展完全展現了汲取眾家之長的力量。還是要多看paper,以上。
參考文獻:
[1] Redmon, Joseph, et al. "You only look once: Unified, real-time object detection." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.
[2] Redmon J, Farhadi A. YOLO9000: better, faster, stronger[J]. arXiv preprint, 2017.
[3] Redmon, Joseph, and Ali Farhadi. "Yolov3: An incremental improvement." arXiv preprint arXiv:1804.02767 (2018).