YOLOv3 mxne源碼解析及算法講解

前言

  在RCNN系列算法以檢測精度聞名於世時,YOLO系列檢測算法另闢蹊徑,以其超快的速度橫空出世,YOLOv2和YOLOv3系列進一步刷新了該算法的速度和檢測精度,接下來本文將結合mxnet的代碼講解YOLOv3的算法。作者是將YOLOv3作爲Tech Report掛在了arxiv上,並沒有發表在任何一個會議或者期刊上。YOLOv3以其超高的速度以及超強的開源代碼成爲工業界中目標檢測的主流算法。
論文名稱: YOLOv3: An Incremental Improvement
論文鏈接:arxiv
mxnet代碼: Train YOLOv3 Predict with YOLOv3

優勢及創新點

1、提出了更深的網絡結構darknet53,該結構包含殘差模塊,性能有了大幅提升,速度仍然很快;
2、針對物體重疊,以及目標可能存在多標籤的情況,使用多個Sigmoid代替softmax;
3、沿用YOLOv2用聚類計算anchor的方法,anchor數目設爲9;
4、結合了SSD多尺度特徵的思想

backbone darknet53網絡介紹

相比YOLOv2,作者通過添加殘差的結構使得darknet網絡結構進一步加深,結合SSD多尺度的思想,YOLOv3在三個不同尺度上提取特徵,通過將深層特徵上採樣與淺層特徵大小一致,然後將兩層特徵進行級聯生成新的特徵,該特徵融合了深層特徵中的信息,包含更多的語義信息,網絡結構如下圖所示:
在這裏插入圖片描述

darknet53網絡結構會使得最後一層特徵尺寸是原圖的1/32,作者在數據增強時考慮了不同的輸入尺寸,每一次訓練輸入的圖像大小是不固定的,再一次從輸入層面上處理目標大小不一的問題。

anchor聚類

在YOLOv2中作者提出了anchor聚類的方法,在v2中綜合考慮速度和精度,選擇anchor聚類數爲5,在YOLOv3中,anchor聚類數爲9,COCO數據集聚類得到的anchor分別爲(10×13),(16×30),(33×23),(30×61),(62×45),(59×119),(116×90),(156×198),(373×326),如果使用不同的數據集,需要重新根據數據集的標註信息計算聚類的anchor長寬信息,YOLOv3在每個尺度上預測3個anchor,如果輸入圖像大小爲416×416,則三個尺度的特徵大小分別爲:13×13、26×26、52×52,則最小的特徵13×13分配的三個anchor尺寸爲(116×90),(156×198),(373×326),26×26分配的三個anchor尺寸爲(30×61),(62×45),(59×119),52×52分配的三個anchor尺寸爲(10×13),(16×30),(33×23),深層的特徵對應較小的特徵圖以及較大的感受野,所以較小的特徵圖分配較大的anchor尺寸,容易檢出大目標。

target 監督信息

檢測網絡的annotation是bounding box標註,即在每個圖像中標註目標的左上角和右下角的座標及類別信息,在YOLOv3中對標註信息進行一定轉換,使得預測得到的每個anchor都有對應的groundtruth(gt)。首先將左上角和右下角的標註信息(xmin,ymin,xmax,ymax)轉換爲中心點和長寬的標註信息(gtx,gty,gtw,gth),mxnet中轉換函數爲BBoxCornerToCenter,然後將所有gt和anchor轉換爲以原點對稱的,即gt轉爲(-0.5×gtw,-0.5×gth,0.5×gtw,0.5×gth),計算gt和anchor的IOU,IOU值最大的anchor就要負責預測這個gt,然後計算gt在該尺度上的中心點值,直接按照尺度變換計算即可,可以得到gt在該特徵圖上的標註信息,作者採用相對座標信息來作爲gt,將中心點座標轉換爲其相對最近左上角的座標信息,比如原來座標爲(6.3,9.2),轉換後的座標爲(0.3,0.2),高和寬轉換爲其對應的log信息即log(gtw/anchor_w),對於網絡預測得到的中心點座標及尺寸信息,進行相應的逆變換得到最終輸出的bbox。如下圖所示:
在這裏插入圖片描述

對於COCO數據集最後一個stage的網絡輸出爲B×13×13×(3×(80+1+4)B爲batchsize,13×13爲特徵圖大小,特徵圖上每一個點都會預測3個候選框,每一個候選框需要預測類別信息(80)以及位置信息(4)以及是否是目標的confidence(1),針對每一幅圖像,網絡會預測(13×13+26×26+52×52)×3個bbox,選擇與groundtruth IOU最大的一個作爲正例,將IOU大於0.7但不是IOU最大的所有bbox忽略,不計算其loss,小於0.7所有anchor作爲反例。如果預測的bbox不是正例,則不計算其座標loss以及不進行類別預測,只進行objectness loss 計算(判斷是否是目標)作者在類別預測中考慮multilabel情況採用binary cross-entropy loss

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