基于PaddleGAN 的「暴富头像」客制化
本项目使用StyleGANv2对人脸和金钱豹豹脸进行合成。定制新年专属的「暴富头像」。
「🧡PaddleGAN 的头像客制化🧡」———个人专属金钱豹头像生成
新年将至,不少人都偷偷换起了头像。
有人说换金钱豹的头像预示金钱爆2022年要发财,
所以朋友圈清一色的金钱豹头像。
这是金钱豹,换了这个头像今年发大财!
💛 但是大家都换一样的金钱豹头像,这就很容易混淆,也完全凸显不出我对暴富异于常人的渴望!
✨本项目基于PaddleGAN实现人脸和金钱豹的合成,生成专属于自己的金钱豹头像。
–精准暴富,赶快行动起来!
🧡 实现效果如图:
当然,我也要劝大家不信豹,不传豹
认清现实,放弃幻想,努力奋斗!
正经人谁用金钱豹啊?你用吗?
----------------------我用!
💟「我就是为了这个头像!写的这个项目!」
本项目基于「艾梦的开发前瞻 2021-7-14」 创建。
📖 0 预备知识
0.1 基础知识
📌 Latent Code:潜在因子,每张图像对应一个潜在因子(高维的向量),stylegan能够用这个向量生成图像。
📌 属性编辑:由于潜在因子包含维度比较多,无法确定维度对应的方向以及编辑所带来的变化,训练多个线性分类器(即18个latent_level参数)对生成效果进行微调
📌 StyleGANV2:NVIDIA研发的用于生成高质量图像的深度学习方法。
0.2 原理步骤
实现头像生成一共分为四个步骤:
- 使用Pixel2Style2Pixel对两幅待合成图片初步拟合获取图片的Latent Code
- 使用Pixel2Style2Pixel对两幅待合成图片进一步训练获取图片的Latent Code,对17个latent_level同时进行训练
- 将Latent Code设定对应权重,即可编辑对应的人脸属性,如年龄、性别、头发、眼睛等
- StyleGAN V2输入第二步的Latent Code和第三步权重合成目标人脸
0.3 核心原理
-
✔️利用dlib库检测人脸的各个部位
-
✔️将各个输入GAN网络进行编码,生成对应的Latent Code
-
✔️对不同人脸的Latent Code进行加权平均,生成混合Latent Code
-
✔️对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
🍜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)
🍜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:
!\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支持!⭐ ⭐ ⭐
更多推荐
所有评论(0)