FaceFusion 人脸融合完整指南:13 个换脸模型怎么选,3 个参数怎么调

发布时间:2026/9/3 9:51:55
FaceFusion 人脸融合完整指南:13 个换脸模型怎么选,3 个参数怎么调 FaceFusion 人脸融合完整指南13 个换脸模型怎么选3 个参数怎么调【免费下载链接】facefusionIndustry leading face manipulation platform项目地址: https://gitcode.com/GitHub_Trending/fa/facefusionfacefusion 把目标视频拆帧、定位每张脸、用换脸模型推理出新面部再贴回原帧后合成为视频。你不需要自己搭 ONNX 推理链路也不需要手写关键点对齐——这些都被拆成了facefusion/processors/modules/下的一组处理器。这篇指南回答三个最实际问题13 个 swapper 模型分别该什么时候选、face_swapper_weight和face_swapper_pixel_boost到底改了什么、以及在 CUDA 机器上怎么把一晚上的活压到几分钟。所有命令、参数名和默认值均出自本仓库源码路径在文中逐项标注。第一次跑通一条命令加两个检查点先装环境。项目自带 Conda 依赖文件仓库克隆地址git clone https://gitcode.com/GitHub_Trending/fa/facefusion cd facefusion conda env create -f environment.yml conda activate facefusion python install.py python facefusion.py run -s source.jpg -t target.mp4 -o output.mp4-s/-t/-o分别是源人脸图片、目标视频、输出路径facefusion/program.py 第 52~68 行。改-o指向已有目录才有效目录不存在会直接报错退出。模型文件不在代码库里首次运行到pre_check()时按需下载到.assets/models/目录下载源由--download-providers控制默认同时尝试 github 与 huggingfacefacefusion/choices.py 第 123~142 行。注意-t指向的目标是整段视频facefusion 内部先解码成 PNG 帧序列--temp-frame-format默认png处理完再编码回 mp4。所以“处理 10 分钟视频”的真实成本 解码 逐帧推理 编码后面提速三节的三个旋钮各自砍掉其中一段。run只是入口之一。create_program()facefusion/program.py 第 319~343 行里一共注册了 19 个子命令和你最相关的几个runGUI 与处理一体--ui-workflow默认instant_runner网页里点一下即跑当前步骤headless-run同参数但不带任何 UI 参数组适合服务器batch-run用--source-pattern/--target-pattern/--output-pattern三条 glob 批量跑benchmark用内置 720p 样例视频跑测速--benchmark-mode默认warm--benchmark-cycle-count默认 5job-add-step / job-submit / job-run-all作业系统把多组素材排成队列# 多素材排队先建作业逐步添加再统一提交 python facefusion.py job-create my_job python facefusion.py job-add-step my_job -s a.jpg -t v1.mp4 -o o1.mp4 python facefusion.py job-submit-alljob-create的job_id会被sanitize_job_id校验job-add-step接受与run完全相同的处理参数组——即一份作业可以混用不同模型、不同 mask 的多步任务互不干扰。13 个换脸模型对照从 128 输入到 512 输入换脸模型全部登记在 facefusion/processors/modules/face_swapper/core.py 的create_static_model_set()每个模型声明了原生输入尺寸、对齐模板、归一化参数和许可证。模型名可直接传给--face-swapper-model完整对照如下模型原生输入可选 pixel_boost对齐模板精度选型参考inswapper_128128×128128~1024arcface_128fp32默认基线单次推理开销最小inswapper_128_fp16128×128128~1024arcface_128fp16显存减半的 inswapperhyperswap_1a/1b/1c_256256×256256~1024arcface_128fp16默认模型FaceFusion 2025 自研blendswap_256256×256256~1024ffhq_512fp32走整帧输入路径换全脸含发型边缘ghost_1/2/3_256256×256256~1024arcface_112_v1fp32研究导向Apache-2.0 许可hififace_unofficial_256256×256256~1024mtcnn_512fp322021 模型非官方权重simswap_256256×256256~1024arcface_112_v1fp322020 基线对照simswap_unofficial_512512×512512~1024arcface_112_v1fp32唯一 512 原生输入细节上限最高uniface_256256×256256~1024ffhq_512fp32整帧输入路径同 blendswap 机制两个要点比模型数量更重要推理次数由 pixel_boost 决定不由模型决定。inswapper_128 512与simswap_unofficial_512 512都是 16 次模型调用/脸/帧差别只在前者每次只算 128×128。想快小模型 低 boost想细大原生输入或高 boost代价按平方增长。许可证不同。ghost_*是 Apache-2.0inswapper_128、blendswap_256、simswap_256标注 Non-Commercial见__metadata__字段。商业交付前逐项核对core.py里各模型的license值这一列仓库替你记好了。不同模型对源脸的输入方式也不同forward_swap_face()同文件第 640~659 行显示blendswap和uniface喂整帧像素其余模型喂512 维嵌入向量其中 ghost 系列还要先过embedding_converter把 InsightFace 嵌入转换到自家空间第 662~671 行。这就是换 ghost 模型时会多下载一个crossface_*.onnx的原因。三个真正改变结果的参数weight、pixel_boost、mask_blurface_swapper_weight不是强度开关它是嵌入向量的混合系数。balance_source_embedding()face_swapper/core.py 第 715~726 行做了两件事face_swapper_weight numpy.interp(face_swapper_weight, [ 0, 1 ], [ 0.35, -0.35 ]) source_embedding source_embedding * (1 - face_swapper_weight) \ target_embedding * face_swapper_weight0.5 映射到 0源嵌入和目标嵌入各占一半往 0 走最大 0.35混入更多目标脸的身份往 1 走最小 −0.35则强化源脸。你改的是--face-swapper-weight看到的变化是“像原视频的人”和“像源照片的人”之间的滑动不是模糊度。取值范围 0.0~1.0、步长 0.05facefusion/choices.py 第 164 行默认 0.5。face_swapper_pixel_boost控制“裁剪出的人脸先被 warp 到多大尺寸再送模型”。swap_face()的完整链路crop_vision_frame, affine_matrix warp_face_by_face_landmark_5( temp_vision_frame, target_face.landmark_set.get(5/68), model_template, pixel_boost_size) # ... 对每个子块做 forward_swap_face 推理 ... crop_vision_frame explode_pixel_boost(temp_vision_frames, pixel_boost_total, model_size, pixel_boost_size) paste_vision_frame paste_back(temp_vision_frame, crop_vision_frame, crop_mask, affine_matrix)pixel_boost_total pixel_boost // 模型原生尺寸推理次数 pixel_boost_total²face_swapper/core.py 第 601~637 行分块逻辑在 facefusion/processors/pixel_boost.py。inswapper_128从 128 提到 512 是 1 → 16 次调用hyperswap_1a_256从 256 提到 1024 是 1 → 16 次。改这个值后你会直接看到帧耗时按平方跳变同时小脸、侧脸处的发丝和五官细节提升明显——它是全参数表里“质量/速度”杠杆最大的一档。face_mask_blur默认 0.3范围 0~1决定贴回前 mask 边缘的羽化宽度配合--face-mask-types生效可选box默认、area、region、occlusionfacefusion/choices.py 第 26~44 行给出 area/region 的具体 68 点索引和部件编号。边缘出现“贴片感”时先把它从 0.3 往 0.5 抬要露出眼镜、胡子等遮挡物加occlusion默认模型xseg_1见 facefusion/program.py 第 147 行。顺手记一张常用旋钮速查表参数默认范围调高看到什么--face-swapper-weight0.50.0~1.0步长 0.05更像源照片调低更像原视频--face-swapper-pixel-boost模型首个选项128~1024细节↑耗时按平方↑--face-mask-blur0.30.0~1.0步长 0.05边缘更柔过高发虚--face-detector-score0.50.0~1.0步长 0.05更多脸被检出假阳性↑--execution-thread-count81~32CPU 路径吞吐↑facefusion/choices.py 第 161 行--video-memory-strategystrictstrict / moderatestrict 每作业后卸模型防显存溢出提速三处推理后端、输出编码、内存策略推理后端。--execution-providers按机器实际安装的 onnxruntime 提供器过滤facefusion/execution.py 第 21~30 行可选cuda tensorrt rocm migraphx coreml openvino qnn directml cpu。有 NVIDIA 卡时优先python facefusion.py run -s s.jpg -t t.mp4 -o o.mp4 \ --execution-providers tensorrt cuda --execution-device-ids 0列表顺序即回退顺序TensorRT 失败落到 CUDA。create_inference_providers()第 45~59 行为 TensorRT 开了trt_engine_cache_enable和 timing cache引擎缓存写进.caches/onnxruntime 版本/目录——第一次跑某个分辨率最慢现场构建引擎第二次起直接加载缓存。多卡时--execution-device-ids接受多个编号。macOS 上有个隐藏路径ghost/uniface 和 fp16 模型会自动改走 CoreML 的 MLProgram 格式face_swapper/core.py 第 505~519 行。输出编码。--output-video-preset默认veryfast--output-video-quality默认 80facefusion/program.py 第 195~196 行。preset 只影响编码器速度档位quality 是 0~100 的质量分——草稿轮veryfast不动交付轮把 quality 抬到 90 左右、preset 换慢档位重跑一次即可。--output-video-scale支持 0.25~8.0 倍缩放facefusion/choices.py 第 177 行先按 0.5 出小样确认效果再全尺寸跑是省时间的常规操作。批量与内存。多组素材别写 shell 循环用batch-run的三个 pattern或作业系统排队。长视频显存吃紧时--video-memory-strategy默认就是strictpost_process()face_swapper/core.py 第 587~598 行在 strict 下连公共模块检测器、关键点、遮挡的推理池一起清空代价是下一任务要重新加载模型。moderate只卸 swapper 本体适合“同一批素材连续跑多步”的场景。排错五个报错文案对应的五个检查pre_process()face_swapper/core.py 第 559~584 行在跑之前做四次校验报错文案都能直接对号入座“choose image source”-s没传图片或路径解析不到文件。run要求-s至少一张图。“no source face detected”源图里没检出正好一张脸。用get_one_face强校验第 568 行图里 0 张或多张都失败——多张脸就裁出单张或换--face-detector-score从 0.5 降到 0.4 再试。“choose image or video target”-t指向了音频或不存在的路径。“specify image or video output”-o所在目录不存在。“match target and output extension”目标视频是 mp4输出却写了 .jpg——两者扩展名必须一致。多人群视频里替换错了人问题出在选脸而非换脸--face-selector-mode默认referencefacefusion/program.py 第 123 行配合--reference-frame-number默认第 0 帧和--reference-face-position默认第 0 号脸锁定参考帧里的某张脸后续帧按--reference-face-distance默认 0.3的距离跟随。换错人时先改--reference-frame-number指到一个目标人物正对镜头的帧。检测不到的脸分两种角度问题加--face-detector-angles默认只处理 0° 正脸可选 90/180/270facefusion/choices.py 第 163 行小脸问题则是--face-detector-size——注意yolo_face和yunet只支持640x640想用160x160~512x512的更多尺寸档要换scrfd或retinaface第 9~14 行。--face-tracker-score默认 0.0范围 0~0.5控制跨帧跟踪的相似度门槛调高可减少换脸在帧间“跳脸”。要点清单默认组合hyperswap_1a_256 256x256 weight 0.5直接出结果要细节把--face-swapper-pixel-boost提到 512 或 1024耗时按(boost/原生)²增长。face_swapper_weight是源/目标身份嵌入的混合比0.35 ↔ −0.35不是强度旋钮结果偏源照片就往 0.4 以下调反之往 0.6 以上调。速度三件套--execution-providers tensorrt cuda引擎缓存在.caches/二次运行起飞、交付轮才动--output-video-quality、长视频保持--video-memory-strategy strict。多人群先修--reference-frame-number和--reference-face-position再谈其他参数检测不到脸先查--face-detector-angles和--face-detector-size。模型许可证写在face_swapper/core.py的__metadata__里ghost_*为 Apache-2.0inswapper_128/blendswap_256为 Non-Commercial商用前逐一核对。【免费下载链接】facefusionIndustry leading face manipulation platform项目地址: https://gitcode.com/GitHub_Trending/fa/facefusion创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考