论文讲解在:https://blog.csdn.net/qq_45934285/article/details/127701689
'''官方教程已过时!!!踩坑了'''
conda create -n simswap python=3.6 -y
conda activate simswap
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=10.2 -c pytorch -y
pip install --ignore-installed imageio
pip install insightface==0.2.1 onnxruntime moviepy # 比较慢而且会报出一些红色的ERROR,暂且跳过不用管。不管不行会报错
pip install onnxruntime-gpu
pip install opencv-python
我的环境!!!
'''我的安装教程'''
conda create -n simswap python=3.8 -y
conda activate simswap
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia -y
pip install --ignore-installed imageio
pip install insightface==0.2.1 onnxruntime moviepy #成功
pip install onnxruntime-gpu # 成功
之后会遇到:
session = onnxruntime.InferenceSession(self.onnx_file, None)
改为session = onnxruntime.InferenceSession(self.onnx_file, None, providers=['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider'])
还会遇到
np.float
was a deprecated alias for the builtin float
. To avoid this error in existing code, use float
by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use np.float64
here.至此环境配置完毕!下面是所需要的checkpoint。
注意2023-04-25
:修复了"AttributeError: ‘SGD’ object has no attribute ‘defaults’ now" 错误。如果您已经下载了arcface_checkpoint.tar,请重新下载。此外,您还需要更新 ./models/ 中的脚本。至此环境准备结束。
先试试环境是否有问题,图片是代码包中给的。我用的是512的checkpoint,无水印,a是源脸,b是目标脸。输出到./output/result_whole_swapsingle.jpg
python test_wholeimage_swapmulti.py --no_simswaplogo --crop_size 512 --use_mask --name people --Arc_path arcface_model/arcface_checkpoint.tar --pic_a_path ./demo_file/Iron_man.jpg --pic_b_path ./demo_file/multi_people.jpg --output_path ./output/
如图是可以成功换脸的:(为了方便查看将图像裁剪到了128x128)
参数 | 函数 |
---|---|
–name | SimSwap 训练日志名称 |
–pic_a_path | 要交换的源面图像路径 |
–pic_b_path | 目标人脸图像路径 |
–pic_specific_path | 待交换特定面孔的图像路径 |
–multisepcific_dir | 用于多特定面交换的图像文件夹路径 |
–video_path | 与源面互换的视频路径 |
–temp_path | 存放中间文件的路径 |
–output_path | 换脸结果存放目录路径 |
–no_simswaplogo | 控制是否去水印的超参数 |
–use_mask | 控制是否使用人脸解析的超参数,视觉效果更好(推荐使用) |
--crop_size 224
表示图像预处理,相应的改为--crop_size 512
也是一样。不加--crop_size
就是对已经面部对齐的图像进行简单的面部交换。
加上--no_simswaplogo
就是无水印。
python test_wholeimage_swapsingle.py --crop_size 224 --use_mask --name people --Arc_path arcface_model/arcface_checkpoint.tar --pic_a_path ./demo_file/Iron_man.jpg --pic_b_path ./demo_file/multi_people.jpg --output_path ./output/
python test_wholeimage_swapmulti.py --crop_size 224 --use_mask --name people --Arc_path arcface_model/arcface_checkpoint.tar --pic_a_path ./demo_file/Iron_man.jpg --pic_b_path ./demo_file/multi_people.jpg --output_path ./output/
python test_wholeimage_swapspecific.py --crop_size 224 --use_mask --name people --Arc_path arcface_model/arcface_checkpoint.tar --pic_a_path ./demo_file/Iron_man.jpg --pic_b_path ./demo_file/multi_people.jpg --output_path ./output/ --pic_specific_path ./demo_file/specific2.png
python test_wholeimage_swap_multispecific.py --crop_size 224 --use_mask --name people --Arc_path arcface_model/arcface_checkpoint.tar --pic_b_path ./demo_file/multi_people.jpg --output_path ./output/ --multisepcific_dir ./demo_file/multispecific
python test_video_swapsingle.py --crop_size 224 --use_mask --name people --Arc_path arcface_model/arcface_checkpoint.tar --pic_a_path ./demo_file/Iron_man.jpg --video_path ./demo_file/multi_people_1080p.mp4 --output_path ./output/multi_test_swapsingle.mp4 --temp_path ./temp_results
python test_video_swapmulti.py --crop_size 224 --use_mask --name people --Arc_path arcface_model/arcface_checkpoint.tar --pic_a_path ./demo_file/Iron_man.jpg --video_path ./demo_file/multi_people_1080p.mp4 --output_path ./output/multi_test_swapmulti.mp4 --temp_path ./temp_results
python test_video_swapspecific.py --crop_size 224 --use_mask --pic_specific_path ./demo_file/specific1.png --name people --Arc_path arcface_model/arcface_checkpoint.tar --pic_a_path ./demo_file/Iron_man.jpg --video_path ./demo_file/multi_people_1080p.mp4 --output_path ./output/multi_test_specific.mp4 --temp_path ./temp_results
换脸时,需要给出换脸人的照片。然后将图片路径分配给参数“–pic_specific_path”。这张图片应该是正面,并且展示了整个头部和颈部,可以帮助准确换脸(如果你还不知道如何选择图片,可以参考./demo_file/specific*.png).如果这张图是从要改的视频里截的就更好了。
python test_video_swap_multispecific.py --crop_size 224 --use_mask --name people --Arc_path arcface_model/arcface_checkpoint.tar --video_path ./demo_file/multi_people_1080p.mp4 --output_path ./output/multi_test_multispecific.mp4 --temp_path ./temp_results --multisepcific_dir ./demo_file/multispecific
您分配给“–multisepcific_dir”的文件夹应该如下所示:
$Your folder name$
├── DST_01.jpg(png)
└── DST_02.jpg(png)
└──...
└── SRC_01.jpg(png)
└── SRC_02.jpg(png)
└──...
结果就是视频中SRC_01.jpg(png)对应的人脸会被DST_01.jpg(png)对应的人脸替换掉。然后将SRC_02.jpg(png)对应的字符替换为DST_02.jpg(png)的人脸,以此类推。注意使用自己的数据命名时,不要去掉SRC_(DST_)01.jpg(png)中的0等。
总体可以记忆为:一换一,一换具体一,一换具体多,具体多换具体多。四种
打算下一篇博客写按照论文的pipeline梳理一遍代码,感兴趣的可以follow一下。