pytorch實現yolov3(1) yolov3基本原理


理解一個算法最好的就是實現它,對深度學習也一樣,准備跟着https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-pytorch/一點點地實現yolov3.達到熟悉yolov3和pytorch的目的.

這篇作為第一篇,講yolov3基本原理.

卷積后的輸出

經過basenet(darknet-53)不斷的卷積以后得到一個feature map. 我們就用這個feature map來做預測.
比方說原始輸入是416*416*3,一通卷積以后得到一個13*13*depth的feature map.
這個feature map的每一個cell都有其對應的感受野.(簡單滴說:即當前cell的值受到原始圖像的哪些pixel的影響).所以現在我們假設每個cell可以預測出一個boundingbox.boudingbox所框出的object的正中心落於當前cell.

You expect each cell of the feature map to predict an object through one of it's bounding boxes if the center of the object falls in the receptive field of that cell. (Receptive field is the region of the input image visible to the cell. Refer to the link on convolutional neural networks for further clarification).

比如上圖的紅色cell負責預測狗這個object.

feature map的size為N*N*Depth,其中Depth=(B x (5 + C))

B指每個cell預測幾個boundingbox. 5=4+1. 4代表用於預測boudingbox的四個值,1代表object score,代表這個boundingbox包含目標的概率,C代表要預測的類別個數.

如何計算predicted box的坐標

Anchor Boxes

anchor box是事先聚類出來的一組值.可以理解為最接近現實的object的寬,高.
yolov3中feature map的每一個cell都預測出3個bounding box.但是只選用與ground truth box的IOU最大的做預測.

預測

bx, by, bw, bh are the x,y center co-ordinates, width and height of our prediction. tx, ty, tw, th is what the network outputs. cx and cy are the top-left co-ordinates of the grid. pw and ph are anchors dimensions for the box.

  • bx by bw bh是預測值 代表預測的bouding box的中心點坐標 寬 高
  • tx, ty, tw, th 是卷積得到的feature map在depth方向的值
  • cx,cy是當前cell左上角坐標
  • pw,ph是事先聚類得到的anchors值

上圖中的σ(tx)是sigmoid函數,以確保它的值在0-1之間.這樣才能確保預測出來的坐標坐落在當前cell內.比如cell左上角是(6,6),center算出來是(0.4,0.7),那么預測的boudingbox的中心就是(6.4,6.7),如果算出來center是(1.2,0.7),那boundingbox的中心就落到了(7.2,6.7)了,就不再是當前cell了,這與我們的假設是相悖的.(我們假設當前cell是它負責預測的object的中心).

objectness score

這個也是由sigmoid限制到0-1之間,表示包含一個object的概率.

Class Confidences

表示當前object屬於某一個class的概率. yolov3不再使用softmax得到.因為softmax默認是排他的.即一個object屬於class1,就不可能屬於class2. 但實際上一個object可能既屬於women又屬於person.

多尺度檢測

yolov3借鑒了特征金字塔的概念,引入了多尺度檢測,使得對小目標檢測效果更好.
以416*416為例,一系列卷積以后得到13*13的feature map.這個feature map有比較豐富的語義信息,但是分辨率不行.所以通過upsample生成26*26,52*52的feature map,語義信息損失不大,分辨率又提高了,從而對小目標檢測效果更好.

對416 x 416, 預測出((52 x 52) + (26 x 26) + 13 x 13)) x 3 = 10647個bounding boxes.通過object score排序,濾掉score過低的,再通過nms逐步確定最終的bounding box.

nms解釋看下這個https://blog.csdn.net/zchang81/article/details/70211851.
簡單滴說就是每一輪都標記出一個score最高的,把和最高的這個box類似的box去掉,循環反復,最終就得到了最終的box.

refrence:https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-pytorch/


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com