詹琦梁,陳勝勇,胡海根,李小薪,周乾偉
(浙江工業大學 計算機科學與技術學院,杭州 310000)
圖像分割是計算機視覺、數字圖像處理和自動駕駛等技術領域所研究的基本課題之一.圖像分割是指根據圖像的一致性特征在待分割的圖像中劃分具有相對均勻特征的區域,以此將圖像劃分為彼此不重疊的若干子區域,使得其中同一子區域內的特征具有某些相似性,不同子區域之間的特征具有顯著差異[1],并且待分割的目標可以與背景分離,從而提取出目標.
目前,在圖像分割領域眾多國內外的專家學者進行了多年深入的研究,涌現出大量圖像分割的算法,然而在圖像分割效果方面,缺少能夠實現通用效果的分割理論.如圖像分類,圖像分析等許多圖像方面的工作能否達到預期的實驗效果,在很大程度上受到圖像分割質量的影響.因而獲取具有精確邊緣的分割圖像具有重要的科研價值.
Mask RCNN(簡稱MRCNN)[2]是基于RCNN系列、FPN、FCIS等工作之上的圖像分割算法.Mask RCNN算法是在Faster RCNN[3]算法的基礎之上發展而來.Faster RCNN算法主要用來進行目標檢測,其主要思想是針對每個檢測候選區域有類別標簽和bounding box偏移量兩個輸出,因此Mask RCNN就在Faster RCNN的基礎上通過增加一個分支進而再增加一個輸出,即輸出物體掩膜(object mask).Mask RCNN是一個目標實例分割的框架(object instance segmentation),能夠對圖像中的各個目標進行類別的檢測,同時還能為圖像中的每個識別的物體生成一個高質量的分割掩膜(segmentation mask).
本文提出一種圖像的自動精細分割方法.該方法在Mask RCNN輸出的分割掩膜的基礎上,使用超像素SLIC和形態學算法進行掩膜的后處理,得到待分割圖像的確定前景、確定背景和待分割區域,再輸入到改進后的GrabCut算法中進行迭代,最后對得到的結果進行CRF精細化處理,得到最后精確分割的目標圖像.
Faster RCNN算法第一步先在輸入圖像上通過卷積提取特征圖,其中共享卷積核.然后將得到的卷積特征圖輸入到RPN網絡中,通過RPN網絡生成待檢測的RoI候選框并對RoI候選框進行位置的修正.再通過RoI Pooling層對RPN網絡的輸出在feature map上進行映射操作,輸出每個RoI區域所對應的特征圖,并將維度置為定值.最后,使用全連接層(FC Layer)對RoI區域特征圖進行分類,并且對目標bounding boxes進行第二次修正.
Mask RCNN算法是RCNN系列算法的延續和擴展.Mask RC-NN算法對Faster RCNN中的RoI Pooling進行了改進并提出了RoI Align方法[4].RoI Align方法通過使用雙線性插值來更精確地找到每個位置對應的特征.Mask RCNN算法流程圖如圖1所示.
在Mask Branch訓練時,不使用FCN式的SoftmaxLoss,而是輸出T個mask預測圖(為每一個類都輸出一張預測圖),并采用average binary cross-entropy loss訓練.在訓練的時候,輸出的T個特征圖中,只有對應ground truth類別的特征圖對mask loss有影響.Mask RCNN的訓練損失函數可以描述為:
Lfinal=L({pi},{ti})+(Lcls+Lbox+Lmask)
(1)
其中L({pi},{ti})是訓練RPN網絡的損失函數,Lcls表示為分類損失,Lbox表示為邊框回歸損失,Lmask表示為掩膜的損失。
SLIC[5](simple linear iterative clustering)即簡單的線性迭代聚類,是一種比較常用的超像素分割算法,實現起來方便、簡單,在工程上有廣泛的使用.SLIC主要使用了CIELAB顏色空間,將RGB彩色圖像轉化為CIELAB空間下的5維特征向量[l,a,b,x,y].
SLIC具體實現的步驟如下所示:
1) 初始化種子點(聚類中心)
類似于K-means[6]聚類算法,首先在程序的初始階段設置K個分割超像素個數.假設輸入圖像的像素數量為N,則通過聚類算法圖像將被分成K個超像素塊,每個超像素塊就是一個聚類結果,每個超像素塊的大小是S*S,并且相鄰種子點之間的距離大約為S=sqrt(N/K).
2) 鄰域內重新選擇種子點(假設取n=3)
在每個超像素塊中隨機采樣一個點作為聚類中心.為了防止采樣點落在圖像梯度較大的輪廓邊界上,影響后續聚類效果,對該采樣點周圍n*n鄰域內計算所有像素點的梯度值,找到該鄰域內梯度最小的像素點,將聚類中心移動到該點上.
3) 在采樣點周圍的鄰域內為每個像素點分配類標簽
在2S*2S范圍內搜索像素點,S指的是期望的超像素邊長,其目的是可以加快算法收斂速度,而K-means的搜索范圍是整張圖片.
4) 距離度量
分別計算每個搜索到的像素點Ci=[li,ai,bi,xi,yi]和該超像素點中心Cj=[lj,aj,bj,xj,yj]的距離.具體的計算公式如下:
(2)
(3)
(4)
(5)
其中,Ns是類內的最大空間距離,Ns=S=sqrt(N/K),dc指的是顏色距離,ds指的是空間距離.最大的顏色距離Nc=m,m為常數,取值范圍為[1,40],一般取10.最終的距離度量D′如下所示:
(6)
對于每個像素點,選擇與該像素點距離最小的超像素作為該像素點的聚類中心,為該像素打上類標簽.
5) 迭代優化
不斷迭代上述步驟直到誤差收斂,通過實驗發現絕大部分圖片在10次迭代內可以得到較理想效果,所以迭代次數取10.
6) 增強連通性
在上述迭代優化的過程中可能會出現超像素尺寸過小、多連通情況,這些情況可以通過增強連通性解決.
GrabCut[7]圖像分割算法是一種有效的從復雜背景中提取前景目標的交互式分割算法,由微軟研究院基于Grap hCuts[8]算法的原理改進而來,是目前比較優秀實用的算法之一,主要功能是用來從待分割圖像中分割出前后景.該算法需要通過用戶的交互操作,指定圖像中的前后景信息,使用高斯混合模型(GMM)對圖像建模,最后采用迭代估計法實現能量最小化得到最終的分割結果.
對于一幅包含N個像素點的圖像,GrabCut將其映射成一張加權網絡圖并建立相應的能量函數,最后通過最大流/最小割來對圖像進行最后的分割.圖片中的像素對應的分割結果只有兩類:一類屬于前景,用1表示,一類屬于背景,用0表示.GrabCut分割算法分別用一個K維的高斯混合模型(Gaussian Mixture Model,GMM)對圖像中的前景和背景建模.其中單高斯模型的概率密度函數為:
(7)
高斯混合模型就是由k個單高斯模型所組成,如下式所示:
(8)
由此可見,整個高斯混合模型就是多個單高斯模型密度加權之和,其中,t(i)就是每個高斯模型的權重.
GrabCut算法通過能量函數求解最優分割.能量函數主要包括了兩項:區域懲罰項和邊界懲罰項.區域懲罰項又稱為數據懲罰項,而邊界懲罰項主要用來鄰接像素點的空間和顏色之間的關系.能量函數用如下形式表示:
E(α,k,θ,z)=U(α,k,θ,z)+V(α,z)
(9)
其中,U定義為:
(10)
式中:
D(αn,kn,θ,zn)=-logp(zn|αn,kn,θ)-logπ(αn,kn)
(11)
且p(·)是一個高斯概率分布,π(·)是混合權重系數.
此時高斯參數模型為:
θ={π(α,k),μ(α,k),∑(α,k),α=0,1;k=1…K}
(12)
其分別對應第k個高斯模型的權值π、均值μ和協方差∑.平滑項V可用RGB空間的歐氏距離求出:
(13)
GrabCut算法中把圖像的像素點分為4大類:{F,B,PF,PB}.其中F代表確定的前景像素點,B代表確定的背景點,PF代表可能的前景點,PB代表可能的背景點.在GrabCut算法中,用戶先通過人工標注在圖像上用矩形框選擇需要分割的區域,區域外的為確定的背景像素點,區域內的為可能是前景也可能是背景的像素點,統稱為不確定項,以此為依據建立GMM模型并初始化.其次,GrabCut算法為用戶還提供了另一個接口,可由用戶指定圖像中的某些像素分別屬于{F,B,PF,PB}中的哪些類,這樣可以通過人工指定的方式提高算法分割的準確度.
通過前期形態學的預處理,可以得到分割圖像的三元圖,即確定的背景區域、確定的前景區域和可能的前景區域,GrabCut算法將這些區域中的像素劃分為背景和前景兩個類別,對于背景和前景均采用高斯混合模型(GMM)算法進行建模,在建模的過程中首先對這兩類像素使用k-means算法進行聚類,將每個類別分別聚類為K類(K取5),即GMM中的K個高斯混合模型分量.然后通過每個高斯模型中已有的樣本像素集的RGB值來估計每個高斯模型的參數均值和協方差.而最終的高斯混合模型需要通過K個高斯分量加權求和得到,因此每個高斯分量的權值也需要通過屬于該高斯分量的像素個數與總像素個數的比值來確定.由此可知,k-means算法的聚類結果將決定該像素屬于哪個GMM分量并影響最終分割結果.
然而GrabCut算法在執行k-means算法聚類時僅考慮了像素的RGB顏色信息,其結果是使GMM中各分量的分布不均勻,不利于后續迭代中能量函數的收斂,影響最終的分割結果.本文基于參考文獻[9]在使用k-means算法進行聚類時加入改進的像素位置信息的方法.為了獲得更合理的初始GMM參數,本文將位置信息修改如下.
原始像素對應特征向量為:
xi=(Pr,Pg,Pb)
(14)
其中,Pr,Pg,Pb分別是圖像的RGB三通道分量.本文所采用位置信息的計算步驟如下:
1.通過得到的MaskRCNN掩膜計算得到掩膜的質心Pc.
2.遍歷待分割區域每一個像素點,計算得到離質心距離最大的一個點的距離,記為dm,計算公式如(16)所示:
dm=max(‖P-Pc‖)
(15)
計算每個像素點與質心的距離d,計算公式如下所示.
d=‖P-Pc‖
(16)
3.通過dm、d計算得到位置信息.加入位置信息后本文特征向量為:
(17)
將位置信息可視化如圖2所示.

圖2 位置信息可視化
加入的位置信息能夠減小背景的像素差異,使屬于背景的一類像素點能夠更容易聚類成一類.越靠近目標前景區域的像素點越能夠保留較大的像素差異.
實驗結果如圖3所示,圖3(a)中原始的聚類算法將作為前景飛機的像素分類成了兩類,作為背景的天空中的像素分類到了三個高斯分量中,背景結構復雜.圖3(b)是采用加入位置信息后的聚類算法處理后得到的圖片,從圖中可以看出,飛機的大部分像素點被分為了一類,并且天空的像素點也只剩下了兩類,背景像素類別大大簡化,這種方法可以使前景目標的像素位于較少的高斯分量上,產生分布更加合理的高斯分量,有利于后續能量函數的收斂.

圖3 k-means聚類效果對比Fig.3 Comparison of k-means cluster results
本文采用Keras[10]深度學習庫來復現Mask RCNN算法,該深度學習庫以TensorFlow[11]框架作為后端,該框架具有對模型進行快速實現,支持GPU加速等優點.同時采用MS COCO數據集訓練該模型,最后用訓練好的模型進行預測.
本文以Mask RCNN預分割掩膜為起點,結合多種圖像分割算法的優點,提出一種能夠得到精細邊緣的圖像分割方案,通過該方案可以解決Mask RCNN分割掩膜邊緣精度不高的問題.具體的方案流程如圖4所示.

圖4 分割流程圖Fig.4 Segmentation flowchart
首先輸入待分割RGB圖像,通過Mask RCNN算法得到初始的各個物體的實例分割掩膜,同時通過SLIC算法得到圖像的超像素標簽圖,結合實例分割掩膜采用形態學方法得到GrabCut算法分割初始掩膜,最后將原始的RGB圖像輸入GrabCut算法得到精細化后的分割掩膜.
本文選取如圖5(a)所示的圖片進行實驗.首先,Mask RCNN使用ResNet-101殘差卷積網絡對輸入圖像進行整體特征的提取,得到圖像的共享卷積特征圖,該特征提取過程繼承自Faster RCNN網絡中的特征提取過程.其次使用已經訓練好的RPN網絡來生成多個ROI候選區域,然后將ROI候選區域映射到共享卷積特征圖上以獲得每個ROI區域的卷積特征圖,同時對每個ROI區域使用ROI Align方法進行像素校正.對每個ROI的分類和bounding box的預測在ROI區域的特征圖上來進行.最后,使用FCN框架來預測ROI區域的每個像素點所屬的類別,最終獲得圖像分割的結果.
圖片經過Mask RCNN算法處理后能夠得到三個預測結果:1)圖片中的物體所對應的目標檢測框.2)圖片中的物體所對應的類別置信度(score).3)圖片中的每個物體所對應像素上覆蓋的分割掩膜(mask).從分割結果中選擇分割掩膜顯示,如圖5(b)所示.
此方法是將掩膜邊緣所對應的超像素塊添加擴展到初始mask上,具體的方法流程如下:
1) 輸入待分割原圖和Mask RCNN分割后的初始掩膜,記為m1.
2) 直接將原圖放在SLIC超像素算法中進行超像素分割,根據多次實驗比較,超像素塊數量設置為:
(18)
最后得到一張超像素圖,該超像素圖中分別為每個超像素塊設置一個標簽,每個超像素塊集合中的像素點的標簽就是該超像素塊聚類中心的標簽,標簽從0開始排序,超像素圖記為s1.
3) 將初始掩膜m1腐蝕一次,得到腐蝕后的掩膜,記為m2.
4) 將初始掩膜減去腐蝕后的掩膜,即m1-m2,得到初始掩膜的邊緣區域,記為m3.如圖5(c)所示.
5) 將邊緣區域m3與超像素圖s1相乘,得到邊緣處每個像素點所對應的標簽.對邊緣處的標簽去重,根據邊緣標簽在超像素圖中找到標簽所對應的超像素塊,將超像素塊與初始掩膜相加,得到擴展之后的掩膜m4.如圖5(d)所示

圖5 實驗結果圖Fig.5 Experimental result chart
在正式輸入GrabCut算法進行分割之前,還需要對得到的擴展后的掩膜進行分割前預處理.具體的步驟如下:
1) 對初始掩膜m1進行多次形態學腐蝕操作.該操作的目的是由于Mask RCNN分割的掩膜邊緣精細度不高,對物體內部的空間不做分割,目標物體內部細節的空間信息無法體現,導致掩膜只是內部完全相連的一塊,不夠精細.而作為GrabCut的分割原始mask,將視為確定的前景,因此需要腐蝕到合適的大小,既能作為確定的前景來生成GrabCut分割的初始mask,又不會引入過多的背景,導致分割結果不理想.根據多次試驗比較,將初始掩膜腐蝕到面積只占原掩膜面積的1/3能得到比較好的實驗效果.該部分像素點置為1,即確定的前景,記作m5,周圍其他區域都是背景(像素點值為0).
2) 與對Mask RCNN分割掩膜進行簡單的膨脹不同,本方案對經過超像素擴展后的掩膜m4進行多次膨脹(經過試驗對比,當膨脹的面積為超像素擴展后掩膜面積的1/3時可以達到比較滿意的效果).其目的是盡可能多的擴展待分割的區域,因為Mask RCNN分割的掩膜的邊緣信息存在缺失,缺失的部分在形態上可能比較尖銳或者比較狹長,像素點之間可能存在大面積的連通,簡單的膨脹無法把缺失的部分覆蓋進來.而超像素擴展后的圖像對物體的邊緣已經進行了一定的延伸和擴展,對缺失部分有了一定的填補,通過多次膨脹就能夠盡可能多的將目標前景缺失的部分都填補上.但是也不能擴展的過大,導致分割時將不屬于目標物體但像素值與初始掩膜相近的物體誤認為是目標而引入.該部分像素點置為2,即不確定區域,記作m6,周圍其他區域都是背景(像素點值為0).
3) 然后計算m5+m6,將值為3的像素點仍置為1,其他的不變,得到GrabCut分割初始掩膜m7,將其可視化如圖5(e)所示.該圖是一幅三元圖,其中具有三個區域,從外到內分別為確定背景區域,不確定區域和確定的前景區域,后續的操作主要是對不確定區域進行分割.
最后將分割初始掩膜m7輸入到改進的GrabCut程序中,同時輸入原圖,GrabCut算法通過初始掩膜在分割原圖上使用改進的GMM建模,再計算各個分量,最后通過最大流最小割得到最終分割結果.
后續再對分割結果進行CRF(Conditional Random Field,條件隨機場)處理,能夠使邊緣更加精細.最終得到的分割結果如圖5(f)所示.
本文的實驗設備為64位四核CPU,8GB內存PC機,系統和軟件環境為Ubuntu18.04和python3.6.本實驗使用MSRA10K數據集,該數據集被廣泛用于評價顯著性檢測和分割方法,該數據集包含10000張圖像,并包含真實標注的像素級基準圖像(GT),可以用來主觀和客觀地評價算法的性能.從中選擇5張比較典型的包含自然界常見類別的實例物體進行檢測.
為了驗證本文所提方法的精確度,本文主要采用三種方法進行實驗比較:1)Faster RCNN結合GrabCut算法(通過Faster RCNN目標檢測算法檢測到圖像中的物體,得到物體的初始框,再通過GrabCut算法進行分割,這里簡記為FRCNN+).2)顯著性檢測結合GrabCut算法(本文參考文獻[12]中的方法,參考文獻中初始掩膜的獲取采用顯著性FT算法,為保證更好的分割效果和對比性,本文采用最新的MR顯著性算法[13],其他算法處理流程與文獻相同,該方法簡記為顯著性+).3)本文方法.比較的結果如圖6所示.

圖6 多種分割算法結果比較Fig.6 Comparison of segmentation results in different algorithms
第一組圖像中由于FasterRCNN所檢測到的物體不完全,所以人物的下半部分有明顯的缺失,且人物的右側臉和肩膀有缺失;基于顯著性算法的分割方法,由于顯著性檢測缺少約束,結果導致人物的右腿下半部分缺失,而本文的方法能夠很好地回避這些問題,同時因為在Mask RCNN實例分割階段把人物左下角的包也檢測了出來,因此在分割的時候沒有將其作為person類分割進去,保證了人物分割的合理性.第二組圖片中FasterRCNN的分割結果右邊有明顯的邊框痕跡,而顯著性檢測分割的結果人物的下半部分也存在缺失的情況,而本文算法所得到的分割效果與標簽掩膜基本一致.第三組分割結果中,FasterRCNN分割結果可以看到,汽車的輪胎部分有明顯的缺失,汽車頂部也沒有分割到位,顯著性分割效果比FasterRCNN分割效果略好,但是也存在著輪胎部分缺失的情況.第四組分割結果中,FasterRCNN分割把部分背景也當做前景分割進來,顯著性方法雖然不存在背景問題,但是沒有把鳥的腿部分割進來,而本文的算法能夠檢測到鳥的腿部,也沒有引入多余的背景.第五組結果中,由于FasterRCNN分割在檢測的過程中檢測框并沒有把飛機的所有部分都框入在待檢測區域內,導致分割后飛機的機頭部分沒有分割出來,而顯著性分割和本文算法完整的分割出來飛機,并且分割效果與標簽基本一致.
本文對分割方法的評價方式主要有以下幾種:
1) Jaccard系數
Jaccard系數指的是兩個集合A和B交集元素的個數占集合A和B并集元素個數所占的比例,用符號J(A,B)表示.Jaccard系數是一種用來衡量兩個集合相似度的指標,系數越大,兩個集合之間的相似度越高;反之,系數越小,兩個集合的相似度越小.具體的計算公式如公式(19)所示.
(19)
本文將Jaccard系數作為圖像分割精確度的計算方式,其中集合A指物體實例分割的標簽,集合B指的是經過本文方法處理后得到的實驗分割結果.
2) 欠分割率
欠分割率指的是對于分割目標而言,沒有分割的物體部分占總的分割部分的比值.具體計算公式如公式(20)所示.
(20)
3) 過分割率
過分割率指的是對于分割目標而言,過多分割的物體部分占總的分割部分的比值.具體計算公式如公式(21)所示.
(21)
從表1-表3可以看出,本文算法正確率明顯高于基于FasterRCNN的GrabCut算法和基于顯著性的GrabCut算法,欠分割率略低于其他兩種方法,過分割率三種方法基本相當.
表1 正確率對比
Table 1 Comparison of segmentation accuracy

圖像正確率FRCNN+顯著性+本文方法Person10.88590.85740.8841Person20.96310.88560.9911Car0.85370.91290.9684Bird0.84360.89360.9374Aeroplane0.83990.97410.9774平均值0.87720.90470.9517
由于分割時間也是影響分割效率的因素之一,因此本文對各算法的的分割時間進行了比較,如表4所示.其中,FRCNN+算法需要先通過Faster RCNN算法預處理圖片得到目標物體的初始位置框,再通過GrabCut算法使用位置框得到分割掩膜,在得到初始位置框的過程中消耗了大量的時間.
表2 欠分割率對比
Table 2 Comparison of under-segmentation rate

圖像欠分割率FRCNN+顯著性+本文方法Person10.10990.13900.1084Person20.03110.10970.0028Car0.14410.07530.0282Bird0.11270.10110.0518Aeroplane0.16010.02590.0146平均值0.11160.09020.0412
表3 過分割率對比
Table 3 Comparison of over-segmentation rate

圖像過分割率FRCNN+顯著性+本文方法Person10.00430.00360.0075Person20.00600.00500.0062Car0.00220.01180.0034Bird0.04370.00530.0108Aeroplane0.00000.00000.0080平均值0.01120.00510.0072
顯著性+算法需要先通過MR顯著性算法得到圖片中物體的顯著性位置,再通過后續的像素擴展和GrabCut操作得到掩膜.本文方法需要先通過Mask RCNN算法初步得到圖片中物體的掩膜,再結合SLIC超像素擴展和形態學操作得到初始的待分割掩膜,最后使用GrabCut算法得到分割結果.Mask RCNN算法之后的操作步驟較多且復雜,但從實驗的結果來看并沒有消耗太多的運行時間,大量的時間主要消耗在Mask RCNN的實例分割階段.本文實驗中沒有使用GPU加速,由于Mask RCNN算法涉及到目標檢測和分割兩個步驟,運行時間接近為Faster RCNN算法的兩倍,因此該實驗結果也在合理的范圍之內.
表4 不同算法的分割時間對比
Table 4 Runtime comparison of different methods

圖像分割時間(s)FRCNN+顯著性+本文方法Person131.47+1.100.08+69.7665.96+1.19Person230.49+1.260.10+74.9366.33+1.05Car28.93+1.130.12+48.6461.12+0.88Bird31.25+1.120.11+14.2765.57+0.96Aeroplane30.40+0.950.11+26.7565.16+1.03
綜上所述,本文所提出的方法能夠有效的分割出不同類型圖像中的目標.與其他算法相比,在分割精度上平均提高了6.9%左右,在整個MSRA10K數據集上的測試平均精度為0.7334(其中不包含Mask RCNN算法識別出的置信度小于0.9的物體和長寬較短的掩膜面積不到原圖五分之一以上的物體),而沒有經過本文方法處理的Mask RCNN算法識別出的掩膜平均精度為0.7053,在客觀上提高了分割的精確度,適合用于自動分割處理批量的圖片.
本文通過MaskRCNN算法對輸入的待檢測圖像進行初級的實例分割,得到圖像中的物體類別和物體的初級掩膜,再通過SLIC超像素分割算法對原圖進行超像素分割得到超像素圖,基于超像素圖對初級分割掩膜進行邊緣的擴展延伸,用以填補分割時缺失的邊緣信息,接著對初級掩膜和擴展后的掩膜進行形態學操作,得到GrabCut分割算法的初始三元圖掩膜,最后通過改進的GrabCut算法得到最終的分割結果.與其他算法進行對比發現,本文分割精確度更高,欠分割率更低,很好的保持了分割目標的完整性,證明了本文所提方法的可靠性.