訓練過程
1.數(shù)據(jù):
(1)image/labels/bboxes(每張圖至少有一個檢測目標只锻,有幾個檢測目標對應幾個 label 和 bbox )
(2)圖像預處理(augment / resize)/歸一化
2.網(wǎng)絡結(jié)構:
(1)網(wǎng)絡輸出 (要注意的是: locs 對應的四個值是dx/dy/dw/dh)
pred_cls(feat_size,feat_size,num_anchors,num_classes)
pre_locs(feat_size,feat_size,num_anchors,loc_offsets)
(2)先驗框 anchor_layers : 每一種 feat_size 上,在每個位置都生成數(shù)量為 num_anchors 的先驗框,先驗框的表示為 (x,y,w,h)
3.groundtruth 與 anchors 之間的 encode
groundtruth 坐標的形式是(y1,x1,y2,x2)和 網(wǎng)絡輸出(dx,dy,dw,dh)的表示形式不同穷当,
所以要將 groundtruth 和 anchors 結(jié)合昔善,來表示anchor_layers 上每個位置的分類 label 和坐標偏移loc(即網(wǎng)絡的輸出)。
4.計算損失
經(jīng)過上一步人柿,groundtruth 已經(jīng)和 pred_locs 的形式相同柴墩,可以用 smoth_L1 loss 計算坐標偏移之間的損失。
分類損失分為 pos_cross_entropy 和 neg_cross_entropy ,正負樣本數(shù)目為 1:3凫岖。
預測過程
1.將預處理(resize / 歸一化)后的圖像輸入到網(wǎng)絡江咳,得到預測類別 pred_cls 和坐標偏移 pre_locs。
2.得到 anchor_layers 哥放。
3.將網(wǎng)絡輸出的坐標偏移 pre_locs 和 anchors 進行decode,因為 pre_locs 和 anchors 的表示形式都為(x,y,w,h)歼指,所以在 anchors 的基礎上直接與網(wǎng)絡輸出的坐標偏移進行調(diào)整爹土,把每個 anchor 都轉(zhuǎn)換成真實值(y1,x1,y2,x2)的形式。
4.選擇 pred_cls 大于 threshold 的框作為候選結(jié)果踩身,利用非極大值抑制(NMS)得到最終結(jié)果胀茵。
5.將結(jié)果resize到原圖,可視化最終結(jié)果挟阻。