厲旭杰, 王怡婷
(溫州大學(xué)計(jì)算機(jī)與人工智能學(xué)院,浙江溫州325035)
圖像重新著色方法是指調(diào)整和修改圖像的顏色外觀的處理過(guò)程[1-2]。Photoshop軟件專門提供了一個(gè)“顏色替換”工具用于圖像重新著色,但是該方法需要用戶手工設(shè)置“顏色容差”參數(shù)來(lái)選取需要重新著色的區(qū)域,因此用戶通常需要不斷調(diào)整“顏色容差”參數(shù),這種方法消耗大量的時(shí)間。為了提高計(jì)算機(jī)輔助設(shè)計(jì)的效率,減少設(shè)計(jì)師的勞動(dòng)時(shí)間,改善重新著色技術(shù)的效果,Reinhard等[3]提出了一種基于色彩遷移的圖像重新著色方法,該方法在目標(biāo)圖像和參考圖像之間建立一種映射關(guān)系,從而把目標(biāo)圖像重新著色成和參考圖像具有相似的顏色外觀,但該方法的效果嚴(yán)重依賴于參考圖像的選取。Huang等[4]提出了一種數(shù)據(jù)驅(qū)動(dòng)的方法,從數(shù)據(jù)庫(kù)中自動(dòng)尋找匹配的參考圖像,用于自動(dòng)對(duì)照片進(jìn)行重新著色,以增強(qiáng)照片的外觀或改變觀眾對(duì)照片的情緒反應(yīng)。對(duì)于一個(gè)新的輸入圖像,該方法可以生成多個(gè)重新著色的結(jié)果供用戶選擇,但是該方法需要和數(shù)據(jù)庫(kù)中的圖片逐一進(jìn)行特征匹配,消耗大量的時(shí)間。Li等[5]利用用戶輸入著色線條,提出了基于最優(yōu)化模型的圖像重新著色方法,該方法根據(jù)提出的特征相量查找每個(gè)像素的最近鄰域,通過(guò)鄰域像素把著色線條的顏色值擴(kuò)散到整個(gè)圖像。該方法很好地加入了用戶的交互,同時(shí)能獲得高質(zhì)量的圖像重新著色效果,但是該方法需要求解大型的稀疏矩陣,因此需要消耗大量的內(nèi)存。當(dāng)圖像尺寸達(dá)到一定程度,該方法甚至不能獲得想要的圖像重新著色效果,而且這類方法通常比較耗時(shí)。最近幾年,基于神經(jīng)網(wǎng)絡(luò)的圖像編輯方法被大量的研究,特別是卷積神經(jīng)網(wǎng)絡(luò)得到了廣泛的使用[6-9]。文獻(xiàn)[10-11]中利用卷積神經(jīng)網(wǎng)絡(luò),自動(dòng)進(jìn)行圖像重新著色,但是目前這類方法均采用圖像級(jí)的樣本作為卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練樣本,而訓(xùn)練神經(jīng)網(wǎng)絡(luò)通常需要消耗幾小時(shí)甚至幾天的時(shí)間。本文提出了一種基于全連接神經(jīng)網(wǎng)絡(luò)(FNN)的單個(gè)圖像重新著色方法。該方法提取著色線條所在區(qū)域的像素RGB顏色特征值和相應(yīng)的著色線條分類為數(shù)據(jù)集,該方法把FNN作為一個(gè)像素級(jí)的多分類神經(jīng)網(wǎng)絡(luò),避免了神經(jīng)網(wǎng)絡(luò)在訓(xùn)練階段需要大規(guī)模的訓(xùn)練樣本的弊端,且能夠達(dá)到近實(shí)時(shí)的交互性能,同時(shí)用戶只需要輸入少量的用戶著色線條,就能獲得高質(zhì)量的圖像重新著色效果。
FNN模型見(jiàn)圖1。圖像重新著色分類全連接神經(jīng)網(wǎng)絡(luò)除了輸入層和輸出層外,中間還有3個(gè)隱藏層。輸入層的輸入為著色線條所在區(qū)域的像素的RGB顏色值,隱藏層1為第1個(gè)全連接層,隱藏層1的神經(jīng)元個(gè)數(shù)為64,將輸入層a0乘以權(quán)重W1并加上偏置b1,然后加上ReLU激活函數(shù),得到a1;同理,隱藏層2和隱藏層3為第2個(gè)全連接層和第3個(gè)全連接層,隱藏層2和隱藏層3的神經(jīng)元個(gè)數(shù)均為128,得到隱藏層2的輸出a2和隱藏層3的輸出a3,用公式表示為:
圖1 用于圖像重新著色的全連接神經(jīng)網(wǎng)絡(luò)模型
式中:W1∈R3×64;W2∈R64×128;W1∈R128×128;b1∈R64;b2∈R128;b3∈R128。
最后一層輸出層也為全連接層,不同的是激活函數(shù)采用softmax函數(shù),得到:
式中:W4∈R128×K;b4∈RK;K 為著色線條的種類。
提取著色線條所在區(qū)域的像素RGB顏色值和相應(yīng)的涂色線條分類為數(shù)據(jù)集,為了減少神經(jīng)網(wǎng)絡(luò)的訓(xùn)練時(shí)間,對(duì)數(shù)據(jù)集進(jìn)行隨機(jī)采樣。本文中把FNN作為一個(gè)像素級(jí)的分類神經(jīng)網(wǎng)絡(luò),把色線條所在區(qū)域的像素RGB顏色值作為神經(jīng)網(wǎng)絡(luò)的輸入,用FNN來(lái)做分類,輸出每個(gè)像素點(diǎn)屬于哪類著色線條的分類。
訓(xùn)練樣本經(jīng)過(guò)FNN的輸出和真實(shí)的訓(xùn)練樣本輸出之間的損失函數(shù)如下:
式中:i,k為索引值;M為訓(xùn)練樣本的數(shù)量;K為著色線條的種類數(shù)量;L為交叉熵?fù)p失函數(shù);ai為第i個(gè)訓(xùn)練樣本在softmax層的未激活的輸出;yi為訓(xùn)練集中第i個(gè)訓(xùn)練樣本的分類向量,向量中目標(biāo)分類yik等于1,其他分類yik等于0;y′ik為softmax的輸出,計(jì)算了第i個(gè)訓(xùn)練樣本預(yù)測(cè)為屬于分類k的似然概率,
對(duì)損失函數(shù)E進(jìn)行優(yōu)化求最小化的極值,可以獲得FNN的參數(shù),本方法采用mini-batch Adam優(yōu)化算法來(lái)訓(xùn)練深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)。
用chainer深度學(xué)習(xí)框架實(shí)現(xiàn)全連接網(wǎng)絡(luò)模型的算法如下:
class colormodel(Chain):
def__init__(self,K,channel=3):
super(colormodel,self).__init__()
with self.init_scope():
self.l1color = L.Linear(channel,64)
self.l2color = L.Linear(64,128)
self.l3color = L.Linear(128,128)
self.lf = L.Linear(128,K)
def forward(self,x,c,xc):
hcolor = F.relu(self.l1color(c))
hcolor = F.relu(self.l2color(hcolor))
hcolor = F.relu(self.l3color(hcolor))
y = self.lf(hcolor)
return y
神經(jīng)網(wǎng)絡(luò)的softmax層輸出了每個(gè)樣本屬于著色線條的似然概率,最終的圖像重新著色結(jié)果計(jì)算如下:
式中:i為像素索引值;K為著色線條的種類數(shù)量;P′ik為第i個(gè)樣本預(yù)測(cè)為屬于分類k的似然概率;Sk為第k種著色線條的顏色值,當(dāng)著色線條為特殊白色著色線條時(shí),Sk的值為著色線條覆蓋像素下圖像原來(lái)的顏色值;C為最終的圖像重新著色結(jié)果。
本算法使用python 3.7和chainer 5.3.0庫(kù)實(shí)現(xiàn)了基于神經(jīng)網(wǎng)絡(luò)的單個(gè)圖像重新著色方法,所有實(shí)驗(yàn)都是在NVIDIA GeForce RTX 2080 Ti GPU和Intel I9-7900X CPU的機(jī)器上進(jìn)行的。采用著色線條所在區(qū)域的像素為訓(xùn)練樣本,但是訓(xùn)練神經(jīng)網(wǎng)絡(luò)仍然需要十幾s,為了減少訓(xùn)練時(shí)間,獲得近實(shí)時(shí)的效果,對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行了隨機(jī)采樣,采樣率為β。本文研究了采樣率和神經(jīng)網(wǎng)絡(luò)的迭代次數(shù)t對(duì)圖像重新著色效果的影響。圖2比較了β和迭代次數(shù)t對(duì)圖像重新著色效果的影響,當(dāng)β=0.1,t=2時(shí),圖像重新著色效果幾乎收斂。較高的β和t不會(huì)產(chǎn)生明顯更好的重新著色效果。實(shí)驗(yàn)中,通常10%的用戶筆畫(huà)像素β=0.1足以訓(xùn)練本文的神經(jīng)網(wǎng)絡(luò)用于圖像重新著色。因此,本文算法設(shè)置β =0.1,t=2。
圖2 采樣率β和迭代次數(shù)t對(duì)圖像重新著色效果的影響
圖3 本方法與目前主流的圖像重新著色方法效果對(duì)比圖
圖3比較了本方法與主流的重新著色方法DeepProp[12]、全局最優(yōu)化方法[13]和局部最優(yōu)化方法[14]效果對(duì)比結(jié)果,白色筆畫(huà)表示圖像重新著色后該區(qū)域顏色應(yīng)保持不變,而其他顏色筆畫(huà)表示圖像重新著色后的最終顏色。從圖中可以看出,局部最優(yōu)化和全局最優(yōu)化方法都有各自的局限性。局部最優(yōu)化方法只考慮局部窗口內(nèi)的局部空間鄰域傳播。局部圖像方法為用戶提供了良好的局部控制,但當(dāng)對(duì)提供的顏色約束進(jìn)行相對(duì)較遠(yuǎn)的重新著色時(shí),這種方法的性能較差。因此,他們的方法需要加入更多的用戶交互來(lái)實(shí)現(xiàn)高質(zhì)量的結(jié)果。全局最優(yōu)化方法可以實(shí)現(xiàn)全局顏色傳播,用戶只需要輸入少量的著色線條就可以產(chǎn)生高質(zhì)量的圖像重新著色效果,但是該方法需要消耗很大的內(nèi)存,當(dāng)圖像達(dá)到一定的尺寸,甚至無(wú)法產(chǎn)生正確的結(jié)果。DeepProp采用卷積神經(jīng)神經(jīng)網(wǎng)絡(luò)來(lái)產(chǎn)生圖像重新著色效果,但是由于使用圖像補(bǔ)丁作為特征向量,DeepProp在重新著色的邊緣附近會(huì)失去精度[15],需要采用邊緣保持濾波器[16]對(duì)圖像重新著色的結(jié)果進(jìn)行進(jìn)一步完善,以提高圖像重新著色的質(zhì)量。本方法只需要輸入少量的用戶重新著色線條就可以產(chǎn)生高質(zhì)量的圖像重新著色效果,后期無(wú)需進(jìn)行完善步驟;同時(shí)由于只提取了著色線條所在區(qū)域的像素RGB顏色特征值和相應(yīng)的著色線條分類為數(shù)據(jù)集,并提出了一種有效的采樣策略,使得神經(jīng)網(wǎng)絡(luò)的訓(xùn)練達(dá)到了近實(shí)時(shí)的性能,采用mini-batch批量訓(xùn)練,對(duì)內(nèi)存的消耗也很小。
為了測(cè)試本方法的運(yùn)行效率,表1顯示了圖3中3組圖像的運(yùn)行時(shí)間,第2列顯示了著色線條像素點(diǎn)個(gè)數(shù),第4列顯示了本方法運(yùn)行時(shí)間。從表1中可以看出,因?yàn)楸痉椒▋H僅利用涂色線條所在區(qū)域的像素RGB顏色特征值和相應(yīng)的涂色線條分類為訓(xùn)練集,并采用了有效的采樣策略;從而大大減少了神經(jīng)網(wǎng)絡(luò)訓(xùn)練的時(shí)間和內(nèi)存要求,只需要1~2 s的時(shí)間就能完成圖像重新著色。
表1 本方法運(yùn)行效率(β =0.1,t=2)
本文提出了一種基于FNN的單個(gè)圖像重新著色方法。該方法僅需要用戶在待重新著色圖像上輸入少量的著色線條,然后提取著色線條所在區(qū)域的像素RGB顏色特征值和相應(yīng)的著色線條分類為數(shù)據(jù)集,避免了神經(jīng)網(wǎng)絡(luò)在訓(xùn)練階段需要大規(guī)模的訓(xùn)練樣本的弊端,從而能達(dá)到近實(shí)時(shí)的交互性能,同時(shí)用戶只需要輸入少量的用戶著色線條,就能獲得高質(zhì)量的圖像重新著色效果。本文提出的算法簡(jiǎn)單,可以達(dá)到近實(shí)時(shí)的交互性能,特別適合應(yīng)用在人工智能相關(guān)課程中。