cs231n---語義分割 物體定位 物體檢測 物體分割


1 語義分割

語義分割是對圖像中每個像素作分類,不區分物體,只關心像素。如下:

(1)完全的卷積網絡架構

處理語義分割問題可以使用下面的模型:

其中我們經過多個卷積層處理,最終輸出體的維度是C*H*W,C表示類別個數,表示每個像素在不同類別上的得分。最終取最大得分為預測類別。

訓練這樣一個模型,我們需要對每個像素都分好類的訓練集(通常比較昂貴)。然后前向傳播出一張圖的得分體(C*H*W),與訓練集的標簽體求交叉熵,得到損失函數,然后反向傳播學習參數。

然而,這樣一個模型的中間層完全保留了圖像的大小,非常占內存,因此有下面改進的框架。

(2)先欠采樣再過采樣的框架

經過欠采樣后可以大量節省內存,提高效率,最后再經過過采樣來恢復原始圖片的大小。我們知道欠采樣可以使用卷積層和池化,下面介紹過采樣的幾種方式。

去池化 Unpooling 

去池化有Nearest Neighbor,Bed of Nails等方法:

還有一種被稱為Max Unpooling 的方法,該方法記錄下之前使用max pooling前各個最大值在數組中的索引,去池化的時候把值放到索引處,其他位置補0:

 

轉置卷積 Transpose Convolution

不同於去池化,轉置卷積法是一種可學習的過采樣方法。具體步驟是,將輸入的每個值作為權重,對濾波器進行加權,然后各個加權的濾波器按照步長拼成輸出,重疊部分相加。如下:

我們可以通過學習濾波器,來學習網絡應該如何做過采樣。

理解轉置卷積的一個一維的例子是:

在一些論文里,轉置卷積還有一些其他名字,看到的時候要知道:

另外,轉置卷積之所以被稱為轉置卷積,是因為它的矩陣形式。傳統的卷積寫成矩陣形式如下(注意這里是一維的例子):

其中x是濾波器,a是輸入。而轉置卷積寫成矩陣形式如下:

 

2 分類+定位

分類+定位的任務要求我們在給圖片打標簽之后,還要框出物體在什么地方(注意與物體檢測的區別,在分類定位中,輸出的框的個數是事先已知的,而物體檢測中則是不確定的)。如下:

此類任務常用的處理框架如下:

 

首先我們還是用CNN得到描述圖片的特征向量,然后我們接入兩個全連接網絡,一個網絡負責生成最后的類別評分,另一個負責生成紅框四個點的坐標值。因此對應兩個損失,softmax損失和回歸損失。我們將這兩個損失加權相加得到總的損失(加權值是超參數),然后進行反向傳播學習。

這里應用回歸的思路同樣可以應用於姿態估計,我們用十四個點來確定一個人的姿態情況:

應用同樣的框架(CNN+回歸全連接網絡)可以訓練這個任務:

 

3 物體檢測 

與分類+定位任務不同的是,物體檢測中需要檢測的物體數量是不確定的,因此無法直接使用上面的回歸框架。下面簡單介紹幾個框架。

(1)滑動窗口

滑動窗口的思想是隨機選取若干個不同大小不同位置的窗口,對它們應用CNN進行分類。缺點是窗口數量很大,計算代價很高。

(2)RCNN

訓練階段:

a 使用IMAGENet的數據預訓練一個CNN

b 構造訓練集:首先應用Selective Search算法從每張帶標定框的圖像中選取2000~3000個候選框。對每個候選框來說,找到與它重疊面積最大的標定框,如果重疊比例大於閾值(0.5),則將該候選框標簽設為該標定框的標簽,若重疊比例小於閾值(0.5),則標簽設為“背景”。同時對於重疊比例大於一定閾值(0.6)的候選框,還要計算出其與標定框的偏移距離。

c 每個候選區域經過預處理,送到CNN中提取出圖像特征,然后把圖像特征送到SVM分類器中,計算出標簽分類的損失。同時圖像特征還要送到回歸器中,計算偏移距離的L2損失。

d 反向傳播訓練SVM,回歸器,CNN

整體框架圖如下:

(3)Fast RCNN

RCNN訓練和預測速度很慢,主要是由於不同候選框之間的重疊部分特征重復用CNN提取導致的。因此可以采取先對整個圖像進行CNN特征提取,然后在選定候選區域,並從總的featuremap中找到每個候選區域對應的特征。框架如下:

(4)Faster RCNN

Fast RCNN的性能瓶頸是SS算法選定候選區域,在Faster RCNN中,使用網絡Region Proposal Network (RPN) 來預測候選區域,整體框架如下:

Faster RCNN是當前很先進的目標檢測框架,要了解細節看這篇論文:

Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal networks.” Advances in Neural Information Processing Systems. 2015.

(5)SSD

SSD的思想是將圖像划分為很多個格子,以每個格子的中心可以衍生出若干個base boxes。使用神經網絡一次性的對這些格子進行分類,對這些baseboxes進行回歸。

上圖中,一個圖像划分為7*7個grid,每個grid有3個base boxes。我們需要用回歸為每個base boxes預測五個值,為每個格子進行分類打分。直接使用一個的CNN神經網絡輸出7*7*(5*B+C)的大小即可。

更多細節參看論文:Liu et al, “SSD: Single-Shot MultiBox Detector”, ECCV 2016 

 

(6)各種物體檢測框架的對比

有很多變量可控:

這篇論文對比了各種框架:

Huang et al, “Speed/accuracy trade-offs for modern convolutional object detectors”, CVPR 2017 

FasterCNN比SSD具有更高的精度,但是沒有SSD快。

 

(7)Dense Captioning 

 Dense Captioning 是對圖片中的每個事物做檢測,並用語言進行描述:

Dense Captioning其實就是Object Detection + Captioning ,其框架可以使用faster RCNN結合LSTM來做。具體參考文獻:

Johnson, Karpathy, and Fei-Fei, “DenseCap: Fully Convolutional Localization Networks for Dense Captioning”, CVPR 2016 

 

4 物體分割 

物體分割要做的是在物體檢測上更進一步,從像素層面把各個物體分割出來。

Mask RCNN是當前很前沿的一種方法,其將faster RCNN和語義分割結合成一個框架,具有非常好的效果!框架為:

如上圖,首先將圖像使用CNN處理為特征,然后經過一個RPN網絡生成候選區域,投射到之前的feature map。到這里與faster RCNN一樣。之后有兩個分支,一個分支與faster RCNN相同,預測候選框的分類和邊界值,另一個分支則與語義分割相似,為每個像素做分類。

mask RCNN具有超級好的效果,有機會一定要拜讀一下。

He et al, “Mask R-CNN”, arXiv 2017

 

 5 總結

這些成功的計算機視覺框架和模型給我們的啟示是,將具有基本功能的模塊整合成一個可訓練的端到端系統,可以完成更加復雜的功能。通過向網絡中引入多個損失函數的分支,可以讓其完成多目標的聯合優化。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM