FaceFusion参数详解
AI魔法学院
2024-05-10
分享海报

FaceFusion特点和界面

启动WEBUI后,大概是这个样子。

看起来有点复杂,没有最新的Rope那么简洁。

Rope的对比,可以看上次写的��这篇。

 

但其实把一些参数设置好后,每次使用也是相当快捷的。

 

 

(一)参数控制的FaceFusion

前面提到过,FaceFusion和侧重GUI交互的Rope不一样,可以无界面进行命令行操作(CLI)。

所以它有非常非常多的参数可选。

当然,如果你启动的是WEBUI,那么大部分参数也可以通过界面调整。

而其中小部分参数必须在命令行中生效。

 

1.1)启动参数

建议配合官方帮助来使用和了解参数含义。

那么目前版本有这些参数。

 

python run.py [options]

 

options:

  -h, --help                                                                                                             show this help message and exit

  -s SOURCE_PATHS, --source SOURCE_PATHS                                                                                 choose single or multiple source images or audios

  -t TARGET_PATH, --target TARGET_PATH                                                                                   choose single target image or video

  -o OUTPUT_PATH, --output OUTPUT_PATH                                                                                   specify the output file or directory

  -v, --version                                                                                                          show program's version number and exit

 

misc:

  --skip-download                                                                                                        omit automate downloads and remote lookups

  --headless                                                                                                             run the program without a user interface

  --log-level {error,warn,info,debug}                                                                                    adjust the message severity displayed in the terminal

 

execution:

  --execution-providers EXECUTION_PROVIDERS [EXECUTION_PROVIDERS ...]                                                    accelerate the model inference using different providers (choices: cpu, ...)

  --execution-thread-count [1-128]                                                                                       specify the amount of parallel threads while processing

  --execution-queue-count [1-32]                                                                                         specify the amount of frames each thread is processing

 

memory:

  --video-memory-strategy {strict,moderate,tolerant}                                                                     balance fast frame processing and low vram usage

  --system-memory-limit [0-128]                                                                                          limit the available ram that can be used while processing

 

face analyser:

  --face-analyser-order {left-right,right-left,top-bottom,bottom-top,small-large,large-small,best-worst,worst-best}      specify the order in which the face analyser detects faces.

  --face-analyser-age {child,teen,adult,senior}                                                                          filter the detected faces based on their age

  --face-analyser-gender {female,male}                                                                                   filter the detected faces based on their gender

  --face-detector-model {retinaface,yoloface,yunet}                                                                      choose the model responsible for detecting the face

  --face-detector-size FACE_DETECTOR_SIZE                                                                                specify the size of the frame provided to the face detector

  --face-detector-score [0.0-1.0]                                                                                        filter the detected faces base on the confidence score

 

face selector:

  --face-selector-mode {reference,one,many}                                                                              use reference based tracking with simple matching

  --reference-face-position REFERENCE_FACE_POSITION                                                                      specify the position used to create the reference face

  --reference-face-distance [0.0-1.5]                                                                                    specify the desired similarity between the reference face and target face

  --reference-frame-number REFERENCE_FRAME_NUMBER                                                                        specify the frame used to create the reference face

 

face mask:

  --face-mask-types FACE_MASK_TYPES [FACE_MASK_TYPES ...]                                                                mix and match different face mask types (choices: box, occlusion, region)

  --face-mask-blur [0.0-1.0]                                                                                             specify the degree of blur applied the box mask

  --face-mask-padding FACE_MASK_PADDING [FACE_MASK_PADDING ...]                                                          apply top, right, bottom and left padding to the box mask

  --face-mask-regions FACE_MASK_REGIONS [FACE_MASK_REGIONS ...]                                                          choose the facial features used for the region mask (choices: skin, left-eyebrow, right-eyebrow, left-eye, right-eye, eye-glasses, nose, mouth, upper-lip, lower-lip)

 

frame extraction:

  --trim-frame-start TRIM_FRAME_START                                                                                    specify the the start frame of the target video

  --trim-frame-end TRIM_FRAME_END                                                                                        specify the the end frame of the target video

  --temp-frame-format {bmp,jpg,png}                                                                                      specify the temporary resources format

  --temp-frame-quality [0-100]                                                                                           specify the temporary resources quality

  --keep-temp                                                                                                            keep the temporary resources after processing

 

output creation:

  --output-image-quality [0-100]                                                                                         specify the image quality which translates to the compression factor

  --output-video-encoder {libx264,libx265,libvpx-vp9,h264_nvenc,hevc_nvenc}                                              specify the encoder use for the video compression

  --output-video-preset {ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow}                           balance fast video processing and video file size

  --output-video-quality [0-100]                                                                                         specify the video quality which translates to the compression factor

  --output-video-resolution OUTPUT_VIDEO_RESOLUTION                                                                      specify the video output resolution based on the target video

  --output-video-fps OUTPUT_VIDEO_FPS                                                                                    specify the video output fps based on the target video

  --skip-audio                                                                                                           omit the audio from the target video

 

frame processors:

  --frame-processors FRAME_PROCESSORS [FRAME_PROCESSORS ...]                                                             load a single or multiple frame processors. (choices: face_debugger, face_enhancer, face_swapper, frame_enhancer, lip_syncer, ...)

  --face-debugger-items FACE_DEBUGGER_ITEMS [FACE_DEBUGGER_ITEMS ...]                                                    load a single or multiple frame processors (choices: bounding-box, landmark-5, landmark-68, face-mask, score, age, gender)

  --face-enhancer-model {codeformer,gfpgan_1.2,gfpgan_1.3,gfpgan_1.4,gpen_bfr_256,gpen_bfr_512,restoreformer_plus_plus}  choose the model responsible for enhancing the face

  --face-enhancer-blend [0-100]                                                                                          blend the enhanced into the previous face

  --face-swapper-model {blendswap_256,inswapper_128,inswapper_128_fp16,simswap_256,simswap_512_unofficial,uniface_256}   choose the model responsible for swapping the face

  --frame-enhancer-model {real_esrgan_x2plus,real_esrgan_x4plus,real_esrnet_x4plus}                                      choose the model responsible for enhancing the frame

  --frame-enhancer-blend [0-100]                                                                                         blend the enhanced into the previous frame

  --lip-syncer-model {wav2lip_gan}                                                                                       choose the model responsible for syncing the lips

 

uis:

  --ui-layouts UI_LAYOUTS [UI_LAYOUTS ...]                                                                               launch a single or multiple UI layouts (choices: benchmark, default, webcam, ...)

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

比如下面这个例子。

指定了输出目录,部分模型,视频编码等:

 

python run.py -o D:\Temp\out\A --skip-download --execution-providers cuda --frame-processors face_swapper face_enhancer --face-enhancer-model gpen_bfr_256 --face-enhancer-blend 90 --output-video-encoder hevc_nvenc --output-video-quality 99 --face-mask-types box occlusion

1

1.2)配置文件覆盖

不想每次都打很长的命令行,可以写入一个bat文件中。

 

然后作者考虑到了这点,有个更简单的办法。

把这些参数写入facefusion.ini配置文件,可以起到命令行参数同样的作用,同时更整洁易读。

 

但项目中作者提供的是facefusion.ini本身,而不是facefusion.ini.sample,会影响拉代码啊。

 

[general]

source_paths =

target_path =

output_path =

 

[misc]

skip_download =

headless =

log_level =

 

[execution]

execution_providers =

execution_thread_count =

execution_queue_count =

 

[memory]

video_memory_strategy =

system_memory_limit =

 

[face_analyser]

face_analyser_order =

face_analyser_age =

face_analyser_gender =

face_detector_model =

face_detector_size =

face_detector_score =

 

[face_selector]

face_selector_mode =

reference_face_position =

reference_face_distance =

reference_frame_number =

 

[face_mask]

face_mask_types =

face_mask_blur =

face_mask_padding =

face_mask_regions =

 

[frame_extraction]

trim_frame_start =

trim_frame_end =

temp_frame_format =

temp_frame_quality =

keep_temp =

 

[output_creation]

output_image_quality =

output_video_encoder =

output_video_preset =

output_video_quality =

output_video_resolution =

output_video_fps =

skip_audio =

 

[frame_processors]

frame_processors =

face_debugger_items =

face_enhancer_model =

face_enhancer_blend =

face_swapper_model =

frame_enhancer_model =

frame_enhancer_blend =

lip_syncer_model =

 

[uis]

ui_layouts =

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

(二)参数详解

2.1)UI参数

2.1.1)UI布局

��保持默认就好,咱通常用不到。

 

用来切换不同的UI布局。

用法: --ui-layouts

 

默认值: [ default ],可选这些值:

 

benchmark (基准测试)

default(默认值,换视频)

webcam (摄像头,直播)

比如: --ui-layouts benchmark 就启动测试性能的UI布局。

 

2.2)杂项参数

2.2.1)Skip Download

⚠️天朝网络必须得开(除非你的网络自动下载模型没问题)。

 

顾名思义用来跳过远程下载(必要的模型我们可以通过别的方式,提前下载好)

用法: --skip-download

 

2.2.2)Headless

��保持默认就好,除非……

 

不使用界面的方式启动程序,适合在服务器上操作。

设置好各种参数后,一条命令运行直接出结果。

用法: --headless

 

2.2.3)Log Level

��保持默认就好,咱通常用不到。

 

调整控制台输出的日志级别。

用法: --log-level

 

默认值: info,可选这些值:

 

error (错误)

warn (警告)

info (普通信息)

debug (调试)

比如: --log-level debug 打印调试日志。

 

2.3)路径参数

��至少设个输出路径吧。

 

2.3.1)Source

指定一个或多个源图像/音频(音频用于嘴型同步)

用法: -s 或者 --source

比如: --source image1.jpg --source image2.jpg --source audio.mp3

 

不通过参数指定时,在WEBUI中拖放或选择文件上传。

这里会显示多张图片的名称,以及其中一张的预览。

 

 

2.3.2)Target

指定一张图像或视频作为目标。

用法: -t 或者 --target

比如: --target video.mp4

 

不通过参数指定时,在WEBUI中拖放或选择文件上传。

 

 

2.3.3)Output

指定输出的文件或目录。

用法: -o 或者 --output

比如: --output .

 

就算指定了目录,处理完成后,输出的内容也会显示在WEBUI中。

点击【Clear】按钮可以清除WEBUI上的输出内容。

 

对了,既然是WEB,也可以下载。。。

 

2.4)执行器参数

��根据显卡选择,大家都是用N卡的CDUA吧?

 

这种重要参数很影响速度,也比较固定,所以最好固定到命令行参数中。

或者写入配置文件。

 

 

2.4.1)Execution Providers

执行器提供者,就是用啥来跑,CPU还是显卡。

在我这里可选的是cpu, cuda, TensorRT。不清楚是否支持Intel和ATI。

用法: --execution-providers

默认值: [ cpu ] —— 是的,它也是一个集合参数,可以多选。比如同时选cpu和cuda。

比如: --execution-providers cuda

 

2.4.2)Execution Thread Count

处理线程数,只要显存够,开大些会比较快。

用法: --execution-thread-count

默认值: 1

范围: 1-128

比如: --execution-thread-count 4

 

2.4.3)Execution Queue Count

队列长度,定义一个线程处理的帧数量。

没看懂,所以就开的1

用法: --execution-queue-count

默认值: 1

范围: 1-32

比如: --execution-queue-count 2

 

2.5)内存参数

��保持默认就好。

 

 

2.5.1)Video Memory Strategy

显存使用策略,为了不爆显存,我们可以用默认值。

我记得好像默认的strict,会每次处理都会清理显存,不保留不用的模型等。

如果显存很大可以试试另外两个参数。

用法: --video-memory-strategy

默认值: strict,可选这些值:

 

strict (严格)

moderate (中等)

tolerant (宽容)

比如: --video-memory-strategy tolerant

 

2.5.2)System Memory Limit

系统内存限制,这个看各自的计算机内存有多少。.

用法: --system-memory-limit

默认值: 0

范围: 0-128

比如: --system-memory-limit 32

 

2.6)帧处理器参数

FaceFusion像个工作流,所以需要选择一个或多个帧处理器。

然后选择它们的相关模型和参数。

 

 

2.6.1)Frame Processors

��通常选交换和增强。

 

选择一个或多个帧处理器(默认就是交换)。

目前有5个帧处理器:交换,增强,调试、帧超分,嘴型同步。

未选中的帧处理器,其配置不会出现在WEB界面上。

用法: --frame-processors

默认值: [ face_swapper ]

可选: face_debugger, face_enhancer, face_swapper, frame_enhancer

比如: --frame-processors face_swapper face_enhancer

 

2.6.2)Face Debugger Items

用于调试(显示检测和遮罩的对象)。

反正我没用过啊。

用法: --face-debugger-items

默认值: [ landmark-5, face-mask ]

可选: bounding-box, landmark-5, landmark-68, face-mask, score, age, gender

比如: --face-debugger-items landmark-68 score

 

2.6.3)Face Enhancer Model

��小显存我比较喜欢gpen_bfr_256,大显存机器选gpen_bfr_512。

 

选择增强模型。

用法: --face-enhancer-model

默认值: gfpgan_1.4

可选: codeformer, gfpgan_1.2, gfpgan_1.3, gfpgan_1.4, gpen_bfr_256, gpen_bfr_512, restoreformer_plus_plus

比如: --face-enhancer-model codeformer

 

2.6.4)Face Enhancer Blend

设置增强的融合度。.

用法: --face-enhancer-blend

默认值: 80

范围: 0-100 at 1

比如: --face-enhancer-blend 60

 

2.6.5)Face Swapper Model

��虽然很多选择,但只能用inswapper_128,至于fp16看不出任何区别,应该会快一点点或者占用小点。

用其它模型的对比请见这里,效果确实不能让人满意。

 

选择交换模型。

用法: --face-swapper-model

默认值: inswapper_128_fp16

可选: blendswap_256, inswapper_128, inswapper_128_fp16, simswap_256, simswap_512_unofficial, uniface_256

比如: --face-swapper-model simswap_256

 

PS:正确的顺序是先交换,再增强。

但我遇到过bug,看日志变成了先增强再交换,这样最后结果就是没有增强,分辨率很低。

 

2.6.6)Frame Enhancer Model

��慢死了不开。

 

选择整个视频帧的超分辨率模型(和前面用词不同方便区别)。

用法: --frame-enhancer-model

默认值: real_esrgan_x2plus

可选: real_esrgan_x2plus, real_esrgan_x4plus, real_esrnet_x4plus

比如: --frame-enhancer-model real_esrnet_x4plus

 

2.6.7)Frame Enhancer Blend

设置帧超分辨率的融合度。

用法: --frame-enhancer-blend

默认值: 80

范围: 0-100 at 1

比如: --frame-enhancer-blend 60

 

2.6.8)Lip Syncer Model

选择锥型同步模型。这也没得选啊:)

用法: --lip-syncer-model

默认值: wave2lip_gan

可选: wave2lip_gan (就它一个啊)

比如: --lip-syncer-model wave2lip_gan

 

2.7)输出参数

不想写详细了。

可以不用管,用默认的就OK。

分辨率帧率这些也会随着dst自动改变。

 

PS:我设置视频编码为hevc_nven,实际出来并不是h265,依然是h264……奇怪。

 

 

2.8)帧提取参数

不想写详细了。

就是你想预览哪一帧(首帧没有人可以改下)。

 

并且想处理从哪到哪帧。

如果处理整个视频,保持默认就好。

 

 

2.9)面部分析参数

咋一看很多设置。

其实大部分都不用改,指定人了,就不管左右顺序,年龄,性别……

 

 

2.9.1)Face Selector Mode

其实都不用改,默认就设为reference(参考),

然后从预览帧中提取的人里面选一个就可以了。

除了【参考】方式,其它选项还有【1个】,【多个】。我不知道该怎么用也没用过。

 

2.9.2)Face Mask Types

默认box,如果有遮挡情况,就追加勾选occlusion。

 

2.9.3)Face Detector

默认yoloface,也可以选retinaface。

具体有什么区别呢,借用Rope作者的话,没啥大区别,只有极端角度下会有不同。

最后那个yunet稍微弱一点,不建议选。

 

 

 

������������

神奇的时刻到了!!!

虽然FaceFusion没有Rope的分段角度设置,检测算法也一样。

但是除了大头朝下这种奇葩角度,其它角度它的检测都是正确的!!!

������������

 

PS:意思是绝大部分情况下,我们不用操心角度了,管他站着躺着呢。

 

(三)总结

即使上面有那么多参数(我偷懒了没有全部列出来),但和Rope相比还是缺少一些控制。

同时又具有Rope不具备的特性。

两个项目的目标明显不一样,各具特色。

 

建议亲自使用和对比FaceFusion 和 Rope。

熟悉以后再调整各种参数。

————————————————

 

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

                        

原文链接:https://blog.csdn.net/ddrfan/article/details/136226323

© THE END

转载请联系本网站获得授权

投稿或版权问题请加微信:skillupvip