Skip to content

Latest commit

 

History

History
169 lines (125 loc) · 6.69 KB

README_zh.md

File metadata and controls

169 lines (125 loc) · 6.69 KB

人脸编辑管线

​ 该仓库是一个简单的人脸属性编辑管线,结合了一些经典技术和现成的深度学习模型来实现人脸表情编辑,适合初学者学习。

框架

.
├── assets
│   └── ...
├── attributes
│   └── ...
├── common
│   ├── basemodel.py
│   ├── __init__.py
│   ├── svm_util.py
│   └── tools.py
├── config
│   └── cfg.yaml
├── scripts
│   ├── run_generate_data.py
│   ├── run_predict_score.py
│   └── run_svm.py
├── input
│   └── ...
├── modules
│   ├── models
│   ├── face_alignment
│   │   │   ├── face_alignment.py
│   │   │   └── networks
│   │   │	└── ...
│   │   ├── face_editing
│   │   │   └── face_editing.py
│   │   ├── face_generator
│   │   │   ├── face_generator.py
│   │   │   └── networks
│   │   │	└── ...
│   │   ├── face_inversion
│   │   │   └── face_inversion.py
│   │   ├── face_parsing
│   │   │   ├── face_parsing.py
│   │   │   └── networks
│   │   │	└── ...
│   │   └── face_paste
│   │       └── face_paste.py
│   └── weights
|       └── ...
├── output
│   └── ...
└── edit.py

预训练模型

​ 预训练模型存储在./modules/weights中,按以下方式组织。

.
├── face_alignment
│   ├── 2DFAN4-11f355bf06.pth.tar
│   └── s3fd-619a316812.pth
├── face_editing
├── face_generator
│   └── ffhq.pkl
├── face_inversion
│   └── vgg16.pt
├── face_parsing
│   ├── 79999_iter.pth
│   └── resnet18-5c106cde.pth
└── face_paste
  • face_alignment

这里下载 2DFAN4-11f355bf06.pth.tar,从这里下载s3fd-619a316812.pth

这两个模型是常用的面部关键点检测模型。

  • face_generator

这里下载 ffhq.pkl。基于在FFHQ数据集上训练的StyleGAN2。

  • face_inversion

这里下载 vgg16.pt。用于计算LPIPS损失

  • face_parsing

这里下载 79999_iter.pth,从这里下载resnet18-5c106cde.pth。它基于修改的BiSeNet并在CelebAMask-HQ数据集上进行了训练,用于语义分割。

环境

​ 本项目的环境与一般的深度学习项目相似,这里只列出开发环境的主要部分。如果您的环境中缺少某些库(opencv-pythonscipy),只需使用pip安装即可。

  • Python == 3.8
  • PyTorch == 1.11
  • CUDA == 11.3
  • imageio-ffmpeg == 0.4.8 (用于保存.mp4文件)
  • ninja == 1.11.1.1 (用于编译StyleGAN操作)

使用方法

​ 通过以下命令运行项目:

python edit.py --input_dir ./input --output_dir./output --dir_path ./attributes/smile.npy --config ./config/cfg.yaml --gamma 1.5 [--save_cache] [--save_media] [--change_hair] 
  • --input_dir:输入图像所在文件夹的路径,默认为./input。(由于H264编解码器,图像的宽度和高度需要是2的倍数。)
  • --output_dir:结果将保存到的文件夹的路径,默认为./output
  • --dir_path:带有特定属性的目录文件的路径,默认为./attributes/smile.npy
  • --config:配置文件的路径,默认为./config/cfg.yaml
  • --gamma:编辑强度的值,默认为1.5
  • --save_cache:确定是否保存缓存(微调生成器、优化出的$\mathcal{W}$等),选项为TrueFalse,默认为False
  • --save_media:确定是否保存.mp4媒体文件,选项为TrueFalse,默认为False
  • --change_hair:确定是否在Face_Parsing中掩盖头发,默认为False。在长发的情况下,最好将此参数设置为False

编辑方向

​ 该仓库使用了来自generators-with-stylegan2的latent code,感谢仓库作者无私的分享。此外,在./scripts中,该仓库还提供了通过SVM和CLIP计算潜在方向的简单脚本。

​ 从这里下载 ViT-B-32.pt,然后运行以下命令:

# 生成图像和潜在代码w
python ./scripts/run_generate_data.py
# 通过CLIP为每个图像预测分数
python ./scripts/run_predict_score.py --pos_text <positive prompt> --neg_text <negative prompt>
# 运行SVM以寻找边界
python ./scripts/run_svm.py -s <predict score path>

可视化

​ 由于该仓库只是将一些现有的经典的技术结合在一起,所以实现效果的提升空间很大。此外,由于大多数模型都是在主体为欧美人群的数据集中训练的,所以并不是任意一张图像都能达到令人满意的编辑结果。

  • Smile
smile1.mp4
smile2.mp4
  • Glasses
glasses1.mp4
glasses2.mp4
  • Age
age1.mp4
age2.mp4

参考

致谢

感谢OPPO的DongFang Hu对这个代码的审查。