如果有我们一张低阶的、非常模糊的人脸图像,希望把它恢复成高清人脸,然后辨认这个人脸是否是某个人,应该怎么做?
举个例子,某个小区发生了一起盗窃案,我们只是从监控录像中截取到一个非常模糊的人脸,能够用StyleGAN的方法像公安刑侦的“嫌疑人画像”一样,快速地重建高清人脸吗?
或者,我们找到一张20年前的一张照片,只从上面提取到一个非常小的人脸,能够有办法把它复原成一张高清大图吗?
下面介绍两个 github.com 上的开源项目,一个用于重建人脸(PULSE),一个用于调整参数(ALAE)。
(一)PULSE: Self-Supervised Photo Upsampling via Latent Space Exploration of Generative Models
PULSE:通过探索生成模型的潜码空间实现自监督图像上采样(方法)
这是美国杜克大学发表的研究成果,在 github.com 上的地址是:https://github.com/adamian98/pulse
在 Windows 10 环境下安装并运行,可以遵循下面的步骤:
(1.1)把项目源代码下载下来,解压缩放到自己的工作目录下:
(1.2)编辑用于创建编译环境的依赖描述文件:pulse.yml
可以手工编辑文件,删除每个依赖项后面的特定版本的 hash 值;同时删除运行 conda env create -n pulse -f pulse.yml 时会抛出错误的依赖项,比如:
(1.2.1)将依赖项:
-
dependencies
-
- blas=1.0=mkl
修改为:
-
dependencies
-
- blas=1.0
(1.2.2)删除若干会报错的依赖项:
-
...
-
- libcxx=
10.0.
0=
1
-
...
-
-
readline=
8.0=h1de35cc_
0
-
...
大家也可以直接参考我已经编辑好的pulse.yml文件,如下所示(最后一行是根据我安装的Anaconda目录指定的,大家可以根据自己的安装目录自行修改):
-
- cffi=
1.14
.0
-
- chardet=
3.0
.4
-
- cryptography=
2.9
.2
-
- cycler=
0.10
.0
-
- freetype=
2.9
.1
-
- idna=
2.9
-
- intel-openmp=
2019.4
-
- jpeg=
9b
-
- kiwisolver=
1.2
.0
-
- libpng=
1.6
.37
-
- libtiff=
4.1
.0
-
- matplotlib=
3.1
.3
-
- matplotlib-
base=
3.1
.3
-
- mkl=
2019.4
-
- mkl-service=
2.3
.0
-
- mkl_fft=
1.0
.15
-
- mkl_random=
1.1
.0
-
- ninja=
1.9
.0
-
- numpy=
1.18
.1
-
- numpy-
base=
1.18
.1
-
- olefile=
0.46
-
- openssl=
1.1
.1g
-
- pandas=
1.0
.3
-
- pillow=
7.1
.2
-
- pip=
20.0
.2
-
- pycparser=
2.20
-
- pyopenssl=
19.1
.0
-
- pyparsing=
2.4
.7
-
- pysocks=
1.7
.1
-
- python=
3.8
.2
-
- python-dateutil=
2.8
.1
-
- pytorch=
1.5
.0
-
- pytz=
2020.1
-
- requests=
2.23
.0
-
- scipy=
1.4
.1
-
- setuptools=
46.2
.0
-
- six=
1.14
.0
-
- sqlite=
3.31
.1
-
- tk=
8.6
.8
-
- torchvision=
0.6
.0
-
- tornado=
6.0
.4
-
- urllib3=
1.25
.8
-
- wheel=
0.34
.2
-
- xz=
5.2
.5
-
- zlib=
1.2
.11
-
- zstd=
1.3
.7
-
- pip:
-
- dlib==
19.19
.0
-
prefix: d:/programdata/anaconda3/envs/pulse
(1.3)创建独立的 python + pytorch 运行环境并且激活它:
-
conda env
create -n pulse -f pulse.yml
-
conda
activate pulse
系统有时不会自动安装 dlib 包,需要手工安装: pip install dlib
(1.4) 下载必需的模型文件,放到工作目录下:
官网 https://github.com/adamian98/pulse 上提供了模型文件的下载地址,在源代码里也有需要下载模型文件的语句,但模型文件都放在 drive.google.com 上,要么由于防火墙的原因下载不了,要么告知流量已用完不能下载,因此我们把模型放在百度网盘上,方便大家下载(包括:StyleGAN 合成模型 synthesis.pt、StyleGAN映射模型 mapping.pt、dlib 人脸预测模型 shape_predictor_68_face_landmarks.dat):
链接: https://pan.baidu.com/s/1VRqOGc_7tlCMbxcqhj4tAA
提取码: ne4f
(1.5)修改源代码,使用本地模型:
(1.5.1)修改 align_face.py:
-
......
-
print(
"Downloading Shape Predictor")
-
# f=open_url("https://drive.google.com/uc?id=1huhv8PYpNNKbGCLOaYUjOgR1pY5pmbJx", cache_dir=cache_dir, return_path=True)
-
# predictor = dlib.shape_predictor(f)
-
-
predictor = dlib.shape_predictor(
"./models/shape_predictor_68_face_landmarks.dat")
-
......
(1.5.2)修改 pulse.py
-
......
-
# with open_url("https://drive.google.com/uc?id=1TCViX1YpQyRsklTVYEJwdbmK91vklCo8", cache_dir=cache_dir, verbose=verbose) as f:
-
# self.synthesis.load_state_dict(torch.load(f))
-
-
self.synthesis.load_state_dict(torch.load(
"./models/synthesis.pt"))
-
......
-
# with open_url("https://drive.google.com/uc?id=14R6iHGf5iuVx3DMNsACAl7eBr7Vdpd0k", cache_dir=cache_dir, verbose=verbose) as f:
-
# mapping.load_state_dict(torch.load(f))
-
-
mapping.load_state_dict(torch.load(
"./models/mapping.pt"))
-
......
(1.6)运行:
(1.6.1)将原图放到:./realpics 目录下,
(1.6.2)运行:python align_face.py
对齐原图中的人脸并降阶到 32x32 大小,降阶后的图片保存到:./input 目录中
(1.6.3)运行:python run.py
基于 32x32 的人脸小图,重建生成 1024x1024 的高清人脸大图,放在:./runs 目录中。
评价:从实践的效果看,一个是 32x32 图片丢失的信息过多,二是因为 StyleGAN 的合成模型和映射模型都是基于 CelebA-HQ 数据集训练得到的,大多数情况下重建人脸的效果偏欧美化,且年龄通常偏大。
对于欧美化的脸型,感兴趣的小伙伴可以自己基于黄种人脸型去训练 Pytorch 的模型,也许能得到更好的效果。
对于年龄问题,有一个现成的方法可以很方便地进行调整,见下面第二节的内容。
(二)Adversarial Latent Autoencoders
对抗性潜码自动编码器
这是美国西弗吉尼亚大学的研究成果,在 github.com 上的地址是:https://github.com/podgorskiy/ALAE
在 Windows 10 环境下安装并运行,可以遵循下面的步骤:
(2.1)把项目源代码下载下来,解压缩放到自己的工作目录下。
(2.2)安装运行环境,升级 NVIDIA GPU driver,登录NVIDIA官网:http://www.nvidia.com/Download/index.aspx,下载并安装与 GPU 型号一致的驱动(NVIDIA Geforce GTX 1060即可运行,但只能运算一张图片;建议使用 NVIDIA Geforce RTX 2080Ti)。
(2.3)安装 Pytorch,第一步,登录Pytorch官网:(https://pytorch.org/),点击get started;第二步:选择与本机环境相匹配的版本,将相关命令复制到Windows 10 命令行来执行(建议使用 pip 的安装命令)。
(2.4)安装软件依赖项(可根据自己的环境选择安装或补充安装其他依赖项):
pip install bimpy
pip install dlutils
pip install sklearn
pip install yacs
(2.5)下载运行所需要的模型,可以从官网:https://github.com/podgorskiy/ALAE 给定的地址下载,也可以到百度网盘下载:
链接:https://pan.baidu.com/s/19GFKLTWu00jB3Qp4lsyAYw
提取码:in5l
(2.6)需要处理的图片拷贝,放到 .\dataset_samples\faces\realign_1024x1024 目录下,将原来的 00000.png 改名为:10000.png,把待处理的图片改名为:00000.png
(2.7)运行:python interactive_demo.py -c ffhq
-c 后接的参数就是选择哪个模型,一共有 bedroom、celeba、celeba-hq256、ffhq 四种可选。运行之后,你可能看到这样的结果:
结果就是一小条,这是 bimpy 窗口大小的设置问题。
运行一次 interactive_demo.py 之后,工作目录下会生成一个 imgui.ini 文件。
修改 Size 大小到 1500,1024 即可。
重新运行 interactive_demo.py,可以任意改变图像中人脸的性别、年龄、笑容、发质,也可以改变他们的性感程度、丰满程度、嘴唇和鼻子的大小等等,调整各个属性上的游标位置,点击【Display Reconstruction】按钮即可生成新的人脸。
评价:因为模型是基于 FFHQ、CelebA-HQ 等数据集训练的,因而生成的人脸通常偏欧美化,可以用黄种人的人脸进行训练以得到接近中国人的脸型表达。
下面是最后的结果:
原图pulse-master/realpics 32x32小图pulse-master/input 重建图pulse-master/runs 修改年龄(ALAE)
效果尚可,如果能用中国人的人脸模型替换 PULSE 和 ALAE 中的人脸模型,则效果应该能更上一层楼。
(完)
转载:https://blog.csdn.net/weixin_41943311/article/details/106916494