截止日期:2019.6.26
當前的檢測算法可謂是人才輩出,我菜只能仰望。
當前主流的模式主要分爲三大類
- 單階段:代表有SSD、YOLO,retinanet。
- 多階段的:代表有Faster-Rcnn,Cascade RCNN。
- 基於點的:代表有FCOS,FSAF
一、單階段
單階段的始於YOLO,其主要思想是通過在最後的feature上取anchor來獲取最終的檢測結果。
ssd對其進行改進,採取層次多尺度來做。
單階段檢測算法有個缺點,那就是樣本不均衡,對於樣本不均衡的問題,retinanet做出了改進,提出了Focal loss
二、多階段
最經典的當屬Faster-RCNN
後面對其改進主要集中在rpn和head上,當然roi pooling也是其中一塊
對於多階段的FPN,不再闡述
對roi pooling做改進的是R-FCN,k表示roi pooling大小,
對於rpn的改進有幾種情況
比如自動生成anchor
Region Proposal by Guided Anchoring
Libra R-CNN balance 的選擇樣本
對head 的改進如
CascadeRCNN,多階段的rpn
自動選擇層次的FSAF
三、基於點的檢測
CornerNet基於邊界點的檢測。
基於中心點的FCOS
四、 Tricks
樣本均衡問題:
解決困難樣本的OHEM
From: https://blog.csdn.net/u012426298/article/details/81773319
將Fast RCNN分成兩個components:ConvNet和RoINet. ConvNet爲共享的底層卷積層,RoINet爲RoI Pooling後的層,包括全連接層;
2 對於每張輸入圖像,經前向傳播,用ConvNet獲得feature maps(這裏爲RoI Pooling層的輸入);
3 將事先計算好的proposals,經RoI Pooling層投影到feature maps上,獲取固定的特徵輸出作爲全連接層的輸入;
需要注意的是,論文說,爲了減少顯存以及後向傳播的時間,這裏的RoINet是有兩個的,它們共享權重,
RoINet1是隻讀(只進行forward),RoINet2進行forward和backward:
a 將原圖的所有props扔到RoINet1,計算它們的loss(這裏有兩個loss:cls和det);
b 根據loss從高到低排序,以及利用NMS,來選出前K個props(K由論文裏的N和B參數決定)
爲什麼要用NMS? 顯然對於那些高度overlap的props經RoI的投影后,
其在feature maps上的位置和大小是差不多一樣的,容易導致loss double counting問題
c 將選出的K個props(可以理解成hard examples)扔到RoINet2,
這時的RoINet2和Fast RCNN的RoINet一樣,計算K個props的loss,並回傳梯度/殘差給ConvNet,來更新整個網絡
以及之前提過的Focal loss
以及 Gradient Harmonized Single-stage Detector
每個區間求梯度平均,着重處理中間低密度樣本。
注意力機制
DCN系列,修改conv操作
non-local,計算兩個點的關聯關係
GCNet,賦予不同通道的權重。
LOSS
用低分代替NMS的去除操作。
修改IOU 的GIOU
假如現在有兩個任意性質 A,B,我們找到一個最小的封閉形狀C,讓C可以把A,B包含在內,然後我們計算C中沒有覆蓋A和B的面積佔C總面積的比值,然後用A與B的IoU減去這個比值:
五、 輕量化
SkyNet: A Champion Model for DAC-SDC on Low Power Object Detection