ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

如何用 Detectron2 train_net.py 的 --eval-only 模式评估一个已训练的检查点

2026/9/13 17:51:39 拓冰建站 浏览量
如何用 Detectron2 train_net.py 的 --eval-only 模式评估一个已训练的检查点 如何用 Detectron2 train_net.py 的 --eval-only 模式评估一个已训练的检查点【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2手头有一个 Detectron2 训练出来的模型检查点.pth或模型库的.pkl想拿到它在测试集上的标准指标如 COCO 的 bbox AP、segm AP而不是重新跑一遍训练。Detectron2 为此提供了tools/train_net.py的--eval-only模式它只构建模型、加载指定权重、对配置里的测试集做完整推理并输出聚合指标不执行任何训练步骤。本文以仓库自带的 COCO 配置为例说明从准备数据集到确认评估结果的完整路径。前置条件--eval-only的执行依赖三样东西能跑的 Detectron2 环境、一个与模型结构匹配的配置、以及测试集数据本身。环境按 INSTALL.md 安装 detectron2。要求 Linux 或 macOS、Python ≥ 3.7、PyTorch ≥ 1.8 且 torchvision 与之匹配从源码构建还需要 gcc g ≥ 5.4。测试数据集评估会读取配置DATASETS.TEST指定的数据集数据必须按内置数据集的目录结构就位。以 COCO 为例参考 datasets/README.md$DETECTRON2_DATASETS/ coco/ annotations/ instances_{train,val}2017.json {train,val}2017/ # 对应 json 中引用的图片文件数据集根目录通过环境变量DETECTRON2_DATASETS指定例如export DETECTRON2_DATASETS/path/to/datasets如果未设置默认是当前工作目录下的./datasets。 3.配置文件使用训练该模型时所用的 yaml 配置。注意这类配置里的MODEL.WEIGHTS默认指向 ImageNet 预训练权重如 mask_rcnn_R_50_FPN_1x.yaml 中的detectron2://ImageNetPretrained/MSRA/R-50.pkl它只决定模型结构评估时会被你在命令行覆盖的权重替代。运行评估命令在tools/目录下运行getting started 文档给出的评估命令cd tools/ ./train_net.py \ --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml \ --eval-only MODEL.WEIGHTS /path/to/checkpoint_file命令中的关键项--eval-only只执行评估。train_net.py在开启该参数时会走独立的分支Trainer.build_model(cfg)构建模型DetectionCheckpointer(...).resume_or_load(cfg.MODEL.WEIGHTS, ...)加载权重然后调用Trainer.test(cfg, model)对cfg.DATASETS.TEST中每个数据集推理并聚合指标全程不启动训练循环见 tools/train_net.py 的main()函数。MODEL.WEIGHTS /path/to/checkpoint_file这是命令末尾的opts配置覆盖语法用于指定要评估的检查点文件路径。把/path/to/checkpoint_file替换为你的实际文件例如某次训练产出的model_final.pth或中间快照model_0007499.pth。Detectron2 的 checkpointer 同时识别 PyTorch.pth格式和模型库的.pkl文件。--config-file必须指向与检查点结构一致的配置否则权重无法装入模型。--num-gpus默认 1。评估时按你的 GPU 数设置即可多 GPU 会分片数据集并行推理。更多选项可以看./train_net.py -h。没有 GPU 时可以在命令末尾追加MODEL.DEVICE cpu让模型跑在 CPU 上INSTALL.md 说明大多数模型可以在 CPU 上推理。如何读取评估结果评估过程中主进程会打印聚合指标。DefaultTrainer.test()在跑完每个数据集后输出类似这样的日志见 detectron2/engine/defaults.py 与 detectron2/evaluation/testing.py 的print_csv_formatEvaluation results for coco_2017_val in csv format: copypaste: Task: coco_2017_val copypaste: bbox,mseg,... copypaste: 47.34,42.67,...这些copypaste:行以 Detectron 风格排列指标名和数值方便直接粘进表格本文中的数值来自文档配置示例你的检查点会输出不同的值。推理产生的输出如评估器保存的推理结果文件默认写到cfg.OUTPUT_DIR/inference目录train_net.py的build_evaluator()在调用方未指定输出目录时会把os.path.join(cfg.OUTPUT_DIR, inference)作为output_dir传给COCOEvaluator等评估器。评估器类型由数据集元数据中的evaluator_type决定COCO、COCO panoptic、LVIS、Pascal VOC、Cityscapes 等内置数据集都有对应的标准评估器若某数据集找不到匹配的 evaluator脚本会抛出NotImplementedError并提示数据集名和类型。用 TEST.EXPECTED_RESULTS 校验结果是否符合预期--eval-only分支跑完后会在主进程调用verify_results(cfg, res)如果配置里设置了TEST.EXPECTED_RESULTS就会把实际指标与预期值逐一比较。仓库自带的 mask_rcnn_R_50_FPN_inference_acc_test.yaml 是一个可直接参考的例子_BASE_: ../COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml MODEL: WEIGHTS: detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl DATASETS: TEST: (coco_2017_val_100,) 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) # to save some time FLOAT32_PRECISION: highest每条形目是[任务, 指标, 预期值, 容差]。验证结果只有两种日志表现见verify_results源码通过Results verification passed.失败Result verification failed!随后打印 Expected/Actual 两份结果进程以非零码退出sys.exit(1)。上面的 47.34、42.67 等数值是该配置在coco_2017_val_100子集上的参考值仅在评估模型库模型时有意义用自己的检查点评估时除非你明确知道预期指标否则不需要设置TEST.EXPECTED_RESULTS。可选开启 TTA 评估如果TEST.AUG.ENABLED为True例如上面的 quick schedule 配置--eval-only会在常规评估之后追加一次 test-time augmentation 推理结果以_TTA后缀写入指标字典如bbox_TTA。注意train_net.py中test_with_TTA的注释说明 TTA 只支持部分 R-CNN 模型。对没有开启TEST.AUG.ENABLED的普通训练配置这一步不会发生评估只输出常规指标。限制与常见问题检查点路径无效或结构不匹配--eval-only的加载逻辑依赖resume_or_load检查点必须与--config-file指定的模型结构一致MODEL.WEIGHTS支持.pth和.pkl两种格式。数据集未就位若DETECTRON2_DATASETS未设置或目录结构不符合 datasets/README.md 的要求评估会在读取数据时失败LVIS、panoptic 等数据集还需按其说明安装对应 api。自定义数据集内置build_evaluator只处理内置数据集的evaluator_type对自定义数据集train_net.py头部注释建议把 detectron2 当库使用、自行编写带DatasetEvaluator的脚本而不是依赖这个通用入口。MODEL_ZOO.md 中各模型的推理耗时inference time, s/im就是用tools/train_net.py --eval-onlybatch size 1测得的因此这条命令既是日常验收手段也可以作为复测推理速度的基准。【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考