幾行代碼實現老照片上色復原!
??
身臨其境的圖像復原
之前看《你好李煥英》里,有一個表現手法非常讓我印象深刻。就是一開始場景是黑白的,然后慢慢變成彩色的,從黑白到彩色的這個過程,讓我有種「進入新的現實」的感覺。
近期有五四運動的圖像復原,看到仿佛置身五四運動現場,盡管畫面分辨率不高,色彩也不那么完美,但就是能給人一種身臨其境的感覺,回到一百年前,與青年們一起救亡圖存。
當時的青年尚能挺身而出,憂國憂民,我相信,現代的青年也能奮發圖強,肩負起對于這個國家的歷史責任,塑造起具有時代光芒的民族精神。
看了下,大家都對技術原理感興趣啊,那我來用簡單的語言講講吧。
技術原理
AI上色的原理是什么?那我們就需要介紹一種深度學習網絡架構了,它就是GAN(這里不是粗話)。GAN不是干飯人的干,而是生成對抗網絡(英語:Generative Adversarial Network,簡稱GAN)。當然,太復雜的技術講解可能會讓讀者迷惑,于是我找到一張很直白的原理圖。
GAN網絡分兩部分,一個是生成器(Generator),一個是鑒別器(Discriminator)。生成器通過對圖像上色,然后交給鑒別器。鑒別器判斷這一個圖片看起來真不真,如果覺得假,鑒別器會返回「修改意見」,讓生成器重新試試,直到鑒別器覺得足夠真了。如果你覺得還不好懂,我再打個比方,這就好像美術老師指導學生畫畫的過程,一開始學生畫出來的不夠好,老師指出,學生嘗試改改,老師再檢查,再給意見,直到老師滿意。
這 就是一張圖的上色過程。 而視頻是一幀幀畫面組成的,給視頻上色可以理解為通過這個網絡架構給視頻里的每一幀上色。 不過沒有這么簡單,畢竟視頻一秒鐘幾十幀,一幀幀上色有點慢,而且每一幀之前可能會出現上色效果不一致。 所以有的架構會針對細節調整。 例如DeOldify采用了NoGAN(一種新型GAN訓練模型),用來解決之前DeOldify模型中出現的一些關鍵問題。 例如視頻中閃爍的物體:
使用NoGAN前,畫面閃爍嚴重
使用NoGAN后閃爍減少
當然,實際還原的色彩其實和原本的色彩是不一樣的,僅僅是能讓其看起來自然。我做了個實驗(AI上色工具稍后介紹到),能看到上色效果和原來的效果并不一樣。我下載了這么一張向日葵的照片
我手動轉成黑白的
這時候再讓AI上色,咦,向日葵變成雛菊了。不過看起來竟然也有另一番美感。
一般來說,給人上色會更接近實際情況些。因為人的膚色比較有限,判別器里已經學習過人臉的顏色可能是哪些,轉換成灰度圖像后對應什么顏色值,所以AI不太可能會給黑白的人像涂成綠色臉。
動手實現
如果你是技術小白,你可以直接打開這個網址,你只需要上傳一張圖片就能自動上色。 Image Colorizationdeepai.org 例如效果如下:
看起來效果很棒吧。如果你懂點技術但不懂機器學習,可以用DeepAI提供的API。例如python調用方法如下:
import requests
r = requests.post(
"https://api.deepai.org/api/colorizer",
data={
'image': 'YOUR_IMAGE_URL',
},
headers={'api-key': 'quickstart-QUdJIGlzIGNvbWluZy4uLi4K'}
)
print(r.json())
# Example posting a local image file:
import requests
r = requests.post(
"https://api.deepai.org/api/colorizer",
files={
'image': open('/path/to/your/file.jpg', 'rb'),
},
headers={'api-key': 'quickstart-QUdJIGlzIGNvbWluZy4uLi4K'}
)
print(r.json())
如果想繼續深入研究,可以fork DeOldify的repo。附開源 地址:
??https://github.com/jantic/DeOldifygithub.com??