ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

IDM-VTON 人像解析栈中的 detectron2 基准评测:Mask R-CNN 训练吞吐量对比与复现指南

IDM-VTON 人像解析栈中的 detectron2 基准评测:Mask R-CNN 训练吞吐量对比与复现指南 计算机视觉深度学习媒体生成【免费下载链接】IDM-VTON[ECCV2024] IDM-VTON : Improving Diffusion Models for Authentic Virtual Try-on in the Wild项目地址https://gitcode.com/GitHub_Trending/id/IDM-VTON点击查看免费下载本文面向在 IDM-VTON 中从事人体解析human parsing预处理与模型微调工作的开发者系统解读仓库内 vendored detectron2 自带的训练吞吐量基准文档位于 benchmarks.md。文章完整继承原文档的评测设置、结果表与全部复现命令并结合仓库内真实的配置文件与训练入口源码说明如何在 8 卡环境下复现该基准、如何理解吞吐量指标口径以及如何将同一套训练管线用于 CIHP 人体解析模型的微调。读完后你将掌握 Mask R-CNN 在主流开源框架间的训练速度横向对比结论、每套实现的精确复现步骤以及本仓库中相关训练脚本和配置的用法。一、评测背景这份基准在 IDM-VTON 中意味着什么detectron2 是 Facebook AI Research 发布的、基于 PyTorch 的模块化目标检测框架。本仓库 preprocess/humanparsing/mhp_extension/detectron2 将完整版 detectron2 树内置作为人体解析human parsing预处理链路的基础设施解析模型的微调与推理配置位于 configs/Misc/parsing_finetune_cihp.yaml 与 configs/Misc/parsing_inference.yaml二者均基于cascade_mask_rcnn_X_152_32x8d_FPN_IN5k_gn_dconv骨架在 CIHP 数据集上训练DensePose 模块同样构建在 detectron2 之上见 gradio_demo/densepose。因此detectron2 的训练效率直接决定了人体解析模型微调例如在 CIHP 上跑 20 万迭代的parsing_finetune_cihp.yaml需要多少卡时。而 benchmarks.md 正是 detectron2 官方用来回答训练到底有多快的基准文档它在一套固定硬件与软件环境下对比了 detectron2 与其他主流开源 Mask R-CNN 实现的训练吞吐量并给出了每个实现可逐字执行的复现命令。二、评测设置硬件、软件与评测口径原文档对评测环境给出了非常明确的约束这保证了横向对比的可复现性。硬件环境8 张 NVIDIA V100NVLink 互联。软件环境Python 3.7CUDA 10.1cuDNN 7.6.5PyTorch 1.5TensorFlow 1.15.0rc2Keras 2.2.5MxNet 1.6.0b20190820。可以看到这份基准覆盖了 PyTorch、TensorFlow、MxNet、Caffe2 四大生态的代表性实现各实现均在其自身框架的自然版本下运行。模型与超参数评测模型为端到端 R-50-FPN Mask R-CNN超参数与 Detectron 的 1x 基线配置保持一致并且不启用尺度增强scale augmentation。这一点在本仓库中可以直接验证基准所用的配置正是 configs/Detectron1-Comparisons/mask_rcnn_R_50_FPN_noaug_1x.yaml其关键设置包括_BASE_: ../Base-RCNN-FPN.yaml MODEL: WEIGHTS: detectron2://ImageNetPretrained/MSRA/R-50.pkl MASK_ON: True RESNETS: DEPTH: 50 # Detectron1 uses smooth L1 loss with some magic beta values. # The defaults are changed to L1 loss in Detectron2. RPN: SMOOTH_L1_BETA: 0.1111 ROI_BOX_HEAD: SMOOTH_L1_BETA: 1.0 POOLER_SAMPLING_RATIO: 2 POOLER_TYPE: ROIAlign ROI_MASK_HEAD: POOLER_SAMPLING_RATIO: 2 POOLER_TYPE: ROIAlign INPUT: # no scale augmentation MIN_SIZE_TRAIN: (800, )这份配置继承自 configs/Base-RCNN-FPN.yaml后者定义了 R-50-FPN 的默认结构OUT_FEATURES: [res2, res3, res4, res5]、RPN 锚点、ROI_BOX_HEAD的FastRCNNConvFCHead、ROI_MASK_HEAD的MaskRCNNConvUpsampleHead以及 1x 训练计划SOLVER.IMS_PER_BATCH: 16、BASE_LR: 0.02、STEPS: (60000, 80000)、MAX_ITER: 90000。noaug 配置覆盖了三处关键差异把RPN.SMOOTH_L1_BETA改回 Detectron1 的 0.1111、把ROI_BOX_HEAD.SMOOTH_L1_BETA设为 1.0并将MIN_SIZE_TRAIN固定为(800,)从而关闭多尺度训练增强。结合默认IMS_PER_BATCH: 16与 8 卡环境可以推断每卡批大小约为 2 张图16/8这也是后续吞吐量换算的合理参考。指标口径关键度量方式取第 100500 次迭代的平均吞吐量用于跳过 GPU 预热warmup阶段。重要限制对 R-CNN 类模型而言训练过程中的吞吐量本身会随训练推进而变化——因为前向计算依赖模型当前的预测结果例如 RPN 产生的 proposal 数量与分布会随训练而变化。因此该指标与 Model Zoo 中标注的 train speed整轮训练的平均速度不具有直接可比性。理解这一口径是正确解读下面对比结果的前提它衡量的是训练中段的稳态速度而非端到端平均速度。三、主结果七大实现的吞吐量对比原文档给出的核心结果如下表所示数值单位均为 img/s越大越快实现底层框架吞吐量img/sdetectron2PyTorch62mmdetectionPyTorch53maskrcnn-benchmarkPyTorch53tensorpackTensorFlow50SimpleDetMxNet39DetectronCaffe219matterport/Mask_RCNNTensorFlow14从结果看在同一硬件与近似的超参数口径下detectron2PyTorch 重写版比上一代 Caffe2 实现的 Detectron 快约 3.3 倍62 vs 19也比同生态的 mmdetection、maskrcnn-benchmark 快约 17%。需要强调的是这些数字是在文档给定的特定软硬件版本组合下测得的换用不同 CUDA、PyTorch、TensorFlow 版本后绝对数值可能发生变化应将其视为同一环境下的相对排名而非普适绝对性能。四、各实现的复现步骤详解原文档为每一套实现都给出了可执行的复现命令以下逐一整理并补充必要的环境说明。1. detectron2PyTorch使用 release v0.1.2 版本直接运行python tools/train_net.py --config-file configs/Detectron1-Comparisons/mask_rcnn_R_50_FPN_noaug_1x.yaml --num-gpus 8在仓库中对应入口为 tools/train_net.py配置为 configs/Detectron1-Comparisons/mask_rcnn_R_50_FPN_noaug_1x.yaml。该脚本通过default_argument_parser解析命令行参数经launch按--num-gpus分布式拉起训练setup()内部完成get_cfg()→merge_from_file(args.config_file)→merge_from_list(args.opts)→cfg.freeze()的配置组装流程随后交给继承自DefaultTrainer的Trainer执行。文档还注明该版本的速度实测快于其 Model Zoo 标注值这与软件版本差异有关。2. mmdetectionPyTorch使用 commitb0d845f运行./tools/dist_train.sh configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_1x_coco.py 8mmdetection 使用 caffe 风格预训练权重的 R-50-FPN Mask R-CNN 配置通过其分布式训练脚本在 8 卡上启动。3. maskrcnn-benchmarkPyTorch使用 commit0ce8f6f。由于该提交版本较老需先执行以下替换使其兼容 PyTorch 1.5sed -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文档特别说明该实现实测速度高于其 Model Zoo 标注值原因同样是软件版本差异。4. tensorpackTensorFlow使用 commitcaafda。由于 tensorpack 依赖 cuDNN autotune 的数值结果一致性需要先关闭 autotuneexport TF_CUDNN_USE_AUTOTUNE0再以 Horovod 多机多卡方式运行mpirun -np 8 ./train.py --config DATA.BASEDIR/data/coco TRAINERhorovod BACKBONE.STRIDE_1X1True TRAIN.STEPS_PER_EPOCH50 --load ImageNet-R50-AlignPadding.npz该命令通过TRAIN.STEPS_PER_EPOCH50对齐了每 epoch 的迭代数并使用 ImageNet 预训练的 R-50 AlignPadding 权重。5. SimpleDetMxNet使用 commit9187a1运行python detection_train.py --config config/mask_r50v1_fpn_1x.py6. DetectronCaffe2运行python tools/train_net.py --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml文档明确指出Detectron 的许多算子运行在 CPU 上因此性能受限——这也是其吞吐量19 img/s显著低于 PyTorch 系实现的重要原因之一。7. matterport/Mask_RCNNTensorFlow使用 commit3deaec。该实现的训练超参数与 Detectron 标准存在多处差异需先应用下面的 diff 以对齐超参数同时关闭 cuDNN autotuneexport TF_CUDNN_USE_AUTOTUNE0应用下述 diff 后运行python coco.py train --dataset/data/coco/ --modelimagenetdiff 内容如下将mrcnn/model.py中的验证流程注释掉、为parallel_model.py补充 Keras 2.x 需要的super().__init__()、在 COCO 配置中开启 8 卡并固定 backbone/每 epoch 步数/每图 ROI 数并将三段式训练折叠为layers3的单阶段训练diff --git i/mrcnn/model.py w/mrcnn/model.py index 62cb2b0..61d7779 100644 --- i/mrcnn/model.py w/mrcnn/model.py -2367,8 2367,8 class MaskRCNN(): epochsepochs, steps_per_epochself.config.STEPS_PER_EPOCH, callbackscallbacks, - validation_dataval_generator, - validation_stepsself.config.VALIDATION_STEPS, #validation_dataval_generator, #validation_stepsself.config.VALIDATION_STEPS, max_queue_size100, workersworkers, use_multiprocessingTrue, diff --git i/mrcnn/parallel_model.py w/mrcnn/parallel_model.py index d2bf53b..060172a 100644 --- i/mrcnn/parallel_model.py w/mrcnn/parallel_model.py -32,6 32,7 class ParallelModel(KM.Model): keras_model: The Keras model to parallelize gpu_count: Number of GPUs. Must be 1 super().__init__() self.inner_model keras_model self.gpu_count gpu_count merged_outputs self.make_parallel() diff --git i/samples/coco/coco.py w/samples/coco/coco.py index 5d172b5..239ed75 100644 --- i/samples/coco/coco.py w/samples/coco/coco.py -81,7 81,10 class CocoConfig(Config): IMAGES_PER_GPU 2 # Uncomment to train on 8 GPUs (default is 1) - # GPU_COUNT 8 GPU_COUNT 8 BACKBONE resnet50 STEPS_PER_EPOCH 50 TRAIN_ROIS_PER_IMAGE 512 # Number of classes (including background) NUM_CLASSES 1 80 # COCO has 80 classes -496,29 499,10 if __name__ __main__: # *** This training schedule is an example. Update to your needs *** # Training - Stage 1 - print(Training network heads) model.train(dataset_train, dataset_val, learning_rateconfig.LEARNING_RATE, epochs40, - layersheads, - augmentationaugmentation) - - # Training - Stage 2 - # Finetune layers from ResNet stage 4 and up - print(Fine tune Resnet stage 4 and up) - model.train(dataset_train, dataset_val, - learning_rateconfig.LEARNING_RATE, - epochs120, - layers4, - augmentationaugmentation) - - # Training - Stage 3 - # Fine tune all layers - print(Fine tune all layers) - model.train(dataset_train, dataset_val, - learning_rateconfig.LEARNING_RATE / 10, - epochs160, - layersall, layers3, augmentationaugmentation) elif args.command evaluate:文档同时提醒该实现内部很多细节与 Detectron 的标准做法并不一致因此其速度14 img/s代表的是该实现自身在近似超参数下的水平不能直接解读为框架能力的绝对对比。五、基准配置背后的源码级细节为什么 noaug 配置要回退到 smooth L1在 configs/Detectron1-Comparisons/mask_rcnn_R_50_FPN_noaug_1x.yaml 的注释中写得很清楚Detectron1 使用带特定 magic beta 值的 smooth L1 损失而 detectron2 的默认实现已改为 L1 损失。因此为了让 R-50-FPN Mask R-CNN 与 Detectron1 基线在数值口径上对齐基准显式设置了RPN.SMOOTH_L1_BETA: 0.1111与ROI_BOX_HEAD.SMOOTH_L1_BETA: 1.0。关于这类遗留差异仓库的 docs/notes/compatibility.md 给出了更系统的说明可以交叉印证基准的设计意图detectron2 与 Detectron 的模型在推理上并不直接兼容框的宽高计算约定、RPN 锚点量化方式、类别标签顺序、ROIAlign 实现、mask 粘贴函数均有差异训练侧修复了 Detectron 的一个已知问题RPN.POST_NMS_TOPK_TRAIN在 detectron2 中按单图计数而 Detectron1 按整批计数基准配置继承的Base-RCNN-FPN.yaml中POST_NMS_TOPK_TRAIN: 1000即为此语义边界框回归默认损失由 smooth L1 改为 L1。这些细节说明一份公平的横向基准不仅要跑通脚本还要把超参数口径对齐到同一标准——这正是 noaug 配置存在的意义。train_net.py基准与日常训练共用的入口所有基于 detectron2 的训练/评测都走 tools/train_net.py。其核心流程default_argument_parser解析--config-file、--num-gpus、--eval-only、--resume、--opts等参数launch(main, ...)根据 GPU 数量做分布式初始化main()中--eval-only时加载权重DetectionCheckpointer(...).resume_or_load并运行评测否则构造Trainer(cfg)调用trainer.resume_or_load(resumeargs.resume)后执行trainer.train()训练结束后若开启TEST.AUG.ENABLED会额外执行带测试时增强TTA的评测见test_with_TTA。也就是说第四节的基准命令与仓库中 CIHP 解析模型微调使用的训练入口完全相同只是配置文件与数据集的差异。仓库内的 configs/Misc/parsing_finetune_cihp.yaml 就是一个典型的实际用例基于 X-152-32x8d-IN5k 骨架、IMS_PER_BATCH: 16、MAX_ITER: 200000、BASE_LR: 0.02在CIHP_train上训练、在CIHP_val上验证。六、在 IDM-VTON 环境中上手复现基准与运行解析训练复现吞吐量基准在满足文档给定的软硬件前提下8 卡 V100、对应 CUDA/PyTorch 版本按第四节 detectron2 的命令即可python tools/train_net.py --config-file configs/Detectron1-Comparisons/mask_rcnn_R_50_FPN_noaug_1x.yaml --num-gpus 8若需调整批大小或学习率等超参数可通过--opts覆盖例如python tools/train_net.py --config-file configs/Detectron1-Comparisons/mask_rcnn_R_50_FPN_noaug_1x.yaml --num-gpus 8 --opts SOLVER.IMS_PER_BATCH 32 SOLVER.BASE_LR 0.04需要注意的是本仓库内使用的训练脚本逻辑与 detectron2 v0.1.2 同源见 tools/train_net.py但绝对吞吐量会随本机 CUDA/PyTorch 版本、GPU 型号与驱动而不同若需精确复现文档数值应尽量贴近文档给定的软件版本。用同一管线微调人体解析模型若你的目标是复现 IDM-VTON 的人体解析预处理可直接使用仓库自带配置微调python tools/train_net.py --config-file configs/Misc/parsing_finetune_cihp.yaml --num-gpus N推理参考 configs/Misc/parsing_inference.yaml该配置在测试时开启 TTATEST.AUG.ENABLED: True并设置NMS_THRESH_TEST: 0.95、SCORE_THRESH_TEST: 0.5解析模型训练完成后推理结果会经 parsing_api.py 中的onnx_inference等后处理孔洞填充、脖子区域融合、palette 上色产出最终分割图供下游虚拟试穿使用。指标解读要点优先关注相对排名而非绝对数值同一环境下 detectron2 明显快于其他 PyTorch 实现且大幅快于 Caffe2 时代 Detectron不要拿第 100500 次迭代的平均吞吐量与 Model Zoo 的整轮平均训练速度直接对比若自建基准建议统一各实现的IMS_PER_BATCH或单卡批大小、训练计划与增强策略避免把配置差异误读为框架差异。七、小结这份基准文档的价值在于它以严格受控的软硬件环境、统一的 R-50-FPN Mask R-CNN 模型与对齐的超参数给出了 7 个主流开源实现的可复现吞吐量对比并附带全套复现命令——尤其是 matterport/Mask_RCNN 的完整超参数对齐 diff。对于 IDM-VTON 这样的人体解析/虚拟试穿项目而言理解这份基准既有助于评估parsing_finetune_cihp.yaml这类微调任务的卡时成本也能让你在使用 tools/train_net.py 时更准确地设定批大小、迭代数与资源规划。后续如需深入了解 detectron2 与 Detectron1 的兼容性差异可继续阅读仓库内 docs/notes/compatibility.md。赞分享计算机视觉深度学习媒体生成【免费下载链接】IDM-VTON[ECCV2024] IDM-VTON : Improving Diffusion Models for Authentic Virtual Try-on in the Wild项目地址https://gitcode.com/GitHub_Trending/id/IDM-VTON点击查看免费下载相关推荐Detectron2 训练速度基准测试全解读Mask R-CNN 跨框架吞吐量对比、测试方法与复现指南Detectron2 训练速度基准测试全解读Mask R CNN 跨框架吞吐量对比、测试方法与复现指南 导读本文以 Detectron2 官方基准测试文档为人工智能计算机视觉深度学习机器学习OOTDiffusion 内嵌 detectron2 的 Mask R-CNN 训练性能基准解读设置、对比结果与全量复现命令OOTDiffusion 内嵌 detectron2 的 Mask R CNN 训练性能基准解读设置、对比结果与全量复现命令 本篇技术指南围绕 OOTDiff文档教程后端swagger-codegen 生成的 User 模型详解以 jersey2 Java 客户端 Petstore 为例swagger codegen 生成的 User 模型详解以 jersey2 Java 客户端 Petstore 为例 本文聚焦 swagger codege开发工具代码生成API设计上一篇awesome-gpt-image-2 GPT-Image2 信息图模板一次成型指南结构化提示词不靠运气下一篇gmaps热力图完全教程使用Python可视化地理数据分布创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表