火了?
大家好,我是鱼皮,今天分享我在大厂的算法工程师朋友 Jack Cui 的故事。
前段时间的「AI修复五四运动现场」热搜大家看到了吗?
热搜1.8
亿+阅读,5.1
万+讨论。利用 AI 技术,修复五四运动现场。
这个就是3
月初,央视的工作人员找我谈的合作项目之一,当时还发了个吹水文。
后来,这个项目另外一个up主做了。显而易见的是,越来越多的企业,在结合 AI 做一些有意义的创新。
所以,想从事算法工程师的工作,那就放心大胆地去学、去准备,不要被知乎这类问题所困扰:
要知道,这类问题从2017
年就开始了。
这两年,又流行了新词「内卷」,好家伙,啥都可以内卷了。
不信,可以用知乎去搜下,程序员内卷、算法内卷、后端内卷,啥都可以卷,一搜一大把。
有能力的人,根本不会因为内卷而找不到工作,提高核心竞争力才是关键。
这些所谓的「内卷」,也是我国快速发展带来的结果,各行各业都是如此。
成为卷王之王,我们都有光明的未来。
AI修复
话题有些跑偏,我们回归正题:AI 修复。
这篇算是科普文了,介绍下「AI修复五四运动现场」用到了哪些 AI 技术。
这些老图片,老视频的资料都是黑白的,有的画面还有磨损,并且老视频帧率略低。
针对这几个特点,主要采用三样算法即可:
着色算法:将黑白图片转为彩色图片; 修复算法:修复磨损画面; 帧插算法:提高视频帧率。
着色算法
着色算法,是整个处理流程的核心。
着色算法有很多种,其中比较出名,我经常用的是 DeOldify。
DeOldify 不仅可以对图片着色,其实本身也具有一定的修复画面的能力。
曾经上过热搜的修复百年前老北京的影像,就是用的这个算法。
19
世纪80
年代的巴黎。
DeOldify 就是一种对抗生成网络的应用。
其原理是使用 NoGAN 技术,结合了 GAN 训练的优点,比如出色的着色效果,同时也消除了一些副作用,比如画面着色不稳定、闪烁的现象。
NoGAN 生成器进行了预先训练,使其利用常规损失函数,变得更强大、更快、更可靠。
项目地址:
https://github.com/jantic/DeOldify
需要配置的上文一样,安装一些库,然后下载模型权重文件。
项目工程页里详细说明了下载哪些文件,需要安装什么。
配置好后,在工程目录编写如下代码:
#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 为要上色的图片,运行程序,就可以实现为黑白照片上色。
模型、代码、素材都已打包,工程下载地址。
网盘下载链接(提取码:jack):
https://pan.baidu.com/s/17sma_a1ICJMY07KLnDpiww
打开 Jupyter 直接运行 run.ipynb 文件即可,生成的结果保存在 result_images 文件夹中。
除了处理图片,视频着色也不在话下。
修复算法
如果着色算法,例如 DeOldify,着色和修复的效果已经不错了,其实就不必加修复算法了。
但是如果效果不佳,那就可以再单独加个修复算法。
比较出名的是,微软 2020 年最新的一篇 CVPR 文章:「Bringing Old Photo Back to Life」。
作者使用变分自动编码机(VAE)将图像变换到隐空间,并在隐空间进行图像恢复操作。
可以看下修复效果:
关于该算法的原理,我出过教程,可以直接看这个:
项目地址:
https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life
项目依赖于「Synchronized-BatchNorm-PyTorch」,按照教程配置即可。
第一步,clone 工程:
git clone https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life
第二步,进入工程目录,clone 依赖项目:
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 ../../
第三步,下载预训练模型。
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 的训练好的模型,并解压,放在对应目录下。
可以下载我打包好的工程,模型、代码、素材,都打包好了。
网盘链接(提取码:jack):
https://pan.baidu.com/s/1jVjd8dS0j0AnWeFI-7l-eA
使用方法:
没有裂痕的图像修复,就是图片不清晰,可以用如下指令:
python run.py --input_folder [test_image_folder_path] \
--output_folder [output_path] \
--GPU 0
将你想修复的图片放到 test_image_folder_path 目录下(自己指定),生成的图片会放到 output_path 目录中。
对于裂痕的图片,需要额外增加一个参数,指令如下:
python run.py --input_folder [test_image_folder_path] \
--output_folder [output_path] \
--GPU 0 \
--with_scratch
这里需要注意的是,指定的路径需要使用绝对路径。
运行效果:
帧插算法
帧插算法也很多,例如 DAIN、RIFE、Super SloMo 等,这里简单介绍下 DAIN。
DAIN 可以提高视频的帧率,比如现在,连手机都开始用上120
帧的显示屏,但是网上大部分的视频还是24
帧。
视频的帧率已经远远赶不上人民群众的需求了,所以有不少人都在研究如何把普通视频变成高帧率视频。
这项技术,显然也可以应用在 AI 修复上,用来提高视频的帧率,带来更加丝滑的视频浏览体验。
DAIN 可以扩展到常见的任何类型视频:电影、定格动画、 动画卡通等等。
项目地址:
https://github.com/baowenbo/DAIN
使用方法和上面两个算法完全一样:配置环境、下载权重、运行代码。
这里就不赘述了,大家可以自行尝试。
总结
AI 修复,效果上仍然有所欠缺,比如有些场景颜色修复的不够自然,但发展空间很大,针对一些特定场景 finetune 一番,绝对能有提升。
总之,AI 可以做很多有意义的事情,尽情发挥吧~
最后,鱼皮强烈推荐大家关注 Jack,热爱分享实用和前沿编程技术的硬核博主!