張如濤,黃 山,汪鴻浩
四川大學 電氣工程學院,成都 610065
語義分割是一種將圖像中每個像素分類為屬于對象類的方法,它是圖像分析和計算機視覺中重要的研究領域,有著廣泛的應用場景。例如,無人車駕駛[1]、醫療影像分析[2]、地理信息系統[3]等。其中道路場景的語義分割就是無人駕駛中最關鍵的技術之一。
近年來,基于卷積神經網絡的語義分割在不斷發展,2015年Long等人提出了全卷積網絡(fully convolutional networks,FCN)[4],提出了一種全新的端到端的網絡,使得圖像語義分割有了突破性的進展。然而主流的基于卷積神經網絡的分割方法基本上都屬于監督式學習[5],有監督的圖像分割通常需要大量帶有其自身區域級標簽的圖像,但是在圖像分割常用場景中,無論是缺陷分割[6]、醫療影像,或是自動駕駛,都很難準備足夠的訓練數據。道路場景的樣本數據存在道路的巨大差異性和種類的多樣性,準備足夠的訓練數據是不容易的,況且語義分割任務的逐像素注釋是一個耗力且耗時的過程,因此基于弱監督學習的分割方法已經成為該領域的研究熱點。
Goodfellow等人在2014年提出生成對抗網絡模型(generative adversarial networks,GAN)[7],是目前深度學習中重點研究話題之一,并在無監督領域、生成領域、半監督學習領域以及強化學習領域[8]都有廣泛的應用。隨后,一些學者開始將GAN用于語義分割領域,如Luc等人[9]用對抗訓練方法來訓練分割模型,Metzen等人[10]提出生成對抗擾動語義分割模型來提高分割的準確度。GAN在訓練中不斷學習模擬數據的分布進而生成和訓練數據相似分布的樣本,在一定程度上解決了訓練數據需要大量的像素級的標注的問題。但是GAN訓練模型依然需要成對的訓練數據集,并且在訓練過程中容易產生模式崩潰[7]的問題。
針對于上述問題,利用循環生成對抗網絡(cycle consistent adversarial networks,CycleGAN)[11]來進行語義分割,CycleGAN相較于傳統的GAN,其主要優勢表現為:(1)降低了數據集的要求,不需要成對的數據集,也可以免去大量的像素級的注釋;(2)將隨機噪聲的輸入替換成了真實圖像的輸入,提高了生成圖像的質量。但是CycleGAN在訓練過程中依然會存在訓練不穩定的問題。
本文在循環生成對抗網絡的基礎上對目標函數進行改進,將網絡中的對抗損失替換成最小二乘損失[12],提高了生成圖像的質量并增加了穩定性;使用Smooth L1損失[13]來解決訓練中存在的模式崩潰問題;最后增加了特征損失[14],能夠有效約束生成圖像,使得生成圖像較好地保存自身信息,提高生成圖像質量。
循環一致性對抗網絡CycleGAN是在生成式對抗網絡GAN的基礎上發展而來,CycleGAN中引入了循環一致性損失[10]來使得網絡不需要成對的數據集進行訓練,不需要在訓練數據間建立一對一映射,降低了對訓練數據的要求。
GAN主要應用了博弈論中零和博弈的思想,就是通過生成網絡G和判別網絡D不斷博弈,進而使G學習到數據的分布。相較于傳統的網絡模型,GAN存在兩個不同的網絡,訓練方式采用的是對抗訓練方式。由此可知,GAN是由生成器和判別器組成,生成器G主要通過輸入隨機噪聲來生成圖像,判別器D來判斷G生成的圖像是否和真實圖像相似,將判斷的結果反饋給生成器,根據反饋的結果再訓練生成器,使生成器能生成更接近于真實數據的圖像,最終達到一個均衡狀態。GAN的目標函數如公式(1)所示:

其中,x表示為真實數據,z為隨機輸入噪聲,G(z)是生成器由輸入z生成的圖像,pdata(x)為真實數據分布,p z(z)是用于z采樣的先驗分布。目標函數所展現出來的就是一個極小-極大化問題,即只考慮生成器G,希望D(G(z))盡量接近于1,即生成的圖像都被判斷為真實數據,此時所期望的目標函數值最小;只考慮判別器D,則希望D(G(z) )接近于0,即生成的圖像都能被判斷出是假的,此時所期望的目標函數值最大。當D(G(z))=0.5時,就會達到平衡狀態。
CycleGAN是由Zhu等人[11]在2017年提出的,它是由2個生成器和2個判別器組成,其實現原理如圖1所示。給定兩個樣本空間X和Y,為了避免X域中的圖片都轉換為Y中同一張圖片,CycleGAN會同時學習生成網絡G和F,要求將X域的圖片轉換到Y域后還能再轉換回來,就此引入了循環一致損失。圖1(a)是總模型結構,包含兩個映射函數G:X→Y和F:Y→X,X域中的樣本通過生成器G來生成Y域中的圖像,同樣的Y域可以通過生成器F生成X,圖1(b)、(c)則分別描述了X→Y→X和Y→X→Y的過程,在圖1(b)中,X域中的樣本x通過生成器G生成Y域中的樣本,?再通過F生成樣本?,希望生成的?和原x是一樣的,即,它們之間的差就是一個loss;類似地,圖1(c)是一個對偶反向循環的過程,對于Y域中的每個圖像y,希望生成的?和原y是一樣的,即

圖1 CycleGAN原理圖Fig.1 CycleGAN schematic
在CycleGAN網絡訓練中,損失函數是必不可少的,起到了至關重要的作用,CycleGAN主要包含了對抗損失和循環一致性損失。
(1)對抗損失
生成對抗網絡(GAN)的思想就是對抗訓練,就是利用對抗損失來對不斷優化生成器和判別器,CycleGAN也利用了此對抗損失來優化網絡,通過判別器對生成樣本和真實數據進行打分,生成器希望判別器將生成的圖片判定為真實圖片,而判別器希望能夠準確判別出是真實數據還是生成樣本。其中對于映射G:X→Y及其對應的判別器DY的損失函數如下:

(2)循環一致損失
循環一致性損失是CycleGAN引入的新損失函數,當源域的圖像經過生成器到目標域,又通過生成器回到源域,循環一致損失用來約束源域的原始圖像和重建圖像的相似程度,使生成回來的圖像接近于原始輸入圖像,以此來優化生成器來生成想要的目標域的圖像,CycleGAN用L1范數來計算此損失,其函數如下:

(3)目標損失
目標損失是CycleGAN的訓練目標,它是由兩個映射的對抗損失和循環一致性損失組成,其中兩個映射分別是G:X→Y和F:Y→X,則CycleGAN原始目標函數如下所示:

本文采用最小二乘損失來替換原對抗損失函數,原對抗損失函數在訓練過程中可能存在梯度消失的問題,文獻[12]指出,最小二乘可以根據樣本與決策邊界的距離對樣本進行懲罰,從而會產生更多的梯度來更新生成器,這樣會使得網絡在訓練中更加穩定,也會生成更高質量的圖像。則生成器G及其對應的判別器DY的損失函數如下:

同理,生成器F及其對應的判別器D X的損失函數如下:

CycleGAN原網絡的循環一致損失使用的是L1范數損失函數,即最小絕對值誤差,其函數如式(7)所示:

其中G和F都為生成器。L1范數相較于L2范數[15]更加魯棒,無論對于什么樣的輸入值,都有著穩定的梯度,就不會導致梯度爆炸[16]的問題,但是卻在中心點不能求導,以至于不方便求解。
L2范數損失如式(8)所示:

本文則采用了Smooth L1范數來代替L1范數損失函數,SmoothL1范數損失結合了L1范數和L2范數各自的優點,也就是光滑后的L1,使其在中心點也能夠求導,便于求解,則其損失函數定義為:

此函數即為文中所改進后的循環一致損失。
CycleGAN網絡中,X域的圖像通過生成器G生成Y域的圖像,再通過生成器F生成X域圖像,即重建圖像,此時希望重建圖像和X域輸入圖像相似,便引入循環一致損失。同時對抗損失也只是判定生成的圖像是不是目標域風格的圖像。而道路場景的語義分割中,不同顏色區域所代表的是不同類別,但X域到Y域的生成圖像可能隨意改變圖像固有的類別顏色,導致最后的分割精度下降。
針對這個問題,根據文獻[14]的理論,本文便在網絡中引入了特征損失函數,此損失能夠實現映射G:Y→Y和F:X→X。生成器G的作用是用來生成Y域風格圖像的,所以當輸入Y域圖像y時也應該生成Y域風格的圖像,此時要求G(y)與y盡可能接近,以此來保證類別能夠分割成其對應的顏色。加入特征損失函數后,生成器G在原有輸入的基礎上增加了圖像y的輸入,生成器F也增加了圖像x的輸入,也就是讓生成器將轉換后的圖像與原圖像進行差異比較,進行反饋優化。利用L1損失來計算此差異并不斷優化,此特征損失能夠保證在生成目標域圖像的時候還能獲得目標域圖像的特征,從而提高生成圖像的質量。其損失數定義如下:

加入特征損失之后,生成器都在原輸入的基礎上增加了一個輸入,則本章改進之后的分割原理圖如圖2所示,圖中只展示了正向訓練圖,反向訓練圖與正向相似。圖中X域的真實圖像經過生成器G生成Y域的虛假圖像,此時判別器會判斷生成的圖像和Y域真實的圖像的真假,通過判斷的分數來不斷優化網絡。同時Y域中生成的虛假圖像又會由生成器F生成X域的圖像,也就是重建X域的原始圖像,并用循環一致損失SmoothL1來不斷縮小重建圖片和原始圖像的差異,即提高它們的相似度。在網絡中引入特征損失,即在生成器G增加Y域圖像的輸入,經過生成器G同樣生成Y域的圖像,并用特征損失L1進行約束,減小圖像間的差異以此確保在生成圖像時,能獲取目標圖像的特征。在對抗損失、循環一致損失以及特征損失的共同作用下,網絡得到更進一步的優化,能夠使得Y域中生成的圖像越來越真實,圖像質量越來越高。

圖2 CycleGAN中正向網絡訓練圖Fig.2 Forward network training in CycleGAN
經過以上的改進之后,便可以確定總的目標損失,則本章改進CycleGAN后的目標損失函數如下:

其中,λ和μ分別是循環一致性損失和特征損失的權重,λ依然采用原網絡中的默認值10,但是μ的變化會影響整個分割的效果,所以本章最后也會討論不同的μ值對實驗效果的影響。且此目標損失函數主要是為了實現
CycleGAN的生成器由編碼器、轉換器和解碼器組成。其中編碼器由3個卷積層構成,轉換器由6或9個殘差塊組成,每個殘差塊又由2個卷積層組成,解碼器則是由3個反卷積層構成。CycleGAN的判別器只有編碼器部分,是由5個卷積層構成。在原網絡的生成器和判別器結構中,除了判別器的第一個卷積層后沒有歸一化層,其他所有的卷積層后都有歸一化層,且使用的歸一化方法都為batch normalization(BN),而本文將生成器和判別器中的歸一化層均換成instance normalization(IN)[17]。BN是把每一個mini-batch的數據拉回到均值為0方差為1的正態分布上,這樣能保證數據分布一致,可以避免梯度消失問題,其原理如下:

其中,M是mini-batch的大小。IN針對的是圖像像素,對像素進行歸一化,且IN是對一個批次中單個圖片做歸一化,這有利于圖像風格轉換,且能保持圖像間的獨立性,其原理如下:

根據文獻[17],BN適用于判別模型中,如圖片分類。由于判別模型的結果取決于數據整體分布,而BN正是對每個batch歸一化來保證數據分布的一致性。但BN對batchsize的大小較敏感,要是batchsize太小,則BN不足以代表整個數據分布。IN則適用于生成模型中,如圖像風格遷移,本文所做的分割正是在此基礎上進行實現的。由于生成圖像的好壞依賴于某個圖像實例,而BN做歸一化就不適合圖像遷移中,但是用IN就能夠保持圖像間的獨立,并且加速訓練模型的收斂。
綜合以上的改進,本文的生成器和判別器的具體結構如圖3所示,其中判別器中C64中是不使用歸一化層的。

圖3 生成器和判別器結構Fig.3 Generator and discriminator structure
本文采用了在圖像語義分割領域常用的Cityscapes數據集[18],該數據集包含50個城市不同的街景,包括20 000張粗注釋圖片和5 000張高像素級注釋圖片,5 000張精注釋圖片中又包含2 975張訓練圖片、500張驗證圖片和1 525張測試圖片。
實驗則在Cityscapes數據集的訓練圖片中隨機選取了1 032張原道路圖像和1 032張標注圖像作為訓練數據,并用驗證圖片中的200張圖像進行測試。在進行實驗之前,首先將選取的訓練圖像進行處理,統一壓縮為256×256像素的圖像。
本文所進行的實驗環境為Windows10系統,CPU為Intel?Core?i5-8250U@1.80 GHz CPU,16 GB內存。服務器為戴爾Precision T3430,Linux系統,具體操作系統為Ubantu20,有兩塊Nvidia1080Ti顯卡,Python3.6,使用Pytorch框架。實驗中,batchsize設置為1,程序運行200個epoch,前100個epoch保持學習率不變為0.000 2,后100個epoch將學習率設置為線性衰減到0。整個網絡使用Adam優化器進行優化。
本文采取圖像語義分割中常用的性能指標[19]來進行對實驗結果的評價,指標包括像素準確率PA(pixel accuracy)、像素準確率平均值MPA(mean pixel accuracy)和平均交并比MIoU(mean intersection over union)。
PA表示標記為正確的像素占總像素的比例,其公式如下:

MPA是對PA的改進版本,表示為每個類內被正確分類像素數的比例,計算每類的正確率后求取平均值,其公式如下:

MIoU是用于分割問題的標準評價指標,計算的是兩個集合的交集與并集的重合比例,而在語義分割中,計算的是真實分割與系統預測的分割間的交并比。這個比例可以被重新定義為真實正例的數量比上總數量(包括真實正例、錯誤負例和錯誤正例),其公式如下:

其中,k表示類別,這里假設有k+1個類(包括無效類或背景),p ij表示本屬于類i但被預測為類j的像素數量,p ii表示真實正例的數量,同樣的,pij和p ji可以分別解釋為錯誤正例和錯誤負例。
本文所進行的實驗分三部分,首先用CycleGAN原網絡處理數據進行實驗用于對比。接著按照本文所指出的在CycleGAN原網絡基礎上改進損失函數來進行實驗,其中包含加入特征損失和更換歸一化層的實驗。最后討論了特征損失的權重值μ的不同對實驗結果的影響。
3.3.1 主觀結果分析
從實驗結果中隨機抽取6張圖像進行展示,如圖4和圖5所示。其中圖4是用原道路圖像生成分割圖像,從左到右依次是原道路圖像、CycleGAN、Ours、Ours(+instance)和標注圖像;圖5是用標注圖像生成道路圖像,從左到右依次是標注圖像、CycleGAN、Ours、Ours(+instance)和原道路圖像。由圖4可以看出,原CycleGAN生成的分割圖像效果較差且有小部分的失真現象,甚至將整體背景分割為同一類,而按本文的方法生成的圖像基本上能將各類分割出來,相對于原網絡效果更好,同時在本文改進的基礎上將網絡中生成器的歸一化層batch normalization換成instance normalization后,生成圖像的質量更高,且整體道路分割效果更接近于標注圖像。但是相較于標注圖像,還是存在不足的地方,對道路邊緣和輪廓的分割比較差,且對背景分割顏色的劃分不夠明確,也就是在對類的劃分中沒有將具體的某一類劃分成其所屬類的顏色。同樣在圖5中,對比于原網絡生成的道路圖像,本文方法生成的道路圖像細節處理的更好,圖像更接近于原道路圖像。

圖4 道路圖像生成分割圖像Fig.4 Road image to segmentation image

圖5 標注圖像生成道路圖像Fig.5 Annotate image to road image
3.3.2 客觀結果分析
除了主觀結果外,還需要用具體數據來說明。根據上述介紹的在語義分割領域常用的三個性能指標來進行比較,對比結果如表1所示。
由表1可以看到,將原網絡中的對抗損失(交叉熵損失)和循環一致損失(L1范數)改成最小二乘和SmoothL1范數后,像素精確率PA和交并比MIoU都有不同程度的提升。且在改進損失函數的基礎上引入了特征損失,各性能指標又進一步提升,即表中Ours所展示,其中像素精確率PA和交并比MIoU都提高了約4個百分點,而平均像素準確率MPA卻下降,這里的原因是原網絡沒有準確地將各類分割出來,由圖4看出,原網絡生成的圖像將幾類統一分割為一類,就會造成某一類的精確率很高,也就提高了平均的精確率。雖然本文方法沒有將某一類劃分為標注圖像相同的類,但卻將每一類都準確劃分出來,在分割效果上是優于原網絡的。而且在本文基礎上將生成器歸一化層換成instance后三個參數指標都提高了約2個百分點。

表1 生成圖像性能指標Table 1 Generate image performance indicators
為了更能說明各個改進損失函數的作用,這里呈現改進前后損失函數的收斂曲線,如圖6所示。圖6(a)為原CycleGAN網絡,生成器的損失很難收斂,甚至在5上下波動,導致生成圖片的質量很差,圖片某些部分還會失真。在將對抗損失和循環一致損失換成最小二乘和SmoothL1之后,如圖6(b),生成器的損失有明顯的下降,且循環損失也有下降的趨勢。圖6(c)是在(b)的基礎上引入特征損失后的損失收斂圖,可以看出生成器的損失更加穩定了,循環一致損失和特征損失也在150個epoch之后逐漸收斂。圖6(d)是將生成器中歸一化層換成了IN后的損失收斂圖,肉眼上相較于(c)沒有明顯的差異,但是表1數據驗證了會產生更好的性能。

圖6 損失函數收斂圖Fig.6 Loss function convergence graph
從主觀結果和客觀數據的展示上都體現出了本文方法在原網絡的基礎上生成圖像的質量有一定提升,更接近于標注圖像。
3.3.3 討論μ對結果的影響
引入的特征損失在一定程度上保證了圖像特征的保留,使得生成圖像的質量更高,但是特征損失的參數的不同也會對結果有影響,這里討論了μ為不同值時的各性能指標變化,如圖7和圖8所示。其中圖7是在不同μ值下各個性能指標的變化折線圖,圖8則隨機選取3張在不同μ值下生成的圖像。

圖7 不同μ值下各指標值Fig.7 Each index value with differentμ

圖8 不同μ值下的生成圖像Fig.8 Generated image with differentμ
圖7討論了μ分別為0、0.5、1、5、7、10的情況,在沒有引入特征損失的時候,生成的圖像不能很好地保留原圖像的特征,使得生成圖像的質量不高。而隨著μ的增大,訓練模型會出現過擬合的狀況。且從圖7的折線圖能夠看出當μ的值在1左右時各個性能參數值是最好的,所以在引入特征損失的同時需要對特征損失參數的選取做恰當的取舍。
本文研究了基于循環生成對抗網絡的語義分割,在CycleGAN的基礎上進行改進,主要是將原網絡中的對抗損失和循環一致損失L1范數用最小二乘和Smooth L1范數代替來增加訓練的穩定性且提高生成圖像的質量,并在此基礎上加入特征損失保證圖像的特征保留使得生成的圖像更加真實。文中研究結果顯示改進后的網絡相比于原網絡在各方面的性能都有一定的提升,但特征損失的引入會使得小部分生成圖像效果較差,而且生成的圖像和真實標注的圖像會存在一些差距,為了讓生成圖像質量更高,并減小和標注圖像的差距,未來的工作會在網絡的改進上做進一步的研究。