火了?
大家好,我是 Jack。
昨天的「AI修復(fù)五四運(yùn)動(dòng)現(xiàn)場(chǎng)」熱搜大家看到了嗎?

熱搜1.8億+閱讀,5.1萬(wàn)+討論。利用 AI 技術(shù),修復(fù)五四運(yùn)動(dòng)現(xiàn)場(chǎng)。
這個(gè)就是3月初,央視的工作人員找我談的合作項(xiàng)目之一,當(dāng)時(shí)還發(fā)了個(gè)吹水文。
后來(lái),這個(gè)項(xiàng)目另外一個(gè)up主做了。顯而易見(jiàn)的是,越來(lái)越多的企業(yè),在結(jié)合 AI 做一些有意義的創(chuàng)新。
所以,想從事算法工程師的工作,那就放心大膽地去學(xué)、去準(zhǔn)備,不要被知乎這類(lèi)問(wèn)題所困擾:

要知道,這類(lèi)問(wèn)題從2017年就開(kāi)始了。

這兩年,又流行了新詞「內(nèi)卷」,好家伙,啥都可以內(nèi)卷了。
不信,可以用知乎去搜下,程序員內(nèi)卷、算法內(nèi)卷、后端內(nèi)卷,啥都可以卷,一搜一大把。
有能力的人,根本不會(huì)因?yàn)閮?nèi)卷而找不到工作,提高核心競(jìng)爭(zhēng)力才是關(guān)鍵。
這些所謂的「內(nèi)卷」,也是我國(guó)快速發(fā)展帶來(lái)的結(jié)果,各行各業(yè)都是如此。
成為卷王之王,我們都有光明的未來(lái)。

AI修復(fù)
話題有些跑偏,我們回歸正題:AI 修復(fù)。
這篇算是科普文了,介紹下「AI修復(fù)五四運(yùn)動(dòng)現(xiàn)場(chǎng)」用到了哪些 AI 技術(shù)。
這些老圖片,老視頻的資料都是黑白的,有的畫(huà)面還有磨損,并且老視頻幀率略低。
針對(duì)這幾個(gè)特點(diǎn),主要采用三樣算法即可:
著色算法:將黑白圖片轉(zhuǎn)為彩色圖片; 修復(fù)算法:修復(fù)磨損畫(huà)面; 幀插算法:提高視頻幀率。
著色算法
著色算法,是整個(gè)處理流程的核心。
著色算法有很多種,其中比較出名,我經(jīng)常用的是 DeOldify。
DeOldify 不僅可以對(duì)圖片著色,其實(shí)本身也具有一定的修復(fù)畫(huà)面的能力。
曾經(jīng)上過(guò)熱搜的修復(fù)百年前老北京的影像,就是用的這個(gè)算法。

19世紀(jì)80年代的巴黎。

DeOldify 就是一種對(duì)抗生成網(wǎng)絡(luò)的應(yīng)用。
其原理是使用 NoGAN 技術(shù),結(jié)合了 GAN 訓(xùn)練的優(yōu)點(diǎn),比如出色的著色效果,同時(shí)也消除了一些副作用,比如畫(huà)面著色不穩(wěn)定、閃爍的現(xiàn)象。
NoGAN 生成器進(jìn)行了預(yù)先訓(xùn)練,使其利用常規(guī)損失函數(shù),變得更強(qiáng)大、更快、更可靠。

項(xiàng)目地址:
https://github.com/jantic/DeOldify
需要配置的上文一樣,安裝一些庫(kù),然后下載模型權(quán)重文件。
項(xiàng)目工程頁(yè)里詳細(xì)說(shuō)明了下載哪些文件,需要安裝什么。
配置好后,在工程目錄編寫(xiě)如下代碼:
#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)為黑白照片上色。

模型、代碼、素材都已打包,工程下載地址。
網(wǎng)盤(pán)下載鏈接(提取碼:jack):
https://pan.baidu.com/s/17sma_a1ICJMY07KLnDpiww
打開(kāi) Jupyter 直接運(yùn)行 run.ipynb 文件即可,生成的結(jié)果保存在 result_images 文件夾中。
除了處理圖片,視頻著色也不在話下。
修復(fù)算法
如果著色算法,例如 DeOldify,著色和修復(fù)的效果已經(jīng)不錯(cuò)了,其實(shí)就不必加修復(fù)算法了。
但是如果效果不佳,那就可以再單獨(dú)加個(gè)修復(fù)算法。
比較出名的是,微軟 2020 年最新的一篇 CVPR 文章:「Bringing Old Photo Back to Life」。
作者使用變分自動(dòng)編碼機(jī)(VAE)將圖像變換到隱空間,并在隱空間進(jìn)行圖像恢復(fù)操作。

可以看下修復(fù)效果:

關(guān)于該算法的原理,我出過(guò)教程,可以直接看這個(gè):
項(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)目錄下。
可以下載我打包好的工程,模型、代碼、素材,都打包好了。
網(wǎng)盤(pán)鏈接(提取碼:jack):
https://pan.baidu.com/s/1jVjd8dS0j0AnWeFI-7l-eA
使用方法:
沒(méi)有裂痕的圖像修復(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)行效果:
幀插算法
幀插算法也很多,例如 DAIN、RIFE、Super SloMo 等,這里簡(jiǎn)單介紹下 DAIN。
DAIN 可以提高視頻的幀率,比如現(xiàn)在,連手機(jī)都開(kāi)始用上120幀的顯示屏,但是網(wǎng)上大部分的視頻還是24幀。
視頻的幀率已經(jīng)遠(yuǎn)遠(yuǎn)趕不上人民群眾的需求了,所以有不少人都在研究如何把普通視頻變成高幀率視頻。
這項(xiàng)技術(shù),顯然也可以應(yīng)用在 AI 修復(fù)上,用來(lái)提高視頻的幀率,帶來(lái)更加絲滑的視頻瀏覽體驗(yàn)。
DAIN 可以擴(kuò)展到常見(jiàn)的任何類(lèi)型視頻:電影、定格動(dòng)畫(huà)、 動(dòng)畫(huà)卡通等等。

項(xiàng)目地址:
https://github.com/baowenbo/DAIN
使用方法和上面兩個(gè)算法完全一樣:配置環(huán)境、下載權(quán)重、運(yùn)行代碼。
這里就不贅述了,大家可以自行嘗試。
總結(jié)
AI 修復(fù),效果上仍然有所欠缺,比如有些場(chǎng)景顏色修復(fù)的不夠自然,但發(fā)展空間很大,針對(duì)一些特定場(chǎng)景 finetune 一番,絕對(duì)能有提升。
總之,AI 可以做很多有意義的事情,盡情發(fā)揮吧~
五一假期額度警告,明天開(kāi)工了,該收心了。
我是 Jack,我們下期見(jiàn)。

推薦閱讀
? 史詩(shī)級(jí)萬(wàn)字干貨,kNN算法。? 聊聊我今年的計(jì)劃? 印度疫情,爆炸!
