摘要
MMSegmentation 是一個(gè)基于 PyTorch 的語義分割開源工具箱。它是 OpenMMLab 項(xiàng)目的一部分。
main 分支代碼目前支持 PyTorch 1.6 以上的版本。
代碼鏈接:https://gitee.com/open-mmlab/mmsegmentation
主要特性
-
統(tǒng)一的基準(zhǔn)平臺(tái)。我們將各種各樣的語義分割算法集成到了一個(gè)統(tǒng)一的工具箱,進(jìn)行基準(zhǔn)測試。
-
模塊化設(shè)計(jì)。MMSegmentation 將分割框架解耦成不同的模塊組件,通過組合不同的模塊組件,用戶可以便捷地構(gòu)建自定義的分割模型。
-
豐富的即插即用的算法和模型。MMSegmentation 支持了眾多主流的和最新的檢測算法,例如 PSPNet,DeepLabV3,PSANet,DeepLabV3+ 等.
-
速度快。訓(xùn)練速度比其他語義分割代碼庫更快或者相當(dāng)。
分割算法分為語義分割、實(shí)例分割和全景分割,課程講解如下:
【課程鏈接】https://www.bilibili.com/video/BV1gV4y1m74P/
【講師介紹】張子豪 OpenMMLab算法工程師
算法庫主頁:https://github.com/open-mmlab/mmsegmentation
代碼教程:https://github.com/TommyZihao/MMSegmentation_Tutorials
課程內(nèi)容:
- 語義分割的基本思路
- 深度學(xué)習(xí)下的語義分割模型
- 全卷積網(wǎng)絡(luò)
- 空洞卷積與 DeepLab 模型
- 上下文信息與 PSPNet 模型
- 分割模型的評(píng)估方法
- 實(shí)踐 MMSegmentation
案例
1、kaggle小鼠腎小球組織病理切片 圖像分割
2、迪拜衛(wèi)星遙感圖像分割
3、基于MMSegmentation的鋼軌裂紋分割提取
什么是語義分割
將圖像按照物體的類別分割成不同的區(qū)域,或者對(duì)每個(gè)像素進(jìn)行分類。
應(yīng)用:無人駕駛汽車
自動(dòng)駕駛車輛,會(huì)將行人,其他車輛,行車道,人行道、交通標(biāo)志、房屋、草地與樹木等 等按照類別在圖像中分割出來,從而輔助車輛對(duì)道路的情況進(jìn)行識(shí)別與認(rèn)知。
應(yīng)用:人像分割
將人和背景分割,實(shí)時(shí)替換視頻的背景。
這個(gè)項(xiàng)目可以看我的博客:https://wanghao.blog.csdn.net/article/details/125134287,我用阿里的開源代碼幾乎做到了實(shí)時(shí)。
應(yīng)用:智能遙感
應(yīng)用 : 醫(yī)療影像分析
通過圖像分割技術(shù),輔助進(jìn)行 醫(yī)療診斷。如右圖,識(shí)別腦部 腫瘤異物的位置。
三種分割的區(qū)別
語義分割(Semantic Segmentation):就是對(duì)一張圖像上的所有像素點(diǎn)進(jìn)行分類。(eg: FCN/Unet/Unet++/…)
實(shí)例分割(Instance Segmentation):可以理解為目標(biāo)檢測和語義分割的結(jié)合。(eg: Mask R-CNN/…)相對(duì)目標(biāo)檢測的邊界框,實(shí)例分割可精確到物體的邊緣;相對(duì)語義分割,實(shí)例分割需要標(biāo)注出圖上同一物體的不同個(gè)體。
全景分割(Panoptic Segmentation):可以理解為語義分割和實(shí)例分割的結(jié)合。實(shí)例分割只對(duì)圖像中的object進(jìn)行檢測,并對(duì)檢測到的object進(jìn)行分割;全景分割是對(duì)圖中的所有物體包括背景都要進(jìn)行檢測和分割。
語義分割的基本思路
按顏色分割
物體內(nèi)部顏色相近,物體交界顏色變化
逐像素份分類
通過滑窗的方式,效率低下!
解決方法:復(fù)用卷積計(jì)算
然后,將全連層卷積化
全卷積網(wǎng)絡(luò) Fully Convolutional Network 2015
論文鏈接:https://openaccess.thecvf.com/content_cvpr_2015/papers/Long_Fully_Convolutional_Networks_2015_CVPR_paper.pdf
存在問題:
圖像分類模型使用降采樣層 (步長卷積或池化) 獲得 高層次特征,導(dǎo)致全卷積網(wǎng)絡(luò)輸出尺寸小于原圖,而分割要求同尺寸輸出。解決方法如下。
解決方法 :
對(duì)預(yù)測的分割圖升采樣,恢復(fù)原圖分辨率,升采樣方案 :
- 雙線性揷值
- 轉(zhuǎn)置卷積 : 可學(xué)習(xí)的升采樣層
雙線性揷值 Bilinear Interpolation
計(jì)算過程:
已知的紅色數(shù)據(jù)點(diǎn)與待插值得到的綠色點(diǎn)
假如我們想得到未知函數(shù)f在點(diǎn)P= (x,y) 的值,假設(shè)我們已知函數(shù)f在Q11 = (x1,y1)、Q12 = (x1,y2),Q21 = (x2,y1) 以及Q22 = (x2,y2) 四個(gè)點(diǎn)的值。
首先在x方向進(jìn)行線性插值,得到R1和R2,然后在y方向進(jìn)行線性插值,得到P.
這樣就得到所要的結(jié)果f(x,y).
其中紅色點(diǎn)Q11,Q12,Q21,Q22為已知的4個(gè)像素點(diǎn).
第一步:X方向的線性插值,在Q12,Q22中插入藍(lán)色點(diǎn)R2,Q11,Q21中插入藍(lán)色點(diǎn)R1;
第二步 :Y方向的線性插值 ,通過第一步計(jì)算出的R1與R2在y方向上插值計(jì)算出P點(diǎn)。
線性插值的結(jié)果與插值的順序無關(guān)。首先進(jìn)行y方向的插值,然后進(jìn)行x方向的插值,所得到的結(jié)果是一樣的。雙線性插值的結(jié)果與先進(jìn)行哪個(gè)方向的插值無關(guān)。
如果選擇一個(gè)坐標(biāo)系統(tǒng)使得 的四個(gè)已知點(diǎn)坐標(biāo)分別為 (0, 0)、(0, 1)、(1, 0) 和 (1, 1),那么插值公式就可以化簡為
f(x,y)=f(0,0)(1-x)(1-y)+f(1,0)x(1-y)+f(0,1)(1-x)y+f(1,1)xy
在x與y方向上,z值成單調(diào)性特性的應(yīng)用中,此種方法可以做外插運(yùn)算,即可以求解Q1~Q4所構(gòu)成的正方形以外的點(diǎn)的值。
雙線性插值的一個(gè)顯然的三維空間延伸是三線性插值。
三線性插值的方法可參看matlab中的interp3
轉(zhuǎn)置卷積 Transposed Convolution,又稱升卷積或者反卷積,但是在數(shù)學(xué)上和卷積不是逆運(yùn)算的關(guān)系!
轉(zhuǎn)置卷積的計(jì)算過程
存在問題
基于頂層特征預(yù)測,再升采樣 32 倍得到的預(yù)測圖較為粗糙,高層特征經(jīng)過多次降采樣,細(xì)節(jié)丟失嚴(yán)重。
解決思路 : 結(jié)合低層次和高層次特征圖。
基于多層級(jí)特征的上采樣
論文鏈接:https://arxiv.org/abs/1411.4038
方法:基于低層次和高層次特征圖分別產(chǎn)生類別預(yù)測,升采樣到原圖大小,再平均得到最終結(jié)果
核心思想:
- 不含全連接層(fc)的全卷積(fully conv)網(wǎng)絡(luò)??蛇m應(yīng)任意尺寸輸入。
- 增大數(shù)據(jù)尺寸的反卷積(deconv)層。能夠輸出精細(xì)的結(jié)果。
- 結(jié)合不同深度層結(jié)果的跳級(jí)(skip)結(jié)構(gòu)。同時(shí)確保魯棒性和精確性。
對(duì)于FCN-32s,直接對(duì)pool5 feature進(jìn)行32倍上采樣獲得32x upsampled feature,再對(duì)32x upsampled feature每個(gè)點(diǎn)做softmax prediction獲得32x upsampled feature prediction(即分割圖)。
對(duì)于FCN-16s,首先對(duì)pool5 feature進(jìn)行2倍上采樣獲得2x upsampled feature,再把pool4 feature和2x upsampled feature逐點(diǎn)相加,然后對(duì)相加的feature進(jìn)行16倍上采樣,并softmax prediction,獲得16x upsampled feature prediction。
對(duì)于FCN-8s,首先進(jìn)行pool4+2x upsampled feature逐點(diǎn)相加,然后又進(jìn)行pool3+2x upsampled逐點(diǎn)相加,即進(jìn)行更多次特征融合。
FCN缺點(diǎn):
結(jié)果不夠精細(xì)。進(jìn)行8倍上采樣雖然比32倍的效果好了很多,但是上采樣的結(jié)果還是比較模糊和平滑,對(duì)圖像中的細(xì)節(jié)不敏感。
對(duì)各個(gè)像素進(jìn)行分類,沒有充分考慮像素與像素之間的關(guān)系。忽略了在通常的基于像素分類的分割方法中使用的空間規(guī)整(spatial regularization)步驟,缺乏空間一致性。
UNet 20115
論文鏈接:https://arxiv.org/pdf/1505.04597.pdf
整個(gè)U-Net網(wǎng)絡(luò)結(jié)構(gòu)類似于一個(gè)大型的字母U,與FCN都是很小的分割網(wǎng)絡(luò),既沒有使用空洞卷積,也沒有后接CRF,結(jié)構(gòu)簡單。
計(jì)算過程:
- 首先進(jìn)行Conv+Pooling下采樣;
- 然后反卷積進(jìn)行上采樣,crop之前的低層feature map,進(jìn)行融合;
- 再次上采樣。
- 重復(fù)這個(gè)過程,直到獲得輸出388x388x2的feature map,
- 最后經(jīng)過softmax獲得output segment map。總體來說與FCN思路非常類似。
UNet的encoder下采樣4次,一共下采樣16倍,對(duì)稱地,其decoder也相應(yīng)上采樣4次,將encoder得到的高級(jí)語義特征圖恢復(fù)到原圖片的分辨率。
特征融合方式:
- FCN采用的是逐點(diǎn)相加,對(duì)應(yīng)tensorflow的tf.add()函數(shù)
- U-Net采用的是channel維度拼接融合,對(duì)應(yīng)tensorflow的tf.concat()函數(shù)
PSPNet 2016
論文鏈接:https://arxiv.org/abs/1612.01105
作者在ADE20K數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn)時(shí),主要發(fā)現(xiàn)有如下3個(gè)問題:
- 錯(cuò)誤匹配,F(xiàn)CN模型把水里的船預(yù)測成汽車,但是汽車是不會(huì)在水上的。因此,作者認(rèn)為FCN缺乏收集上下文能力,導(dǎo)致了分類錯(cuò)誤。
- 作者發(fā)現(xiàn)相似的標(biāo)簽會(huì)導(dǎo)致一些奇怪的錯(cuò)誤,比如earth和field,mountain和hill,wall,house,building和skyscraper。FCN模型會(huì)出現(xiàn)混淆。
- 小目標(biāo)的丟失問題,像一些路燈、信號(hào)牌這種小物體,很難被FCN所發(fā)現(xiàn)。相反的,一些特別大的物體預(yù)測中,在感受野不夠大的情況下,往往會(huì)丟失一部分信息,導(dǎo)致預(yù)測不連續(xù)。
為了解決這些問題,作者提出了Pyramid Pooling Module。
在深層網(wǎng)絡(luò)中,感受野的大小大致上體現(xiàn)了模型能獲得的上下文新消息。盡管在理論上Resnet的感受野已經(jīng)大于圖像尺寸,但是實(shí)際上會(huì)小得多。這就導(dǎo)致了很多網(wǎng)絡(luò)不能充分的將上下文信息結(jié)合起來,于是作者就提出了一種全局的先驗(yàn)方法-全局平均池化。
在PPM模塊中并聯(lián)了四個(gè)不同大小的全局池化層,將原始的feature map池化生成不同級(jí)別的特征圖,經(jīng)過卷積和上采樣恢復(fù)到原始大小。這種操作聚合了多尺度的圖像特征,生成了一個(gè)“hierarchical global prior”,融合了不同尺度和不同子區(qū)域之間的信息。最后,這個(gè)先驗(yàn)信息再和原始特征圖進(jìn)行相加,輸入到最后的卷積模塊完成預(yù)測。
pspnet的核心就是PPM模塊。其網(wǎng)絡(luò)架構(gòu)十分簡單,backbone為resnet網(wǎng)絡(luò),將原始圖像下采樣8倍成特征圖,特征圖輸入到PPM模塊,并與其輸出相加,最后經(jīng)過卷積和8倍雙線性差值上采樣得到結(jié)果如下圖:。
DeepLab系列
DeepLab 是語義分割的又一系列工作,其主要貢獻(xiàn)為:
- 使用空洞卷積解決網(wǎng)絡(luò)中的下采樣問題
- 使用條件隨機(jī)場 CRF 作為后處理手段,精細(xì)化分割圖
- 使用多尺度的空洞卷積 ( ASPP 模塊) 捕捉上下文信息
DeepLab v1 發(fā)表于 2014 年,后于 2016、2017、2018 年提出 v2、v3、v3+ 版本。
空洞卷積解決下采樣問題
圖像分類模型中的下采樣層使輸出尺寸變小
如果將池化層和卷積中的步長去掉 :
- 可以減少下采樣的次數(shù) ;
- 特征圖就會(huì)變大,需要對(duì)應(yīng)增大卷積核,以維持相同的感受野,但會(huì)增加大量參數(shù)
- 使用空洞卷積 ( Dilated Convolution/Atrous Convolution ),在不增加參數(shù)的情況下增大感受野
DeepLab模型
DeepLab 在圖像分類網(wǎng)絡(luò)的基礎(chǔ)上做了修改 :
- 去除分類模型中的后半部分的下采樣層
- 后續(xù)的卷積層改為膨脹卷積,并且逐步增加rate來維持原網(wǎng)絡(luò)的感受野
條件隨機(jī)場 Conditional Random Field, CRF
模型直接輸出的分割圖較為粗?,尤其在物體邊界處不能產(chǎn)生很好的分割結(jié)果。
DeepLab v1&v2 使用條件隨機(jī)場 (CRF) 作為后處理手段,結(jié)合原圖顏色信息和神經(jīng)網(wǎng)絡(luò)預(yù)測的類 別得到精細(xì)化分割結(jié)果。
CRF 是一種概率模型。DeepLab 使用 CRF 對(duì)分割結(jié)果進(jìn)行建模,用能量函數(shù)用來表示分割結(jié) 果優(yōu)劣,通過最小化能量函數(shù)獲得更好的分割結(jié)果。
?能量函數(shù)?
E
(
x
)
=
∑
i
θ
i
(
x
i
)
+
∑
i
j
θ
i
j
(
x
i
,
x
j
)
x
i
,
x
j
?特定像素的預(yù)測結(jié)果?(向量化后只有1維坐標(biāo))?
x
?全部像素的預(yù)測結(jié)果?
θ
i
(
x
i
)
?單個(gè)預(yù)測對(duì)能量函數(shù)的貢獻(xiàn)?
θ
i
,
j
(
x
i
,
x
j
)
?一對(duì)預(yù)測對(duì)能量函數(shù)的貢獻(xiàn)?
\begin{array}{l} \text { 能量函數(shù) } \quad E(\boldsymbol{x})=\sum_{i} \theta_{i}\left(x_{i}\right)+\sum_{i j} \theta_{i j}\left(x_{i}, x_{j}\right) \\ x_{i}, x_{j} \text { 特定像素的預(yù)測結(jié)果 (向量化后只有1維坐標(biāo)) } \\ \boldsymbol{x} \text { 全部像素的預(yù)測結(jié)果 } \\ \theta_{i}\left(x_{i}\right) \text { 單個(gè)預(yù)測對(duì)能量函數(shù)的貢獻(xiàn) } \\ \theta_{i, j}\left(x_{i}, x_{j}\right) \text { 一對(duì)預(yù)測對(duì)能量函數(shù)的貢獻(xiàn) } \\ \end{array}
?能量函數(shù)?E(x)=∑i?θi?(xi?)+∑ij?θij?(xi?,xj?)xi?,xj??特定像素的預(yù)測結(jié)果?(向量化后只有1維坐標(biāo))?x?全部像素的預(yù)測結(jié)果?θi?(xi?)?單個(gè)預(yù)測對(duì)能量函數(shù)的貢獻(xiàn)?θi,j?(xi?,xj?)?一對(duì)預(yù)測對(duì)能量函數(shù)的貢獻(xiàn)??
空間金字塔池化 Atrous Spatial Pyramid Pooling ASPP
PSPNet 使用不同尺度的池化來獲取不同尺度的上下文信息
DeepLab v2 & v3 使用不同尺度的空洞卷積達(dá)到類似的效果
?更大膨脹率的空洞卷積? ? ?更大的感受野? ? ?更多的上下文特征? \text { 更大膨脹率的空洞卷積 } \longrightarrow \text { 更大的感受野 } \longrightarrow \text { 更多的上下文特征 } ?更大膨脹率的空洞卷積???更大的感受野???更多的上下文特征?
DeepLab V3+
- DeepLab v2 / v3 模型使用 ASPP 捕捉上下文特征
- Encoder / Decoder 結(jié)構(gòu) (如 UNet ) 在上采樣過程中融入低層次的特征圖,以獲得更精細(xì)的分割圖
- DeepLab v3+ 將兩種思路融合,在原有模型結(jié)構(gòu)上增加了一個(gè)簡單的 decoder 結(jié)構(gòu)
SegFormer
論文鏈接:https://arxiv.org/abs/2105.15203
SegFormer主要包含2個(gè)模塊:
(1)Encoder:分層的Transformer產(chǎn)生高分辨率低級(jí)特征和低分辨率的細(xì)節(jié)特征;
(2)Decoder:輕量級(jí)的全MLP解碼器融合多級(jí)特征得到語義分割結(jié)果。
K-Net
論文鏈接:https://arxiv.org/abs/2106.14855
K-Net:針對(duì)語義分割、實(shí)例分割和全景分割三個(gè)任務(wù),K-Net提出了一種基于動(dòng)態(tài)內(nèi)核的分割模型,為每個(gè)任務(wù)分配不同的核來實(shí)現(xiàn)多任務(wù)統(tǒng)一。
MaskFormer
論文鏈接:https://arxiv.org/abs/2107.06278
Mask2Former
論文鏈接:https://arxiv.org/abs/2112.01527
SAM
論文翻譯:https://blog.csdn.net/m0_47867638/article/details/130303685
OpenMMLab的Playground就是基于SAM的標(biāo)注工具!
評(píng)估
比較預(yù)測和真值
評(píng)估指標(biāo)
- Jaccard(IoU)
用于比較有限樣本集之間的相似性與差異性。Jaccard值越大, 樣本相似度越高。
I O U = T P F P + T P + F N I O U=\frac{T P}{F P+T P+F N} IOU=FP+TP+FNTP?文章來源:http://www.zghlxwxcb.cn/news/detail-481759.html
- Dice相似系數(shù)
一種集合相似度度量指標(biāo), 通常用于計(jì)算兩個(gè)樣本的相似度, 值的范圍0 1, 分割結(jié)果最好時(shí)值為 1 , 最差時(shí)值為 0 。Dice相似系數(shù)對(duì)mask的內(nèi)部填充比較敏感。
文章來源地址http://www.zghlxwxcb.cn/news/detail-481759.html
到了這里,關(guān)于AI實(shí)戰(zhàn)營第二期 第七節(jié) 《語義分割與MMSegmentation》——筆記8的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!