本發(fā)明涉及計算機圖像處理的技術(shù)領(lǐng)域,尤其是指一種基于深度卷積對抗生成網(wǎng)絡(luò)的圖像反射去除方法。
背景技術(shù):
當我們在室內(nèi)透過玻璃拍攝室外的景物時,得到的照片中往往會包含有室內(nèi)物體的反射影像。專業(yè)攝影師可能會選擇使用偏振鏡等專業(yè)的儀器設(shè)備來解決這個問題。但是對于普通消費者而言,使用反射去除算法來對照片進行后期處理會是更可行的做法。
一張帶有反射影像的照片可以看做是由一張反射圖像(室內(nèi)景物)和一張目標圖像(室外景物)疊加而成的混合圖像。反射去除問題的本質(zhì)是從這樣一張混合圖像中分解得到兩張圖像。這個問題有明顯的不適定性(ill-posed),即對于一張給定的混合圖像,可能的分解方法是不唯一的。為了求解這樣的不適定問題,我們需要為原問題增加足夠的先驗知識(prioriknowledge)作為額外的約束,使得求解得到的結(jié)果盡可能地接近目標結(jié)果。
在過去的研究中,由于缺乏可靠的高層語義信息作為先驗知識,大部分工作中使用的先驗知識都是基于低層像素信息的。例如,在論文learningtoperceivetransparencyfromthestatisticsofnaturalscenes中,levin等使用的是自然圖像的邊緣直方圖和角點直方圖的統(tǒng)計規(guī)律;在論文singleimagelayerseparationusingrelativesmoothness中,li等針對的是反射圖像相比目標圖像更加平滑這一特殊情況并以此作為先驗約束;而在論文reflectionremovalusingghostingcues中,shih等使用的是特定的反射圖像中出現(xiàn)的鬼影(ghosting)這一約束。
levin等的方法可以在場景簡單并且紋理稀疏的圖像上取得較好的效果,但是對于更一般化的、具有豐富紋理信息的自然圖像就不太適用了。這是因為自然圖像之間的差異性很大,其分布無法簡單地用統(tǒng)一的直方圖來刻畫。而li等的方法和shih等的方法針對的是在特定條件下拍攝的圖像,這些條件并不是廣泛存在的,因此這些方法的使用場景具有很大的限制性。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足與缺點,提出了一種基于深度卷積對抗生成網(wǎng)絡(luò)的圖像反射去除方法,該方法結(jié)合了深度卷積神經(jīng)網(wǎng)絡(luò)提取高層圖像語義信息的能力以及對抗生成網(wǎng)絡(luò)靈活的損失函數(shù)定義能力,突破了傳統(tǒng)方法僅使用低層像素信息的限制。
為實現(xiàn)上述目的,本發(fā)明所提供的技術(shù)方案為:一種基于深度卷積對抗生成網(wǎng)絡(luò)的圖像反射去除方法,包括以下步驟:
1)數(shù)據(jù)獲取
訓練深度卷積對抗生成網(wǎng)絡(luò)需要大量的訓練數(shù)據(jù),因此需要使用大規(guī)模的自然圖像數(shù)據(jù)集,得到的圖像數(shù)據(jù)集需要劃分為訓練數(shù)據(jù)集以及驗證數(shù)據(jù)集,其中訓練數(shù)據(jù)集用于模型訓練階段,驗證數(shù)據(jù)集用于模型驗證階段;
2)數(shù)據(jù)處理
將圖像數(shù)據(jù)集的圖像通過預(yù)處理轉(zhuǎn)化為訓練深度卷積對抗生成網(wǎng)絡(luò)所需要的形式;
3)模型構(gòu)建
根據(jù)訓練目標以及模型的輸入輸出形式,構(gòu)造出一個適用于圖像反射去除問題的深度卷積對抗生成網(wǎng)絡(luò);
4)損失定義
根據(jù)訓練目標以及模型的架構(gòu),定義出所需的損失函數(shù);
5)模型訓練
初始化各層網(wǎng)絡(luò)的參數(shù),持續(xù)輸入訓練樣本,根據(jù)損失函數(shù)計算出網(wǎng)絡(luò)的損失值,通過反向傳播計算出各層網(wǎng)絡(luò)的參數(shù)的梯度,通過隨機梯度下降算法對各層網(wǎng)絡(luò)的參數(shù)進行更新;
6)模型驗證
使用驗證數(shù)據(jù)對訓練得到的模型進行驗證,測試其泛化性能。
所述步驟2)包括以下步驟過程:
2.1)將數(shù)據(jù)集中的圖像在保持長寬比例不變的情況下縮放到較短的邊為144像素大小;
2.2)隨機在縮放后的圖像上裁剪得到長寬均為128像素大小的正方形圖像;
2.3)以0.5的概率隨機水平翻轉(zhuǎn)裁剪后的圖像;
2.4)將隨機翻轉(zhuǎn)后的圖像從[0,255]轉(zhuǎn)換到[-1,1]的范圍內(nèi)。
所述步驟3)包括以下步驟過程:
3.1)構(gòu)造編碼器模型
編碼器是用于從輸入的混合圖像中提取出高層的語義信息并保存到一個低維的編碼中,編碼器的輸入為3×128×128的混合圖像,輸出為1024×4×4的低維編碼,為了實現(xiàn)從輸入到輸出的轉(zhuǎn)換,編碼器包含了多個級聯(lián)的下采樣層,下采樣層由串聯(lián)的卷積層、批量正則化層、以及非線性激活層組成,其中,卷積層設(shè)置卷積步長為2,在增大感受野的同時逐漸減小了圖像的尺寸,批量正則化層通過歸一化同一個批次的輸入樣本的均值和標準差,起到了穩(wěn)定和加速模型訓練的作用,非線性激活層的加入防止了模型退化為簡單的線性模型,提高了模型的描述能力;
3.2)構(gòu)造解碼器模型
解碼器是用于從低維的編碼中拆解并還原出反射圖像和目標圖像,解碼器的輸入為1024×4×4的低維編碼,輸出為6×128×128的復(fù)原圖像,得到的復(fù)原圖像能夠簡單地直接拆解為兩張3×128×128的輸出圖像,這兩張拆解得到的圖像即為還原出來的反射圖像和目標圖像;為了實現(xiàn)低維編碼到復(fù)原圖像的轉(zhuǎn)換,解碼器包含了多個級聯(lián)的上采樣層,上采樣層由串聯(lián)的反卷積層、批量正則化層、以及非線性激活層組成,其中,反卷積層設(shè)置反卷積步長為2,起到了從低維編碼放大圖像尺寸的作用,批量正則化層和非線性激活層的作用與編碼器中同樣;
3.3)構(gòu)造判別器模型
判別器是用于約束解碼器的輸出結(jié)果,使其輸出更接近自然圖像;判別器的輸入是兩張3×128×128的圖像,輸出為一個用于指示輸入的類型的標量;判別器的結(jié)構(gòu)與編碼器一樣,也由級聯(lián)的下采樣層組成,所不同的是,判別器的首層輸入是由兩張輸入圖像疊加得到的6×128×128的層疊圖像,而輸出則是單一的標量;輸入判別器的兩張圖像能夠是由編解碼器拆解還原得到的反射圖像和目標圖像,也能夠是從數(shù)據(jù)集中抽取得到的原始圖像;判別器的作用是讀取輸入的兩張圖像,盡可能地區(qū)分出它們是復(fù)原后的圖像還是原始圖像;如果判斷是原始圖像,則判別器應(yīng)該輸出一個盡可能大的值;相反,如果判斷是復(fù)原圖像,則判別器應(yīng)該輸出一個盡可能小的值。
所述步驟4)包括以下步驟過程:
4.1)定義判別器的損失函數(shù)
判別器的作用是判定輸入圖像屬于復(fù)原圖像還是原始圖像;判別器對于輸入的原始圖像和復(fù)原圖像分別輸出的判定值的差越大越能說明判別器能較好地區(qū)分二者,因此判別器的效用函數(shù)能夠定義為二者均值的差值;為了優(yōu)化判別器,系統(tǒng)需要最大化其效用函數(shù),因此判別器的損失函數(shù)能夠定義為其效用函數(shù)的相反數(shù),這樣,當判別器的效用函數(shù)取最大值時,其損失函數(shù)將取得最小值,這表明判別器已經(jīng)訓練到最優(yōu);
4.2)定義編解碼器的重建損失函數(shù)
重建損失函數(shù)的作用是約束編解碼器的重建輸出,使之與原始圖像盡可能接近,重建損失函數(shù)能夠定義為原始圖像之和與復(fù)原圖像之和的像素差的歐幾里得距離的均值;
4.3)定義編解碼器的判別損失函數(shù)
編解碼器的作用是從輸入的混合圖像中拆解還原出原始的反射圖像和目標圖像,步驟4.2)中定義的重建損失函數(shù)僅能約束拆解的兩張圖像的和等于原混合圖像,但是并不能保證拆解出來的圖像各自仍然類似與原始的自然圖像;為此,系統(tǒng)引入了判別損失函數(shù),這個函數(shù)的計算方法是將由編解碼器拆解得到的兩張圖像輸入到判別器中,判別器將給出一個數(shù)值;這個數(shù)值越大越能說明編解碼器的拆解效果好,使得拆解的圖像“欺騙”了判別器,使之誤以為是原始的圖像;否則說明拆解效果較差,使得判別器“看出”了拆解圖像與原始圖像的明顯差異;因此,從判別器得到的這個數(shù)值的相反數(shù)能夠作為編解碼器的判別損失函數(shù),判別損失函數(shù)的值越小,就說明拆解得到的反射圖像和目標圖像越接近自然圖像,其中的混合圖像的痕跡就越?。?/p>
4.4)定義編解碼器的總損失函數(shù)
步驟4.2)和步驟4.3)中的定義的兩個編解碼器的損失函數(shù)能夠通過加權(quán)的方式組合起來,使得拆解得到的兩張圖像既在像素值上與原圖像保持一致,又具有自然圖像的特征;
所述步驟5)包括以下步驟過程:
5.1)初始化模型各層參數(shù)
各層參數(shù)的初始化采用的是傳統(tǒng)的深度卷積對抗生成網(wǎng)絡(luò)中采用的方法,即對卷積層和反卷積層的參數(shù)采用均值為0,標準差為0.02的高斯分布進行初始化,而對批量正則化層的參數(shù)則采用均值為1,標準差為0.02的高斯分布進行初始化;
5.2)訓練判別器網(wǎng)絡(luò)
隨機取出兩張經(jīng)過步驟2)處理的原始圖像,將兩張圖像通過對應(yīng)像素相加再歸一化到[-1,1]的范圍內(nèi)即可得到編解碼器需要的混合輸入圖像,將得到的混合圖像輸入到編解碼器網(wǎng)絡(luò)中能夠得到拆解后的兩張圖像,將拆解得到的兩張圖像輸入判別器網(wǎng)絡(luò)中能夠得到判別器網(wǎng)絡(luò)對復(fù)原圖像的判別值,再隨機取出兩張經(jīng)過步驟2)處理的原始圖像,直接輸入判別器網(wǎng)絡(luò)中能夠得到判別器網(wǎng)絡(luò)對原始圖像的判別值,將得到的復(fù)原圖像的判別值和原始圖像的判別值進行步驟4.1)的計算能夠得到判別器的損失函數(shù)的值,將該損失通過反向傳播能夠得到判別器網(wǎng)絡(luò)中各層參數(shù)的梯度,再通過隨機梯度下降算法使用得到的梯度對各層參數(shù)進行優(yōu)化即可實現(xiàn)一輪判別器網(wǎng)絡(luò)的訓練;
5.3)訓練編解碼器網(wǎng)絡(luò)
隨機取出兩張經(jīng)過步驟2)處理的原始圖像,類似于步驟5.2)的做法,將兩張原始圖像相加再歸一化得到的混合圖像輸入編解碼器網(wǎng)絡(luò)中能夠得到拆解得到的兩張圖像,拆解后得到的圖像經(jīng)過步驟4.2)的計算能夠得到重建損失函數(shù)的值,將拆解后的得到的圖像輸入判別器網(wǎng)絡(luò)中,經(jīng)過步驟4.3)的計算能夠得到判別損失函數(shù)的值,將重建損失函數(shù)的值與判別損失函數(shù)的值經(jīng)過步驟4.4)的計算能夠得到編解碼器總損失函數(shù)的值,將該損失通過反向傳播能夠得到編解碼器網(wǎng)絡(luò)中各層參數(shù)的梯度,再通過隨機梯度下降算法使用得到的梯度對各層參數(shù)進行優(yōu)化即可實現(xiàn)一輪編解碼器網(wǎng)絡(luò)的訓練;
5.4)持續(xù)迭代訓練
重復(fù)步驟5.2)和步驟5.3)直到網(wǎng)絡(luò)拆解混合圖像的能力達到預(yù)期的目標。
本發(fā)明與現(xiàn)有技術(shù)相比,具有如下優(yōu)點與有益效果:
1、本發(fā)明能夠處理一般化的具有復(fù)雜紋理信息的圖像。現(xiàn)有的基于低層像素信息的方法(如論文learningtoperceivetransparencyfromthestatisticsofnaturalscenes中的方法)一般使用的是圖像的像素信息統(tǒng)計量(如邊緣直方圖和角點直方圖)作為先驗約束,復(fù)雜的紋理信息會對像素信息統(tǒng)計量的計算產(chǎn)生干擾進而劣化算法的效果。本發(fā)明使用深度卷積神經(jīng)網(wǎng)絡(luò)作為編解碼器,具有同時提取低層像素信息和高層語義信息的能力,因為高層語義信息對低層圖像紋理不敏感,因此突破了現(xiàn)有方法的限制,適用于一般化的具有復(fù)雜紋理的圖像。
2、本發(fā)明不要求反射圖像具有特殊性?,F(xiàn)有的使用基于像素間歐幾里得距離的重建損失函數(shù)的方法(如論文singleimagelayerseparationusingrelativesmoothness和論文reflectionremovalusingghostingcues中的方法)要求反射圖像在像素級別上與目標圖像具有明顯的差異性(如相比目標圖像,反射圖像比較模糊,或者反射圖像具有鬼影),否則將在問題求解時出現(xiàn)困難,使得拆解得到的目標圖像和反射圖像二者非常相似,即拆解結(jié)果會趨于平均化。本發(fā)明使用對抗生成網(wǎng)絡(luò)的求解框架,具有靈活的損失函數(shù)定義能力,除了使用像素間歐幾里得距離的重建損失函數(shù)外,本發(fā)明中使用的由判別器網(wǎng)絡(luò)得到的判別損失函數(shù)可以同時約束拆解得到的目標圖像和反射圖像為自然圖像并且二者具有不同的語義,因此避免了現(xiàn)有方法的對處理不具備像素級別差異性的目標圖像和反射圖像時導致的平均化問題。
3、本發(fā)明求解時不需要迭代優(yōu)化,具有快速的處理能力。現(xiàn)有的基于迭代優(yōu)化求解的方法(如論文learningtoperceivetransparencyfromthestatisticsofnaturalscenes、論文singleimagelayerseparationusingrelativesmoothness和論文reflectionremovalusingghostingcues中的方法)在對輸入圖像進行求解時需要使用優(yōu)化算法進行反復(fù)多次迭代,這影響了算法的處理速度。本發(fā)明使用的深度卷積神經(jīng)網(wǎng)絡(luò)為端到端(end-to-end)的網(wǎng)絡(luò)結(jié)構(gòu),將迭代優(yōu)化過程轉(zhuǎn)移到訓練階段,而在求解階段,網(wǎng)絡(luò)已經(jīng)訓練完畢,因此只要將圖像直接傳入網(wǎng)絡(luò)的輸入端,經(jīng)過簡單的正向傳播即可從輸出端得到拆解后的目標圖像和反射圖像,因此具有快速的處理能力。
具體實施方式
下面結(jié)合具體實施例對本發(fā)明作進一步說明。
本實施例所提供的基于深度卷積對抗生成網(wǎng)絡(luò)的圖像反射去除方法,其具體情況如下:
步驟1,獲取公開的數(shù)據(jù)集并將其劃分為訓練數(shù)據(jù)集和驗證數(shù)據(jù)集,分別用于模型訓練階段和模型驗證階段。
步驟2,對數(shù)據(jù)集中的圖像進行預(yù)處理,使之滿足深度卷積對抗生成網(wǎng)絡(luò)的輸入要求,包括以下步驟:
步驟21,在保持圖像長寬比例的前提下將圖像縮放到短邊長度為144像素大小。
步驟22,隨機裁剪得到大小為128×128像素大小的正方形圖像。
步驟23,以0.5的概率水平翻轉(zhuǎn)圖像。
步驟24,將圖像從[0,255]歸一化到[-1,1]范圍內(nèi)。
步驟3,構(gòu)造深度卷積對抗生成網(wǎng)絡(luò)的編碼器模型、解碼器模型以及判別器模型,包括以下步驟:
步驟31,構(gòu)造編碼器模型。編碼器的輸入為3×128×128的混合圖像,輸出為1024×4×4的低維編碼。編碼器包含多個級聯(lián)的下采樣層。下采樣層由串聯(lián)的卷積層、批量正則化層和非線性激活層組成。以下是一個編碼器模型的具體例子。
其中,sequential()表示模塊以順序串聯(lián)的方式組合起來;conv2d(in_channels,out_channels,kernel_size,stride)表示一個卷積層模塊,in_channels和out_channels表示該模塊的輸入通道數(shù)和輸出通道數(shù),kernel_size和stride表示其卷積核大小以及卷積步長;batchnorm2d()表示一個批量正則化模塊;leakyrelu(negative_slope)表示一個非線性激活模塊。
步驟32,構(gòu)造解碼器模型。解碼器的輸入是1024×4×4的低維編碼,輸出為6×128×128的復(fù)原圖像。解碼器包含多個級聯(lián)的上采樣層。上采樣層由串聯(lián)的反卷積層、批量正則化層和非線性激活層組成。以下是一個解碼器模型的具體例子。
其中,sequential()、batchnorm2d()以及l(fā)eakyrelu()的作用與上述步驟中相同;convtranspose2d(in_channels,out_channels,kernel_size,stride)表示一個反卷積模塊,in_channels和out_channels表示該模塊的輸入通道數(shù)和輸出通道數(shù),kernel_size和stride表示其卷積核大小以及卷積步長;tanh()表示一個輸出范圍為[-1,1]的非線性激活模塊。
步驟33,構(gòu)造判別器模型。判別器的輸入是兩張3×128×128的圖像,通過疊加得到6×128×128的層疊圖像,輸出是單一的標量。與編碼器的結(jié)構(gòu)類似,判別器也由級聯(lián)的下采樣層組成。以下是一個判別器模型的具體例子。
其中,sequential()、batchnorm2d()以及l(fā)eakyrelu()的作用與上述步驟中相同。
步驟4,定義判別器、編解碼器的損失函數(shù),包括以下步驟:
步驟41,定義判別器的損失函數(shù)。判別器的損失函數(shù)可以被定義為判別器對原始圖像和復(fù)原圖像的輸出值的差的相反數(shù)。用公式表示如下:
lossofdiscriminator=-(discriminator(x1,x2)-discriminator(decoder(encoder(x3+x4))))
式中,x1、x2、x3、x4均為原始圖像,decoder(encoder(x3+x4))表示將x3和x4兩張原始圖像合成混合圖像后輸入編解碼器后得到的復(fù)原圖像。
步驟42,定義編解碼器的重建損失函數(shù)。編解碼器的重建損失函數(shù)可以定義為原始圖像與復(fù)原圖像之和的像素差的歐幾里得距離的均值。用公式表示如下:
reconstructionlossofencoder-decoder=mean(square((x1+x2)-(y1+y2)))
式中,mean(square())表示像素間歐幾里得距離的均值;x1和x2為原始圖像;y1和y2是x1和x2經(jīng)過混合后經(jīng)由編解碼器拆解得到的復(fù)原圖像,即y1,y2=decoder(encoder(x1+x2))。
步驟43,定義編解碼器的判別損失函數(shù)。編解碼器的判別損失函數(shù)可以定義為編解碼器拆解得到的復(fù)原圖像輸入到判別器后得到的判別數(shù)值的相反數(shù)。用公式表示如下:
discriminationlossofencoder-decoder=-(discriminator(decoder(encoder(x1+x2))))
式中,x1和x2為原始圖像,decoder(encoder(x1+x2))表示將x1和x2合成混合圖像后輸入編解碼器后得到的復(fù)原圖像。
步驟44,定義編解碼器的總損失函數(shù)。編解碼器的總損失函數(shù)可以定義為其重建損失函數(shù)和判別損失函數(shù)的加權(quán)和。用公式表示如下
lossofencoder-decoder=w1*reconstructionlossofencoder-decoder+w2*discriminationlossofencoder-decoder
式中,w1和w2為重建損失函數(shù)和判別損失函數(shù)各自的權(quán)重。
步驟5,訓練編解碼器模型和判別器模型,包括以下步驟:
步驟51,以均值為0,標準差為0.02的高斯分布初始化卷積層和反卷積層的參數(shù)。以均值為1,標準差為0.02的高斯分布初始化批量正則化層的參數(shù)。
步驟52,訓練判別器網(wǎng)絡(luò)。隨機取出4張經(jīng)過步驟2處理的原始圖像,記為x1、x2、x3、x4。將x1和x2直接輸入判別器網(wǎng)絡(luò)可以得到步驟41中discriminator(x1,x2)的值。用x3和x4合成混合圖像輸入編解碼器網(wǎng)絡(luò),可以得到拆解后的復(fù)原圖像y3和y4,即y3,y4=decoder(encoder(x3+x4))。將復(fù)原圖像輸入判別器網(wǎng)絡(luò)即可得到步驟41中discriminator(decoder(encoder(x3+x4)))的值。將得到的這兩個值通過步驟41中的組合方式即可求得判別器的損失函數(shù)的值。將該損失在判別器網(wǎng)絡(luò)中進行反向傳播可以計算得到判別器網(wǎng)絡(luò)中各層參數(shù)的梯度。通過隨機梯度下降算法使用得到的梯度對各層的參數(shù)進行優(yōu)化即可實現(xiàn)一輪判別器網(wǎng)絡(luò)的訓練。
步驟53,訓練編解碼器網(wǎng)絡(luò)。隨機取出兩張經(jīng)過步驟2處理的原始圖像,記為x1和x2。將x1和x2合成混合圖像輸入編解碼器網(wǎng)絡(luò),可以得到拆解后的復(fù)原圖像y1和y2,即y1,y2=decoder(encoder(x1+x2))。通過計算公式mean(square((x1+x2)-(y1+y2)))即可得到步驟42中編解碼器網(wǎng)絡(luò)的重建損失函數(shù)的值。將拆解后的復(fù)原圖像輸入判別器網(wǎng)絡(luò)中,對得到的值取相反數(shù)即可得到步驟43中編解碼器網(wǎng)絡(luò)的判別損失函數(shù)的值-(discriminator(decoder(encoder(x1+x2))))。將得到的重建損失函數(shù)的值和判別損失函數(shù)的值通過步驟44中的加權(quán)求和可以得到編解碼器網(wǎng)絡(luò)的總損失函數(shù)的值。將該損失在編解碼器網(wǎng)絡(luò)中進行反向傳播可以計算得到編解碼器網(wǎng)絡(luò)中各層參數(shù)的梯度。通過隨機梯度下降算法使用得到的梯度對各層的參數(shù)進行優(yōu)化即可實現(xiàn)一輪編解碼器網(wǎng)絡(luò)的訓練。
步驟54,持續(xù)迭代訓練。持續(xù)執(zhí)行步驟52和步驟53知道網(wǎng)絡(luò)分離混合圖像的能力達到預(yù)期的目標。
步驟6,使用驗證數(shù)據(jù)集中的數(shù)據(jù)對訓練得到的模型進行驗證,測試其泛化性能。具體做法是隨機從驗證數(shù)據(jù)集中取出兩張經(jīng)過步驟2處理的原始圖像,將其對應(yīng)像素值相加再歸一化可以得到合成的混合圖像。將得到的混合圖像輸入編解碼器網(wǎng)絡(luò)中可以得到拆解后的反射圖像和目標圖像。在得到拆解的圖像后,可以通過肉眼對比或者計算信噪比等方式判斷編解碼器的復(fù)原混合圖像的能力。
以上所述實施例只為本發(fā)明之較佳實施例,并非以此限制本發(fā)明的實施范圍,故凡依本發(fā)明之形狀、原理所作的變化,均應(yīng)涵蓋在本發(fā)明的保護范圍內(nèi)。