張美玉,劉躍輝,侯向輝,秦緒佳
浙江工業大學 計算機科學與技術學院,杭州 310023
近年來,隨著深度學習的發展,許多傳統算法難以解決的問題有了突破性的進展,灰度圖像上色就是這其中的一種。同時灰度圖像上色分為兩種:一種是需要提示的上色[1];另一種是灰度圖自動圖像上色,上色過程不需要人工干涉。Deshpand等[2]在2015年用CNN結構實現了上色網絡,證明了灰度圖像自動上色這一問題可以得到有效解決。
灰度圖像自動上色可運用在歷史資料修復、老照片上色等有意義的工作上。與使用傳統圖像處理軟件相比,基于深度學習的灰度圖自動上色可以顯著的減少人力成本,為人們節約大量的時間和經濟成本【3】。
須指出的是,現有的大部分算法雖然可以生成符合自然感的圖片,但是建立在大量的訓練上,且模型體積都偏大,不利于部署。本文設計了一個基于不同尺度的空洞卷積[4]堆疊結構的與one-hot編碼的灰度圖自動上色網絡,簡化了編碼過程,并使用傳統的高斯卷積處理one-hot編碼生成最終結果,提升了最終上色效果。從實驗結果來看,實現了一個上色結果較好、易于訓練的灰度圖自動上色網絡。
這一類方法主要以L2范數的均方誤差作為損失函數,如下所示:

再添加其余的損失函數作為輔助,從而構建的網絡。在上色任務中,大多都使用L2損失函數的方法,具體的流程為:給定輸入的L通道,學習到相應AB通道的函數:y=f(x)。上色網絡本質上也屬于分類網絡,只是將各種不同的顏色作為標簽,不同于傳統的少量標簽分類網絡[5]。
Iizuka等[6]使用了復雜的使用了一個非常復雜的CNN網絡,由一個高級特征提取網絡,一個低級特征提取網絡,一個分類網絡,一個特征融合網絡,一個上色處理網絡組成。色彩編碼使用了LAB,使用了交叉熵作為分類損失函數,最終的著色效果損失函數則使用L2的均方誤差。文獻[6]的方法可以更好的結合空間特征,提升了最后的上色效果。但是由于網絡結構復雜,所以網絡收斂所需時間很久,原方法使用一塊K8連續訓練了2周。
Despande等[2]使用了一個結構相對簡單的CNN網絡,并在L2損失均方誤差的基礎上,加上了一個直方圖。Cheng等[7]使用了一個結構相對簡單的CNN網絡,并使用了聯合雙邊濾波器結合均方誤差函數。
DCGAN由Radford等[8]提出,是基于GAN[9]做出的改進,在生成器和判別器中,特征提取層用卷積神經網絡代替了原始GAN中的多層感知機。GAN中的生成器(generator)和判別器(discriminator)來往的博弈,最終達到納什平衡,GAN多用于圖像生成一類的任務。DCGAN可以用于人臉表情識別[10]、數據增強[11],圖像轉換等任務,也可以用于圖像自動上色。本文通過DCGAN構建了一個上色網絡。
由于判別器還不足以讓生成器有上色效果,所以在生成器中加上L2范式的均方誤差修正上色結果。由于鑒別網絡的存在,最終的效果細節較為真實,比使用端到端的CNN網絡上色效果更好。
Zhang等[12]使用了VGG[13]作為主干網絡,將LAB空間編碼分割成Q=313塊。將輸入圖片作為Y,并定義一個one-hot生成函數:Z=(Y),最終每一個像素上色的結果為選取313塊中的一種。每次訓練選取鄰近像素鄰近的5塊,并按照空間距離加權,距離越短,權值越大。定義背景平衡函數v(Z h,w),通過統計ImageNet[14]數據集中所有的圖片顏色出現的概率。按照顏色出現的概率決定上色的概率,其中,出現的概率越小,顏色越稀有,反向傳播的梯度越小,得以保留更加豐富的顏色。得到最終權重編碼后,生成的One-Hot與網絡生成的結果做比較。最終的損失函數為:

最后引入參數T=0.38,讓one-hot中每一個數值除以T,使最后的顏色飽合度更高。
Yoo等[15]提出了一個帶記憶增強的關色模型Memo-Painter,可以捕獲稀有實例并成功著色,可以在較小樣本小取得相對可以接受的上色效果。此方法的核心是通過一個類似HashMap的記憶網絡,具體做法以記憶空間為key,以顏色為value。使用索引和余弦相似度處理key;使用Zhang等[12]的one-hot編碼格式。
本文設計了一個新的CNN網絡,依靠堆疊不同尺寸的普通卷積和空洞卷積,以及上采樣、Dropout[16]、1×1卷積[17]構建了一個CNN上色網絡。同時本文的網絡設計為全卷積[18]網絡,可以處理任理任意尺度的圖片,本文的體積也控制的比較好,在實驗部分也會列出體積對比。本文的結構圖如圖1所示。

圖1 網絡總體結構圖Fig.1 Overall diagram of network architecture
圖片的編碼格式采用LAB,主要有兩個原因:因為人眼對彩色并不是很敏感,而對亮度敏感,所以使用Lab空間處理圖片[19],觀感上要比傳統的RGB好;如果用LAB格式,那么只要輸入1個通道預測2個通道,比采用RGB的輸入3個通道預測3個通道更容易訓練。L通道代表亮度,A代表從紅色到綠色,B代表從黃色到藍色,A、B都在[ ]-128,128之間。L的亮度通道即是灰度圖,已經包含了圖片語義信息。從Iizuka等[6]的實驗可以看出,使用亮度去預測顏色比傳統的RGB更有優勢。
本文的損失函數受Zhang等[12]方法的啟發,將搜索策略作了調整,在最后的編碼階段使用了高斯卷積,代替了最后使用模擬退火思想得出的用于優化分類權重的閾值。最后使用比Adam[20]效果更好的AdamW[21]進行訓練。AdamW則是在Adam的更新策略中采用了計算整體損失函數的梯度來進行更新,而不是只計算不帶正則項部分的梯度進行更新之后再進行權重衰減[22]。
(1)將原圖O從RGB轉成LAB,并取L通道作為Ol。
(2)將原圖O的ab通道編碼成width/4×hi eght/4×313的向量O h。
(3)取Ol作網絡輸出的AB通道編碼的one-hot結果R h。
(4)使用交叉熵計算兩個one-hot向量R h、O h的誤差,并反向傳播修正誤差。
(5)訓練結束,對輸出的one-hot編碼R h使用高斯卷積進行處理。
(6)轉換one-hot編碼R h為真實的AB通道值Ra、Rb,并將R a、R b的尺寸采用擴大4倍。
(7)取原圖的L通道Ol并加上生成的R a、Rb兩個通道,以生成最終的上色結果。
一個物體可以有若干個合理的顏色,只要這若干種顏色符合人的認識,就作為可以接受的解,故L2損失函數的功能僅是將數據集中出現的解取平均值作為最優解。經過一定量的訓練之后,網絡可以根據特征識別出物體,由于使用了L2損失函數,神經網絡會擬合每一個訓練數據。比如存在各種顏色的綠植:深綠與淺綠。為了擬合所有的數據,神經網絡就會取一個深綠與淺綠的中間值,作為綠植的上色顏色。體現在最終結果上,畫面整體偏灰,顏色不豐富。比如:房屋大多是同樣的偏黑的棕色,綠植多大是相同的綠色。如圖2所示,用L2函數的上色網絡會嘗試擬合各種特征的樹木,取訓練集中各個樹木顏色的平均值。最終,對新的灰度圖像進行上色時,綠植的顏色就會是一個非常平淡的綠色。這樣的上色結果雖然也符合人類的認知,但是最終的效果并不理想。所以這種損失函數無法解決著色問題的多解問題。一個上色良好的上色網絡應該避免這個惟一解問題,所以本文選擇基于one-hot編碼的操作函數。

圖2 L 2損失函數上色效果展示圖Fig.2 Visual display of L 2 loss function coloring effect
在相關方法中,Zhang等[12]的方法是唯一一種不使用L2上色方法的結果,雖然相比L2損失函數多出了編碼圖片與解碼圖片的過程,并且最后一層分類會顯著的增加網絡的體積,但是最終的上色結果大幅度優于采用均方誤差的方法。所以本文選擇沿用Zhang等[12]的思路:將圖片編碼成one-hot編碼,再使用選用基于分類的損失函數進行著色。
2.2.1 圖像編碼
本文方法的采用Zhang等[12]的量化方法:將AB通道的輸出二維空間以10的步長量化為一維313類,并組成鍵值對,一組A、B對應一類顏色。
本文方法將圖像編碼的具體流程為:先將圖片尺寸縮小至原來的1/4,再取所有點的AB值,并使用KNN的ball tree算法僅搜索一個最鄰近點,直至所有點都搜索完成。
最后得到的張量為最終的one-hot編碼,大小為:313×width/4×height/4,將L通道輸入網絡,預測AB通道的one-hot編碼,再將one-hot編碼轉成真實的AB值。
2.2.2 圖像解碼
如果直接使用每個像素預測而得到的顏色,大部分區域下可以得到符合語義的顏色,但是在小部分區域內,會出現顏色在空間上不連續的現象,比如在同一個區域內的一小塊會出現與語義信息不符合的顏色,這樣非常影響最后的上色結果。所以圖像解碼不是圖像編碼的逆操作。
造成這種現象的原因是本文的核心方法就是將一個像素的上色問題作為313類的分類問題來解決,而每一次的分類結果不會總是正確無誤。這就導致有時預測的結果會出現一些異常的分類結果,理想的分類結果為:一個像素如果預測成湖藍色,那么必然在淡藍色,深藍色都會存在相對其他顏色相差不大的權值。但是真實的結果是同時也會有一些異常點出現,這個異常顏色的權值會比較高,甚至高于正確顏色的權值,而這個異常顏色周圍的顏色權值又非常的低。Zhang等[12]采用了基于模擬退火的思想去解決這一問題,具體的作法為在softmax分布中引入參數T,然后取結果的平均值。這樣的缺點是要不停的嘗試參數并且每一次修改網絡結構都需要去尋找一個合適的T值,而且并沒有對畫面有什么過大的影響。
一個固定的T值,僅是將神經網絡預測的每一個權值放大1.47倍,使用的交叉熵函數讓一些本來無法選中的權值得以選中。經過多組圖片試驗,加上T值處理的圖片會略微改變圖像的色調。可能對某一些上色結果有優化的作用,但是無法優化所有的上色結果。所以使用T值有一定的局限性,本文不選用T值優化結果。
在圖像解碼這一部分中,文本使用傳統圖像處理中的高斯卷積,作為濾波器處理預測的顏色權值。解決突然出現的異常顏色點,以在最終結果上盡可能消除不符合語義的顏色出現。
高斯卷積的常用于圖像模糊中,然而高斯卷積是一種數據平滑技術,可用于多個場合。高斯卷積將正態分布用于數據平滑中,高斯卷積核使用高斯函數生成。
高斯函數就是正態分布的密度函數。一維形式為:

根據一維函數可以得到二維函數:

假設中心點的坐標為(0,0),距離它最近的8個點的坐標,范圍為:x∈[-1,1],y∈[-1,1],取σ=1.5,得到權重矩陣:

然后計算9個點的加權平均,得到本文最終使用的高斯卷積核:

對于那些異常預測值,即在最后的313類的周圍權值都很低,但是本身的權值很高,這樣的值通常不會是正解,但是通過使用高斯卷積處理后,那些預測的值很高,將會進一步地強化權值,那些本身權值很低的值,會變得很加的低。所以這樣可以進一步的削減異常權值。在最終的實驗結果中,也證明了效果的提升。本文方法中對σ的取值并沒有特殊的要求,因為高斯卷積擁有數據平滑的功能,使用高斯卷積可以平滑最終one-hot編碼。最后使用的交叉熵函數,會選出一個權值最大值并以此選擇分類,所以σ的選取對最終的圖片結果影響非常微小。
本文的網絡結構設計上參考了VGG系列的堆疊卷積結構,并在此基礎上加入了1×1卷積、Dropout[16]、不同尺寸的空洞卷積堆疊等結構組成文本的網絡。最終組成了一個體積相對較小、上色效較好的深度神經網絡。
本文的網絡結構在開始使用了3個堆疊結構,之后,經過上采樣放大特征。采用了一對VGG上廣泛使用的3×3卷積堆疊并進行升維。在本文的網絡中,將最后的通道數放大,最高到512,最后一層縮減成313進行分類,最后若干層的卷積均為1×1卷積。下文將對為何使用上文中提到的網絡基礎結構做逐一說明。
2.3.1 堆疊卷積
VGG結構上使用了很多個卷積堆疊,具體做法是將兩個3×3的卷積層串聯,相當于1個5×5的卷積層。3×3堆疊卷積首次出現在VGG的結構上,相比于傳統的大卷積堆疊,多個3×3結構相比單個5×5的卷積核的優點為以下兩點:
(1)擁有相同的感受視野與更小的運算量。運算量的對比如表1所示。

表1 卷積參數表Table 1 Convolution parameters
2個3×3的卷積可以代替1個5×5的卷積的感受野;3個3×3的卷積才能代替1個7×7的卷積的感受野。
2個3×3和1個5×5的參數比例為3×3×2/(5×5)=0.72,同樣的3個3×3和1個7×7參數比例為3×3×3/(7×7)=0.55,使用小卷積堆疊可以減少近一倍的參數量,所以選擇多個小卷積核代替大卷積核。
(2)與使用多個卷積層比單個卷積層相比,還擁有更多的非線性變換。單個卷積層只能使用一個激活函數,而后者可以使用多次激活函數,使用多個卷積堆疊可以提升對特征的學習能力。
視野變化的過程如圖3所示:頂層為特征,初始為1×1,第二層為經過一層卷積之后,視野的變化為3×3,第三層為再次經過一層卷積之后,視野的變化為5×5。

圖3 卷積堆疊示意圖Fig.3 Convolution stacking diagram
在卷積堆疊基礎之上,本文使用了不同參數的空洞卷積進行堆疊。
如果將上圖的普通卷積替換成空洞卷積,那么感受視野將進一步擴大,空洞卷積的感受野會隨著空洞的數量變化
本文的空洞卷積堆疊使用了兩種不同的尺寸,如表2所示。

表2 空洞卷積參數Table 2 Dilated convolution parameters
通過空洞卷積的視野計算公式:

其中,r n來表示第n個卷積層中每個單元的感受視野,k n、s n分別表示第n個卷積層的卷積核尺寸與步長。根據表2的配置參數得出使用本文所使用空洞卷積感受視野為:9×9。
2.3.2 1×1卷積
本文在最后需要降維的位置使用1×1卷積以減少參數量并減少模型體積。為了進一步縮小網絡體積且盡可能的不增加運算量,最后生成one-hot編碼的部分也采用1×1卷積。
2.3.3 Dropout
Dropout是會按給定的比例,隨機將給定比例的神經元權值置0,雖然會降低每一次訓練時的效果,但是隨著訓練次數的增加,會提高整個網絡的性能。經過實驗的權限,本文方法中選定的權值為0.1,并放置在即倒數第二個卷積層。此卷積層用于最后生成one-hot編碼,即此卷積層有10%的概率會失效。
本文使用Dropout并不是為了防止過擬合,而是為了使模型泛化性更強。原因主要有兩個:
(1)因為它不會太依賴某些局部的特征。因為Dropout程序導致兩個神經元不一定每次都在一個Dropout網絡中出現。這樣權值的更新不再依賴于有固定關系的隱含節點的共同作用,阻止了某些特征僅僅在其他特定特征下才有效果的情況,迫使網絡去學習更加魯棒的特征。
(2)因為Dropout會隨機丟棄一部分權值,剩余的權值需要利用已讀到的特征輸出結果去適應這一情況,這樣增加了網絡整體的性能。
2.3.4 通道數的限制
本文的網絡設計目標以體積小為導向,所以盡可能不過多地增加通道數。使用更寬的通道數可以增加網絡的表達能力,以提高網絡的整體性能,但是網絡模型體積及參數也隨之上升。為了達到相對較小的體積和相對好的性能這一目標,只在中間及偏后的位置加入通道數偏大的網絡。通道數最多為512,此通道在同類網絡中已然很大,過大的通道數也沒有意義,反而徒增運算量。
2.3.5 上采樣
相對的,反卷積也可以起到相似的作用,但是反卷積容易出現棋盤效應,且本身就作為卷積層需要參數[21]。使用上采樣可以不用訓練就達到增大特征的效果,更適合本文算法。
本文的網絡結構如表3所示。

表3 網絡詳細信息Table 3 Network details
其中,除最后一層外,激活函數采用了ReLU,最后一層的激活函數使用softmax分類生成one-hot編碼。這兩個激活函數是目前比較常用的激活函數。
在此基礎上,如果再加卷積層(升維)時,在空間占用量上,即模型大小上,根據通道數C的大小,及神經網絡默認使用的Float32類型,增加Cin×Cout×32字節的空間占用。運算量上,即顯存占用上,在不同的位置,根據特征圖的大小、通道的多少,對運算量也會有較大影響。如果改變通道數,只會對本層及下一層增加或減少相應數值的空間占用量及顯存占用量。同時因為批數量的關系,會進一步的影響運算量。一般來說,常見的網絡都會在兩端設計選擇較小的通道數,并在中網絡中間選擇較大的通道數與較小的特征圖。本文方法也遵循這一經驗。
經過大量的調整各個參數,本文采用了表3的參數。如果再加上幾層卷積層(升維),對上色結果沒有特別大的影響;如果再此基礎上再減少若干層,網絡將不能很好地進行上色工作。
本文方法在Windows 10操作系統上進行。顯卡為RTX 2070S 8 GB顯存,CPU為AMD Ryzen 2 400G,內存為16 GB DDR4。軟件環境為:深度學習框架Pytorch 1.5[23]、Python 3.7、CUDA 10.0,數據集采用Place 365中的室外風景部分。包括樓宇、小屋、山水、庭院等50多個類別大約30萬張256×256分辨率的圖片。本文方法的優化方法是AdamW,Epoch為10。對比算法嚴格按照相同的數據集進行訓練,且訓練的Epoch同樣為10。
本文算法將與DCGAN,Zhang等[12]的方法作對比,采用一樣的數據集,一樣的訓練輪數10,并動態地調整批數量使其充分利用8 GB顯存。
3.2.1 上色評價
由于上色的最終效果難以用數學的方式衡量,因為著色時顏色越豐富,最終的損失越大,但是最終的效果是可接受的。圖4、圖5展示一些實驗效果的對比,其中圖4為彩色照片的重著色效果,圖5為黑白照片的上色效果。

圖4 彩色圖片重上色Fig.4 Colorful image recoloring

圖5 黑白圖片上色Fig.5 Gray image coloring
從彩色圖片重上色(圖4)效果來看,經過本文方法上色的圖片顏色更加豐富,對細節的處理以及光影效果也比其余算法更好。DCGAN的效果總是偏暗,Zhang等[12]的算法有一些地方語義不到位,圖4的C組圖山脈處,D組圖的建筑部分出現了綠色,E組圖的路面一片綠色,F組圖的樹木也是綠色;本文算法除了在E組圖中沒有識別出地面,其他幾組圖片效果都相對較好。
在圖5所示的黑白圖片上色中,本文方法的語義性較好。在圖5的A組圖中,本文方法的顏色生動,對天空的還原較好,Zhang等[12]的算法總體也較好,但是天空還原不準。DCGAN則較為平淡,在B組圖中,本文算法在樹葉與天空的縫隙處上色效果較好。在D組圖中,對建筑的上色更加的準確,而Zhang等[12]的算法則偏綠,E組圖也是同樣的情況。在F組圖中,本文算法對地面的彩色著色相對準確,而Zhang等[12]的算法可能將地圖看成了海洋。DCGAN的幾組結果上色效果均過于平淡。
3.2.2 其他參數對比
網絡中的參數如下所示:通過表4的數據可知,由于DCGAN沒有使用one-hot編碼,在速度上占據一定的優勢,但是由于存在鑒別器,同時訓練兩個網絡,體積和訓練時顯存都占用較多,所以批數量較少,難以訓練。從體積大小與批數量來看,本文方法有較大的優勢。

表4 不同模型的性能對比Table 4 Performance comparison of different models
本文使用了基于分類思想的上色網絡,提出一個使用傳統高斯卷積的編碼器,并使用空洞卷積堆疊的結構組建的CNN網絡,不僅獲得了相比于采用L2損失函數更為鮮艷的效果,并且采用一系列方法在保證上色效果的前提下縮小模型的體積。通過在自然圖像數據集上進行的實驗,所提出的方法可以進行效果良好的上色,與其他方法的結果相比,在最終的上色效果與體積控制上均具有優越性。