
OOTDiffusion 内嵌 detectron2 的 Mask R-CNN 训练性能基准解读设置、对比结果与全量复现命令【免费下载链接】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 源码中 benchmarks.md 这一基准文档展开系统解读其 Mask R-CNN 训练吞吐量对比测试的硬件/软件设置、度量口径、七种实现的横向对比结果并逐一给出可复现的训练命令。读完本文你将掌握 detectron2 官方基准的完整实验条件与复现方法同时理解该基准数据在 OOTDiffusion 人体解析预处理human parsing场景下的实际意义以及吞吐量这一指标在 R-CNN 类模型训练中的特殊性。一、背景detectron2 在 OOTDiffusion 中的角色OOTDiffusion 是用于可控虚拟试穿Virtual Try-on的扩散模型实现其推理流水线包含人体解析human parsing、姿态估计openpose等预处理环节。人体解析阶段依赖 detectron2 源码用于从模特图中分割出服装、头发、皮肤等语义区域为后续的试穿生成提供指导信息。在仓库中可以观察到 detectron2 的实际落地配置parsing_finetune_cihp.yaml基于 cascade_mask_rcnn_X_152_32x8d_FPN 的 CIHP 数据集微调配置IMS_PER_BATCH: 16、MAX_ITER: 200000parsing_inference.yaml解析推理配置将类别数设为 1、NMS_THRESH_TEST: 0.95my_Base-RCNN-FPN.yamlR-50-FPN 结构的基线模板。而benchmarks.md正是这套依赖框架官方提供的训练性能基准理解它有助于评估人体解析模型在不同硬件/框架下的训练成本与扩展方式。二、基准测试设置Settings原文档对本次基准的测试环境给出了明确的约束这是解读一切对比结果的前提类别具体配置硬件8 张带 NVLink 的 NVIDIA V100软件Python 3.7、CUDA 10.1、cuDNN 7.6.5、PyTorch 1.5、TensorFlow 1.15.0rc2、Keras 2.2.5、MxNet 1.6.0b20190820模型端到端 R-50-FPN Mask R-CNN超参数与 Detectron 官方 12_2017_baselines 的 e2e_mask_rcnn_R-50-FPN_1x 基准配置一致该配置不包含尺度增强指标取第 100 至第 500 次迭代的平均吞吐量以跳过 GPU 预热warmup阶段几个关键约束需要特别留意统一模型口径所有实现都使用同一套 Detectron1 时代的超参数基准且不启用尺度增强。仓库中对应的无增强配置即 mask_rcnn_R_50_FPN_noaug_1x.yaml其INPUT.MIN_SIZE_TRAIN: (800, )与注释 no scale augmentation 直接印证了这一口径同时该配置还沿用了 Detectron1 的SMOOTH_L1_BETA等魔法值以保持超参一致。吞吐量的动态性对于 R-CNN 类模型训练中的吞吐量会随模型预测结果的变化而波动例如早期迭代中 RPN 产生的 proposal 数量与分布不同。因此文档明确提示该指标不能直接与 model zoo 中整段训练的平均速度做比较两者度量口径不同。预热跳过GPU 首次加载、cuDNN autotune、数据预取等都会拉低早期迭代的速度故只统计 100–500 次迭代区间的均值。三、主结果七种实现的训练吞吐量对比原文档以表格形式给出了 R-50-FPN Mask R-CNN 在 8×V100 下各实现的吞吐量单位img/s实现框架吞吐量img/sdetectron2PyTorch62mmdetectionPyTorch53maskrcnn-benchmarkPyTorch53tensorpackTensorFlow50SimpleDetMxNet39DetectronCaffe219matterport/Mask_RCNNTensorFlow14从结果可以观察到的几个要点detectron2 以 62 img/s 位列第一比同为 PyTorch 生态的 mmdetection 与 maskrcnn-benchmark 高出约 17%TensorFlow 系差距明显tensorpack 为 50 img/smatterport/Mask_RCNN 仅 14 img/s后者与 Detectron 标准实现存在较多细节差异详见下文老一代 Caffe2 实现 Detectron 仅为 19 img/s文档特别指出其大量算子运行在 CPU 上性能因此受限。需要强调的是这是一份特定版本、特定软硬件栈、特定模型超参下的横向快照不能外推为框架 A 永远快于框架 B的结论。各实现之间存在超参细节、算子实现、数据管线等多重变量且文档也注明部分实现测得的速率与它们各自 model zoo 中宣称的速度不一致例如 maskrcnn-benchmark 因软件版本不同而观察到了更快的速度。四、各实现的复现命令详解原文档为每个实现提供了精确到 commit 的复现步骤是本文最核心的可操作资产。以下逐一展开并补充命令作用说明。1. Detectron2v0.1.2 版本python tools/train_net.py --config-file configs/Detectron1-Comparisons/mask_rcnn_R_50_FPN_noaug_1x.yaml --num-gpus 8对应仓库内配置mask_rcnn_R_50_FPN_noaug_1x.yaml--num-gpus 8表示使用 8 卡分布式训练detectron2 默认采用 DDPDistributedDataParallel方式该配置文件通过_BASE_: ../Base-RCNN-FPN.yaml继承 R-50-FPN 结构并显式关闭尺度增强MIN_SIZE_TRAIN: (800, )。2. mmdetectioncommit b0d845f./tools/dist_train.sh configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_1x_coco.py 8dist_train.sh是 mmdetection 的多卡训练脚本第二个参数 8 为 GPU 数量配置采用 ResNet-50-Caffe 预训练骨干 FPN COCO 1x 训练计划。3. maskrcnn-benchmarkcommit 0ce8f6f由于该实现年代较早直接运行与 PyTorch 1.5 存在 API 兼容问题文档给出了适配命令sed -i s/torch.uint8/torch.bool/g **/*.py sed -i s/AT_CHECK/TORCH_CHECK/g **/*.cu然后运行多卡训练python -m torch.distributed.launch --nproc_per_node8 tools/train_net.py --config-file configs/e2e_mask_rcnn_R_50_FPN_1x.yaml第一条 sed 将torch.uint8替换为torch.boolPyTorch 1.5 中布尔张量类型的迁移第二条 sed 将旧式AT_CHECK宏替换为TORCH_CHECKC 扩展 API 更新文档注明实测速度高于该实现 model zoo 中公布的速度推测是软件版本差异所致。4. tensorpackcommit caafdaTensorFlowexport TF_CUDNN_USE_AUTOTUNE0 mpirun -np 8 ./train.py --config DATA.BASEDIR/data/coco TRAINERhorovod BACKBONE.STRIDE_1X1True TRAIN.STEPS_PER_EPOCH50 --load ImageNet-R50-AlignPadding.npzTF_CUDNN_USE_AUTOTUNE0关闭 cuDNN 自动调优以保证各迭代间算子选择稳定TRAINERhorovod表示通过 Horovod 进行多卡同步训练--load ImageNet-R50-AlignPadding.npz加载 ImageNet 预训练权重BACKBONE.STRIDE_1X1True是 tensorpack FasterRCNN 示例中为对齐 Detectron 行为设置的标志。5. SimpleDetcommit 9187a1MxNetpython detection_train.py --config config/mask_r50v1_fpn_1x.pySimpleDet 使用 MxNet 实现mask_r50v1_fpn_1x.py为其 R-50-FPN 1x 训练配置训练入口是独立的detection_train.py。6. DetectronCaffe2python tools/train_net.py --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml这是本次基准所对齐的超参来源12_2017_baselines 系列文档明确指出Detectron 的许多算子运行在 CPU 上因此性能受限19 img/s。7. matterport/Mask_RCNNcommit 3deaecTensorFlow/Keras该实现与 Detectron 标准存在较多细节差异文档提供了一组 diff 以对齐超参数统一 8 GPU、resnet50 骨干、每 epoch 50 步、每图 512 个训练 ROI、仅训练阶段 1 且只微调 3 层。应用 diff 后执行export TF_CUDNN_USE_AUTOTUNE0 python coco.py train --dataset/data/coco/ --modelimagenetdiff 的核心改动包括在ParallelModel的构造函数中补充super().__init__()Keras 2.2.5 兼容修复、将GPU_COUNT改为 8、关闭验证生成器以消除验证环节对训练吞吐量的干扰、把三段式训练计划合并为单段layers3训练。提示上面各实现均来自第三方开源项目运行前请按各自仓库要求安装对应框架版本如 TensorFlow 1.15、MxNet 1.6 等并准备 COCO 数据集路径以各命令中的/data/coco为准。五、源码级佐证detectron2 的训练循环与计时机制要理解 detectron2 为何能在该基准中领先可以从仓库内训练循环与指标统计的实现细节入手。1. 训练主循环detectron2/engine/train_loop.py 定义了TrainerBase与SimpleTrainer。核心循环为for self.iter in range(start_iter, max_iter): self.before_step() self.run_step() self.after_step()SimpleTrainer.run_step()train_loop.py 第 200-234 行使用time.perf_counter()精确计量取数据耗时data_time并将其与各项 loss 一并写入EventStoragestart time.perf_counter() data next(self._data_loader_iter) data_time time.perf_counter() - start loss_dict self.model(data) losses sum(loss_dict.values()) ... self.optimizer.zero_grad() losses.backward() self.optimizer.step()这意味着吞吐量/训练速度的统计在 detectron2 中天然就绪每次迭代的耗时被持续记录可供基准统计使用。2. 迭代耗时与 ETA 统计detectron2/utils/events.py 中通过storage.history(time).median(1000)取最近 1000 次迭代耗时的中位数来估算剩余时间eta_seconds进而给出 ETA。这与基准文档取 100–500 次迭代均值的做法同源都是用滑动窗口式的稳定统计来规避预热与偶发抖动的影响。3. 多卡扩展方式detectron2 的--num-gpus走launch()启动多进程 DDP 训练配合comm.gather汇总各 worker 的指标见 train_loop.py 第 256-268 行在主进程输出聚合后的 loss 与 data_time。8×V100 的基准正是这种 DDP 模式下测得的吞吐量。4. 与人体解析配置的衔接回到 OOTDiffusion 场景人体解析微调配置 parsing_finetune_cihp.yaml 使用 16 的IMS_PER_BATCH与 200k 迭代若在多卡环境复现可采用与基准一致的--num-gpus参数启动吞吐量估算逻辑同样适用于该训练任务可作为评估微调耗时的参照。六、结论与使用边界benchmarks.md提供了一份严谨、可复现的 Mask R-CNN 训练速度横向对比其价值与边界可总结为可复现性每个实现都给出了 commit 与完整命令配合本文第四节的参数解释可在对应软件栈上原样复现口径清晰统一模型、统一超参无尺度增强、跳过预热、取稳定区间均值使对比具有横向可比性适用前提结果为 2020 年前后软硬件版本下的快照且 R-CNN 类模型吞吐量随训练进程动态变化不应与 model zoo 中的全程平均速度混用在 OOTDiffusion 中的参考意义detectron2 作为人体解析预处理的底层框架其官方基准可用于预估解析模型微调如 parsing_finetune_cihp.yaml在多卡环境下的训练成本并为选取训练框架与硬件规模提供依据。如需进一步深入可继续阅读仓库内 GETTING_STARTED.md、MODEL_ZOO.md 与 training.md了解完整训练流程与模型仓库中的速度口径。【免费下载链接】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),仅供参考