再見,百年老照片!修復(fù)算法帶你看那些高顏值的父母。

點(diǎn)贊再看,養(yǎng)成習(xí)慣,微信公眾號(hào)搜索【JackCui-AI】關(guān)注這個(gè)愛發(fā)技術(shù)干貨的程序員。本文 GitHub?https://github.com/Jack-Cherish/PythonPark?已收錄,有一線大廠面試完整考點(diǎn)、資料以及我的系列文章。
一、前言
你們家里,有沒有高顏值的長(zhǎng)輩老照片?
亦或是黑白、亦或是模糊,甚至是褶皺破損。
老照片承載著生命中的每一份意義,那是一代代人的回憶。
今天,Jack Cui 教大家兩個(gè)算法,幫你搞定不清晰的、褶皺的老照片,黑白照片變彩照。
模糊照片,一鍵高清:

褶皺照片,一鍵復(fù)原:

黑白照片,一鍵上色(男神鎮(zhèn)樓):

在這個(gè)人工智能的時(shí)代,算法都能幫你搞定!
二、算法
模糊、褶皺照片修復(fù),是微軟 2020 年最新的一篇 CVPR 文章:
「Bringing Old Photo Back to Life」
黑白照片上色,是一個(gè)經(jīng)典上色老算法(2018年):
「DeOldify」
1、Bringing Old Photo Back to Life
該文作者來自香港城市大學(xué)、微軟亞洲研究院、微軟云 + AI 、中國(guó)科學(xué)技術(shù)大學(xué)。
作者使用變分自動(dòng)編碼機(jī)(VAE)將圖像變換到隱空間,并在隱空間進(jìn)行圖像恢復(fù)操作。

聽不懂,說人話!
舉個(gè)例子,國(guó)際象棋大師觀察棋盤 5 秒,就能記住所有棋子的位置,而常人是無法辦到的。
但棋子的擺放必須是實(shí)戰(zhàn)中的棋局(也就是棋子存在的內(nèi)在規(guī)則),棋子隨機(jī)擺放可不行。
象棋大師并不是記憶力優(yōu)于我們,而是經(jīng)驗(yàn)豐富,很擅于識(shí)別象棋模式,從而高效地記憶棋局。
自動(dòng)編碼機(jī)(VAE)就是「象棋大師」,它可以找到圖片的內(nèi)在規(guī)則(隱空間),然后通過自己的方式表示出來。
作者使用了兩個(gè) VAE:
第一個(gè) VAE 用于將合成的老照片(模糊、磨損)進(jìn)行編碼到隱空間。
第二個(gè) VAE 用于將對(duì)應(yīng)的干凈的老照片進(jìn)行編碼。
然后,在隱空間學(xué)習(xí)從污損的老照片到干凈照片的映射。
就這樣,實(shí)現(xiàn)了一個(gè)老照片的修復(fù)算法。
這個(gè)有點(diǎn)像在學(xué)習(xí)控制圖片清晰、磨損的一個(gè)特征表示,通過控制這個(gè)特征,可以達(dá)到修復(fù)破損照片的目的。
論文的修復(fù)效果:

算法開源,還有預(yù)訓(xùn)練模型,可以直接測(cè)試效果。
項(xiàng)目地址:
https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life
項(xiàng)目依賴于「Synchronized-BatchNorm-PyTorch」,按照教程配置即可。
第一步,clone 工程:
git clone https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life
第二步,進(jìn)入工程目錄,clone 依賴項(xiàng)目:
cd Face_Enhancement/models/networks/
git clone https://github.com/vacancy/Synchronized-BatchNorm-PyTorch
cp -rf Synchronized-BatchNorm-PyTorch/sync_batchnorm .
cd ../../../
cd Global/detection_models
git clone https://github.com/vacancy/Synchronized-BatchNorm-PyTorch
cp -rf Synchronized-BatchNorm-PyTorch/sync_batchnorm .
cd ../../
第三步,下載預(yù)訓(xùn)練模型。
cd Face_Detection/
wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
bzip2 -d shape_predictor_68_face_landmarks.dat.bz2
cd ../
然后分別下載 Global 和 Face_Enhancement 的訓(xùn)練好的模型,并解壓,放在對(duì)應(yīng)目錄下:
Global:
https://facevc.blob.core.windows.net/zhanbo/old_photo/pretrain/Global/checkpoints.zip
Face_Enhancement:
https://facevc.blob.core.windows.net/zhanbo/old_photo/pretrain/Face_Enhancement/checkpoints.zip
下載速度慢,或者嫌麻煩,可以下載我打包好的工程,拿來直接用!
模型、代碼、素材,工程下載地址(提取碼:jack):
網(wǎng)盤鏈接:https://pan.baidu.com/s/1jVjd8dS0j0AnWeFI-7l-eA
使用方法:
沒有裂痕的圖像修復(fù),就是圖片不清晰,可以用如下指令:
python run.py --input_folder [test_image_folder_path] \
? ? ? ? ? ? ? --output_folder [output_path] \
? ? ? ? ? ? ? --GPU 0
將你想修復(fù)的圖片放到 [test_image_folder_path] 目錄下(自己指定),生成的圖片會(huì)放到 [output_path] 目錄中。
對(duì)于裂痕的圖片,需要額外增加一個(gè)參數(shù),指令如下:
python run.py --input_folder [test_image_folder_path] \
? ? ? ? ? ? ? --output_folder [output_path] \
? ? ? ? ? ? ? --GPU 0 \
? ? ? ? ? ? ? --with_scratch
這里需要注意的是,指定的路徑需要使用絕對(duì)路徑。
運(yùn)行效果(點(diǎn)擊鏈接查看):
https://cuijiahua.com/wp-content/uploads/2020/09/dl-29-7.mp4
2、DeOldify
「DeOldify」是一個(gè)圖片上色算法。
曾經(jīng)上過熱搜的修復(fù)百年前老北京的影像,就是用的這個(gè)算法。

一切都是現(xiàn)成的,用起來很簡(jiǎn)單。
DeOldify 就是一種對(duì)抗生成網(wǎng)絡(luò)的應(yīng)用。
其原理是使用 NoGAN 技術(shù),它結(jié)合了 GAN 訓(xùn)練的優(yōu)點(diǎn),比如出色的上色效果,同時(shí)也消除了一些副作用,比如畫面著色不穩(wěn)定、閃爍的現(xiàn)象。
算法出了很久,算法原理教程應(yīng)該很多,這里就不再累述,我們直接看怎么用吧。
項(xiàng)目地址:
https://github.com/jantic/DeOldify
需要配置的上文一樣,安裝一些庫(kù),然后下載模型權(quán)重文件。
項(xiàng)目工程頁里詳細(xì)說明了下載哪些文件,需要安裝什么。
配置好后,在工程目錄編寫如下代碼:
#NOTE:? This must be the first call in order to work properly!
from deoldify import device
from deoldify.device_id import DeviceId
#choices:? CPU, GPU0...GPU7
device.set(device=DeviceId.GPU0)
import torch
if not torch.cuda.is_available():
? ? print('GPU not available.')
? ??
import fastai
from deoldify.visualize import *
import warnings
warnings.filterwarnings("ignore", category=UserWarning, message=".*?Your .*? set is empty.*?")
colorizer = get_image_colorizer(artistic=True)
colorizer.plot_transformed_image("test_images/1.png", render_factor=10, compare=True)
test_images/1.png 為要上色的圖片,運(yùn)行程序,就可以實(shí)現(xiàn)為黑白照片上色。

還是,模型、代碼、素材都已打包,工程下載地址(提取碼:jack):
網(wǎng)盤鏈接:https://pan.baidu.com/s/17sma_a1ICJMY07KLnDpiww
打開 Jupyter 直接運(yùn)行 run.ipynb 文件即可,生成的結(jié)果保存在 result_images 文件夾中。
除了處理圖片,為視頻上色也不在話下。
三、總結(jié)
家中,是否有一些黑白老照片?

為長(zhǎng)輩修復(fù)下他們的老照片,是驚喜,也是心意。時(shí)光一逝永不回,往事只能回味~
長(zhǎng)輩如有驚艷到,記得回來轉(zhuǎn)發(fā)、點(diǎn)贊哦!
我是 Jack Cui,一個(gè)愛發(fā)技術(shù)干貨的程序員,我們下期見~
文章持續(xù)更新,可以微信公眾號(hào)搜索【JackCui-AI】第一時(shí)間閱讀,本文 GitHub?https://github.com/Jack-Cherish/PythonPark?已經(jīng)收錄,有大廠面試完整考點(diǎn),歡迎Star。