一鍵點選,百年舊照變彩色。
如何把女神的黑白照片變成彩照?今日小編發現新加坡 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 技術給舊風景照上色,效果驚人。直呼:盤它!
參考連結:https://blog.data.gov.sg/bringing-black-and-white-photos-to-life-using-colourise-sg-435ae5cc5036