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 總結
這些成功的計算機視覺架構和模型給我們的啟示是,将具有基本功能的子產品整合成一個可訓練的端到端系統,可以完成更加複雜的功能。通過向網絡中引入多個損失函數的分支,可以讓其完成多目标的聯合優化。
轉載于:https://www.cnblogs.com/coldyan/p/8391559.html