一鍵點擊,百年舊照變彩色。
如何把女神的黑白照片變成彩照?今日小編發現新加坡 GovTech 數據科學與人工智能部門在 Medium 上介紹了一個爲百年舊照上色的項目。
這個項目名爲 Colourise.sg,最初是該團隊(成員包括:定量分析師 Andrew Tan、軟件工程師 Preston Lim、數據科學家 Tan Kai Wei)參加 hackthon 時爲新加坡舊照做的深度學習上色工具。點擊以下項目地址可以自己嘗試給任意黑白照片上色。
項目地址:https://colourise.sg/#colorize
應用頁面
具體效果如何呢?小編找了瑪麗蓮·夢露的經典照片嘗試了一下,效果驚豔。
以下是從 Colourise.sg 圖庫中找到的效果對比圖。
以及作者根據項目初衷作出的新加坡舊照上色前後的對比圖。
原始黑白照片(左)和 Colourise.sg 生成的彩色照片(右)。照片爲「新加坡華人女子學校」,攝于 1890-1920 年期間。美國國會圖書館 Frank and Frances Carpenter Collection 收藏。
看過對比圖之後,我們發現有的照片效果驚豔,但有的照片效果並不好。作者表示,該配色工具的意義在于生成顔色看上去比較合理的照片。它不保證生成的彩色照片就是當時的真實顔色。此外,該項目也只是該研究領域的一角,其模型也並非是完美的。它在一些照片上表現很好,但在其它照片上可能不是。
所以,這個上色工具是如何做的呢?爲什麽其表現不太穩定?以下是作者在 Medium 上寫的技術解讀:
這項技術之前沒有人做過嗎?
可以說有,也可以說沒有。
之前的確有人做過上色工具,但那些工具都不是專門針對新加坡曆史背景的。
你可能會問,這有什麽關系?以 Algorithmia 創建的彩色圖像爲例,Algorithmia 創建的圖像色彩強度不夠,可信度也不夠高。
原始圖像(左)和由 Algorithmia 創建的彩色圖像(右)
新加坡老照片上色效果較差的一個主要因素可能是新加坡黑白照片和訓練集之間差別太大。Algorithmia 使用的模型是用來自 ImageNet 的 130 萬張圖像訓練而成的。ImageNet 由來自斯坦福大學和普林斯頓大學的研究人員創建,可能不包含與新加坡相關的圖像。也就是說,模型可能無法學到舊時新加坡校園的真實顔色。
研究人員認爲,針對新加坡老照片訓練的工具也許能夠生成比現有工具更逼真的彩色新加坡老照片。
如何給黑白舊照上色
在解釋電腦程序如何上色之前,我們先來看一下人類如何給圖像上色。
上色是一份非常耗時且對技能要求很高的工作。爲了創建一張色彩協調的照片,人類著色師必須完成兩項任務:
- 對照片的曆史、地理、文化背景進行深入研究,以推斷出合適的顔色;
- 用 Photoshop 等軟件工具對黑白圖像進行上色。
同樣,計算機程序也需要完成兩項任務:
- 識別黑白照片中的目標並基于之前見過的照片推斷出適合目標的顔色;
- 給黑白照片上色
使用生成對抗網絡進行上色
爲了給黑白照片上色,我們運用了深度學習中已知的生成對抗網絡技術。包括:
- 首先,使用具有大量數學參數(>2000 萬)的「生成器」基于圖像中的特征來預測不同像素黑白照片的像素值;
- 其次,用「判別器」來確定與原始彩色圖像相比,生成照片的顔色是否逼真。
訓練模型,直到判別器無法區分生成器生成的照片是否爲真實的。訓練模型的架構的簡化視圖如下所示:
用于上色的簡化 GAN 架構
我們使用流行的 fast.ai 和 PyTorch 程序庫開發模型,其架構和訓練步驟受到 Jason Antic 的啓發。我們基于一組超過 50 萬張關于新加坡的舊照片的數據集進行訓練,我們使用裝有英偉達 V100 GPU 的本地 GPU 集群編譯了這些照片。
在提升模型時我們還采取了一些其它措施,包括添加一些來自谷歌 Open Image V4 的照片(這主要是針對該模型做得不太好的身體部位,如模型難以識別的手、腿和手臂),修改學習率和批大小,從而取得更好效果。
將我們的深度學習模型部署爲 web 端應用程序
至此,我們的深度學習模型位于辦公室本地端的 GPU 集群上——這意味著,只有我們的團隊可以使用 colouriser 模型。爲使其他人可以使用 coloriser,我們必須在網絡上部署這一模型。
我們將谷歌雲作爲 coloriser 雲服務的供應商,其架構非常簡單:
(1)CDN 提供 DDos 防護並緩存靜態內容,
(2)NGINX 前端代理和靜態內容服務器,
(3)負載平衡器負責流量分配,
(4)用英偉達 Tesla K80 GPU 支持 colouriser 服務,進行實際的上色操作。
Colourise.sg 架構圖
上色過程屬于計算密集型任務,完成一張圖片大約花費 3 秒鍾。照此,我們打算使用 NGINX 服務器將請求排至後端,從而屏蔽後端 colouriser 服務器。如果請求導入的速度遠遠超出後端服務器的操作能力,NGINX 服務器直接將狀態響應返回至客戶,請求用戶再次嘗試。
這一架構的關鍵點在于 colouriser 服務虛擬機能夠對每台虛擬機所必須提供的流量做出自動調整。此舉可以節省成本,其他虛擬機只在需要時開啓。
結果
以下是我們最喜歡的一些生成結果,使用的訓練照片來自紐約公共圖書館(New York Public Library)和新加坡國家檔案館(National Archives of Singapore)。這些原始照片均爲黑白照片,對我們創建的彩色照片沒有任何影響。
較好的生成結果
該模型在高分辨率照片上表現很好,這些照片突出了人類主體(人在照片中占很大比例)和自然景色。
下面的照片看起來很真實(至少對我們來說),因爲它們包含一些在圖像數據集中訓練充分的目標。因此模型可以識別圖像中的正確目標,並給它們准確上色。
「在巴東慶祝馬來西亞日」——攝于 1963 年 9 月 16 日。圖中爲 Yang Di-Pertuan Negara Yusof Ishak 和聯邦內部安全長官 Ismail bin Dato Abdul Rahman 拿督。新加坡國家檔案館館藏照片(左),用 Colourise.sg 上色的照片(右)。
「內政和國防部長林金山在裕廊巴西拉峇軍營舉行的軍官學員閱兵儀式上發表講話」,攝于 1969 年 7 月 10 日。新加坡國家檔案館館藏照片(左),用 Colourise.sg 上色的照片(右)。
「新加坡,康樂通道上行駛的汽車」。來自紐約公共圖書館。左爲原始照片,右爲加工後的照片。
「新加坡」,來自紐約公共圖書館。左爲原始照片,右爲加工後的照片。
趣事
當模型不能識別照片中的目標時,會發生一些有趣的事。
比如下面這張照片——「新加坡的日本投降者」。配色工具將一個士兵的拳頭變成了紅色,但其他士兵的拳頭顔色是對的。這是因爲,從照片拍攝的角度來看,模型不能確定那個緊握的拳頭是真的拳頭。所以它做出了最佳預測,但卻沒有猜對。
「新加坡的日本投降者」,攝于 1945 年 12 月 12 日。攝影師爲皇家海軍官方攝影師 Trusler C。帝國戰爭博物館的原始照片(左),Colourise.sg 上色後的照片(右)。
下面這張照片也出現了這種情況。圖爲「財政部長 Dr. Goh Keng Swee 抵達直落布蘭雅 Bata 鞋廠開業現場」。照片中最右邊那個人的臉被染成了可怕的灰色,因爲他半張臉被擋住了,所以模型無法識別該目標。
這種現象被稱爲「遮擋(occlusion)」,是計算機視覺的主要挑戰之一。在這種情況下,目標識別算法無法識別被部分遮擋的目標。
「財政部長 Dr. Goh Keng Swee 抵達直落布蘭雅 Bata 鞋廠開業現場」,攝于 1964 年 4 月 9 日。來自新加坡國家檔案館的原始照片(左)和 Colourise.sg 上色後的照片(右)。
更多照片
下面是更多效果比較好的照片。
「新加坡,馬來女孩」,拍攝日期不詳。來自紐約公共圖書館。左爲原始照片,右爲加工後的照片。
「新加坡」,拍攝日期不詳。來自紐約公共圖書館。左爲原始照片,右爲加工後的照片。
「新加坡,牛在成堆的椰子殼中吃草」。來自紐約公共圖書館。左爲原始照片,右爲加工後的照片。
「新加坡 Jiksha 站」。來自紐約公共圖書館。左爲原始照片,右爲加工後的照片。
Twitter 網友把爺爺奶奶的黑白結婚照都翻出來了
該網站發布後引起了大量 Twitter 網友的轉載,他們從各種渠道找到了一些早已淡出大衆視野的老照片,有些還是自己祖父母的舊照。上色之後,這些照片上的人似乎又變得鮮活起來。
利用 Colourise.sg 給 1880 年的湯加(太平洋島國)舊照上色。
網友驚呼利用 Colourise.sg 可以將黑白照片「秒變」彩照
網友利用 Colourise.sg 給自己祖父母的結婚照上色,驚呼「So so awesome」
網友利用 colourise.sg 技術給舊風景照上色,效果驚人。直呼:盤它!