飞道的博客

PULSE + ALAE:使用 StyleGAN 从低阶图像重建高清人脸

947人阅读  评论(0)

如果有我们一张低阶的、非常模糊的人脸图像,希望把它恢复成高清人脸,然后辨认这个人脸是否是某个人,应该怎么做?

举个例子,某个小区发生了一起盗窃案,我们只是从监控录像中截取到一个非常模糊的人脸,能够用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)将依赖项:


  
  1. dependencies
  2. - blas=1.0=mkl

修改为:


  
  1. dependencies
  2. - blas=1.0

(1.2.2)删除若干会报错的依赖项:


  
  1. ...
  2. - libcxx= 10.0. 0= 1
  3. ...
  4. - readline= 8.0=h1de35cc_ 0
  5. ...

大家也可以直接参考我已经编辑好的pulse.yml文件,如下所示(最后一行是根据我安装的Anaconda目录指定的,大家可以根据自己的安装目录自行修改):


  
  1. - cffi= 1.14 .0
  2. - chardet= 3.0 .4
  3. - cryptography= 2.9 .2
  4. - cycler= 0.10 .0
  5. - freetype= 2.9 .1
  6. - idna= 2.9
  7. - intel-openmp= 2019.4
  8. - jpeg= 9b
  9. - kiwisolver= 1.2 .0
  10. - libpng= 1.6 .37
  11. - libtiff= 4.1 .0
  12. - matplotlib= 3.1 .3
  13. - matplotlib- base= 3.1 .3
  14. - mkl= 2019.4
  15. - mkl-service= 2.3 .0
  16. - mkl_fft= 1.0 .15
  17. - mkl_random= 1.1 .0
  18. - ninja= 1.9 .0
  19. - numpy= 1.18 .1
  20. - numpy- base= 1.18 .1
  21. - olefile= 0.46
  22. - openssl= 1.1 .1g
  23. - pandas= 1.0 .3
  24. - pillow= 7.1 .2
  25. - pip= 20.0 .2
  26. - pycparser= 2.20
  27. - pyopenssl= 19.1 .0
  28. - pyparsing= 2.4 .7
  29. - pysocks= 1.7 .1
  30. - python= 3.8 .2
  31. - python-dateutil= 2.8 .1
  32. - pytorch= 1.5 .0
  33. - pytz= 2020.1
  34. - requests= 2.23 .0
  35. - scipy= 1.4 .1
  36. - setuptools= 46.2 .0
  37. - six= 1.14 .0
  38. - sqlite= 3.31 .1
  39. - tk= 8.6 .8
  40. - torchvision= 0.6 .0
  41. - tornado= 6.0 .4
  42. - urllib3= 1.25 .8
  43. - wheel= 0.34 .2
  44. - xz= 5.2 .5
  45. - zlib= 1.2 .11
  46. - zstd= 1.3 .7
  47. - pip:
  48. - dlib== 19.19 .0
  49. prefix: d:/programdata/anaconda3/envs/pulse

(1.3)创建独立的 python + pytorch 运行环境并且激活它:


  
  1. conda env create -n pulse -f pulse.yml
  2. 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:


  
  1. ......
  2. print( "Downloading Shape Predictor")
  3. # f=open_url("https://drive.google.com/uc?id=1huhv8PYpNNKbGCLOaYUjOgR1pY5pmbJx", cache_dir=cache_dir, return_path=True)
  4. # predictor = dlib.shape_predictor(f)
  5. predictor = dlib.shape_predictor( "./models/shape_predictor_68_face_landmarks.dat")
  6. ......

(1.5.2)修改 pulse.py


  
  1. ......
  2. # with open_url("https://drive.google.com/uc?id=1TCViX1YpQyRsklTVYEJwdbmK91vklCo8", cache_dir=cache_dir, verbose=verbose) as f:
  3. # self.synthesis.load_state_dict(torch.load(f))
  4. self.synthesis.load_state_dict(torch.load( "./models/synthesis.pt"))
  5. ......
  6. # with open_url("https://drive.google.com/uc?id=14R6iHGf5iuVx3DMNsACAl7eBr7Vdpd0k", cache_dir=cache_dir, verbose=verbose) as f:
  7. # mapping.load_state_dict(torch.load(f))
  8. mapping.load_state_dict(torch.load( "./models/mapping.pt"))
  9. ......

(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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场