在本地跑通OOTDiffusion虚拟试衣:从下权重到出图的路径
【免费下载链接】OOTDiffusion[AAAI 2025] Official implementation of "OOTDiffusion: Outfitting Fusion based Latent Diffusion for Controllable Virtual Try-on"项目地址: https://gitcode.com/GitHub_Trending/oo/OOTDiffusion
当你需要给客户看一件衣服上身后的效果,找模特拍摄是最贵的方案。OOTDiffusion 虚拟试衣能把服装平铺图和人像照片组合成试穿效果图,官方仓库同时给出了推理代码和示例图片。这篇文章走一遍从环境到出图的本地流程。
一句话原理
核心思路是给一个潜在扩散模型(在低维隐空间里做去噪、再生成图像的模型,比直接在像素上生成更省算力)两条指引:一条是服装图经 CLIP(图文多模态模型)编码出的特征向量,告诉它穿什么;另一条是用姿态检测和人像解析(对人体做逐像素的部件分类)切出来的遮罩区域,告诉它往哪穿。只重绘遮罩内的区域,遮罩外保留原图。
⚙️ 动手前准备
- 硬件:显存 10GB 以上的 GPU,推理全程 fp16;官方只在 Linux(Ubuntu 22.04)上验证过
- 环境:Python 3.10 加 PyTorch 2.0.1,其余依赖按 requirements.txt 安装
- 权重:下载 ootd、humanparsing、openpose、clip-vit-large-patch14 四个模型包放进 checkpoints/,其中 ootd 里含 ootd_hd(半身)与 ootd_dc(全身)两套权重
⚙️ 核心操作:从克隆仓库到出第一张图
1. 克隆仓库并搭环境
git clone https://gitcode.com/GitHub_Trending/oo/OOTDiffusion cd OOTDiffusion conda create -n ootd python=3.10 -y && conda activate ootd pip install torch==2.0.1 torchvision==0.15.2 && pip install -r requirements.txtcheckpoints 目录是最容易出错的地方:ootd 包里含 vae、tokenizer 和两套权重,每套权重下都有 unet_garm、unet_vton、vae 三个子目录,其余两个模型包是预处理用的人体解析和姿态估计。整包原样放置,不要拆散。示例图片已随仓库放在 run/examples/ 下,可直接试跑。
2. 跑半身款上衣试穿
cd OOTDiffusion/run python run_ootd.py --model_path examples/model/model_1.png --cloth_path examples/garment/00055_00.jpg --scale 2.0 --sample 4入口脚本很薄,实际链路是三步:先用 OpenPose 关键点加人像解析生成逐像素遮罩,决定原图哪些区域要被重绘;再把服装图编码成 CLIP 特征向量;最后由 unet_garm 和 unet_vton 两个 UNet 依次在隐空间去噪,VAE 解码回 768x1024 的成图。
参数方面,--scale 是图像引导强度,越大越贴近服装图;--sample 是每次生成的张数;--step 是去噪步数,默认 20。输入图内部会强制缩放到 768x1024,无需自己预处理。结果写到 run/images_output/,中间遮罩也存为同目录的 mask.jpg,可以核对重绘区域是否正好覆盖服装位置。
3. 切到全身模型
半身模型只支持上衣,试穿下装或连衣裙要换成 dc 模型,且 category 必须和服装配对:0 上衣、1 下装、2 连衣裙。
python run_ootd.py --model_path examples/model/model_1.png --cloth_path examples/garment/00055_00.jpg --model_type dc --category 1📌 避坑实录
第一次跑的时候我报"找不到 vae 子文件夹"。原因是我把权重平铺在 checkpoints 下,而代码读的是 ootd_hd/checkpoint-36000 这个路径,unet_garm、unet_vton、vae 必须都在它下面的同名子目录里。正确做法就是整包原样放,别自己拆。
还有一次直接撞上 model_type 'hd' requires category == 0 的报错,想用半身模型试穿下装。半身模型只负责上衣,下装和连衣裙得换成 --model_type dc 并带上 --category。
这里还有个容易忽略的坑:模特图里人的姿态太偏时结果会翻车。遮罩依赖 OpenPose 关键点加人像解析,人转过去、被遮挡或者手臂不可见,手臂区域切得不准,出图边缘会多出一层"鬼影"。输入图会被强制缩放到 768x1024,原图长宽比偏离 3:4 太多时人体会变形,选图时尽量贴近这个比例。
效果与边界
单人姿态清晰、服装图为干净平铺的场景下表现好:半身模型的上衣(衬衫、外套)最稳,全身模型覆盖下装与连衣裙。量级参考:24GB 显存的消费级显卡上,768x1024、20 步、4 张图单次运行约一分钟,显存占用在 10GB 量级。
不太适用的场景:多人同框、复杂遮挡、带密集文字或 logo 的服装(细小文字容易生成乱码),以及棚拍时装大片式的换装。结果是生成式的,不固定种子时每次细节略有差异,加 --seed 即可复现。
延伸方向
- 想用浏览器操作,run/gradio_ootd.py 里带了现成的 web 界面
- 想调遮罩切分规则,比如手臂区域怎么扩,看 run/utils_ootd.py 里的 get_mask_location 函数
- 想深入去噪主循环与双 UNet 结构,代码在 ootd/pipelines_ootd/ 目录下
【免费下载链接】OOTDiffusion[AAAI 2025] Official implementation of "OOTDiffusion: Outfitting Fusion based Latent Diffusion for Controllable Virtual Try-on"项目地址: https://gitcode.com/GitHub_Trending/oo/OOTDiffusion
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考