引言
之前做object detection用到的都是two stage,one stage如YOLO、SSD很少接觸,這裡開一篇blog簡單回顧該系列的發展。很抱歉,我本人只能是蜻蜓點水,很多細節也沒有弄清楚。有需求的朋友請深入論文和程式碼,我在末尾也列出了很多優秀的參考文章。
YOLOv1
You Only Look Once: Unified, Real-Time Object Detection
核心思想
- 用一個CNN實現end-to-end,將目標檢測作為迴歸問題解決。
將輸入圖片分割為\(S\times S\)網格,如果物體的中心落入網格中央,這個網格將負責檢測這個物體。因此網路學會了去預測中心落在該網格中的物體。
每個網格預測\(B\)個bounding boxes和confidence scores。confidence scores包含兩方面:
- 這個boundingbox包含物體的可能性\(Pr(Object)\):bb包含物體時\(Pr(Object)=1\)否則為0。
- 這個boundingbox的準確度\(IOU^{truth}_{pred}\):pred和gt的IoU。
因此,confidence scores可定義為$Pr(Object)*IoU^{truth}_{pred} $
每個bbox包含5個predictions:\(x,y,w,h和confidence\):\((x,y)\)表示bbox中心座標,\(h,w\)表示bbox長寬,\(confidence\)表示pred和gt box的IoU。
每個網格預測\(C\)個類別概率\(Pr(Class_i|Object)\),表示該網格負責預測的邊界框目標屬於各類的概率。我們不考慮box的數量即\(B\)。
測試階段我們將類別概率和confidence score相乘,得每個box的類特定confidence score:
\[Pr(Class_i|Object)*Pr(Object)*IoU^{truth}_{pred}=Pr(Class_i)*IoU^{truth}_{pred}\]
表示box中類別出現的概率和預測box與目標的擬合程度。
將圖片分解為$S\times S \(個gird,每個grid預測\)B\(個bbox,confidence和\)C\(個類概率,預測值為\)S\times S \times (B*5+C)$
網路架構
網路結構參考GooLeNet,包含24個卷積層和2個啟用層,卷積層使用1x1卷積降維然後跟3x3卷積。對於卷積層和全連線層,採用Leaky ReLU:\(max(x,0.1x)\),最後一層採用線性啟用層。
網路輸出維度為30(\(B=2\)),前20個元素是類別概率值,然後2個是邊界框置信度,最後8個是bbox的\((x,y,w,h)\)。
- Loss:YOLO把分類問題轉化為迴歸問題
第一項是bbox中心座標誤差項;第二項是bbox高與寬誤差項;
第三項是包含目標bbox置信度誤差項;第四項是不包含目標bbox置信度誤差項;
最後一項是包含目標的grid分類誤差項。
將Loss對應到predtion張量上:
實驗結果
SSD
SSD:Single Shot MultiBox Detector
核心思想
速度比YOLO快,精度可以跟Faster RCNN媲美。
採用多尺度特徵圖用於檢測:大特徵圖檢測小目標,小特徵圖檢測大目標。
採用卷積進行檢測:與YOLO最後採用全連線層不同,SSD直接採用卷積提取檢測結果。
設定先驗框:借鑑Faster RCNN中anchor理念,為每個網格設定不同長寬比的anchor,bbox以anchor為基準。
網路架構
在VGG16基礎上增加了卷積層獲得更多特徵圖用於檢測。
上是SSD,下是YOLO
實驗結果
YOLOv2
YOLO9000: Better, Faster, Stronger
核心思想
YOLOv1雖然檢測速度快,但檢測精度不如RCNN,YOLOv1定位不夠準確,召回率也低。於是YOLOv2提出了幾種改進策略來提升YOLO模型的定位準確度和召回率,並保持檢測速度。
Better
Batch Normalization:加快收斂並起到正則化效果,防止過擬合。
High Resolution Classifier:在ImageNet資料上使用\(448\times448\)輸入來finetune。
Convolutional With Anchor Boxes:借鑑Faster R-CNN中RPN的anchor boxes策略,預測offset而不是coordinate。
Dimension Clusters:採用k-means來替代人工選取anchor。並使用下式來度量距離。
\[d(box,centroid)=1-IOU(box, centroid)\]
Direct location prediction:改變了預測bbox的計算公式
- Fine-Grained Features:小物體需要更精細的特徵圖。採用passthrough層將高解析度特徵concat低解析度特徵,類似於ResNet。
Multi-Scale Training:每隔10batch,網路隨機選擇新的影像尺寸。
Faster
- Darknet-19
- Training for classification
- Training for detection
Stronger
- Hierarchical classification
- Dataset combination with WordTree
- Joint classification and detection
網路架構
實驗結果
YOLOv3
YOLOv3: An Incremental Improvement
核心思想
- Bounding Box Prediction:和v2一樣使用聚類來獲得anchor並預測bbox座標。
- Class Prediction:不使用softmax,使用二元交叉熵進行類別預測。
- Predictions Across Scales:跨尺度預測,類似FPN使用3個尺度,預測為\(N\times N\times[3*(4+1+80)]\),4個box offsets、1個obj prediction和80個類prediction。
- Feature Extractor:Darknet-53,加入了Residual。
網路架構
實驗結果
參考
- paper
[1]Redmon J, Divvala S, Girshick R, et al. You only look once: Unified, real-time object detection[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 779-788.
[2]Liu W, Anguelov D, Erhan D, et al. Ssd: Single shot multibox detector[C]//European conference on computer vision. Springer, Cham, 2016: 21-37.
[3]Redmon J, Farhadi A. YOLO9000: better, faster, stronger[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 7263-7271.
[4]Redmon J, Farhadi A. Yolov3: An incremental improvement[J]. arXiv preprint arXiv:1804.02767, 2018.
- blog
What do we learn from single shot object detectors (SSD, YOLOv3), FPN & Focal loss (RetinaNet)?