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

sdu20112013發表於2019-06-26

理解一個演算法最好的就是實現它,對深度學習也一樣,準備跟著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).

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

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

feature map的size為N*N*Depth,其中Depth=(B x (5 + C))
pytorch實現yolov3(1) yolov3基本原理
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最大的做預測.

預測

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

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的中心).
pytorch實現yolov3(1) yolov3基本原理

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,語義資訊損失不大,解析度又提高了,從而對小目標檢測效果更好.
pytorch實現yolov3(1) yolov3基本原理

對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/

相關文章