Detectron2 测试指南:单元测试与端到端回归测试的完整运行方法
Detectron2 测试指南单元测试与端到端回归测试的完整运行方法【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2本文是 Detectron2 仓库中 tests/README.md 的深度展开版系统讲解如何运行单元测试、如何利用dev/下的端到端脚本与quick_schedules配置进行训练/推理回归验证并结合仓库源码说明测试的组织结构与底层支撑工具。读完本文你将掌握从「一条命令跑完单测」到「用预训练权重做精度回归、用微型配置验证训练可收敛」的完整测试方法论。快速开始运行全部单元测试仓库的单元测试基于 Python 标准库unittest编写运行方式非常直接。在原文档给出的命令基础上先进入项目根目录detectron2cd detectron2 python -m unittest discover -v -s ./tests各参数含义如下参数作用python -m unittest以模块方式启动unittest测试框架避免脚本路径污染discover自动递归发现tests/目录下所有符合命名规则的测试用例默认匹配test*.py-vverbose 模式逐条打印每个测试用例的名称与结果-s ./tests指定测试起始目录为tests/该命令会递归扫描 tests/ 下的全部子目录自动收集命名以test开头的模块并执行其中继承自unittest.TestCase的用例。-v会输出每个用例的通过/失败/跳过状态便于定位具体失败项。测试目录结构单测覆盖了哪些模块从仓库目录结构看单元测试按 Detectron2 的模块边界组织每个子系统都有对应的测试文件tests/config/配置系统测试YACS 配置、LazyConfig 实例化、_BASE_继承等tests/data/数据加载、COCO 解析、数据集注册、数据增强与采样器测试tests/layers/ROIAlign、NMS、mask 操作、损失函数、deformable conv 等底层算子测试tests/modeling/anchors、backbone、RPN、ROI heads、box 变换等模型组件测试tests/structures/Boxes、Instances、Masks、Keypoints、旋转框等数据结构测试tests/tracking/四种跟踪器bbox IoU、Hungarian 及其变体测试tests/ 根目录跨模块的集成性测试如 test_checkpoint.py、test_engine.py、test_export_torchscript.py、test_model_zoo.py 等。以模型端到端测试 tests/modeling/test_model_e2e.py 为例可以看到单测的典型写法测试类继承unittest.TestCase通过 detectron2/utils/testing.py 中的get_model_no_weights(config_path)构建一个不加载任何权重的模型包括预训练权重然后喂入随机生成的输入做前向/反向验证。其中test_empty_data、test_eval_tocpu、test_roiheads_inf_nan_data等用例专门验证「空标注数据」「CPU 推理」「Inf/NaN 输入」等边界场景这类鲁棒性检查正是单元测试的核心价值。端到端测试dev 脚本与 quick_schedules 配置原文档指出除单元测试外还有端到端推理与训练测试位于 dev/ 下的run_*_tests.sh脚本。这些脚本配合 configs/quick_schedules/ 目录中的特殊配置使用。根据 configs/quick_schedules/README.md 的说明quick 配置分为三类配置类型运行方式目的*_instant_test.yaml2 块 GPU 直接训练验证训练流程能顺利跑完不追求合理结果*_inference_acc_test.yaml--eval-only加载预训练模型推理验证推理结果精度符合预期回归*_training_acc_test.yaml8 块 GPU 训练约 1 小时验证训练精度落在正常区间训练冒烟测试run_instant_tests.shdev/run_instant_tests.sh 默认遍历所有*instant_test.yaml配置用tools/train_net.py以 2 块 GPU 快速训练后清理输出目录# 默认运行 configs/quick_schedules/*instant_test.yaml bash dev/run_instant_tests.sh # 也可以显式指定配置文件 bash dev/run_instant_tests.sh configs/quick_schedules/mask_rcnn_R_50_FPN_instant_test.yaml脚本内部的关键调用是python tools/train_net.py --num-gpus 2 --config-file cfg SOLVER.IMS_PER_BATCH 4 OUTPUT_DIR instant_test_output。以 mask_rcnn_R_50_FPN_instant_test.yaml 为例它继承Base-RCNN-FPN.yaml将训练集/测试集都设为coco_2017_val_100仅 100 张图的微型子集SOLVER.MAX_ITER仅为 40BASE_LR为 0.005目的是用极小代价跑通完整的训练-评估链路验证代码没有结构性错误。推理精度回归run_inference_tests.shdev/run_inference_tests.sh 默认遍历所有*inference_acc_test.yaml以--eval-only模式加载预训练权重做推理并额外运行demo/demo.py做可视化冒烟bash dev/run_inference_tests.sh关键点在于配置中的TEST.EXPECTED_RESULTS字段。例如 mask_rcnn_R_50_FPN_inference_acc_test.yaml 中TEST: EXPECTED_RESULTS: [[bbox, AP, 47.34, 0.02], [segm, AP, 42.67, 0.02], [bbox_TTA, AP, 49.11, 0.02], [segm_TTA, AP, 45.04, 0.02]] AUG: ENABLED: True MIN_SIZES: (700, 800) # 测试时数据增强为节省时间只取两个尺度EXPECTED_RESULTS的含义是「任务名 指标 期望值 容差」当实际 AP 与期望值之差超过容差0.02时测试判定为失败。这实现了真正的精度回归守护——任何导致 mAP 下降的改动都会在 CI 中被拦截。其中bbox_TTA、segm_TTA表明该配置同时开启了 Test-Time Augmentation 并验证 TTA 后的指标。训练精度回归training_acc_test.yaml这类配置需要 8 块 GPU约 1 小时完成。以 mask_rcnn_R_50_FPN_training_acc_test.yaml 为例它在coco_2017_val上训练 6000 步并通过EXPECTED_RESULTS校验最终训练出的模型精度bbox AP 期望 42.5容差 1.0、segm AP 期望 35.8容差 0.8。它同时示范了显式控制输入尺寸INPUT.MIN_SIZE_TRAIN等与学习率调度WARMUP_ITERS、STEPS的写法。结果解析与工程配套parse_results.sh 与 linter.shdev/parse_results.sh 是配套的日志解析工具从训练日志中一键提取关键指标便于开发者在 CI 或本地对比性能bash dev/parse_results.sh /path/to/train_log.txt它会依次解析并输出训练速度s/it、推理速度、训练峰值显存MB、以及末尾的 COCO 评估结果各任务 AP 系列的copypaste行最后给出一行逗号分隔的浓缩结果方便复制比对。此外 dev/linter.sh 规定了代码风格检查流程isort要求 4.3.x整理 import、black要求 25.x行宽 100格式化、flake8静态检查、clang-format处理 C/CUDA 源码。结合 setup.cfg 中[mypy]、[isort]的配置如python_version3.7、line_length100、跳过configs与tests/config目录可见该仓库对测试与代码质量有完整的工具链约束这也是其单元测试能长期稳定运行的重要前提。写给测试作者如何在仓库内编写新单测如果你想为仓库新增测试参照现有约定即可位置与命名按被测模块放入 tests/ 对应子目录文件以test_开头类继承unittest.TestCasediscover会自动发现构建模型优先使用 detectron2/utils/testing.py 提供的工具函数如get_model_no_weights传入模型 zoo 配置路径即可在无权重情况下实例化模型——该函数在无 CUDA 时还会自动将MODEL.DEVICE切换为cpu保证测试可在纯 CPU 环境运行构造输入参考test_model_e2e.py中create_model_input、get_empty_instance、get_regular_bitmask_instances等辅助函数用torch.rand生成随机张量与随机框注意random_boxes会确保框宽高为正以避免数值问题关注边界空标注、CPU/GPU 切换、Inf/NaN 输入、不同 dtype 是仓库测试反复覆盖的典型场景新增模块建议同样覆盖。小结Detectron2 的测试体系呈三层结构python -m unittest discover -s ./tests负责快速的模块级单元测试dev/run_instant_tests.sh与dev/run_inference_tests.sh负责端到端的训练/推理冒烟与精度回归EXPECTED_RESULTS机制与parse_results.sh让精度变化可量化、可追踪。无论是排查问题、贡献代码还是验证新改动这套方法都能帮助你快速确认改动是否安全。【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考