1. 程式人生 > >語義分割與目標檢測入門:若干經典工作綜述

語義分割與目標檢測入門:若干經典工作綜述

語義分割

從原理上來說,語義分割就是畫素級別的分類,傳統的方法也是直接按照這個思路來做的,效率比較低,而從FCN開始,語義分割有了相對比較專用的方法。

0. 重要的資料集:PASCAL VOC和COCO

1. FCN

用於影象(N×M)分類的網路前端用卷積層提取特徵,後端用全連線層進行分類。假設總共有K個類別,則全連線層最後會輸出一個1×K的向量。FCN(Fully Convolutional Network,全卷積網路)將用於分類的全連線層替換為(反)卷積層,輸出變為N×M×K的向量。

FCN還有一個技巧,如下圖所示,用反捲積網路進行上取樣的時候把上取樣的結果與前面pooling的結果相加,有助於提升結果。

 

2. U-Net

       U-Net是FCN的改進版。針對醫學影象提出了U-Net,因此U-Net不用在ImageNet上預訓練。還有一個區別是U-Net上取樣步驟融合淺層特徵時用的是Concatenate而不是相加。

 

3. 後來又陸續出現了SegNet, Dilated Convolutions, DeepLab(v1/v2/v3), RefineNet, PSPNet, LargeKernel Matters等多個模型。這裡就不再詳述。

 

目標檢測

目標檢測主要有兩個不同的思路。一種思路是借鑑語義分割的做法,這方面的工作主要有YOLO和SSD。另一種思路是把目標檢測看作分類任務(bounding box裡的物件的類別)和迴歸任務(bounding box的座標)的組合,主要工作由R-CNN, SPP-Net, Fast R-CNN, Faster R-CNN。總的來說,思路一速度更高,精度稍差,主要用在實時性要求高的場合;思路二速度稍慢,精度更高,是主流方法。

 

1. YOLO

    YOLO的思想是首先把圖片劃分成S×S個單元格,把每個單元格屬於某種類別的概率、屬於某個bounding box的置信度以及bounding box的位置x,y,bounding box的大小w,h這些量在單元格上做迴歸。

其網路結構類似影象分類的網路結構,前面是卷積層最後兩層是全連線層,只不過最後輸出維度不同。

作者自己在論文裡說YOLO在小目標和小bounding box的檢測上表現不佳。

 

2. SSD

    SSD採用金字塔型結構,將多層卷積層的特徵concatenate起來,一定程度上可以解決YOLO不精確的問題。另外考慮到bounding box大小形狀的不同,用了不同的Prior Box.

3.R-CNN

(1)根據已有的Selective Search演算法提取Region Proposal

(2)將每個Region Proposal縮放到統一大小輸入CNN,輸出固定大小特徵

(3)將特徵用SVM進行分類

(4)訓練一個迴歸器微調Bounding Box的位置

缺點:大量重複的特徵提取,速度慢

 

4. SPP-Net

    SPP-Net整體框架與R-CNN相同,主要貢獻在於提出Spatial Pyramid Pooling,主要解決了SVM/全連線層輸入必須是定長tensor的問題。關鍵就在於Spatial Pyramid Pooling中的Sliding Window(作者稱之為“Spatial bin”)是與輸入影象的大小成比例的,而傳統的Pooling的Sliding Window大小是固定的。

這樣就可以將Region Proposal對映到卷積層輸出的Feature Map上,一張影象只需一次卷積,而不用像R-CNN一樣每個Region Proposal的卷積分別計算。

 

5. Fast R-CNN

相比於SPP-Net,

(1)用ROI-Pooling精簡了SPP,將影象特徵統一對映到H×W×d維

(2)將classification和regression作為Multi-task learning一起訓練

(3)開放對卷積層的fine-tune

 

6. Faster R-CNN

    與3/4/5的最大不同是在Faster R-CNN這裡,不需要額外的Selective Search演算法,Region Proposal也是用神經網路(Region Proposal Network, RPN)學出來的。方法就是採用一個Sliding Window在卷積層輸出的Feature Map上滑動,為了適應各種形狀、大小的Region Proposal,這個Sliding Window會由多種Anchor產生,每個Anchor對應不同的大小和形狀。