该仓库是一个简单的人脸属性编辑管线,结合了一些经典技术和现成的深度学习模型来实现人脸表情编辑,适合初学者学习。
.
├── 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
- face_parsing
从这里下载 79999_iter.pth
,从这里下载resnet18-5c106cde.pth
。它基于修改的BiSeNet并在CelebAMask-HQ数据集上进行了训练,用于语义分割。
本项目的环境与一般的深度学习项目相似,这里只列出开发环境的主要部分。如果您的环境中缺少某些库(opencv-python
,scipy
),只需使用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}$等),选项为True
或False
,默认为False
。--save_media
:确定是否保存.mp4
媒体文件,选项为True
或False
,默认为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对这个代码的审查。