語義分割是對圖像中每一個像素做分類,不區分物體,只關心像素。以下:算法
處理語義分割問題可使用下面的模型:數組
其中咱們通過多個卷積層處理,最終輸出體的維度是C*H*W,C表示類別個數,表示每一個像素在不一樣類別上的得分。最終取最大得分爲預測類別。網絡
訓練這樣一個模型,咱們須要對每一個像素都分好類的訓練集(一般比較昂貴)。而後前向傳播出一張圖的得分體(C*H*W),與訓練集的標籤體求交叉熵,獲得損失函數,而後反向傳播學習參數。架構
然而,這樣一個模型的中間層徹底保留了圖像的大小,很是佔內存,所以有下面改進的框架。框架
通過欠採樣後能夠大量節省內存,提升效率,最後再通過過採樣來恢復原始圖片的大小。咱們知道欠採樣可使用卷積層和池化,下面介紹過採樣的幾種方式。函數
去池化有Nearest Neighbor,Bed of Nails等方法:性能
還有一種被稱爲Max Unpooling 的方法,該方法記錄下以前使用max pooling前各個最大值在數組中的索引,去池化的時候把值放到索引處,其餘位置補0:學習
不一樣於去池化,轉置卷積法是一種可學習的過採樣方法。具體步驟是,將輸入的每一個值做爲權重,對濾波器進行加權,而後各個加權的濾波器按照步長拼成輸出,重疊部分相加。以下:優化
咱們能夠經過學習濾波器,來學習網絡應該如何作過採樣。rest
理解轉置卷積的一個一維的例子是:
在一些論文裏,轉置卷積還有一些其餘名字,看到的時候要知道:
另外,轉置卷積之因此被稱爲轉置卷積,是由於它的矩陣形式。傳統的卷積寫成矩陣形式以下(注意這裏是一維的例子):
其中x是濾波器,a是輸入。而轉置卷積寫成矩陣形式以下:
分類+定位的任務要求咱們在給圖片打標籤以後,還要框出物體在什麼地方(注意與物體檢測的區別,在分類定位中,輸出的框的個數是事先已知的,而物體檢測中則是不肯定的)。以下:
此類任務經常使用的處理框架以下:
首先咱們仍是用CNN獲得描述圖片的特徵向量,而後咱們接入兩個全鏈接網絡,一個網絡負責生成最後的類別評分,另外一個負責生成紅框四個點的座標值。所以對應兩個損失,softmax損失和迴歸損失。咱們將這兩個損失加權相加獲得總的損失(加權值是超參數),而後進行反向傳播學習。
這裏應用迴歸的思路一樣能夠應用於姿態估計,咱們用十四個點來肯定一我的的姿態狀況:
應用一樣的框架(CNN+迴歸全鏈接網絡)能夠訓練這個任務:
與分類+定位任務不一樣的是,物體檢測中須要檢測的物體數量是不肯定的,所以沒法直接使用上面的迴歸框架。下面簡單介紹幾個框架。
滑動窗口的思想是隨機選取若干個不一樣大小不一樣位置的窗口,對它們應用CNN進行分類。缺點是窗口數量很大,計算代價很高。
訓練階段:
a 使用IMAGENet的數據預訓練一個CNN
b 構造訓練集:首先應用Selective Search算法從每張帶標定框的圖像中選取2000~3000個候選框。對每一個候選框來講,找到與它重疊面積最大的標定框,若是重疊比例大於閾值(0.5),則將該候選框標籤設爲該標定框的標籤,若重疊比例小於閾值(0.5),則標籤設爲「背景」。同時對於重疊比例大於必定閾值(0.6)的候選框,還要計算出其與標定框的偏移距離。
c 每一個候選區域通過預處理,送到CNN中提取出圖像特徵,而後把圖像特徵送到SVM分類器中,計算出標籤分類的損失。同時圖像特徵還要送到迴歸器中,計算偏移距離的L2損失。
d 反向傳播訓練SVM,迴歸器,CNN
總體框架圖以下:
RCNN訓練和預測速度很慢,主要是因爲不一樣候選框之間的重疊部分特徵重複用CNN提取致使的。所以能夠採起先對整個圖像進行CNN特徵提取,而後在選定候選區域,並從總的featuremap中找到每一個候選區域對應的特徵。框架以下:
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.
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
有不少變量可控:
這篇論文對比了各類框架:
Huang et al, 「Speed/accuracy trade-offs for modern convolutional object detectors」, CVPR 2017
FasterCNN比SSD具備更高的精度,可是沒有SSD快。
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
物體分割要作的是在物體檢測上更進一步,從像素層面把各個物體分割出來。
Mask RCNN是當前很前沿的一種方法,其將faster RCNN和語義分割結合成一個框架,具備很是好的效果!框架爲:
如上圖,首先將圖像使用CNN處理爲特徵,而後通過一個RPN網絡生成候選區域,投射到以前的feature map。到這裏與faster RCNN同樣。以後有兩個分支,一個分支與faster RCNN相同,預測候選框的分類和邊界值,另外一個分支則與語義分割類似,爲每一個像素作分類。
mask RCNN具備超級好的效果,有機會必定要拜讀一下。
He et al, 「Mask R-CNN」, arXiv 2017
這些成功的計算機視覺框架和模型給咱們的啓示是,將具備基本功能的模塊整合成一個可訓練的端到端系統,能夠完成更加複雜的功能。經過向網絡中引入多個損失函數的分支,可讓其完成多目標的聯合優化。