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