謝慧明 常博學 黃仕峰 覃陽*
(1 桂林航天工業(yè)學院 工程綜合訓練中心,廣西 桂林 541004;2 桂林航天工業(yè)學院 機電工程學院,廣西 桂林 541004;3 桂林電子科技大學 人工智能學院,廣西 桂林 541004)
圖像語義分割需要是給圖像中的每個像素預測一個類別,主要應(yīng)用于目標檢測、符號識別以及圖像壓縮等方面,是機器視覺中的一個研究熱點。在有監(jiān)督應(yīng)用場景中,用一組圖像和像素級的語義標簽(比如天空、自行車等)來訓練一個分類系統(tǒng)。目前應(yīng)用比較廣泛的有監(jiān)督框架是全卷積網(wǎng)絡(luò)(FCNs)[1],它是一個端到端(end-to-end)的網(wǎng)絡(luò)框架,輸入一幅圖像后可以直接在輸出端得到每個像素所屬的類別。典型的FCNs算法先為每個像素裁剪一個局部區(qū)域,然后采用一個微調(diào)網(wǎng)絡(luò)(fine-tuned backbone network)來預測每個像素的類別,能獲得較高的正確率。但是有監(jiān)督語義分割需要像素級的語義標簽,而獲取這樣的標簽將需要巨大的勞動力[2]。
在無監(jiān)督應(yīng)用場景中[3],圖像分割主要用來預測更籠統(tǒng)的類別,比如 “前景“和”背景“。無監(jiān)督比有監(jiān)督更具挑戰(zhàn)性,尤其是采用無監(jiān)督方法將圖像分割為任意數(shù)量(≥2)的合理區(qū)域。研究者們提出了許多不同的基于聚類的圖像分割方法,聚類算法是一種無監(jiān)督學習算法,主要通過相似性度量來進行分類,不需要事先知道分類的準則,也不需要訓練樣本。被應(yīng)用到圖像語義分割的聚類算法主要有K-mean[4]、FCM[5]、譜聚類[6]和mean-shift[7]等。但是這些基于聚類的分割方法存在以下的一些問題: 1)需要提前給定類別數(shù)。2)分割結(jié)果受初始中心點或某些參數(shù)的影響比較大。3)分割過程中對紋理信息和空間信息利用不夠,導致過分割的產(chǎn)生。
綜合以上幾點,本文提出一種利用暗塊提取(DBE:Dark Block Extraction)算法[8]對圖像進行語義分割的方法,該算法能自適應(yīng)得到類別數(shù)和分類結(jié)果。在實際應(yīng)用過程中,本文根據(jù)算法特點以及分類效果進行了相應(yīng)的改進:1) DBE算法需要計算像素間的距離矩陣,如果直接處理高分辨率的圖像,需要較大的時間復雜度和空間復雜度。因此,本文首先利用超像素分割算法對圖像進行預分割,這樣只需要計算超像素塊之間的距離而非像素點間的距離,降低了時間復雜度和空間復雜度。2) 兩個相鄰波谷之間的像素塊實際上屬于同一類,本文考慮到噪聲的存在,設(shè)置兩個參數(shù)來選取這個區(qū)域中可靠性高的像素塊賦予這一類的標簽,這個區(qū)域中的其他超像素塊可以看作是一個緩沖區(qū),其標簽將在最終分類中確定。3) 在調(diào)試過程中發(fā)現(xiàn)如果兩個波峰之間的波谷數(shù)值較大,這兩個峰值對應(yīng)的類別在圖像中是同一類別,本文求取了一個門限值,將波谷值與門限值進行比較,判別是否合并相鄰的兩個類別。4) 使用得到的類別數(shù)以及類別標簽來對由棧式編碼器和 softmax 分類器[9]組成的分類系統(tǒng)進行訓練,再使用訓練好的分類系統(tǒng)對整幅圖像進行預測得到每個像素的標簽。5) 對超像素塊內(nèi)的像素標簽進行投票,選取標簽數(shù)量最多的標簽為這個超像素塊所有像素的標簽,語義分割完成。
本文方法主要概括為3部分:獲取圖像超像素分割結(jié)果的過程、獲取類別數(shù)和高可靠性類別標簽的預分類過程、分類系統(tǒng)的訓練和預測的最終分類過程。
在使用DBE算法獲取類別數(shù)時,需要計算數(shù)據(jù)之間的距離。而計算每個像素點與其他所有像素點之間的距離,將需要較大的時間復雜度和空間復雜度。Ren和Malik 在 2003 年提出超像素概念[10],他們認為單個像素不具備任何意義,自然圖像的理解是基于超像素的,即在局部區(qū)域中具有相似特征(如圖像輪廓,紋理和顏色) 的元素集合。因此本文考慮先對圖像進行超像素預分割,這樣只需要計算超像素塊之間的距離而非像素點間的距離,降低了時間復雜度和空間復雜度。同時在預分割過程中又希望能夠進行足夠細粒度的分割,分出足夠多的區(qū)域(即保證每一類場景都能有足夠多的區(qū)域),后續(xù)的算法再對它們進行合并,使最終結(jié)果更準確。
本文分別采用了Felzenszwalb算法和SLIC算法對圖像進行預分割,其分割結(jié)果如圖1所示。Felzenszwalb算法[11]是Felzenszwalb和Huttenlocher在2004年提出的一種有效的基于圖的圖像分割算法,該算法是基于圖的貪心聚類算法,實現(xiàn)簡單,速度比較快,精度也不錯,并且能分出比較準確的邊界。但是Felzenszwalb算法分割得到的超像素塊對于本文的后續(xù)應(yīng)用而言細粒度不夠,如圖1(a)所示的天空的細粒度就不夠。SLIC算法[12]是在2010年被提出的一種圖像分割算法,它是先將彩色圖像轉(zhuǎn)化為CIELAB顏色空間,得到3維特征向量,再加上像素點所處的坐標,最終得到5維特征向量。然后利用5維特征向量來構(gòu)造距離,對圖像像素進行局部聚類最終得到分割結(jié)果。SLIC算法易于實現(xiàn),運行速度快,能生成緊湊、近似均勻的超像素。但是SLIC算法分割出的超像素塊邊界條紋沒有Felzenszwalb算法的精細,如圖1(b)所示的細節(jié)圖可以看出其對樹干的分割沒有精準命中邊界。這兩種算法均可使用Python的skimage.segmentation工具包實現(xiàn)。
因此本文考慮對這兩種算法的分割結(jié)果進行融合,擬獲得足夠數(shù)量、邊界準確的超像素分割結(jié)果。融合的策略如下:對于Felzenszwalb算法分割出的超像素塊PFi(i=1,2,…,NF),其中NF為Felzenszwalb算法分割出的超像素塊數(shù)量,遍歷每一個超像素塊,如果在超像素塊PFi中,SLIC算法得到的分割區(qū)域數(shù)量為Ci,那么就根據(jù)SLIC算法的分割情況將PFi細分為Ci個區(qū)域。融合的結(jié)果如圖1(c)所示,可見融合后的分割結(jié)果滿足了邊界準確、細粒度足夠兩個條件。
在無監(jiān)督圖像語義分割中,類別數(shù)的選擇是一個重要且具有挑戰(zhàn)性的工作,對于構(gòu)建一個強大的語義分割系統(tǒng)至關(guān)重要。文獻[8]提出的暗塊提取(DBE:Dark Block Extraction)算法是一個不需要聚類就能自適應(yīng)獲得類別數(shù)的算法。結(jié)合自然圖像數(shù)據(jù)和DBE算法的特點,本文提出的類別數(shù)及類別標簽獲取方案的預分類算法流程圖如圖2所示,主要包括以下4個步驟:
圖1 超像素分割結(jié)果
圖2 預分類算法流程圖
1)數(shù)據(jù)準備。首先,對自然圖像的每個像素構(gòu)建特征向量,特征向量的主要構(gòu)成為:①由圖像的RGB通道得到3維特征向量。②分別用4個3*3的卷積核(如圖3所示)對圖像的RGB通道進行滑窗,得到12維特征向量。③對圖像求解LBP[13](Local Binary Pattern)特征得到1維特征,最終得到16維的特征表示。其次,根據(jù)1.1描述的方法獲得Nm個超像素塊。再次,計算每個像素塊中像素的特征向量均值和方差,作為這個像素塊的特征向量。最后利用歐式距離對超像素塊間構(gòu)建出一個Nm×Nm的距離矩陣。
圖3 4個3*3的卷積核
2)矩陣重排。由圖2(b)可以看出構(gòu)建出的距離矩陣無法提供任何與類有關(guān)有效信息。在文獻[14]中,Catt等人發(fā)現(xiàn)適當?shù)貙仃囘M行重新排序,生成的矩陣圖像能夠更好地突出數(shù)據(jù)中的潛在聚類結(jié)構(gòu)(如圖2(c) 所示的圖像)。在文獻[14]給出了多種重排的方案,適當?shù)闹嘏欧椒ǖ玫降木仃噲D像可以將潛在類突出顯示為沿圖像對角線的一組暗塊,暗塊中的數(shù)據(jù)集具有較低的相異性。在本文,我們采用VAT(visual assessment of cluster tendency)算法[15]來對矩陣進行重排,它的核心算法是Prim算法[16]。
3)類別提取。由圖2(c)可見重排后的圖像以對角線暗塊的形式突出顯示潛在類別,我們?nèi)祟惪梢院唵蔚孬@取到類別數(shù),但計算機需要我們輸入一些算法才能有效地提取到類別。本文選取的是DBE算法,它是專門為提取對角線暗塊而設(shè)計的,主要采用的是一些常用的圖像和信號處理技術(shù)。DBE算法的具體步驟描述如下:
在實際的道路橋梁施工建設(shè)當中,施工單位如果不能夠妥善的處理好橋梁的樁基問題,那么必然會引起整個橋梁的安全質(zhì)量問題,從而嚴重的威脅著行駛的車輛安全問題。在道路橋梁的施工建設(shè)過程中,橋梁樁基問題是整個橋梁建設(shè)的基本。樁基的質(zhì)量嚴重的影響著整個橋梁的安全問題。然而造成橋梁樁基問題的根本原因在于打樁工藝的好壞問題。此外在實際的施工中,施工單位要高度重視打樁工藝環(huán)節(jié)的建設(shè),從而保證橋梁樁基的質(zhì)量,進而有效的保障橋梁整個質(zhì)量。
①采用Ostu算法對重拍后的矩陣進行二值化處理,然后對二值化圖像進行形態(tài)學濾波(先膨脹,再腐蝕)。
②對濾波后的二值圖像應(yīng)用歐幾里得距離變換轉(zhuǎn)化為灰度圖像,然后沿圖像的主對角線軸投影像素值,形成投影信號。
③使用一個簡單的均值濾波器來對投影信號進行平滑,再對平滑后的投影信號求一階導數(shù),使用一階導數(shù)來檢測投影信號的波峰和波谷。
④去除高度相對較小的峰值,只有當兩個相鄰波谷之間的寬度大于γ*Ls時,兩個相鄰波谷內(nèi)的峰值才會保持為有意義的峰值,其中Ls是投影信號的長度,并且本文在實驗中將γ設(shè)置為0.025。這樣求得的波峰的數(shù)量就是數(shù)據(jù)的類別數(shù),DBE算法更多具體的信息,可以參閱文獻[8]。
4)標簽提取。在投影信號中,兩個相鄰波谷之間的像素塊實際上屬于同一類。假設(shè)第t個波谷與第t+1個波谷之間有Nt個超像素塊,那這Nt個超像素塊就應(yīng)該屬于第t類。由于噪聲的存在,不能簡單地把全部的Nt個超像素塊都歸屬于第t類。在本文中,設(shè)置了兩個參數(shù):β1和β2,假設(shè)第t個波谷與第t個波峰之間有Nt1個超像素塊,第t個波峰與第t+1個波谷之間有Nt2個超像素塊,將波峰左邊靠近波峰的β1*Nt1個超像素塊以及靠近波峰右邊的β2*Nt2個超像素塊里所有的像素都賦予第t類的標簽,其他的超像素塊可以看作是一個緩沖區(qū),其標簽將在最終分類中確定。
5)類別合并。在調(diào)試過程中發(fā)現(xiàn)有些圖像的投影信號會出現(xiàn)如圖4實線所示的情況:突出顯示的兩個峰值對應(yīng)的類別在圖像中屬于同一類,同時發(fā)現(xiàn)這兩個波峰之間的波谷數(shù)值較大。因此本文對投影信號求取均值,如圖4虛線所示,以均值為門限,如果兩個波峰間的波谷值大于均值就將這兩個類別合并,對應(yīng)的標簽也賦值為同一個標簽值。
圖4 投影信號及其均值信號
由1.2預分類的介紹可知,有部分像素的標簽還未確定,將由最終的分類系統(tǒng)進行確定。本文采用的是由棧式自編碼器和 softmax 分類器組成的分類系統(tǒng)[9]。棧式自編碼器是一種無監(jiān)督學習算法,分為三層:分別為輸入層、隱藏層和輸出層。它利用反向傳播算法對整個網(wǎng)絡(luò)進行訓練,讓輸出值無限接近于輸入值,訓練完成后再取隱藏層的信息用于分類,因為隱藏層學習到的是多層次的特征,類似于人腦的分層模型,它提取的特征隨著隱藏層的推進而不斷升級,最深的隱藏層學習到的特征最高級。本文利用softmax分類器[9]對學習得到的最高級的特征進行分類,softmax分類器簡單易操作,與棧式自編碼器構(gòu)成的分類框架可以很好的進行微調(diào)(fine-tuning),并且這個分類框架能得到比傳統(tǒng)分類器更好的分類效果[9]。分類框架具體信息以及參數(shù)選擇,可參閱文獻[9]。在本文中,預分類數(shù)據(jù)準備時獲取的16維特征被用來作為棧式稀疏自編碼器的原始輸入數(shù)據(jù),將預分類中獲得標簽的像素作為訓練數(shù)據(jù)對分類系統(tǒng)進行訓練。訓練完成后,將整幅圖像每個超像素的16維特征輸入到訓練好的分類系統(tǒng)即可得到每個像素的標簽。
最后,對超像素塊內(nèi)的像素標簽進行投票,選取標簽數(shù)量最多的標簽為這個超像素塊內(nèi)所有像素的標簽,語義分割完成。
kmeans算法和FCM算法都是對超像素塊進行聚類,輸入的特征與輸入到DBE算法的特征一樣,類別數(shù)賦予的是數(shù)據(jù)集中真實的類別數(shù)。本文算法設(shè)置Felzenszwalb算法的參數(shù)為:scale = 32, sigma = 0.5, min_size = 64。本文算法設(shè)置SLIC算法的參數(shù)分別為:1) 所需超像素的數(shù)量為200。2) 顏色和空間差異之間的加權(quán)因子為10。3) 合并半徑(在形態(tài)上小于此的區(qū)域與相鄰區(qū)域合并)為1。4) 如何計算簇顏色中心選的是'median'(中值濾波)。本文設(shè)置棧式自編碼器和softmax 分類器組成的分類系統(tǒng)的參數(shù)為:兩個隱藏層,第一個隱藏層的節(jié)點數(shù)為50,第二個隱藏層的節(jié)點數(shù)為25,隱藏層的激活參數(shù)為0.1,權(quán)重衰減參數(shù)為3e-3,稀疏懲罰項的權(quán)重為3。
本文主要測試了β1和β2兩個參數(shù)對正確率的影響如圖5所示。1) 設(shè)置β2=0.1,讓β1從0.5開始以0.05為步進增加到0.9得到如圖5(a)所示的圖。2)設(shè)置β1= 0.85,讓β2從0.05開始以0.05為步進增加到0.4得到如圖5(b)所示的圖。從兩個圖可以看出,隨著β1的增大,正確率呈現(xiàn)下降的趨勢,但下降得不明顯;隨著β2的增大,正確率先上升后下降,這是由于暗塊的后半部分是與下一類的數(shù)據(jù)進行銜接,取的數(shù)量增多之后可能會取到下一類的數(shù)據(jù)。鑒于以上兩點以及對訓練時長的考量,本文選取β1= 0.85,β2=0.1。
圖5 參數(shù)β1和β2對正確率的影響
Berkeley圖像分割數(shù)據(jù)集的部分實驗結(jié)果如圖6所示,可以看出本文算法相與其他兩種算法相比,分割結(jié)果更加接近人工分割結(jié)果。Kmeans算法和FCM算法對目標和背景,產(chǎn)生了誤分,而且分割出的目標和背景完整度不高。而本文算法,分割效果更好,目標區(qū)域和背景區(qū)域比較清晰,目標和背景完整性更好,并且對背景差距較小的圖片分割效果也很好。
圖6 實驗結(jié)果對比
為了更好地描述本文算法的有效性和準確性,本文根據(jù)真實的標簽對三個算法計算了正確率,結(jié)果如表1所示,從表1可以看出,對于 Berkeley 數(shù)據(jù)集,本文算法獲得的正確率比Kmeans算法和FCM算法更高,至少高了2%,可見本文算法的分割效果更好。
表1 不同算法的正確率
本文算法得到的分割結(jié)果不管是在視覺上還是正確率上都比其他兩個算法要好,主要有以下兩點原因:
1) DBE算法根據(jù)距離間的大小關(guān)系,將距離更小、相似度更高的像素塊排列在一起,從而得到高可靠性的類別數(shù)和類別標簽,為后續(xù)提取高級特征提供了可靠的訓練依據(jù)。而Kmeans算法和FCM算法雖然也是利用距離的大小進行分類,但它們對類別數(shù)以及初始的聚類中心較為敏感,如果類別數(shù)和初始聚類中心設(shè)置不合理,將不能得到很好的分類結(jié)果。
2)由棧式自編碼器和 softmax 分類器組成的深度學習框架學習到了高級的特征,利用這些高級特征進行分類相對于Kmeans算法和FCM算法利用的低級特征分類能具有更好的分類效果。
本文提出一種基于DBE和棧式編碼器的無監(jiān)督語義分割算法,可以自適應(yīng)得到每幅圖像的類別數(shù),并輸出語義分割結(jié)果。實驗結(jié)果表明,當前的一些分割算法相比如:kmeans算法、FCM算法,本算法能獲得更好的語義分割效果,其正確率為0.741 5,還有改進的空間。后續(xù)將探索如何改進DBE算法以獲取更準確地預分類結(jié)果以及改進訓練框架對訓練過程進行提速,做到高效實時的語義分割。本文算法只在Berkeley 圖像分割數(shù)據(jù)集上進行了驗證,具有一定的局限性,后期硬件條件更完備之后,可將本文算法推廣到更多的語義分割數(shù)據(jù)集上進行應(yīng)用。