深度學習增強了視覺和語言處理等“認知”任務,連谷歌都轉向了基于神經網絡的語言翻譯,如此火爆的原因或許是它不需要掌握各個領域的特定知識就能取得想要的結果。當然,海量GPUs并行計算硬件加上設計良好的框架如TensorFlow,也加速了AI革命崛起。本文將討論另一個“認知”任務:利用深度學習使黑白圖像變為彩色。
本文基于最近的一篇文章:
https://arxiv.org/pdf/1603.08511.pdf這里寫鏈接內容
假設你已經對神經網絡和損失函數有所了解……
目標任務
用一張黑白照片,制作出它的彩色版本。直覺上,這個想法相當簡單。根據照片的內容,知道它的顏色應該是什么。比如,樹葉一般是綠色的,天空是藍色的,云朵是白色的等等。我們需要做的就是使計算機能實現它。
以前的工作和存在的問題
過去主要利用了深度學習,他們用回歸來預測每一個像素的顏色,然而結果卻不盡如人意,色彩平淡枯燥。
Figure 1.0 Results of a regression based model. Left: Input to the model. Right: Output of the model
以前的作品使用均方誤差(Mean Squared Error ,MSE)作為訓練模型的損失函數,作者指出,MSE將嘗試“平均”出顏色,以獲得最小的平均誤差,這將導致平淡的外觀。于是作者改變思路,將圖片著色變為分類問題。
模型的輸入輸出
作者使用了LAB色彩空間模式(最常見的使RGB)。在LAB方案中,L通道記錄了光強值,另外兩個通道則記錄了一組對抗色,綠-紅 和 藍-黃。關于LAB你可以在這里了解更多。
使用LAB顏色空間的一個很有利的原因是它能使光強值保持分離。好處是黑白圖片可以被當作L通道,這樣模型在預測時就不必學習如何保持光強。(使用RGB則必須)。這樣,模型只需學習怎樣將圖像彩色化,從而專注于關鍵步驟。
模型輸出的AB通道值,可以被直接應用到黑白圖像是上得到彩色圖片。
該模型是一個相當標準的卷積神經網絡,作者并沒有用池化層,取而代之的是使用上/下采樣層。
顏色量化
通過上面簡短的介紹,作者采用了分類模型取代回歸模型。因此,類型的數量需要做修正,作者選取了313個AB對作為分類可能數量。雖然看起來這有點少,但也可以使用一些方法來確保能出現更多顏色。(文末有介紹)
損失函數
作者使用的損失函數是標準的交叉熵(Cross Entropy)。Z 是像素的真實類型,Z^ 是模型的輸出。
Equation 1.0 Standard Cross Entropy
作者還指出,顏色值在分類中會出現不均衡,使用交叉熵作為損失函數在分類不均衡上不能很好地發揮作用,通常具有較少示例的類具有更高的權重。而不飽和色 灰色和淺藍色 想比其他會更加豐富廣泛,因為它們常常出現在背景色中。所以作者提出了一種權重方案。
Equation 1.1 Weighing scheme
作者從ImageNet數據庫中計算?p,即類的分布。Q 則是類型數量(313),λ 取 0.5 效果不錯。需要注意的是,作者對?p進行了平滑處理,在這里我將跳過,感興趣可以閱讀原作。
所以考慮權重后,我們的損失函數最終如下:
Equation 1.3 Loss function after weighing scheme
v( ) 只是每個類的權重值,h 和 w 分別是圖像的高度和寬度。
根據類型預測顏色
直接用313個色彩分類會使圖象很粗糙,只有少數能與真實色彩相匹配。
作者為了從預測模型中得到更多樣化的色彩范圍,又加了一步后續處理。
Equation 2.0 Calculating color from class probabilities
H 是一個函數,Z 是模型的輸出,T 是一個超參數(hyper-parameter),作者實驗了如下一些不同的值。
Figure 1.0 Effect of different values of T
這是很巧妙地一步,原因是模型的輸出是一組概率值,相比只取最大概率所對應的顏色值(就像做圖片分類一樣),上述函數試圖利用 模型輸出一組概率值 的全部信息來計算顏色,因此效果更好。
訓練框架
訓練這樣一個神經網絡分為兩部分。首先 訓練數據正向傳播通過模型,計算輸出得到預測結果。然后計算 H 的的倒數來計算損失(loss)。
結果
實驗結果圖片是非常鮮艷的,在大多數情況下與現實相差無幾。但也要注意有時與真實環境會有偏差,但語義(semantically correct)上仍是正確的(模型能為目標賦予正確的顏色)。
Figure 2.0 Comparison between different colouring frameworks
Colouring Legacy Black & White Photos
Figure 2.1 Colouring photos that were originally taken in Black & White
結論
在本文中,我們討論了一種使用修改版的損失函數對圖像進行著色的新方法。 我們討論了如何通過超參數來控制 vibrancy,以及為什么 類型的重新平衡( class rebalancing) 在自然圖像著色方面起著重要的作用。
譯自:https://hackernoon.com/colorising-black-white-photos-using-deep-learning-4da22a05f531
github:https://github.com/richzhang/colorization