總結的算法包括:OverFeat
、yolo 系列
、SSD
、Deformable-ConvNets
、R-CNN系列
、R-FCN
、FPN
。
算法綜述:
解釋one stage
和 two stage
:
前者是先由算法生成一系列作爲樣本的候選框,再通過卷積神經網絡進行樣本分類;後者則不用產生候選框,直接將目標邊框定位的問題轉化爲迴歸問題處理。前者在檢測準確率和定位精度上佔優,後者在算法速度上佔優。
OverFeat
論文:OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks
作者:Yann Lecun及紐約大學團隊
年份:CVPR 2013
評價:2013年ImageNet 定位任務冠軍,利用滑動窗口
和規則塊生成候選框,首次將分類、定位以及檢測三個計算機視覺任務放在一起解決,解決圖像目標形狀複雜、尺寸不一問題。
參考博客:論文筆記、OverFeat學習
做法:
- 用一個共享的CNN來同時處理圖像分類,定位,檢測三個任務,可以提升三個任務的表現。
- 用CNN有效地實現了一個
多尺度
(實驗最多輸入了6個不同尺度的圖像)的滑動窗口(使用FCN
,預測加入offset max-pooling
,但是證明了提升效果不明顯)來處理任務。 - 提出
累積預測
來求bounding boxes(而不是傳統的非極大值抑制
)。
分類任務的網絡分爲兩個版本,一個快速版,一個精確版。下圖是精確版的網絡結構圖。
類似於AlexNet,有幾點不同,一是沒有使用LRN(局部響應歸一化),二是沒有使用重疊的池化,三是stride的超參用2代替了4,大stride可以提升速度,減小精度。
解釋FCN
(全卷積,即將全連接層更換爲1✖️1卷積)
- 參數量不變;
- 相比傳統的滑動窗口一次滑動生成一個窗口,只需要執行一次。
解釋offset max-pooling
採用1維做示例,假設在x軸上有20個神經元,如果我們選擇池化size=3的非重疊池化,從1位置開始進行分組,每3個連續的神經元爲一組,然後計算每組的最大值(最大池化),19、20號神經元將被丟棄,如下圖所示:
如果我們只分6組的話,我們除了以1作爲初始位置進行連續組合之外,也可以從位置2或者3開始進行組合。也就是說我們其實有3種池化組合方法:
A、△=0分組:[1,2,3],[4,5,6],……,[16,17,18];
B、△=1分組:[2,3,4],[5,6,7],……,[17,18,19];
C、△=2分組:[3,4,5],[6,7,8],……,[18,19,20];
對應圖片如下:
拓展到2維(△x,△y),一共9種預測結果,取最大值作爲最後結果。
驗證集上的分類結果
其中coarse stride表示Δ=0,fine stride表示Δ=0,1,2。
- 使用fine stride可以提升模型表現,但是提升不大,說明實際上offset-pooling在這裏的作用不大;
- 使用多scale,增加scale可以提升模型表現;
- 最後多模型融合,又提升了表現。
定位任務把分類任務網絡結構的layer 6~output給重新設計一下,把分類改成迴歸問題,然後在各種不同尺度上訓練預測物體的bounding box,根據box和真實box之間的l2損失進行訓練。
解釋累積預測
累積預測
是通過在每個類別計算兩個框之間的最短距離進行合併,非極大值抑制
每次淘汰與最大概率的框距離近的框。
累積預測
不僅去冗餘(淘汰低置信度的框),還可以淘汰低連續(多個box相差很遠)的類別,會更加魯棒。
Yolo系列
Yolo v1
論文:You Only Look Once: Unified, Real-Time Object Detection
作者:Joseph Redmon
年份:CVPR 2016
參考博客:論文筆記
You Only Look Once,言簡意賅,將目標檢測看做是單一的迴歸問題,將整張圖作爲輸入,直接輸入框的四個座標和類別。
做法:
- 將一幅圖像分成
SxS
個網格(grid cell),每個網格要預測B
個bounding box和類別信息C
,一共是B*5+C
個值 - 每個bounding box除了要回歸自身的位置之外,還要附帶預測一個confidence值,共
5
個值;
注意:class信息是針對每個網格的,confidence信息是針對每個bounding box的。
eg:圖像輸入爲448x448,取S=7,B=2,一共有20個類別(C=20)。則輸出就是7x7x30的一個tensor。
Ref