MMDetection——2.快速入门1(中文官方文档二)

本文介绍MMDetection的快速入门指南,涵盖模型推断、现有模型测试及预定义模型训练等内容,适合初学者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MMDetection——2.快速入门1(翻译版)

1: 推断和训练现有模型和标准数据集

  • MMDetection在Model Zoo中提供了数百种现有和现有的检测模型,并支持多个标准数据集,包括Pascal VOC,COCO,CityScapes,LVIS等。此注释将说明如何在这些现有模型和标准数据集上执行常见任务,包括:
    • 使用现有模型推断给定图像。
    • 在标准数据集上测试现有模型。
    • 在标准数据集上训练预定义的模型。

推论现有模型

通过推论,我们的意思是使用训练有素的模型来检测图像上的物体。在MMDetection中,模型由配置文件(configuration file)定义,现有模型参数保存在检查点文件(checkpoint file)中。

首先,我们建议使用此配置文件 configuration file 和此检查点文件checkpoint file来使用Faster RCNN 。建议将检查点文件(checkpoint file)下载到目录 checkpoints文件夹中.

用于推理的高级API

MMDetection提供了高级Python API来推断图像。这是在给定的图像或视频上建立模型和推断的示例。

from mmdet.apis import init_detector, inference_detector
import mmcv

# Specify the path to model config and checkpoint file
config_file = 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py'
checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'

# build the model from a config file and a checkpoint file
model = init_detector(config_file, checkpoint_file, device='cuda:0')

# test a single image and show the results
img = 'test.jpg'  # or img = mmcv.imread(img), which will only load it once
result = inference_detector(model, img)
# visualize the results in a new window
model.show_result(img, result)
# or save the visualization results to image files
model.show_result(img, result, out_file='result.jpg')

# test a video and show the results
video = mmcv.VideoReader('video.mp4')
for frame in video:
    result = inference_detector(model, frame)
    model.show_result(frame, result, wait_time=1)

notebook demo 可以在demo/inference_demo.ipynb中找到。

注意: inference_detector 仅支持单图像推断。

异步接口-受Python 3.7+支持

对于Python 3.7 +,MMDetection还支持异步接口。通过利用CUDA流,它可以不阻塞GPU绑定推理代码上的CPU,并为单线程应用程序提供更好的CPU / GPU利用率。可以在不同的输入数据样本之间或某个推理管道的不同模型之间同时进行推理。

请参阅 tests/async_benchmark.py 比较同步和异步接口的速度。

import asyncio
import torch
from mmdet.apis import init_detector, async_inference_detector
from mmdet.utils.contextmanagers import concurrent

async def main():
    config_file = 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py'
    checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'
    device = 'cuda:0'
    model = init_detector(config_file, checkpoint=checkpoint_file, device=device)

    # queue is used for concurrent inference of multiple images
    streamqueue = asyncio.Queue()
    # queue size defines concurrency level
    streamqueue_size = 3

    for _ in range(streamqueue_size):
        streamqueue.put_nowait(torch.cuda.Stream(device=device))

    # test a single image and show the results
    img = 'test.jpg'  # or img = mmcv.imread(img), which will only load it once

    async with concurrent(streamqueue):
        result = await async_inference_detector(model, img)

    # visualize the results in a new window
    model.show_result(img, result)
    # or save the visualization results to image files
    model.show_result(img, result, out_file='result.jpg')


asyncio.run(main())

演示版

我们还提供了三个演示脚本,这些脚本使用高级API和支持的功能代码实现。源代码可在 here获得。

图片演示

该脚本在单个图像上执行推理.

python demo/image_demo.py \
    ${IMAGE_FILE} \
    ${CONFIG_FILE} \
    ${CHECKPOINT_FILE} \
    [--device ${GPU_ID}] \
    [--score-thr ${SCORE_THR}]

例子:

python demo/image_demo.py demo/demo.jpg \
    configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py \
    checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth \
    --device cpu
网络摄像头演示

这是来自网络摄像头的现场演示.

python demo/webcam_demo.py \
    ${CONFIG_FILE} \
    ${CHECKPOINT_FILE} \
    [--device ${GPU_ID}] \
    [--camera-id ${CAMERA-ID}] \
    [--score-thr ${SCORE_THR}]

例子s:

python demo/webcam_demo.py \
    configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py \
    checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth
视频演示

该脚本对视频执行推断.

python demo/video_demo.py \
    ${VIDEO_FILE} \
    ${CONFIG_FILE} \
    ${CHECKPOINT_FILE} \
    [--device ${GPU_ID}] \
    [--score-thr ${SCORE_THR}] \
    [--out ${OUT_FILE}] \
    [--show] \
    [--wait-time ${WAIT_TIME}]

例子:

python demo/video_demo.py demo/demo.mp4 \
    configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py \
    checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth \
    --out result.mp4

在标准数据集上测试现有模型

为了评估模型的准确性,通常会在一些标准数据集上对模型进行测试。MMDetection支持多种公共数据集,包括 COCO, Pascal VOC, CityScapes, and more. 本节将展示如何在受支持的数据集上测试现有模型。

准备数据集

可以从官方网站或镜像获得 Pascal VOC 或镜像和 COCO 之类的数据集。注意:在检测任务中,Pascal VOC 2012是 Pascal VOC 2007的扩展,没有重叠, 我们通常将它们一起使用。建议下载数据集并将其提取到项目目录之外的某个位置,并将数据集根链接 $MMDETECTION/data如下所示。如果您的文件结构不同,则可能需要更改配置文件中的相应路径。

mmdetection
├── mmdet
├── tools
├── configs
├── data
│   ├── coco
│   │   ├── annotations
│   │   ├── train2017
│   │   ├── val2017
│   │   ├── test2017
│   ├── cityscapes
│   │   ├── annotations
│   │   ├── leftImg8bit
│   │   │   ├── train
│   │   │   ├── val
│   │   ├── gtFine
│   │   │   ├── train
│   │   │   ├── val
│   ├── VOCdevkit
│   │   ├── VOC2007
│   │   ├── VOC2012

某些模型需要其他 COCO-stuff 数据集, 如 HTC, DetectoRS and SCNet,您可以下载并解压缩然后移至coco文件夹。目录应该是这样的。

mmdetection
├── data
│   ├── coco
│   │   ├── annotations
│   │   ├── train2017
│   │   ├── val2017
│   │   ├── test2017
│   │   ├── stuffthingmaps

需要使用以下方法将 cityscapes 注释转换为coco格式 tools/dataset_converters/cityscapes.py:

pip install cityscapesscripts

python tools/dataset_converters/cityscapes.py \
    ./data/cityscapes \
    --nproc 8 \
    --out-dir ./data/cityscapes/annotations

待办事项: 更改新路径

测试现有模型

我们提供测试脚本,用于评估整个数据集 (COCO, PASCAL VOC, Cityscapes, etc.)上的现有模型。支持以下测试环境:

  • 单GPU
  • 单节点多GPU
  • 多个节点

根据测试环境选择适当的脚本来执行测试。

# single-gpu testing
python tools/test.py \
    ${CONFIG_FILE} \
    ${CHECKPOINT_FILE} \
    [--out ${RESULT_FILE}] \
    [--eval ${EVAL_METRICS}] \
    [--show]

# multi-gpu testing
bash tools/dist_test.sh \
    ${CONFIG_FILE} \
    ${CHECKPOINT_FILE} \
    ${GPU_NUM} \
    [--out ${RESULT_FILE}] \
    [--eval ${EVAL_METRICS}]

tools/dist_test.sh 它还支持多节点测试,但依赖于 PyTorch的 launch utility(启动实用程序)

可选参数:

  • RESULT_FILE:输出结果的文件名采用pickle格式。如果未指定,结果将不会保存到文件中。
  • EVAL_METRICS: 要根据结果评估的项目。允许的值取决于数据集,例如proposal_fastproposalbboxsegm可用于COCO, mAPrecall为PASCAL VOC。可以通过cityscapes和所有COCO指标来评估城市景观Cityscapes。
  • --show: 如果指定,检测结果将绘制在图像上并显示在新窗口中。它仅适用于单个GPU测试,并用于调试和可视化。请确保GUI在您的环境中可用。否则,您可能会遇到类似的错误。cannot connect to X server
  • --show-dir: 如果指定,检测结果将绘制在图像上并保存到指定目录。它仅适用于单个GPU测试,并用于调试和可视化。使用该选项时不需要您的环境中具有可用的GUI。
  • --show-score-thr: 如果指定,则分数低于此阈值的检测将被删除。
  • --cfg-options:如果指定,则键值对可选cfg将合并到配置文件中。
  • --eval-options:如果指定,则键值对可选eval cfg将成为dataset.evaluate()函数的kwargs,仅用于评估。

例子

假设您已经将检查点下载到目录中 checkpoints/.

  1. 测试 Faster R-CNN 并可视化结果。按任意键查看下一张图像。配置文件和检查点文件在此处可用。

    python tools/test.py \
        configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py \
        checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth \
        --show
    
  2. 测试Faster R-CNN 并保存绘制的图像以供将来可视化。配置文件和检查点文件在此处可用。

    python tools/test.py \
        configs/faster_rcnn/faster_rcnn_r50_fpn_1x.py \
        checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth \
        --show-dir faster_rcnn_r50_fpn_1x_results
    
  3. PASCAL VOC 上测试Faster R-CNN(不保存测试结果) 并评估mAP. 配置文件和检查点文件在此处可用。

    python tools/test.py \
        configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc.py \
        checkpoints/faster_rcnn_r50_fpn_1x_voc0712_20200624-c9895d40.pth \
        --eval mAP
    
  4. 使用8个GPU测试Mask R-CNN,并评估bbox和mask AP。配置文件和检查点文件在此处可用。

    ./tools/dist_test.sh \
        configs/mask_rcnn_r50_fpn_1x_coco.py \
        checkpoints/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth \
        8 \
        --out results.pkl \
        --eval bbox segm
    
  5. 使用8个GPU测试Mask R-CNN,并评估分类bbox和mask AP。配置文件和检查点文件在此处可用。

    ./tools/dist_test.sh \
        configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py \
        checkpoints/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth \
        8 \
        --out results.pkl \
        --eval bbox segm \
        --options "classwise=True"
    
  6. 在具有8个GPU的COCO test-dev上测试Mask R-CNN,并生成JSON文件以提交给官方评估服务器。配置文件和检查点文件在此处可用。

    ./tools/dist_test.sh \
        configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py \
        checkpoints/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth \
        8 \
        --format-only \
        --options "jsonfile_prefix=./mask_rcnn_test-dev_results"
    

    此命令生成两个JSON文件mask_rcnn_test-dev_results.bbox.jsonmask_rcnn_test-dev_results.segm.json

  7. 在Cityscapes上使用8个GPU测试Test Mask R-CNN,并生成txt和png文件提交给官方评估服务器。配置文件和检查点文件在此处可用。

    ./tools/dist_test.sh \
        configs/cityscapes/mask_rcnn_r50_fpn_1x_cityscapes.py \
        checkpoints/mask_rcnn_r50_fpn_1x_cityscapes_20200227-afe51d5a.pth \
        8 \
        --format-only \
        --options "txtfile_prefix=./mask_rcnn_cityscapes_test_results"
    

    生成的png和txt将在./mask_rcnn_cityscapes_test_results目录下。

在没有标签注释的情况下进行测试

MMDetection支持使用 CocoDataset来测试没有标签注释的模型。如果您的数据集格式不是COCO格式,请将其转换为COCO格式。 例如,如果您的数据集格式为VOC,则可以通过工具中脚本将其直接转换为COCO格式。

# single-gpu testing
python tools/test.py \
    ${CONFIG_FILE} \
    ${CHECKPOINT_FILE} \
    --format-only \
    --options ${JSONFILE_PREFIX} \
    [--show]

# multi-gpu testing
bash tools/dist_test.sh \
    ${CONFIG_FILE} \
    ${CHECKPOINT_FILE} \
    ${GPU_NUM} \
    --format-only \
    --options ${JSONFILE_PREFIX} \
    [--show]

假设已将 model zoo 中的检查点下载到目录中checkpoints/,我们可以在具有8个GPU的COCO test-dev上测试Mask R-CNN,并使用以下命令生成JSON文件。

./tools/dist_test.sh \
    configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py \
    checkpoints/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth \
    8 \
    -format-only \
    --options "jsonfile_prefix=./mask_rcnn_test-dev_results"

此命令生成两个JSON文件mask_rcnn_test-dev_results.bbox.jsonmask_rcnn_test-dev_results.segm.json

批量推断

MMDetection支持在测试模式下对单个图像或批处理图像进行推理。默认情况下,我们使用单图像推断,您可以通过在测试数据的配置中进行修改samples_per_gpu来使用批量推断。您可以通过如下修改配置来实现。

data = dict(train=dict(...), val=dict(...), test=dict(samples_per_gpu=2, ...))

或者您可以将其设置--cfg-options--cfg-options data.test.samples_per_gpu=2

不推荐使用的 ImageToTensor

在测试模式下, ImageToTensor pipeline 不建议使用,用 DefaultFormatBundle 来代替,建议使用手动替换配置文件中的测试数据管道。例如:

# use ImageToTensor (deprecated)
pipelines = [
   dict(type='LoadImageFromFile'),
   dict(
       type='MultiScaleFlipAug',
       img_scale=(1333, 800),
       flip=False,
       transforms=[
           dict(type='Resize', keep_ratio=True),
           dict(type='RandomFlip'),
           dict(type='Normalize', mean=[0, 0, 0], std=[1, 1, 1]),
           dict(type='Pad', size_divisor=32),
           dict(type='ImageToTensor', keys=['img']),
           dict(type='Collect', keys=['img']),
       ])
   ]

# manually replace ImageToTensor to DefaultFormatBundle (recommended)
pipelines = [
   dict(type='LoadImageFromFile'),
   dict(
       type='MultiScaleFlipAug',
       img_scale=(1333, 800),
       flip=False,
       transforms=[
           dict(type='Resize', keep_ratio=True),
           dict(type='RandomFlip'),
           dict(type='Normalize', mean=[0, 0, 0], std=[1, 1, 1]),
           dict(type='Pad', size_divisor=32),
           dict(type='DefaultFormatBundle'),
           dict(type='Collect', keys=['img']),
       ])
   ]

在标准数据集上训练预定义模型

MMDetection还提供用于训练检测模型的现成工具。本节将展示如何在标准数据集(即COCO)上训练预定义的模型(在config下)。

重要说明:配置文件中的默认学习率是8个GPU和2 img / gpu(批量大小= 8 * 2 = 16)。根据线性缩放规则,如果您使用不同的GPU或者每个GPU处理不用数量的图片,则需要按批次大小设置学习率,例如,lr=0.01对于4个GPU * 2 imgs / gpu和lr=0.08对于16个GPU * 4 imgs / gpu。

准备数据集

训练也需要准备数据集。有关详细信息,请参见 Prepare datasets

注意:当前,配置文件下configs/cityscapes使用COCO预训练的权重进行初始化。如果网络连接不可用或速度较慢,可以提前下载现有模型。否则,将在训练开始时导致错误。

在单个GPU上训练

我们提供了tools/train.py在单个GPU上启动训练工作的信息。基本用法如下。

python tools/train.py \
    ${CONFIG_FILE} \
    [optional arguments]

在培训期间,日志文件和检查点将保存到工作目录,该目录work_dir在config文件中或通过CLI参数指定--work-dir

默认情况下,模型在每一次迭代后对验证集进行评估,评估间隔可以在配置文件中指定,如下所示。

# evaluate the model every 12 epoch.
evaluation = dict(interval=12)
  • 该工具接受几个可选参数,包括:
    • --no-validate不建议):禁用训练期间的评估。
    • --work-dir ${WORK_DIR}:覆盖工作目录。
    • --resume-from ${CHECKPOINT_FILE}:从先前的检查点文件恢复。
    • --options 'Key=value':覆盖使用的配置中的其他设置。

注意事项

resume-from和之间的区别load-from

resume-from同时加载模型权重和优化器状态,并且迭代也从指定的检查点继承。通常用于恢复意外中断的训练过程。 load-from仅加载模型权重,训练时期从0开始。通常用于微调。

在多个GPU上进行训练

我们提供tools/dist_train.sh在多个GPU上启动培训的方法。基本用法如下。

bash ./tools/dist_train.sh \
    ${CONFIG_FILE} \
    ${GPU_NUM} \
    [optional arguments]

可选参数与上面所述相同。

同时启动多个作业

如果要在一台计算机上启动多个作业,例如,在具有8个GPU的计算机上执行2个4-GPU训练作业,则需要为每个作业指定不同的端口(默认为29500),以避免通信冲突。

如果dist_train.sh用于启动培训作业,则可以在命令中设置端口。

CUDA_VISIBLE_DEVICES=0,1,2,3 PORT=29500 ./tools/dist_train.sh ${CONFIG_FILE} 4
CUDA_VISIBLE_DEVICES=4,5,6,7 PORT=29501 ./tools/dist_train.sh ${CONFIG_FILE} 4

在多个节点上训练

MMDetection依靠torch.distributed软件包进行分布式培训。因此,作为一种基本用法,可以通过PyTorch的启动实用程序启动分布式培训。

Manage jobs with Slurm

使用Slurm管理职位

Slurm是用于计算集群的良好作业调度系统。在Slurm管理的群集上,您可以slurm_train.sh用来生成训练作业。它支持单节点和多节点训练。

基本用法如下。

[GPUS=${GPUS}] ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${WORK_DIR}

下面是使用16个GPU在名为dev的Slurm分区上训练Mask R-CNN并将工作目录设置为某些共享文件系统的示例。

GPUS=16 ./tools/slurm_train.sh dev mask_r50_1x configs/mask_rcnn_r50_fpn_1x_coco.py /nfs/xxxx/mask_rcnn_r50_fpn_1x

您可以检查源代码以查看完整的参数和环境变量。

使用Slurm时,需要通过以下方式之一设置端口选项:

  1. 通过设置端口--options。推荐这样做,因为它不会更改原始配置。
CUDA_VISIBLE_DEVICES=0,1,2,3 GPUS=4 ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} config1.py ${WORK_DIR} --options 'dist_params.port=29500'
CUDA_VISIBLE_DEVICES=4,5,6,7 GPUS=4 ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} config2.py ${WORK_DIR} --options 'dist_params.port=29501'

2.修改配置文件以设置不同的通信端口。

config1.py中,设置

dist_params = dict(backend='nccl', port=29500)

config2.py中,设置

dist_params = dict(backend='nccl', port=29501)

然后,您可以使用config1.pyconfig2.py启动两个作业。

CUDA_VISIBLE_DEVICES=0,1,2,3 GPUS=4 ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} config1.py ${WORK_DIR}
CUDA_VISIBLE_DEVICES=4,5,6,7 GPUS=4 ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} config2.py ${WORK_DIR}
### QDTrack 介绍 QDTrack 是一种多目标跟踪 (Multiple Object Tracking, MOT) 方法,基于 Faster R-CNN 架构扩展而来。它通过引入 Tracklet 提取模块和 Re-ID 特征学习机制,在保持高精度的同时提升了实时性能[^1]。 在 CPU 上运行 QDTrack 训练脚本的命令如下所示: ```bash CUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py ``` 此命令展示了如何配置环境变量 `CUDA_VISIBLE_DEVICES` 并指定训练配置文件路径来启动训练过程。 --- ### 使用教程 #### 配置安装 为了使用 QDTrack,需先完成 MMDetection 及其依赖项的安装。以下是两种常见的安装方式: 1. **通过官方文档推荐的方式** 如果您已按照 MMDetection 的指南完成了安装,则可以直接加载预定义模型进行推理或微调。 2. **通过 MIM 工具快速部署** 若采用 MIM 安装工具,则可以通过以下代码初始化检测器实例: ```python from mmdet.apis import init_detector, inference_detector config_file = 'configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py' checkpoint_file = 'qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain-test_motschallenge.pth' model = init_detector(config_file, checkpoint_file, device='cpu') result = inference_detector(model, 'test_image.jpg') ``` 上述代码片段演示了如何利用预训练权重执行图像推理操作[^4]。 #### 跟踪参数调整 针对不同数据集的需求,可能需要调整一些超参设置。例如,默认情况下 ByteTrack 类似的方法会设定检测分数阈值为 0.6,并以 IoU=0.2 作为匹配拒绝条件;而对于长时间未更新的目标轨迹(tracklets),通常允许保留最多 30 帧以便重新激活[^2]。 --- ### GitHub 地址及相关资源 QDTrack 的源码托管于 OpenMMLab 组织下的 [GitHub](https://github.com/open-mmlab/mmtracking/) 存储库中。该存储库不仅包含了 QDTrack 的实现代码,还提供了其他多种先进的 MOT 算法供开发者参考与测试。 具体到 QDTrack 的部分,可访问以下链接获取更多详情: [QDTrack Configurations and Pretrained Models](https://github.com/open-mmlab/mmtracking/tree/master/configs/qdtrack) 此外,OpenMMLab 还维护了一个详细的文档站点,其中涵盖了从入门指导到高级功能的所有内容: [MMDetection Documentation](https://mmdetection.readthedocs.io/zh_CN/latest/index.html) --- ### 性能表现 根据公开实验结果表明,在 HiEve 数据集中,“私人检测器”协议下对比多个 SOTA 方法时,ByteTrack 表现出显著优势——无论是在整体排名还是各项评价指标方面均超越竞争对手 CenterTrack[^3]。尽管如此,QDTrack 同样具备竞争力,尤其适合处理复杂场景中的对象关联问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值