YOLOV1 、V2論文筆記(未完待續)

 

YOLO V1

在yolo之前,目標檢測的巔峯之作是faster-rcnn。faster-rcnn是典型的two-stage目標檢測網絡,先用一個RPN(region proposal network)提取region proposal,再用一個分類網絡判斷RP中是否含有目標,所以faster-rcnn本質上是分類問題。

yolo v1是one-stage的開山之作,將目標檢測看作迴歸問題,直接從圖像像素得到邊界框座標和類別概率。不同於faster-rcnn只對某個RP預測,yolov1可以看到整張圖像,所以預測錯誤的概率是faster-rcnn的一半,yolo v1的預測結果假陽性目標少,精確率高,但是召回率低,定位誤差多。(若有疑問,建議補課精確率和召回率)

one-stage實現方式:

將輸入圖像劃分爲7*7的柵格,每個柵格預測2個bounding box,每個bounding box包括5個預測值(x,y,w,h,confidence)

confidence=p(object)*IOU

以VOC數據集爲例,一共20個類別,最終輸出7*7*(2*5+20)=7*7*30個tensor。

網絡結構受圖像分類模型GoogLeNet的啓發,有24個卷積層,後面是2個全連接層。隱藏層部分使用1×1降維層,後面接3×3卷積層。最終輸出是7×7×30的預測張量。

損失函數:

損失函數的設計目標就是讓座標(x,y,w,h),confidence,classification 這三個方面達到很好的平衡。

前兩項是位置的損失函數,寬高開根號,是爲了強化小目標的損失。

比如:小目標:w_pre=10,w_gt=20

           大目標:w_pre=100,w_gt=110

          顯然小目標檢測得更差一些。若不開根,二者損失值一樣(20-10)^2=(110-100)^2 , 開根後 

      ,相當於強化了小目標的損失。

第三、四項分別是含有目標的bounding box的confidence和不含目標的bounding box的confidence損失。大部分邊界框內是沒有目標的,會造成loss的不平衡,所以對不含目標的bounding box加權=0.5。

最後一項是分類概率損失

YOLO V2

YOLO V2 主要解決yolo v1定位誤差多、召回率低的問題。

相較於v1的幾點改進:

1.  增加BN層,移除dropout層,這一操作使mAP增加2%  

2.  使用高分辨率的分類器,yolov1使用224*224的輸入預訓練,然後將分辨率提高到448*448在檢測器上微調。對於目標檢測任務,通常分辨率越高最後得到的結果越接近預期。但是切換分辨率,檢測器可能難以快速適應高分辨率。yolov2使用448*448的分辨率微調分類網絡(10個epoch),使模型在檢測數據集上finetune之前已經適用高分辨率輸入。

3. 增加anchor box, yolov1用全連接預測bbox的位置座標,YOLOv2借鑑了Faster R-CNN中RPN網絡的anchor box策略,移除了YOLOv1中的全連接層,採用了卷積和anchor boxes來預測邊界框,提高定位精度。其中值得一提的一個trick,檢測模型的輸入不是448*448,而是416*416,因爲經過32倍的下采樣,416*416的輸出特徵圖是13*13的奇數維度,這樣可以很方便的尋找到中心點,對於一些大物體,它們中心點往往落入圖片中心位置,此時使用特徵圖的一箇中心點去預測這些物體的邊界框相對容易些。所以在YOLOv2設計中要保證最終的特徵圖有奇數個維度。yolov1只預測7*7*2=98個框,增加anchor後,v2預測的邊框數爲13*13*anchor_num,map由69.5%降至69.2%,但是召回率由81%提高到88%

4. 使用聚類的方法得到anchor的維度,在Faster R-CNN和SSD中,先驗框的維度(長和寬)都是手動設定的,帶有一定的主觀性。如果選取的先驗框維度比較合適,那麼模型更容易學習,從而做出更好的預測。因此,YOLOv2對訓練集的標籤使用k-means聚類確定邊界框維度。

5. 直接位置預測

(未完待續)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章