--- comments: true --- # 目标检测模块使用教程 ## 一、概述 目标检测模块是计算机视觉系统中的关键组成部分,负责在图像或视频中定位和标记出包含特定目标的区域。该模块的性能直接影响到整个计算机视觉系统的准确性和效率。目标检测模块通常会输出目标区域的边界框(Bounding Boxes),这些边界框将作为输入传递给目标识别模块进行后续处理。 ## 二、支持模型列表 > 推理耗时仅包含模型推理耗时,不包含前后处理耗时。
| 模型 | 模型下载链接 | mAP(%) | GPU推理耗时(ms) [常规模式 / 高性能模式] |
CPU推理耗时(ms) [常规模式 / 高性能模式] |
模型存储大小(MB) | 介绍 |
|---|---|---|---|---|---|---|
| PicoDet-L | 推理模型/训练模型 | 42.6 | 14.31 / 11.06 | 45.95 / 25.06 | 20.9 | PP-PicoDet是一种全尺寸、棱视宽目标的轻量级目标检测算法,它考虑移动端设备运算量。与传统目标检测算法相比,PP-PicoDet具有更小的模型尺寸和更低的计算复杂度,并在保证检测精度的同时更高的速度和更低的延迟。 |
| PicoDet-S | 推理模型/训练模型 | 29.1 | 9.15 / 3.26 | 16.06 / 4.04 | 4.4 | |
| PP-YOLOE_plus-L | 推理模型/训练模型 | 52.9 | 32.06 / 28.00 | 185.32 / 116.21 | 185.3 | PP-YOLOE_plus 是一种是百度飞桨视觉团队自研的云边一体高精度模型PP-YOLOE迭代优化升级的版本,通过使用Objects365大规模数据集、优化预处理,大幅提升了模型端到端推理速度。 |
| PP-YOLOE_plus-S | 推理模型/训练模型 | 43.7 | 11.43 / 7.52 | 60.16 / 26.94 | 28.3 | |
| RT-DETR-H | 推理模型/训练模型 | 56.3 | 114.57 / 101.56 | 938.20 / 938.20 | 435.8 | RT-DETR是第一个实时端到端目标检测器。该模型设计了一个高效的混合编码器,满足模型效果与吞吐率的双需求,高效处理多尺度特征,并提出了加速和优化的查询选择机制,以优化解码器查询的动态化。RT-DETR支持通过使用不同的解码器来实现灵活端到端推理速度。 |
| RT-DETR-L | 推理模型/训练模型 | 53.0 | 34.76 / 27.60 | 495.39 / 247.68 | 113.7 |
| 模型 | 模型下载链接 | mAP(%) | GPU推理耗时(ms) [常规模式 / 高性能模式] |
CPU推理耗时(ms) [常规模式 / 高性能模式] |
模型存储大小(MB) | 介绍 |
|---|---|---|---|---|---|---|
| Cascade-FasterRCNN-ResNet50-FPN | 推理模型/训练模型 | 41.1 | 120.28 / 120.28 | - / 6514.61 | 245.4 | Cascade-FasterRCNN 是一种改进的Faster R-CNN目标检测模型,通过耦联多个检测器,利用不同IoU阈值优化检测结果,解决训练和预测阶段的mismatch问题,提高目标检测的准确性。 |
| Cascade-FasterRCNN-ResNet50-vd-SSLDv2-FPN | 推理模型/训练模型 | 45.0 | 124.10 / 124.10 | - / 6709.52 | 246.2 | |
| CenterNet-DLA-34 | 推理模型/训练模型 | 37.6 | 67.19 / 67.19 | 6622.61 / 6622.61 | 75.4 | CenterNet是一种anchor-free目标检测模型,把待检测物体的关键点视为单一点-即其边界框的中心点,并通过关键点进行回归。 |
| CenterNet-ResNet50 | 推理模型/训练模型 | 38.9 | 216.06 / 216.06 | 2545.79 / 2545.79 | 319.7 | |
| DETR-R50 | 推理模型/训练模型 | 42.3 | 58.80 / 26.90 | 370.96 / 208.77 | 159.3 | DETR 是Facebook提出的一种transformer目标检测模型,该模型在不需要预定义的先验框anchor和NMS的后处理策略的情况下,就可以实现端到端的目标检测。 |
| FasterRCNN-ResNet34-FPN | 推理模型/训练模型 | 37.8 | 76.90 / 76.90 | - / 4136.79 | 137.5 | Faster R-CNN是典型的two-stage目标检测模型,即先生成区域建议(Region Proposal),然后在生成的Region Proposal上做分类和回归。相较于前代R-CNN和Fast R-CNN,Faster R-CNN的改进主要在于区域建议方面,使用区域建议网络(Region Proposal Network, RPN)提供区域建议,以取代传统选择性搜索。RPN是卷积神经网络,并与检测网络共享图像的卷积特征,减少了区域建议的计算开销。 |
| FasterRCNN-ResNet50-FPN | 推理模型/训练模型 | 38.4 | 95.48 / 95.48 | - / 3693.90 | 148.1 | |
| FasterRCNN-ResNet50-vd-FPN | 推理模型/训练模型 | 39.5 | 98.03 / 98.03 | - / 4278.36 | 148.1 | |
| FasterRCNN-ResNet50-vd-SSLDv2-FPN | 推理模型/训练模型 | 41.4 | 99.23 / 99.23 | - / 4415.68 | 148.1 | |
| FasterRCNN-ResNet50 | 推理模型/训练模型 | 36.7 | 129.10 / 129.10 | - / 3868.44 | 120.2 | |
| FasterRCNN-ResNet101-FPN | 推理模型/训练模型 | 41.4 | 131.48 / 131.48 | - / 4380.00 | 216.3 | |
| FasterRCNN-ResNet101 | 推理模型/训练模型 | 39.0 | 216.71 / 216.71 | - / 5376.45 | 188.1 | |
| FasterRCNN-ResNeXt101-vd-FPN | 推理模型/训练模型 | 43.4 | 234.38 / 234.38 | - / 6154.61 | 360.6 | |
| FasterRCNN-Swin-Tiny-FPN | 推理模型/训练模型 | 42.6 | 65.92 / 65.92 | - / 2468.98 | 159.8 | |
| FCOS-ResNet50 | 推理模型/训练模型 | 39.6 | 101.02 / 34.42 | 752.15 / 752.15 | 124.2 | FCOS是一种密集预测的anchor-free目标检测模型,使用RetinaNet的骨架,直接在feature map上回归目标物体的长宽,并预测物体的类别以及centerness(feature map上像素点离物体中心的偏移程度),centerness最终会作为权重来调整物体得分。 |
| PicoDet-L | 推理模型/训练模型 | 42.6 | 14.31 / 11.06 | 45.95 / 25.06 | 20.9 | PP-PicoDet是一种全尺寸、棱视宽目标的轻量级目标检测算法,它考虑移动端设备运算量。与传统目标检测算法相比,PP-PicoDet具有更小的模型尺寸和更低的计算复杂度,并在保证检测精度的同时更高的速度和更低的延迟。 |
| PicoDet-M | 推理模型/训练模型 | 37.5 | 10.48 / 5.00 | 22.88 / 9.03 | 16.8 | |
| PicoDet-S | 推理模型/训练模型 | 29.1 | 9.15 / 3.26 | 16.06 / 4.04 | 4.4 | |
| PicoDet-XS | 推理模型/训练模型 | 26.2 | 9.54 / 3.52 | 17.96 / 5.38 | 5.7 | |
| PP-YOLOE_plus-L | 推理模型/训练模型 | 52.9 | 32.06 / 28.00 | 185.32 / 116.21 | 185.3 | PP-YOLOE_plus 是一种是百度飞桨视觉团队自研的云边一体高精度模型PP-YOLOE迭代优化升级的版本,通过使用Objects365大规模数据集、优化预处理,大幅提升了模型端到端推理速度。 |
| PP-YOLOE_plus-M | 推理模型/训练模型 | 49.8 | 18.37 / 15.04 | 108.77 / 63.48 | 82.3 | |
| PP-YOLOE_plus-S | 推理模型/训练模型 | 43.7 | 11.43 / 7.52 | 60.16 / 26.94 | 28.3 | |
| PP-YOLOE_plus-X | 推理模型/训练模型 | 54.7 | 56.28 / 50.60 | 292.08 / 212.24 | 349.4 | |
| RT-DETR-H | 推理模型/训练模型 | 56.3 | 114.57 / 101.56 | 938.20 / 938.20 | 435.8 | RT-DETR是第一个实时端到端目标检测器。该模型设计了一个高效的混合编码器,满足模型效果与吞吐率的双需求,高效处理多尺度特征,并提出了加速和优化的查询选择机制,以优化解码器查询的动态化。RT-DETR支持通过使用不同的解码器来实现灵活端到端推理速度。 |
| RT-DETR-L | 推理模型/训练模型 | 53.0 | 34.76 / 27.60 | 495.39 / 247.68 | 113.7 | |
| RT-DETR-R18 | 推理模型/训练模型 | 46.5 | 19.11 / 14.82 | 263.13 / 143.05 | 70.7 | |
| RT-DETR-R50 | 推理模型/训练模型 | 53.1 | 41.11 / 10.12 | 536.20 / 482.86 | 149.1 | |
| RT-DETR-X | 推理模型/训练模型 | 54.8 | 61.91 / 51.41 | 639.79 / 639.79 | 232.9 | |
| YOLOv3-DarkNet53 | 推理模型/训练模型 | 39.1 | 39.62 / 35.54 | 166.57 / 136.34 | 219.7 | YOLOv3是一种实时的端到端目标检测器。它使用一个独特的单个卷积神经网络,将目标检测问题分解为一个回归问题,从而实现实时的检测。该模型采用了多个尺度的检测,提高了不同尺度目标物体的检测性能。 |
| YOLOv3-MobileNetV3 | 推理模型/训练模型 | 31.4 | 16.54 / 6.21 | 64.37 / 45.55 | 83.8 | |
| YOLOv3-ResNet50_vd_DCN | 推理模型/训练模型 | 40.6 | 31.64 / 26.72 | 226.75 / 226.75 | 163.0 | |
| YOLOX-L | 推理模型/训练模型 | 50.1 | 49.68 / 45.03 | 232.52 / 156.24 | 192.5 | YOLOX模型以YOLOv3作为目标检测网络的框架,通过设计Decoupled Head、Data Aug、Anchor Free以及SimOTA组件,显著提升了模型在各种复杂场景下的检测性能。 |
| YOLOX-M | 推理模型/训练模型 | 46.9 | 43.46 / 29.52 | 147.64 / 80.06 | 90.0 | |
| YOLOX-N | 推理模型/训练模型 | 26.1 | 42.94 / 17.79 | 64.15 / 7.19 | 3.4 | |
| YOLOX-S | 推理模型/训练模型 | 40.4 | 46.53 / 29.34 | 98.37 / 35.02 | 32.0 | |
| YOLOX-T | 推理模型/训练模型 | 32.9 | 31.81 / 18.91 | 55.34 / 11.63 | 18.1 | |
| YOLOX-X | 推理模型/训练模型 | 51.8 | 84.06 / 77.28 | 390.38 / 272.88 | 351.5 | |
| Co-Deformable-DETR-R50 | 推理模型/训练模型 | 49.7 | 259.62 / 259.62 | 32413.76 / 32413.76 | 184 | Co-DETR是一种先进的端到端目标检测器。它基于DETR架构,通过引入协同混合分配训练策略,将目标检测任务中的传统一对多标签分配与一对一匹配相结合,从而显著提高了检测性能和训练效率 |
| Co-Deformable-DETR-Swin-T | 推理模型/训练模型 | 48.0 (640x640 输入尺寸下) | 120.17 / 120.17 | - / 15620.29 | 187 | |
| Co-DINO-R50 | 推理模型/训练模型 | 52.0 | 1123.23 / 1123.23 | - / - | 186 | |
| Co-DINO-Swin-L | 推理模型/训练模型 | 55.9 (640x640 输入尺寸下) | - / - | - / - | 840 |
| 模式 | GPU配置 | CPU配置 | 加速技术组合 |
|---|---|---|---|
| 常规模式 | FP32精度 / 无TRT加速 | FP32精度 / 8线程 | PaddleInference |
| 高性能模式 | 选择先验精度类型和加速策略的最优组合 | FP32精度 / 8线程 | 选择先验最优后端(Paddle/OpenVINO/TRT等) |
[xmin, ymin, xmax, ymax]
可视化图像如下:
相关方法、参数等说明如下:
* `create_model`实例化目标检测模型(此处以`PicoDet-S`为例),具体说明如下:
| 参数 | 参数说明 | 参数类型 | 可选项 | 默认值 |
|---|---|---|---|---|
model_name |
模型名称 | str |
无 | 无 |
model_dir |
模型存储路径 | str |
无 | 无 |
device |
模型推理设备 | str |
支持指定GPU具体卡号,如“gpu:0”,其他硬件具体卡号,如“npu:0”,CPU如“cpu”。 | gpu:0 |
img_size |
输入图像大小;如果不指定,将默认使用PaddleX官方模型配置 | int/list/None |
|
None |
threshold |
用于过滤掉低置信度预测结果的阈值;如果不指定,将默认使用PaddleX官方模型配置 | float/dict/None |
|
None |
use_hpip |
是否启用高性能推理插件 | bool |
无 | False |
hpi_config |
高性能推理配置 | dict | None |
无 | None |
| 参数 | 参数说明 | 参数类型 | 可选项 | 默认值 |
|---|---|---|---|---|
input |
待预测数据,支持多种输入类型,必填 | Python Var|str|list |
|
无 |
batch_size |
批大小 | int |
任意整数 | 1 |
threshold |
用于过滤掉低置信度预测结果的阈值;如果不指定,将默认使用 creat_model 指定的 threshold 参数,如果 creat_model 也没有指定,则默认使用PaddleX官方模型配置 |
float/dict/None |
|
None |
| 方法 | 方法说明 | 参数 | 参数类型 | 参数说明 | 默认值 |
|---|---|---|---|---|---|
print() |
打印结果到终端 | format_json |
bool |
是否对输出内容进行使用 JSON 缩进格式化 |
True |
indent |
int |
指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_json 为 True 时有效 |
4 | ||
ensure_ascii |
bool |
控制是否将非 ASCII 字符转义为 Unicode。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_json为True时有效 |
False |
||
save_to_json() |
将结果保存为json格式的文件 | save_path |
str |
保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致 | 无 |
indent |
int |
指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_json 为 True 时有效 |
4 | ||
ensure_ascii |
bool |
控制是否将非 ASCII 字符转义为 Unicode。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_json为True时有效 |
False |
||
save_to_img() |
将结果保存为图像格式的文件 | save_path |
str |
保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致 | 无 |
| 属性 | 属性说明 |
|---|---|
json |
获取预测的json格式的结果 |
img |
获取格式为dict的可视化图像 |
校验结果文件具体内容为:
{
"done_flag": true,
"check_pass": true,
"attributes": {
"num_classes": 4,
"train_samples": 701,
"train_sample_paths": [
"check_dataset/demo_img/road839.png",
"check_dataset/demo_img/road363.png",
"check_dataset/demo_img/road148.png",
"check_dataset/demo_img/road237.png",
"check_dataset/demo_img/road733.png",
"check_dataset/demo_img/road861.png",
"check_dataset/demo_img/road762.png",
"check_dataset/demo_img/road515.png",
"check_dataset/demo_img/road754.png",
"check_dataset/demo_img/road173.png"
],
"val_samples": 176,
"val_sample_paths": [
"check_dataset/demo_img/road218.png",
"check_dataset/demo_img/road681.png",
"check_dataset/demo_img/road138.png",
"check_dataset/demo_img/road544.png",
"check_dataset/demo_img/road596.png",
"check_dataset/demo_img/road857.png",
"check_dataset/demo_img/road203.png",
"check_dataset/demo_img/road589.png",
"check_dataset/demo_img/road655.png",
"check_dataset/demo_img/road245.png"
]
},
"analysis": {
"histogram": "check_dataset/histogram.png"
},
"dataset_path": "det_coco_examples",
"show_type": "image",
"dataset_type": "COCODetDataset"
}
上述校验结果中,check_pass 为 true 表示数据集格式符合要求,其他部分指标的说明如下:
attributes.num_classes:该数据集类别数为 4;attributes.train_samples:该数据集训练集样本数量为 704;attributes.val_samples:该数据集验证集样本数量为 176;attributes.train_sample_paths:该数据集训练集样本可视化图片相对路径列表;attributes.val_sample_paths:该数据集验证集样本可视化图片相对路径列表;另外,数据集校验还对数据集中所有类别的样本数量分布情况进行了分析,并绘制了分布直方图(histogram.png):

(1)数据集格式转换
目标检测支持 VOC、LabelMe 格式的数据集转换为 COCO 格式。
数据集校验相关的参数可以通过修改配置文件中 CheckDataset 下的字段进行设置,配置文件中部分参数的示例说明如下:
CheckDataset:convert:enable: 是否进行数据集格式转换,目标检测支持 VOC、LabelMe 格式的数据集转换为 COCO 格式,默认为 False;src_dataset_type: 如果进行数据集格式转换,则需设置源数据集格式,默认为 null,可选值为 VOC、LabelMe 和 VOCWithUnlabeled、LabelMeWithUnlabeled ;
例如,您想转换 LabelMe 格式的数据集为 COCO 格式,以下面的LabelMe 格式的数据集为例,则需要修改配置如下:cd /path/to/paddlex
wget https://paddle-model-ecology.bj.bcebos.com/paddlex/data/det_labelme_examples.tar -P ./dataset
tar -xf ./dataset/det_labelme_examples.tar -C ./dataset/
......
CheckDataset:
......
convert:
enable: True
src_dataset_type: LabelMe
......
随后执行命令:
python main.py -c paddlex/configs/modules/object_detection/PicoDet-S.yaml \
-o Global.mode=check_dataset \
-o Global.dataset_dir=./dataset/det_labelme_examples
当然,以上参数同样支持通过追加命令行参数的方式进行设置,以 LabelMe 格式的数据集为例:
python main.py -c paddlex/configs/modules/object_detection/PicoDet-S.yaml \
-o Global.mode=check_dataset \
-o Global.dataset_dir=./dataset/det_labelme_examples \
-o CheckDataset.convert.enable=True \
-o CheckDataset.convert.src_dataset_type=LabelMe
(2)数据集划分
数据集划分的参数可以通过修改配置文件中 CheckDataset 下的字段进行设置,配置文件中部分参数的示例说明如下:
CheckDataset:split:enable: 是否进行重新划分数据集,为 True 时进行数据集格式转换,默认为 False;train_percent: 如果重新划分数据集,则需要设置训练集的百分比,类型为0-100之间的任意整数,需要保证和 val_percent 值加和为100;val_percent: 如果重新划分数据集,则需要设置验证集的百分比,类型为0-100之间的任意整数,需要保证和 train_percent 值加和为100;
例如,您想重新划分数据集为 训练集占比90%、验证集占比10%,则需将配置文件修改为:......
CheckDataset:
......
split:
enable: True
train_percent: 90
val_percent: 10
......
随后执行命令:
python main.py -c paddlex/configs/modules/object_detection/PicoDet-S.yaml \
-o Global.mode=check_dataset \
-o Global.dataset_dir=./dataset/det_coco_examples
数据划分执行之后,原有标注文件会被在原路径下重命名为 xxx.bak。
以上参数同样支持通过追加命令行参数的方式进行设置:
python main.py -c paddlex/configs/modules/object_detection/PicoDet-S.yaml \
-o Global.mode=check_dataset \
-o Global.dataset_dir=./dataset/det_coco_examples \
-o CheckDataset.split.enable=True \
-o CheckDataset.split.train_percent=90 \
-o CheckDataset.split.val_percent=10
output,如需指定保存路径,可通过配置文件中 -o Global.output 字段进行设置。在完成模型训练后,所有产出保存在指定的输出目录(默认为./output/)下,通常有以下产出:
train_result.json:训练结果记录文件,记录了训练任务是否正常完成,以及产出的权重指标、相关文件路径等;
train.log:训练日志文件,记录了训练过程中的模型指标变化、loss 变化等;config.yaml:训练配置文件,记录了本次训练的超参数的配置;.pdparams、.pdema、.pdopt.pdstate、.pdiparams、.json:模型权重相关文件,包括网络参数、优化器、EMA、静态图网络参数、静态图网络结构等;.pdmodel后缀文件)升级为json(现.json后缀文件),以兼容PIR体系,并获得更好的灵活性与扩展性。在模型评估时,需要指定模型权重文件路径,每个配置文件中都内置了默认的权重保存路径,如需要改变,只需要通过追加命令行参数的形式进行设置即可,如-o Evaluate.weight_path=./output/best_model/best_model.pdparams。
在完成模型评估后,会产出evaluate_result.json,其记录了评估的结果,具体来说,记录了评估任务是否正常完成,以及模型的评估指标,包含 AP;