文章目錄
-
-
-
- 目前檢測常用算法
-
- RCNN系列, fast-rcnn, faster-rcnn (two-stage方法)
- yolo 系列,v1,v2,v3 (one-stage方法)
- SSD(one-stage方法)
-
-
目前檢測常用算法
RCNN系列, fast-rcnn, faster-rcnn (two-stage方法)
rcnn(2014) ref
主要思路:生成候選區域,然後對每個區域用深度網絡提取特征,送到 N 個 SVM 分類器判斷是否屬于某一類,用回歸器對位置進行精修。
精修的方式:用一個線性脊回歸器(就是普通線性回歸加 L 2 L_2 L2 norm,ref)來預測偏移和縮放值
fast-rcnn(2015) ref & ref
基本上從整個網絡的設計和實作思路上都進行了大幅的修改;還是需要離線 selective search 候選框的過程(2s),把原先對每個候選框做特征提取的過程改成 直接對全圖做卷積,生成的如 40 * 60 的特征圖,其上的每個點映射到原圖上對應的候選框,是以所有的候選框都能共享特征圖;
而每個候選框的特征圖尺寸通常不一緻,需要做一個 roi pooling 來歸一化尺寸再輸入到全連接配接層;
如何做 roi pooling? 将特征圖均勻的劃分成 M * N 塊,每個塊做 max pooling ,生成的就是相同尺寸的特征圖;這裡的輸入層的一個節點可能跟輸出層的多個節點相連。。
多任務訓練(multi-task): 在深度網絡的最後輸出1 * 4096的特征向量,分别訓練一個類别分類器 + 一個 bbox 回歸器,loss 是各自 loss 的權重和。
整個推理的過程2.3s;
借圖侵删

faster-rcnn(2015) ref
将 selective search 的候選框生成法改為 加一個 RPN(Region proposals network),實作 end-to-end.
主要介紹這裡的 RPN 怎麼工作的:如上的 40 * 60 的特征圖,每個點對應原圖對應位置 9 種尺寸(3種尺寸 * 3種長寬比)的候選框(具體如何映射的細節 todo),由此生成 40 * 60 * 9個候選框,RPN 通過一個分類任務和回歸任務來确定哪些 候選框是前景還是背景,以及是否是 candidate 物體。最終選出128 或者 256 個候選框,繼續後面的步驟。
yolo 系列,v1,v2,v3 (one-stage方法)
yolov1 參考
核心思路是将448*448的圖像通過 VGG(特征提取過程) 轉化成 7 * 7 * 30 的featuremap,7 * 7可以了解成網格劃分,每個 Cell 預測2個 bounding box,一個 bbox 包含 (x1,y1,w1,h1, score1,x2,y2,w2,h2, score2, 20個類分别的機率) 總計30個元素組成的向量。所有的 cell 預測的 bbox (共 7 * 7 * 2個) 根據 nms 算法進行去重和擇優,依據是每個 bbox 的score & 該 box 屬于各個類别的機率。
細節:采用 pRelu,非 Relu。損失函數用 sum-squared error,整合定位和分類的誤差,這裡注意,
定位的誤差被歸一化到0-1,方法是 x,y 定義為 bbox 中心距 grid cell 中心的相對距離,w&h 定義為 bbox 寬高/image 寬高;
其他的值本身屬于機率,0-1之間。
損失函數由3部分組成:定位 error(包含 x,y, w,h)+ bbox 置信度 error(bbox 的打分)+ 分類 error(20個類别縱的分類誤差和)
同時
損失函數中,w&h 的計算做了 sqrt 取根号,原因是寬高對于小目标的影響比大的目标要大,縮小這個差距
。
box 包含 object 和不包含 object的權重是不一樣的,不含object 的bbox 需要降低置信度權重
缺點:精确性差,小目标檢測不好(一個 grid cell 隻能最終最多确定一個bbox);降低了誤檢率,也降低了召回率;輸入尺寸固定,隻能 resize 到一個固定尺寸
yolov2 (2017)參考
解決上面的缺點
先簡述一下思路:輸入圖像經過 Darknet-19 得到51 * 39 * 256 的 featuremap,然後對于 51 * 39 的單通道,對每個點進行兩種預測,先找到每個點對應原圖中的點作為中心點,假定每個點都取9種尺寸的
anchor box
(尺寸、比例和面積都不一樣):
- 計算每個截取出來的 box 是前景和背景的機率得到 9 * 2 個值
- 計算目前這個截取的proposal區域與 ground truth 之間的差異,用4個值來辨別從 proposal 到 gd 需要的平移縮放參數,即 9 * 4個值
最後怎麼用,篩選出最終的目标?todo
改進:
- 輸出層改成卷積層; 有啥好處? todo; 然後就變成了 darknet-19了。19 conv+5 max pool
- conv 全部用 BN。 = =
- K-means; 不采用人工設定的 anchor box,而是在資料集上進行 k-means 聚類擷取 anchor box;聚類中的距離度量不采用歐式距離,而是 D = 1 − I O U ( b o x , c e n t r o i d ) D = 1-IOU(box, centroid) D=1−IOU(box,centroid),IOU 是交并比,減少圖像較大時帶來的不均衡問題;聚類的結果,選取5個 box
- 多尺度訓練;每隔幾次疊代後就會微調網絡的輸入尺寸。訓練時每疊代 10 次,就會随機選擇新的輸入圖像尺寸。尺寸從 320 * 320 -> 608 * 608
yolov3 參考 & ref2
改進:
- 使用獨立的分類器對每個類别進行二分類,代替 softmax(
);softmax預設隻分一類
- 使用空間金字塔結構預測邊界框:也就是采用多個 Scale 融合倒方式做預測,v3中每個 cell 預測3個 bounding box,但是因為多個 scale,如416 * 416 的輸入,會預測 (1313+2626+52*52)*3 個 bbox,每個特征圖預測3個,對小目标的檢測效果更好;
- anchor box 更多,用來9個尺寸
- 網絡結構變成了 Darknet-53:與 Darknet-19的差別是引入了 residual 結構(能解決層數太多的梯度問題),但為啥比 Resnet-xxx 的效果好呢?可能是其他網絡基礎單元的差異。。
SSD(one-stage方法)
參考 & ref2
核心的思路:
- 多尺度特征圖用于檢測
- 最後采樣卷積層進行檢測,非全連接配接層;?
- 先驗框,類似 yolo 的 anchor box,不過這裡的先驗框怎麼來的?
- 網絡基礎結構,采用改進的 VGG16