「🧡PaddleGAN 的头像客制化🧡」———个人专属金钱豹头像生成

新年将至,不少人都偷偷换起了头像。

有人说换金钱豹的头像预示金钱爆2022年要发财,

所以朋友圈清一色的金钱豹头像。

这是金钱豹,换了这个头像今年发大财!


💛 但是大家都换一样的金钱豹头像,这就很容易混淆,也完全凸显不出我对暴富异于常人的渴望!


✨本项目基于PaddleGAN实现人脸和金钱豹的合成,生成专属于自己的金钱豹头像。

–精准暴富,赶快行动起来!

🧡 实现效果如图:


当然,我也要劝大家不信豹,不传豹

认清现实,放弃幻想,努力奋斗!

正经人谁用金钱豹啊?你用吗?

----------------------我用!

💟「我就是为了这个头像!写的这个项目!」

本项目基于「艾梦的开发前瞻 2021-7-14」 创建。

📖 0 预备知识

0.1 基础知识

📌 Latent Code:潜在因子,每张图像对应一个潜在因子(高维的向量),stylegan能够用这个向量生成图像。

📌 属性编辑:由于潜在因子包含维度比较多,无法确定维度对应的方向以及编辑所带来的变化,训练多个线性分类器(即18个latent_level参数)对生成效果进行微调

📌 StyleGANV2:NVIDIA研发的用于生成高质量图像的深度学习方法。

0.2 原理步骤

实现头像生成一共分为四个步骤:

  1. 使用Pixel2Style2Pixel对两幅待合成图片初步拟合获取图片的Latent Code
  2. 使用Pixel2Style2Pixel对两幅待合成图片进一步训练获取图片的Latent Code,对17个latent_level同时进行训练
  3. 将Latent Code设定对应权重,即可编辑对应的人脸属性,如年龄、性别、头发、眼睛等
  4. StyleGAN V2输入第二步的Latent Code和第三步权重合成目标人脸

0.3 核心原理

  1. ✔️利用dlib库检测人脸的各个部位

  2. ✔️将各个输入GAN网络进行编码,生成对应的Latent Code

  3. ✔️对不同人脸的Latent Code进行加权平均,生成混合Latent Code

  4. ✔️对Latent Code使用Gan网络进行解码生成目标图像

📖 1 使用说明


1️⃣ 在「 ./work 」 目录下,点击「 上传文件 」


2️⃣ 选择自己的清晰照片上传,照片只包括一个人且尽量为正脸


3️⃣ 修改下方的「 img_path2_ 」后面的图片名称为自己上传的名称。注意不要加入目录名称,仅替换图片名称即可


4️⃣ 选择「 重启并运行全部 」一键运行生成结果,需要等待约10分钟


5️⃣ 在「 ./work 」 目录下,下载「 generatedProfile.png 」即为合成头像

img_path2_ = 'box.jpg'

📖 1 模型训练

⏲️ 1.1 环境配置

# 进入脚本路径
%cd /home/aistudio/work
# 安装面部检测库
# !git clone https://gitee.com/mirrors/dlib
!unzip -q dlib.zip
!cd dlib && python setup.py install
!zip -qr dlib.zip dlib/*
!rm -rf dlib
!cd ppgan_package/ && pip install -q -e .

🔍 1.2 查看图片

# 上传并查看自己的图片 【先上传到work目录下】
import os.path as osp
from IPython.display import display
from PIL import Image
print('代码当前运行路径为:', osp.abspath('.'))
img_path1 = 'moneyMaker.jpg' # 勿动
img_path2 =  img_path2_ # 改成自己的图片
for img_path in [img_path1, img_path2]:
    img = Image.open(img_path).convert('RGB')
    w, h = img.size
    _h = int(h / w * 256)
    display(img.resize((256,_h), Image.BILINEAR))
代码当前运行路径为: /home/aistudio/work

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4mftbv3w-1643605587898)(output_9_1.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ziIjHsIw-1643605587899)(output_9_2.png)]

🍜1.3 初步拟合

运行Pixel2Style2Pixel对图像进行初步拟合,生成Latent Code

img_path = img_path2
full_img_path = osp.join(osp.abspath('.'), img_path)
output_dir = 'your_imges'
!cd ppgan_package/applications/ && python -u tools/pixel2style2pixel.py \
--input_image $full_img_path --model_type ffhq-inversion --output_path $output_dir

🍜1.4 二次拟合

运行使用StyleGanB2fitting进一步重建人像,生成更有效的Latent Code

# # 金钱豹的图已经生成了,不用再花时间训练
# output_dir = 'moneyMaker'
# full_img_path = osp.join(osp.abspath('.'), img_path1)
# !cd ppgan_package/applications/ && python -u tools/pixel2style2pixel.py \
# --input_image $full_img_path --model_type ffhq-inversion --output_path $output_dir

# img_path = f'{output_dir}/src.png'
# latent_path = f'{output_dir}/dst.npy'

# !cd ppgan_package/applications/ && python -u tools/styleganv2fitting.py \
# --input_image $img_path --pre_latent $latent_path --model_type ffhq-config-f \
# --latent_level 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 --step 5000 --output_path $output_dir
# 自己的图像需要进行生成
# 1000步的效果会更好,花费时间大约6分钟

output_dir = 'your_imges'
full_img_path = osp.join(osp.abspath('.'), img_path2)
!cd ppgan_package/applications/ && python -u tools/pixel2style2pixel.py \
--input_image $full_img_path --model_type ffhq-inversion --output_path $output_dir

img_path = f'{output_dir}/src.png'
latent_path = f'{output_dir}/dst.npy'

!cd ppgan_package/applications/ && python -u tools/styleganv2fitting.py \
--input_image $img_path --pre_latent $latent_path --model_type ffhq-config-f \
--latent_level 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 --step 1000 --output_path $output_dir

🍜1.4 效果查看

  • 对两次生成的Latent Code数据进行解码,查看对比效果。

  • :原图 :第一次生成的潜在信息 :第二次生成的潜在信息

# 拟合效果查看
import glob
from IPython.display import display
from PIL import Image


for i, img_path in enumerate(['moneyMaker.jpg', 'your_imges.jpg']):
    full_img_path = osp.join(osp.abspath('.'), img_path)
    output_dir = img_path.split('.')[0]
    imgs = glob.glob(f'ppgan_package/applications/{output_dir}/src.png')
    imgs += glob.glob(f'ppgan_package/applications/{output_dir}/dst.png')
    imgs += glob.glob(f'ppgan_package/applications/{output_dir}/dst.fitting.png')
    canvas = Image.new('RGB', (256*3,256))
    for j, path in enumerate(imgs):
        img = Image.open(path)
        img = img.resize((256, 256), Image.BILINEAR)
        canvas.paste(img, (256*j,0,256*(j+1),256))
    display(canvas)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sq8WH089-1643605587900)(output_16_0.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j8IUk3jP-1643605587900)(output_16_1.png)]

🍜1.5 人脸融合

  • 使用Mixing模块进行进行人脸融合,在不同的层次调整占比会有不同的融合效果

  • 通过设置18个weights参数(范围[0,1]),来对生成效果进行调整

  • 该步运行完成后可在[./work]目录下对生成图片进行下载

!cd ppgan_package/applications/ && python -u tools/styleganv2mixing.py \
--latent1 your_imges/dst.fitting.npy --latent2 moneyMaker/dst.fitting.npy --model_type ffhq-config-f \
--weights 0 0 0 0 0 0 0 0 0.1 0.1 0.35 0.35 0.2 0 0 0 0 0  --output_path MergePng
output_dir = '/MergePng'
imgs = glob.glob(f'ppgan_package/applications/{output_dir}/src1.mixing.png')
imgs += glob.glob(f'ppgan_package/applications/{output_dir}/src2.mixing.png')
imgs += glob.glob(f'ppgan_package/applications/{output_dir}/dst.mixing.png')
canvas = Image.new('RGB', (256*3,256))
for j, path in enumerate(imgs):
    img = Image.open(path)
    img = img.resize((256, 256), Image.BILINEAR)
    canvas.paste(img, (256*j,0,256*(j+1),256))
56, 256), Image.BILINEAR)
    canvas.paste(img, (256*j,0,256*(j+1),256))
display(canvas)
[01/23 15:11:30] ppgan INFO: Found /home/aistudio/.cache/ppgan/stylegan2-ffhq-config-f.pdparams
W0123 15:11:34.465582  1124 device_context.cc:404] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1
W0123 15:11:34.469782  1124 device_context.cc:422] device: 0, cuDNN Version: 7.6.
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/tensor/creation.py:125: DeprecationWarning: `np.object` is a deprecated alias for the builtin `object`. To silence this warning, use `object` by itself. Doing this will not modify any behavior and is safe. 
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
  if data.dtype == np.object:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l6qNi0t5-1643605587900)(output_18_1.png)]

!\cp -f /home/aistudio/work/ppgan_package/applications/MergePng/dst.mixing.png /home/aistudio/work/generatedProfile.png

🐱2 项目总结

  • 项目主要对金钱豹头像进行客制化生成,拥有专属的头像。

  • 项目使用的小表情,来自:https://emojipedia.org/

  • 目前的生成效果一般,后续如果关注度高,会进一步完善推出第二个版本


特别注意:源码已经针对本项目进行部分修改,如果有类似开发项目,不建议直接迁移代码


有任何问题,欢迎评论区留言交流。

PaddleGAN功能介绍

  • 「人脸融合」
人物1人物2融合后效果
  • 「带着珍珠耳环的少女播新闻」
  • 「百年影像上色、插帧、提高分辨率」
  • 「照片动漫化」
  • 「人脸动漫化」

⭐ ⭐ ⭐ 欢迎Star支持!⭐ ⭐ ⭐

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐