One-stage目標檢測算法綜述

yolo-v1:

One-stage目標檢測算法綜述

YOLO 就是使用迴歸這種做法的典型算法。

首先將圖片 Resize 到固定尺寸,然後通過一套卷積神經網絡,最後接上 FC 直接輸出結果,這就他們整個網絡的基本結構。

更具體地做法,是將輸入圖片劃分成一個 SxS 的網格,每個網格負責檢測網格里面的物體是啥,並輸出 Bbox Info 和 置信度。這裡的置信度指的是 該網格內含有什麼物體 和 預測這個物體的準確度。

更具體的是如下定義:

我們可以從這個定義得知,當框中沒有物體的時候,整個置信度都會變為 0 。

這個想法其實就是一個簡單的分而治之想法,將圖片卷積後提取的特徵圖分為 SxS 塊,然後利用優秀的分類模型對每一塊進行分類,將每個網格處理完使用 NMS (非極大值抑制)的算法去除重疊的框,最後得到我們的結果。

SSD:

YOLO 這樣做的確非常快,但是問題就在於這個框有點大,就會變得粗糙——小物體就容易從這個大網中漏出去,因此對小物體的檢測效果不好。

所以 SSD 就在 YOLO 的主意上添加了 Faster R-CNN 的 Anchor 概念,並融合不同卷積層的特徵做出預測。

One-stage目標檢測算法綜述

我們從上圖就可以很明顯的看出這是 YOLO 分治網絡 和 Faster R-CNN Anchor 的融合,這就大大提高了對小物體的檢測。這裡作者做實驗也提到和 Faster R-CNN 一樣的結果,這個 Anchor的數量和形狀會對性能造成較大的影響。

除此之外,由於這個 Anchor 是規整形狀的,但是有些物體的擺放位置是千奇百怪的,所以沒有 數據增強 前的效果比增強後的效果差 7 個百分點。直觀點理解,做輕微地角度扭曲讓 Anchor背後的神經元“看到”更多的信息。

One-stage目標檢測算法綜述

還有一個重大的進步是結合了不同尺寸大小 Feature Maps 所提取的特徵,然後進行預測。這是 FPN 網絡提出前的第一次做 Feature Pyramid 的嘗試,這個特徵圖金字塔結合了不同層的信息,從而結合了不同 尺寸 和 大小 的特徵信息。

這個嘗試就大大地提高了識別的精度,且高分辨率(尺寸大)的 Feature Map 中含有更多小物體的信息,也是因為這個原因 SSD 能夠較好的識別小物體。

除此之外,和 YOLO 最大的區別是,SSD 沒有接 FC 減少了大量的參數量、提高了速度。

DSSD:

DSSD檢測算法的網絡結構如下圖所示,DSSD也是使用不同階段不同分辨率的feature maps進行預測,在不考慮Backbone網絡結構差別的情況下,可以發現DSSD相比於SSD多了一系列的後續上採樣操作,SSD是使用下采樣過程中的feature maps進行預測,而DSSD是使用上採樣過程中的feature maps進行預測。顯而易見的是,SSD用於檢測的feature maps位於網絡的較低層,表徵能力較弱,而DSSD用於檢測的feature maps位於網絡的較高層,表徵能力較強,同時DSSD在反捲積的過程中通過Skip-Connection引入了較低層的feature maps,實現了一定程度的特徵融合。所以DSSD的效果要優於SSD檢測算法。

One-stage目標檢測算法綜述

FSSD:

FSSD檢測算法的網絡結構如下圖所示,同樣,FSSD也是使用不同階段不同分辨率的feature maps進行預測,相比於SSD,FSSD多了一個特徵融合處理,將網絡較低層的特徵引入到網絡的較高層,在檢測的時候能夠同時考慮不同尺度的信息,使得檢測更加準確。

One-stage目標檢測算法綜述

YOLO9000:

到了 SSD ,迴歸方法的目標檢測應該一統天下了,但是 YOLO 的作者不服氣,升級做了一個 YOLO9000 ——號稱可以同時識別 9000 類物體的實時監測算法。

講道理,YOLO9000 更像是 SSD 加了一些 Trick ,而並沒有什麼本質上的進步:

  • Batch Normalization
  • High resolution classifier 448*448 pretrain
  • Convolution with anchor boxes
  • Dimension clusters
  • Multi-Scale Training every 10 batch {320,…..608}
  • Direct location prediction
  • Fine-Grained Features

加了 BN 層,擴大輸入維度,使用了 Anchor,訓練的時候數據增強…

所以強是強,但沒啥新意,SSD 和 YOLO9000 可以歸為一類。

yolo-v3:

yolo-v3主要的改進有:調整了網絡結構;利用多尺度特徵進行對象檢測;對象分類用Logistic取代了softmax。

One-stage目標檢測算法綜述

Yolo_v3使用了darknet-53的前面的52層(沒有全連接層),yolo_v3這個網絡是一個全卷積網絡,大量使用殘差的跳層連接,並且為了降低池化帶來的梯度負面效果,作者直接摒棄了POOLing,用conv的stride來實現降採樣。在這個網絡結構中,使用的是步長為2的卷積來進行降採樣。

為了加強算法對小目標檢測的精確度,YOLO v3中採用類似FPN的upsample和融合做法(最後融合了3個scale,其他兩個scale的大小分別是26×26和52×52),在多個scale的feature map上做檢測。

作者在3條預測支路採用的也是全卷積的結構,其中最後一個卷積層的卷積核個數是255,是針對COCO數據集的80類:3*(80+4+1)=255,3表示一個grid cell包含3個bounding box,4表示框的4個座標信息,1表示objectness score。

先驗眶在特徵圖尺寸上的分配:

One-stage目標檢測算法綜述

// 填坑中。。。

參考文獻

  • SIGAI:目標檢測最新進展總結與展望(https://zhuanlan.zhihu.com/p/46595846)
  • 小綠葉:一文看懂YOLO v3(https://zhuanlan.zhihu.com/p/60944510)
  • Dave:基於深度學習的「目標檢測」算法綜述(https://zhuanlan.zhihu.com/p/33981103)


分享到:


相關文章: