圖像分割算法對比小結
- 1.{基本概念}
- 2.{R-CNN}
- 2.1R-CNN 網絡結構
- 選擇性搜索算法
- 為什么選擇SVM作分類器
- 邊框回歸
- 2.2{R-CNN 訓練}
- 2.3{R-CNN實驗結果}
- 2.4{R-CNN語義分割}
- 2.5{補充材料}
- 2.5.1{R-CNN建議區域放縮}
- 2.5.2{IOU閾值設置不一樣的原因}
- 2.5.3{Bounding-box回歸修正}
- 2.6{R-CNN存在的問題}
- 3.{R-CNN變體}
- 3.1{Fast-RCNN}
- 3.1.1{Fast-RCNN的兩點改進}
- 3.1.2{Fast-RCNN實驗結果}
- 3.2{Faster-RCNN}
- 3.2.1{Faster-RCNN的核心改進}
- 4.{FCN-全卷積神經網絡}
- 4.1{FCN網絡結構}
- 4.2{FCN存在的問題}
- 5.{FCN的改進模型}
- 5.1{U-Net}
- 5.1.1{U-Net結構}
- 5.1.2{u-net兩點改進}
- 5.2{segNet}
- 5.2.1{segNet結構}
- 5.2.2{segNet兩點改進}
- 6.{Mask-RCNN}
- 6.1{Mask-RCNN的結構}
- 6.2{Mask-RCNN的兩點改進}
- 6.3{Mask-RCNN的實驗效果}
- 7.{弱監督語義分割}
- 7.1{BoxSup}
- 7.1.1{BoxSup的訓練流程}
本文總結了從2014年R-CNN 第一次提出之后,將 深度學習 方法應用到圖像分割領域的一些經典算法,在每個小節中,附上 文章疑難點 的參考資料。
在講具體的方法之前,先來看一下以下相關概念。
1.{基本概念}
1.object detection-目標檢測,檢測圖片是否帶有感興趣的目標,通常用方框框出來
2.semantic segmentation-語義分割,將圖片中目標按不同的語義,以邊緣為界分隔
3.instance segmentation-實例分割,將圖片中相同語義區域內的不同實例分割開
4.IOU-ntersection-over-union
目標檢測需要定位出物體的bounding box,IOU用于描述bounding box的定位精度:
IOU=SA∩BSA+SB?SA∩BIOU=\frac{S_{A\cap B}}{S_A+S_B-S_{A\cap B}}IOU=SA?+SB??SA∩B?SA∩B??
5.mAP:是指每個類別的平均正確率的算術平均值.
詳細參考博文:
https://blog.csdn.net/anaijiabao/article/details/101495088
https://blog.csdn.net/a417197457/article/details/80224886
第一類方法:基于建議區域的方法。
第一篇是2014年的r-cnn,區域建議的卷積神經網絡用于目標檢測語義分割。
2.{R-CNN}
[1]R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich feature hierarchies for accurate object detection and semantic
segmentation. In Computer Vision and Pattern Recognition,
2014.
論文翻譯:
R-CNN論文詳解(論文翻譯):https://blog.csdn.net/v1_vivian/article/details/78599229
【論文翻譯】Mask R-CNN:https://blog.csdn.net/xiaqunfeng123/article/details/78716136
在R-CNN之前,overfeat(2013,ImageNet定位任務的冠軍)已經使用深度學習的方法做目標檢測,但R-CNN是第一個真正可以工業級應用的解決方案。
文章的兩個貢獻:
(1)apply high-capacity CNNs to bottom-up region proposals in order to localize and segment objects.
(2)when labeled training data is scarce, supervised pre-training for an auxiliary task,followed by domain-specific fine-tuning, yields a significant
performance boost.
2.1R-CNN 網絡結構
Object detection with R-CNN:
(1)selective search[39](選擇性搜索)產生2000個建議區域.
(2)建議區域放縮成277*277,利用Alexnet[25](caffe),對每個放縮后的建議區域提取4096維度的特征.
(3)對特征向量使用每個類別的SVM進行打分,14096-4096(n+1) [n種前景對象+1個背景對象] 將建議區域分到分類得分最高的類別,SVM的得分是里分類面的距離越遠越好【每個類別的SVM分類器是提前訓練好】
(4)針對每個類別的建議區域,采用非極大值抑制算法去除多余的建議區域。【將與置信度最高的區域IOU值>0.5的區域都去除。】
選擇性搜索算法
1)使用一種過分割手段,將圖像分割成小區域 (2k~3k 個)
查看現有小區域,
2)按照合并規則最應該合并的相鄰兩個區域(顏色太相似了)。重復合并操作,直到合并的結果是整張圖
3)在曾經存在過的區域中選2000個區域,即為選擇性搜索產生的建議區域。
selective search 合并規則:顏色相近(顏色直方圖);紋理相近(梯度直方圖);合并后總面積小的;合并后總面積在其BBOX中所占比例大的(保證合并后形狀規則)
多樣化與后處理
顏色想盡規則的補充:
為盡可能不遺漏候選區域,上述操作在多個顏色空間中同時進行(RGB,HSV,Lab等)。在一個顏色空間中,使用上述四條規則的不同組合進行合并。所有顏色空間與所有規則的全部結果,在去除重復后,都作為候選區域輸出。
為什么選擇SVM作分類器
svm訓練和cnn訓練過程的正負樣本定義方式不同,softmax得到的結果比svm精度低。
邊框回歸
學習一個線性回歸器,用于bounding box的邊框回歸,輸入為Alexnet pool5的輸出。
回歸的目標是:從 SVM給出的邊框 -》真值邊框 的x,y方向的平移量Δx,Δy\Delta x,\Delta yΔx,Δy,縮放尺度:Sx,SyS_x,S_ySx?,Sy?
2.2{R-CNN 訓練}
(1)有監督的預訓練-AlexNet網絡參數粗調整:
ILSVRC2012分類數據集(沒有bounding box)上預訓練CNN,采用Caffe的CNN庫。
(2)特定領域的參數調優-AlexNet網絡參數細調整:
結構:隨機初始化的(N+1)類的分類層,替換掉ImageNet的1000類的分類層\
輸入:變形后的bounding box圖像
數據集:VOC2012-train
超參數:SGD,lr=0.001為預訓練時的110\frac{1}{10}101?,避免破壞預訓練模型,正樣本IOU>=0.5(ground-truth box),mini-batch-size=128(正:負=32:96)
(3)取alexnet輸出的特征,為每個物體類訓練一個SVM分類器.
數據集:VOC2012-trainval
輸入:2000[建議區域]*4096[提取的特征]
SVM權重矩陣:4096[每一個區域的特征]*N[類別數]
正樣本:ground-truth box,負樣本IOU<0.5,其余全部丟棄.
2.3{R-CNN實驗結果}
mAP比當時最好的方法提高了30%左右.
2.4{R-CNN語義分割}
用alexnet對CPMS區域提取特征,進行分類.
CPMS區域的三種處理方式:
(1)和前面的目標檢測一樣,直接形變矩形區域
(2)取矩形區域的mask,計算特征
(3)簡單串聯(1)(2)兩個的特征
文章沒有給出語義分割的效果圖,只有在voc2011上的平均正確率,感覺最后也只是切割出了矩形框.
2.5{補充材料}
2.5.1{R-CNN建議區域放縮}
由selective search[39]產生2000個建議區域都是矩形的,但大小不一.附錄A中作者展示了三種放縮方案,最終通過實驗性能選擇了{padding+各向異性} 放縮方法.
(A)bounding box圖像
(B)把bounding box的邊界對周圍圖像內容擴展延伸成227*227正方形;如果已經延伸到了原始圖片的外邊界,那么就用bounding box中的顏色均值填充;
?用固定的背景顏色填充成正方形圖片(背景顏色也是采用bounding box的像素顏色均值)
(D)不管圖片的長寬比例,直接進行放縮,不管它是否扭曲
在放縮前,先將bounding box向周圍圖像內容padding.上圖第1、3行padding=0,第2、4行padding=16.
2.5.2{IOU閾值設置不一樣的原因}
fine-tunning階段是由于CNN對小樣本容易過擬合,需要大量訓練數據,故對IoU限制寬松: IoU>0.5的建議框為正樣本,否則為負樣本
SVM這種機制是由于其適用于小樣本訓練,故對樣本IoU限制嚴格:Ground Truth為正樣本,與Ground Truth相交IoU<0.3的建議框為負樣本.
文章解釋見附錄B
2.5.3{Bounding-box回歸修正}
訓練了一個線性回歸模型,給定一個選推薦區域的pool5特征,去回歸一個新的檢測窗口.(附錄C)
mAP:50.2%->53.7%
2.6{R-CNN存在的問題}
(1)產生的proposal region需要經過warp操作再送入后續網絡,導致圖像的變形和扭曲.\
(2)每一個proposal region都需要進入CNN網絡計算,兩千個region存在大量的范圍重疊,重復的特征提取帶來巨大的計算浪費。
3.{R-CNN變體}
3.1{Fast-RCNN}
[2]R. Girshick, “Fast R-CNN,” in IEEE International Conference on
Computer Vision (ICCV), 2015.
論文翻譯:https://blog.csdn.net/u014119694/article/details/88421618
Fast-RCNN算法流程:
-
selective search(選擇性搜索)產生2000個建議區域
-
整張圖片輸進CNN,得到feature map
-
找到每個建議區域在feature map上的映射區域(具體怎么實現的沒細看),將這些區域輸入ROI pooling層和之后網絡.
-
對候選框中提取出的特征,使用分類器判別是否屬于一個特定類 ; 對于屬于某一特征的候選框,用回歸器進一步調整其位置。
3.1.1{Fast-RCNN的兩點改進}
{改進1:}全圖輸入CNN生成一張feature map ,避免重復特征提取
{改進2:}feature map 上大小不一的建議區域,直接輸入RoI池化中,不經過放縮形變操作.
RoI pooling:建議區域大小為wh,池化后的目標尺寸為WH,將wh的區域劃分為WH個網格,每個格子的尺寸為[w/W,h/H],對每個[w/W,h/H]格子進行最大/平均池化操作,以達到不同大小的建議區域,經過RoI pooling 之后得到相同大小的特征層.
參考博文:ROI Pooling(感興趣區域池化)
https://blog.csdn.net/H_hei/article/details/89791176
3.1.2{Fast-RCNN實驗結果}
(注:S,M,L為三種不同的訓練模型)
Fast-RCNN 比 R-CNN訓練快了大概10倍,測試大概快了100倍左右.
3.2{Faster-RCNN}
[3]Ren S , He K , Girshick R , et al. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2015, 39(6):1137-1149
Faster-RCNN(2015)算法流程:
(1)輸入圖像到卷積網絡中,生成該圖像的feature map。
(2)將feature map傳入Region Proposal Network,返回object proposals
(3)將object proposals 傳入 ROI pooling層和之后網絡
(4)(后續部分與R-CNN相同)
3.2.1{Faster-RCNN的核心改進}
利用Region Proposal Network,優化object proposals的方法.
第二類方法是基于圖像逐像素分類的方法,先來看看2015年的第一篇文章,全卷機網絡用于語義分割。
4.{FCN-全卷積神經網絡}
[5]J. Long, E. Shelhamer, and T. Darrell, “Fully convolutional networks for semantic segmentation,” in CVPR, pp. 3431–3440, 2015.
(201503 arXiv)
論文翻譯:https://blog.csdn.net/mmmmsunshine/article/details/78921265
FCN開創性地利用圖像逐像素分類,解決了語義級別的圖像分割(semantic segmentation)問題。與經典的CNN在卷積層之后使用全連接層得到固定長度的特征向量進行分類(全連接層+softmax輸出)不同,FCN可以接受任意尺寸的輸入圖像,采用反卷積層對最后一個卷積層的feature map進行上采樣, 使它恢復到輸入圖像相同的尺寸,在最后上的采樣的特征圖上進行逐像素分類。
4.1{FCN網絡結構}
{1.卷積化:}將CNN分類器最后的全連接層換成卷積層,使得網絡可以接受任意尺寸的輸入,經過全卷積處理之后得到圖像的heatmap.
2.上采樣:}將heatmap進行上采樣處理之后,得到N+1張與原圖同樣大小的特征圖.
3.跳躍結構(Skip Layer):}直接將heatmap上采樣到原圖大小,丟失了分割細節.所以作者將heatmap2倍上采樣之后,與次層特征相加,再做上采樣的以捕捉更多的細節信息.
作者對AlexNet,VGG,GoogleLeNet做了網絡結構的對比實驗,發現VGG的效果最好:
網絡超參數設置:
(1)minibatch:20張圖片
(2)learning rate:0.001
(3)初始化:分類網絡之外的卷積層參數初始化為0
(4)反卷積參數初始化為bilinear插值。最后一層反卷積固定位bilinear插值
4.2{FCN存在的問題}
1.分割的結果不夠精細。圖像過于模糊或平滑,沒有分割出目標圖像的細節。
2.因為模型是基于CNN改進而來,即便是用卷積替換了全連接,但是依然是獨立像素進行分類,沒有充分考慮像素與像素之間的關系。
與當時最先進方法的對比實驗(對比R-CNN mean I0U 提高了10%)
在FCN 提出的同年內,隨即出現了兩個比較不錯的改進工作,一個是5月份提出的U-net模型,另一個是11月份提出的segnet模型。
5.{FCN的改進模型}
5.1{U-Net}
[7]Ronneberger O , Fischer P , Brox T . U-Net: Convolutional Networks for Biomedical Image Segmentation[J]. 2015.
(201505 arXiv)
生物學會議ICMICCAI 2015相關的文章,主要是針對生物學影像進行分割。該文考慮到醫學影像往往比較少,而深度學習通常需要大量的圖像。因此作者使用數據增強提高數據的利用效率;并基于FCN提出U型網絡模型,最終在三個生物學數據集上達到了當時最好的性能。
U-Net 因其網絡的實用性,小數據學習能力,現在已經成功地被應用到其他領域,例如 衛星圖像分割,同時也成為許多模型的改進基礎。
5.1.1{U-Net結構}
5.1.2{u-net兩點改進}
改進1:}結構上編碼網絡與解碼網絡對稱構成U形結構,編碼器用的是典型的CNN,解碼時上采樣,卷積處理得到特征圖與對應的編碼層特征圖拼接,卷積處理后輸入后續的解碼層.拼接的過程中,需要將編碼層特征圖進行剪裁處理.
改進2:} 增加損失函數對分割邊界像素的懲罰系數:
E=∑x∈Ωw(x)log(pl(x)(x))E=\sum_{x\in \Omega}w(x)log(p_{l(x)}(x))E=x∈Ω∑?w(x)log(pl(x)?(x))
w(x)=wc(x)+w0?exp(?d1(x)+d2(x)2σ2)w(x)=w_c(x)+w_0*exp(-\frac{d_1(x)+d_2(x)}{2\sigma^2})w(x)=wc?(x)+w0??exp(?2σ2d1?(x)+d2?(x)?)
xxx:圖像像素點,l(x):x的真是類別
{u-net實驗效果圖}
5.2{segNet}
[6] Badrinarayanan V , Kendall A , Cipolla R . SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation[J]. 2015.
(201511 arXiv,TPAMI 2015收錄)
論文翻譯:https://blog.csdn.net/u014451076/article/details/70741629
segnet是專門為道路場景圖像語義分割設計的一個網絡,作者認為在自動駕駛,場景分析這類實時性要求很高的場景中,模型方法推斷過程中內存和計算的效率要十分高效才行.
5.2.1{segNet結構}
5.2.2{segNet兩點改進}
改進1:}去除了VGG16中的全鏈接層,只留下卷積層.以便減小網絡可學習參數,加速end-to-end訓練過程.
改進2:}在解碼網絡中,segNet改進了FCN的上采樣去卷積的方式,segNet網絡中的解碼層,先上采樣,再進行卷積操作.上采樣過程中接受對應編碼層傳遞過來的max-pooling indices,將特征填入對應的位置.
作者認為如果反卷積過程中利用了對應卷積層的信息,且這個信息越多,對最后的逐像素分類的效果會越好.FCN用了2-3層的卷積層信息(這個在推斷階段的存儲代價已經很大了),為了利用更多的信息,又不造成內存壓力,segnet 利用了每一卷積層中max -pooling indices.
(CamVid road scenes 數據集)
文章貢獻:}
(1)提高了邊界劃分的精度;
(2)減少了可訓練參數數量,實現端到端訓練;
(3)文中upsampling的形式可以方便地合并到其他模型中[FCN].
接下來看一下第一類和第二類方法的一個結合體:mask-R-cnn
Mask-R-CNN 是何凱明2017年提出的一篇文章,是ICCV2017最佳論文。
6.{Mask-RCNN}
[4] He K , Gkioxari G , Dollar P , et al. Mask R-CNN[C]// 2017 IEEE International Conference on Computer Vision (ICCV). IEEE Computer Society, 2017.
論文翻譯:https://blog.csdn.net/xiaqunfeng123/article/details/78716136
Mask R-CNN是ICCV 2017的best paper , Mske R-CNN在Faster R-CNN 架構上添加了一個全卷積網絡分支,用于預測每個建議區域的mask,使得整個模型可以集目標檢測,目標分類,語義分割三大任務于一體.
6.1{Mask-RCNN的結構}
6.2{Mask-RCNN的兩點改進}
改進1:RoI Pooling->RoI Align}\
在RPN給出特征圖的建議區域之后,將大小不一的建議區域傳給RoI Align層進行處理,相比于Faster R-CNN 中的RoI Pooling , RoI Align對建議區域的采用雙線性插值計算輸入特征的準確值,使AP提高了3%.
改進2:mask分支}\
經過RoI Align處理后的特征圖分兩路輸入后續的網絡:
一路去往和Faster R-CNN 一樣的分支(bounding box 的回歸與分類);
一路去往Mask分支,產生K個m?mm*mm?m二值的mask.
全卷積網絡接受feature map產生N個mask圖,接受一個來自分類分支的類別標簽,選擇對應類的maks輸出.
訓練過程:一個真實標簽為k的RoI,對應mask 損失LmaskL_{mask}Lmask?只由第k個mask 產生,其余mask不起作用.作者認為為每一類別產生mask避免了與其他類別產生競爭現象,使得他的模型比FCN的性能提升了5.5%的AP.
6.3{Mask-RCNN的實驗效果}
任務:實例分割
數據集:coco,80k訓練集,35k測試集,5k驗證集
注 : MNC 2015冠軍 , FCIS 2016冠軍.\
通過實驗作者表明Mask rcnn 能更好解決實例分割中的難題:實例重疊場景下的分割.
語義分割中大多數方法都依賴于大量帶有像素級標注的圖像,然而,手工標注相當費時費力。因此,一些弱監督方法被提出。就個人而言,我一直覺得半監督的方法不太靠譜。下面就介紹一個吧,是2015ICCV 的一個方法。
7.{弱監督語義分割}
7.1{BoxSup}
[8]Dai J , He K , Sun J . BoxSup: Exploiting Bounding Boxes to Supervise Convolutional Networks for Semantic Segmentation[J]. 2015.
參考博文:論文閱讀筆記 | (ICCV 2015) BoxSup
https://blog.csdn.net/qq_16525279/article/details/79812057
7.1.1{BoxSup的訓練流程}
(1)對圖片的bounding box ground-truth使用,Multiscale Combinatorial Grouping (MCG)生成分割mask的候選,并優化label選一個與bounding box平均交集最大的mask作為監督信息。
(2)利用上述標簽信息更新分割網絡(FCN)的參數
(3)基于訓練出的語義分割網絡對物體框中的前景區域進行預測,提升前景mask 的準確度,再循環訓練FCN.
BoxSup的核心思想就是通過這種迭代過程不斷提升網絡的語義分割能力。
BoxSup 實驗結果}
參考資料:
https://perper.site/2019/02/11/RCNN%E8%AF%A6%E8%A7%A3/?nsukey=OzE2MLcBB2GYybpl4cS%2BPGz6N9r7FRNQ02hQVzYylRq3Z1oF9nPap1k0yfBVdjTHXR8tXFih88F6WoVIegQ8uuHEjEQ7%2F1MNLmO23AVmQae5uPFs9su9Xi11UmIUFJRUpfF945J0bnucf6QVcqeuoyqy1dANjcWPRjv1Te4Mdsb5Itfu1H4%2FjsTHwlULqrUCYAeRrpKTau%2Bx%2FTbjfZ5L7w%3D%3D