Detectron2 实战手册:OOTDiffusion 虚拟试穿中的人体实例分割与解析基座
Detectron2 实战手册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 仓库中随附的 Detectron2 官方 README位于 detectron2/README.md为主线系统讲解 Facebook AI Research 这一基于 PyTorch 的模块化目标检测框架的核心能力、安装步骤、快速上手与 Model Zoo 使用方式并结合 mhp_extension 目录下的源码与脚本说明它在 OOTDiffusion 人体解析Human Parsing流水线中承担的角色。读完本文你将掌握 Detectron2 的安装排查技巧、推理与训练命令的完整用法以及如何利用它的实例分割产物为虚拟试穿生成高质量的人体裁剪与掩码。一、Detectron2 是什么从通用检测框架到人体解析基座Detectron2 是 Facebook AI ResearchFAIR推出的下一代目标检测软件系统实现了当前主流的 SOTA 目标检测算法。它并非在旧框架上打补丁而是对前一代 Detectron 的从零重写ground-up rewrite其设计思想源自 maskrcnn-benchmark。这一背景决定了它与 OOTDiffusion 中人体解析模块的天然契合虚拟试穿需要先看准图像中的每一个人才能逐人裁剪、分割出衣物区域。该 README 明确列出的核心特性包括基于 PyTorch 驱动整个框架构建在 PyTorch 深度学习框架之上与 OOTDiffusion 基于 PyTorch 的扩散模型推理环境天然兼容功能覆盖面广除标准的目标检测/实例分割外还支持全景分割Panoptic Segmentation、DensePose、Cascade R-CNN、旋转边界框Rotated Bounding Boxes等可当作库被上层项目扩展框架本身可作为一个库支撑 projects/ 目录下的各类研究项目本仓库即包含 DensePose、PointRend、TensorMask、TridentNet 等官方项目OOTDiffusion 的人体解析模块正是这种在 Detectron2 之上构建专用流水线的典型实践训练效率显著提升相比旧版框架在相同硬件条件下的训练速度更快官方在文档的 benchmarks 页面给出了具体数据。从 OOTDiffusion 的角度看detectron2 目录被托管在 mhp_extension 之下与make_crop_and_mask_w_mask_nms.py、logits_fusion.py、coco_style_annotation_creator/等脚本共同构成完整的人体解析扩展模块服务于试穿前的预处理阶段。二、环境要求与安装官方 INSTALL.md 给出了从依赖到编译的完整说明其中也包含官方 Colab Notebook 和 docker/ 目录下的 Dockerfile 两种更省心的安装途径。2.1 依赖清单安装 Detectron2 前需要满足以下基础依赖依赖版本/说明操作系统Linux 或 macOSPython ≥ 3.6PyTorch≥ 1.4torchvision版本必须与所安装的 PyTorch 匹配建议直接在 pytorch.org 一并安装避免版本错位OpenCV可选demo 与可视化功能需要pycocotools通过pip install cython; pip install -U githttps://github.com/cocodataset/cocoapi.git#subdirectoryPythonAPI安装2.2 从源码编译安装编译要求 gcc 与 g ≥ 5并推荐使用 ninja 加速构建。三种方式任选其一# 方式一直接从 GitHub 安装 python -m pip install githttps://github.com/facebookresearch/detectron2.git # 无写权限时加 --user # 方式二克隆到本地后以可编辑模式安装 git clone https://github.com/facebookresearch/detectron2.git python -m pip install -e detectron2 # 方式三macOS 下显式指定 clang # CCclang CXXclang python -m pip install -e .需要重新编译本地源码构建的 detectron2 时例如重装 PyTorch 之后应先清理旧的编译产物再重建rm -rf build/ **/*.so。2.3 安装预编译版本仅限 Linux# CUDA 10.1 示例 python -m pip install detectron2 -f https://dl.fbaipublicfiles.com/detectron2/wheels/cu101/index.html其中cu101可替换为cu100、cu92或cpu。需要注意两点限制预编译包必须配合特定版本的官方 PyTorch release使用与自行编译的非官方 PyTorch 或版本不匹配的 PyTorch 不兼容预编译包相对 detectron2 的 master 分支可能滞后若与基于 master 构建的研究项目如 projects/ 下的项目配合使用时出现不兼容应改用源码编译。2.4 常见安装问题与排查INSTALL.md 对高频安装故障给出了针对性解法实践中可按症状对号入座运行时报 undefined torch/aten/caffe2 符号或立即段错误多为 detectron2 或 torchvision 与当前 PyTorch 版本编译不一致。预编译组件必须与对应官方 release 配套源码编译的组件则需清理build/、**/*.so后重建无法解决时用gdb -ex r -ex bt -ex quit --args python -m detectron2.utils.collect_env收集环境信息提交 issue未定义的 C 符号如 GLIBCXX通常是用较新编译器编译、却在旧 C 运行时下运行常见于旧版 anaconda。可尝试conda update libgcc后重建根本解法是保证合适的 C 运行时例如LD_PRELOAD/path/to/libstdc.soNot compiled with GPU support编译时未检测到 CUDA。先用python -c import torch; from torch.utils.cpp_extension import CUDA_HOME; print(torch.cuda.is_available(), CUDA_HOME)确认输出正常多数模型在无 GPU 时仍可推理不可训练CPU 推理只需在配置中设置MODEL.DEVICEcpuinvalid device function / no kernel image is available for execution两种可能——编译与运行时的 CUDA 版本不一致用python -m detectron2.utils.collect_env核对 Detectron2 CUDA Compiler、CUDA_HOME、PyTorch built with - CUDA 三者是否同版本或 GPU 架构算力不匹配。编译时可用TORCH_CUDA_ARCH_LIST覆盖目标架构例如export TORCH_CUDA_ARCH_LIST6.0,7.0可同时兼容 P100 与 V100cannot import name _C未按上述流程完成编译安装且不要在 detectron2 源码根目录下直接运行代码避免误导入源码目录而非已安装的包ONNX 转换在 TraceWarning 后段错误ONNX 包由过旧编译器编译所致应使用与 PyTorch 接近的编译器版本从源码重建 ONNX。三、快速开始推理、训练与 API 集成官方 GETTING_STARTED.md 聚焦于内置命令行工具的用法是进入实战最快的路径。3.1 用预训练模型跑推理演示model zoo 中挑选一个模型及其配置文件例如mask_rcnn_R_50_FPN_3x.yaml随后使用 demo/demo.py 运行cd demo/ python demo.py --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml \ --input input1.jpg input2.jpg \ [--other-options] --opts MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl由于配置文件本身是为训练准备的推理时必须通过MODEL.WEIGHTS指向 model zoo 中的权重。常用命令行选项包括--webcam替换--input 文件列表改为读取摄像头实时画面--video-input video.mp4替换--input改为处理视频--opts MODEL.DEVICE cpu强制 CPU 推理--output把结果保存到目录图片或文件摄像头/视频。更多参数细节可通过demo.py -h查看。3.2 命令行训练与评估训练脚本为 tools/train_net.py及其变体tools/plain_train_net.py可训练 detectron2 提供的全部配置。训练前需按数据集说明准备好对应数据然后执行cd tools/ ./train_net.py --num-gpus 8 \ --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml官方配置按 8 GPU 训练设计单卡训练需要相应调整超参例如./train_net.py \ --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml \ --num-gpus 1 SOLVER.IMS_PER_BATCH 2 SOLVER.BASE_LR 0.0025评估已有检查点的性能则使用--eval-only./train_net.py \ --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml \ --eval-only MODEL.WEIGHTS /path/to/checkpoint_file大多数模型的CPU 训练不被支持更多选项参见./train_net.py -h。3.3 把 Detectron2 当作 Python API 使用除了命令行工具Detectron2 可完全以库的形式嵌入你的代码实现两件事用已有模型跑推理、在自定义数据集上训练内置模型官方 Colab Notebook 提供了逐步示例。这正是 OOTDiffusion 的做法——不直接调用demo.py而是把检测/分割能力封装进 preprocess/humanparsing 的自有 Python 模块中详见第五节。四、Model Zoo 与基线MODEL_ZOO.md 收录了 2019 年 9–10 月间在 8× NVIDIA V100NVLink服务器、PyTorch 1.3、CUDA 9.2 环境下训练的一大批基线模型可通过detectron2.model_zooAPI 在代码中直接访问。读表要点Name 列即配置文件链接用tools/train_net.py配合该配置在 8 GPU 上训练即可复现对应模型训练/推理速度口径训练速度为全程平均值推理速度由tools/train_net.py --eval-only或inference_on_dataset()以 batch size 1 测得实际生产部署通常更快模型 id 便于索引文件名包含 md5 前缀可用于校验下载文件完整性COCO 模型的公共设置统一在train2017上训练、val2017上评估且默认训练增强包含尺度抖动与水平翻转与旧 Detectron 的标准设置不可直接比较如需公平对比参考 configs/Detectron1-Comparisons 与 benchmarks 文档三种骨干组合FPN精度/速度均衡最佳、C4Faster R-CNN 论文原始基线、DC5膨胀卷积Deformable ConvNet 论文所用训练计划多数模型采用 3x 计划约 37 个 COCO epoch也提供 1x 计划约 12 epoch的 ResNet-50 模型用于快速研究迭代另提供ImageNet-1k 预训练骨干R-50/R-101/X-101-32x8d 等 pkl 格式且格式与旧 Detectron 不同未将 BatchNorm 融合进 affine 层。五、在 OOTDiffusion 人体解析流水线中的落地Detectron2 在 OOTDiffusion 中的角色是人体实例级检测与分割的基座。从 mhp_extension 的源码结构可以清晰还原出这条基于 Detectron2 的解析流水线。5.1 用检测结果生成人体裁剪与掩码make_crop_and_mask_w_mask_nms.py 直接消费 Detectron2 训练出的实例预测结果。其参数--det_res的默认值.../inference_TTA/instances_predictions.pth正是 Detectron2 推理带 TTA的标准产物格式。该脚本对每张图执行按置信度阈值--conf_thres默认 0.5筛选检测实例用 pycocotools 的mask_util.decode解码掩码并按重叠阈值--overlap_threshold默认 0.5做实例间的 NMS 去重得到 panoptic 风格的人体实例图*_mask.npy按扩展比例--exp_ratio默认 1.2对每个人体 bbox 外扩后裁剪出*_msrcnn.jpg局部图把 bbox、分数、裁剪名等信息写入crop.json供下游解析模型逐人处理。这正是 logits_fusion.py 中mask_nms函数注释所描述的Panoptic Segmentation 中使用的类 NMS 流程先做人实例分割再在裁剪块上做局部人体解析最后融合回原图。5.2 把人体解析数据转成 COCO 风格标注要在 Detectron2 上微调人的检测/分割模型需要 COCO 格式的标注。coco_style_annotation_creator/human_to_coco.py 负责把 CIHP或 MHPv2、VIP数据集中的Human_ids掩码转换为 COCO 风格 JSON对每个实例掩码调用pycococreatortools.create_annotation_info生成segmentation_id/image_id递增的 annotation并分别输出{split}_train.json、{split}_trainval.json与{split}_val.json。scripts/make_coco_style_annotation.sh 给出了可直接套用的转换命令模板。与之配套configs/Misc/parsing_finetune_cihp.yaml 与 configs/Misc/parsing_inference.yaml 展示了以 Detectron2 配置体系驱动 CIHP 人体解析微调与推理的方式后者包含WEIGHTS与DATASETS字段属于在通用检测框架上定制领域模型的直接证据。5.3 全局与局部解析结果的 logits 融合logits_fusion.py 完成最终融合加载全局模型输出.npy与基于裁剪块bbox_typemsrcnn的局部模型输出通过patch2img_output把逐人 patch 输出拼回原图坐标再与全局输出相加得到融合 logits随后get_instance把类别图与人体实例掩码结合生成实例级解析refine/extend用 BFS 把实例标签向外扩展填充空隙最后输出 global/instance/tag 三类带调色板的索引 PNG。这一全局局部双分支设计保证了多人场景下每个个体的解析质量。5.4 推理阶段的 ONNX 化部署值得注意的是OOTDiffusion 实际运行时的预处理并未直接调用 Detectron2 的 PyTorch 模型而是走 ONNX 推理路径parsing_api.py 中的onnx_inference用 ONNX Runtime 分别加载parsing_atr.onnx与parsing_lip.onnx模型权重放置于 checkpoints/humanparsing/输出 ATR 与 LIP 两套解析结果并做洞填充、手臂掩码、领口解析neck mask类别 18等后处理run_parsing.py 的Parsing类进一步封装了会话配置与调用接口。可以推断Detectron2 在 OOTDiffusion 中承担的是离线模型训练与数据准备的角色其产物实例分割能力与解析模型通过 ONNX 转换后服务于试穿推理的在线预处理流程。六、引用方式若在研究中使用了 Detectron2 或引用了 Model Zoo 中的基线结果README 给出了官方推荐 BibTeX 条目misc{wu2019detectron2, author {Yuxin Wu and Alexander Kirillov and Francisco Massa and Wan-Yen Lo and Ross Girshick}, title {Detectron2}, howpublished {\url{https://github.com/facebookresearch/detectron2}}, year {2019} }同时Detectron2 以Apache 2.0 许可证发布见 LICENSEOOTDiffusion 仓库将其完整托管于 mhp_extension/detectron2 目录连同配套的解析脚本一起为虚拟试穿研究提供了可复现、可扩展的预处理基座。【免费下载链接】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),仅供参考