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

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

這篇做爲第一篇,講yolov3基本原理.ide

卷積後的輸出

通過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.spa

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

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

如何計算predicted box的座標

Anchor Boxes

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

預測

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的中心).
get

objectness score

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

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/

相關文章
相關標籤/搜索