02 手動實現yolov1

2021-10-02 08:03:56 字數 1825 閱讀 4447

後續改進

yolov1 流程圖

假設輸入影象 [1,3,448,448]–>backbone net–>[1,2048,7,7]–>[1,b(1+4)+c,7,7]

則有 s=7, 取b=2,以pascal voc資料為例有20個類別,則c=20

[[1,b(1+4)+c,7,7]]=[1,30,7,7]

這30列的具體意義,如下圖所示

方式一也可以按這種方式解析,只需保證訓練與推理時使用同一種解析方式

方式二演算法首先把輸入影象劃分成s*s的格仔,然後對每個格仔都**b個bounding boxes,每個bounding box都包含5個**值:x,y,w,h和confidence。x,y就是ground truth的中心座標,與grid cell左上角的偏差/格網大小使得範圍變成0到1;w和h進行歸一化(分別除以影象的w和h,這樣最後的w和h就在0到1範圍)。

輸入影象大小 h=448,w=448

每個grid cell大小為 h_gc=w_gc=448//s=448//7=64

假設ground truth 的boxes為 [100,200,300,400] x1,y1,x2,y2的格式,

5.該ground truth對應的**2個框為

來看看s×s×30的資料塊的具體含義。

第三、四行表示bounding box的confidence損失,就像前面所說的,分成grid cell包含與不包含object兩種情況。這裡注意下因為每個grid cell包含兩個bounding box,所以只有當ground truth 和該網格中的某個bounding box的iou值最大的時候,才計算這項。

因為很多grid cell是不包含物體的,這樣的話很多grid cell的confidence score為0。所以採用設定不同權重方式來解決,一方面提高localization error的權重,另一方面降低沒有object的box的confidence loss權值,loss權重分別是5和0.5。而對於包含object的box的confidence loss權值還是原來的1。

5.推理時score=pred[:,4]*pred[:,-20:]

完整**在這裡:here

資料描述: 只有170張,隨機取出150張做訓練,剩下的20張做驗證

檢視訓練過程loss變化:tensorboard --logdir=./yolov1_resnet50_416 --host 0.0.0.0

選擇resnet50-416(輸入大小統一resize為416x416)

在驗證集上的結果:

(9) 手動實現reverse函式

簡單介紹5種實現方法 1.中心思想 從第乙個開始,相近的兩兩互換,然後除去最後乙個存入空列表,遞迴後相加 lists z v o b a def fz ls lsn global i if len ls 1 return ls for i in range len ls 1 ls i ls i 1 ...

Caffe(10) 實現YOLOv1目標檢測

yolov1核心思想 從r cnn到fast r cnn一直採用的思路是proposal 分類 proposal提供位置資訊。分類提供類別資訊 精度高,但速度不行。yolov1更為直接一點,直接在輸出層回歸bounding box的位置和其所屬類別,整張圖作為網路的輸入,把object detect...

Python ast 學習筆記1 手動建ast

python中的ast模組是非常強大的模組,可以用來修改python原始碼,或者分析python原始碼。為了學習ast模組,先來手動建立乙個ast熟悉熟悉。將用ast來表示下列 foo 2 if foo 2 print foo else print not equal foo 2是乙個賦值語句,可以...