天天看點

yolov2原理

Yolo基礎上的延續,

新的基礎網絡,多尺度訓練,全卷積網絡,Faster-RCNN的anchor機制,更多的訓練技巧等等改進使得yolov2速度與精度都大幅提升

網絡結構

分類網絡(先在Imagenet1000 上訓練160epoch)

yolov2原理

包含 19 conv + 5 maxpooling.

檢測網絡

yolov2原理

改動分類網絡:

  • 在分類網絡中移除最後一個1x1的層,在最後添加3個3x3x1024的卷積層,再接上輸出是類别個數的1x1卷積.

    對于輸入圖像尺寸為Si x Si,最終3x3卷積層輸出的feature map是Oi x Oi(Oi=Si/(2^5)),對應輸入圖像的Oi x Oi個栅格,每個栅格預測#anchors種boxes大小,每個box包含4個坐标值,1個置信度和classes個條件類别機率,是以輸出次元是Oi x Oi x anchors x (5 + classes)。

  • 添加跨層跳躍連接配接(借鑒ResNet等思想)
    yolov2原理
  • 融合粗細粒度的特征:将前面最後一個3x3x512卷積的特征圖,對于416x416的輸入,該層輸出26x26x512,直接連接配接到最後新加的三個3x3卷積層的最後一個的前邊.将26x26x512變形為13x13x1024與後邊的13x13x1024特征按channel堆起來得到13x13x3072.從yolo-voc.cfg檔案可以看到,第25層為route層,逆向9層拿到第16層26 * 26 * 512的輸出,并由第26層的reorg層把26 * 26 * 512 變形為13 * 13 * 2048,再有第27層的route層連接配接24層和26層的輸出,堆疊為13 * 13 * 3072,由最後一個卷積核為3 * 3的卷積層進行跨通道的資訊融合并把通道降維為1024。

    mAP提高1%。

訓練:

  • 1.使用Darknet架構在ImageNet 1000類上訓練160 epochs,學習率初始為0.1,以4級多項式衰減.weight decay=0.0005 , momentum=0.9.使用标準的資料增廣方法:random crops, rotations, (hue, saturation), exposure shifts.

    2.之後将輸入從224放大至448,學習率調整為0.001,疊代10 epochs.結果達到top-1 accuracy 76.5% , top-5 accuracy 93.3%.

  • 作者訓練檢測網絡時以0.001的初始學習率訓練了160個疊代,在60次和90次疊代的時候,學習率減為原來的十分之一。weight decay為0.0005,momentum為0.9,使用了類似于Faster-RCNN和SSD的資料擴充(data augmentation)方法。
  • 多尺度訓練。原始的YOLO使用448×448的輸入分辨率。添加anchor box後,我們将分辨率更改為416×416。然而,由于我們的模型隻使用卷積層和池化層,它可以在運作中調整大小。我們希望YOLOv2能夠在不同大小的圖像上運作,是以我們将其訓練到模型中。

    YOLOv2(在cfg檔案中random=1時)訓練時每疊代10次,就會随機微調選擇新的輸入圖像尺寸。使用32的倍數調整輸入圖像尺寸{320,352,…,608}。訓練使用的最小的圖像尺寸為320 * 320,最大的圖像尺寸為608 * 608。 共十種

改進政策

  • 使用3x3卷積并在pooling之後channel數加倍(VGG);
  • global average pooling替代全連接配接做預測分類,
  • 在3x3卷積之間使用1x1卷積壓縮特征表示(Network in Network);
  • 使用 batch normalization 來提高穩定性,加速收斂,對模型正則化.提高2%mAP
  • 高分辨率分類網絡 448*448對Imagenet fine tune 提高mAP4%
  • 使用anchor box 預測bbox:

    IOU(GT和proposed box) 和P(class|object)(同yolo)

    注:YOLO 預測98個bbox,而anchor box 多餘1000.

    使用anchor boxes預測坐标的同時,YOLOv2還對對conditional class probability的預測機制和空間位置(栅格)做了解耦。

    YOLOv2不再由栅格去預測條件類别機率,而由Bounding boxes去預測。在YOLOv1中每個栅格隻有1組條件類别機率,而在YOLOv2中,因為每個栅格有B個bounding boxes,是以有B組條件類别機率。

    在YOLOv1中輸出的次元為S * S * (B * 5 + C ),

    而YOLOv2為S * S * (B * (5 + C))。

    比如都有2個bbox/anchor box

    yolov2原理

    效果:mAP下降0.3,而recall上升7%,說明模型有更大的改進空間。

    在每個網格設定k個參考anchor,訓練以GT anchor作為基準計算分類與回歸損失。測試時直接在每個格子上預測k個anchor box,每個anchor box為相對于參考anchor的offset與w,h的refine。這樣把原來每個格子中邊界框位置的全圖回歸(yolov1)轉換為對參考anchor位置的精修(yolov2)。

  • 次元聚類

    每個格子中設定多少個anchor(即k等于幾),作者使用了k-means算法離線對voc及coco資料集中目标的形狀及尺度進行了計算。發現當k = 5時并且選取固定5比例值的時,anchors形狀及尺度最接近voc與coco中目标的形狀,是模型複雜度和recall(avg IOU)權衡。

    d(box,centroid)=1-IOU(box,centriod)

  • 直接位置預測

    利用anchorbox偏移預測時,存在偏移量沒有限制,導緻模型的不穩定,是以仍然選擇直接預測相對于栅格的相對位置,使用邏輯激活函數(sigmod func)限制在【0,1】之間

    yolov2原理
    yolov2原理

    栅格左上角的坐标為(cx,xy)

    預測五個:

    bounding box的中心點坐标(bx,by)

    寬高bw,bh

    置信值P(object)*IOU(b|object)

    ref

    https://blog.csdn.net/u011974639/article/details/78208896

繼續閱讀