跳转至

开放词汇目标检测模块使用教程

一、概述

开放词汇目标检测是当前一种先进的目标检测技术,旨在突破传统目标检测的局限性。传统方法仅能识别预定义类别的物体,而开放词汇目标检测允许模型识别未在训练中出现的物体。通过结合自然语言处理技术,利用文本描述来定义新的类别,模型能够识别和定位这些新物体。这使得目标检测更具灵活性和泛化能力,具有重要的应用前景。

二、支持模型列表

模型模型下载链接 mAP(0.5:0.95) mAP(0.5) GPU推理耗时(ms) CPU推理耗时 (ms) 模型存储大小(M) 介绍
GroundingDINO-T推理模型 49.4 64.4 253.72 1807.4 658.3 基于O365,GoldG,Cap4M三个数据集训练的开放词汇目标目标检测模型。文本编码器采用Bert,视觉模型部份整体采用DINO,额外设计了一些跨模态融合模块,在开放词汇目标检测领域取得了较好的效果。

测试环境说明:

  • 性能测试环境
  • 测试数据集:基于O365,GoldG,Cap4M三个数据集训练的开放词汇目标检测模型。
  • 硬件配置

    • GPU:NVIDIA Tesla T4
    • CPU:Intel Xeon Gold 6271C @ 2.60GHz
    • 其他环境:Ubuntu 20.04 / cuDNN 8.6 / TensorRT 8.5.2.2
  • 推理模式说明

模式 GPU配置 CPU配置 加速技术组合
常规模式 FP32精度 / 无TRT加速 FP32精度 / 8线程 PaddleInference
高性能模式 选择先验精度类型和加速策略的最优组合 FP32精度 / 8线程 选择先验最优后端(Paddle/OpenVINO/TRT等)

三、快速集成

❗ 在快速集成前,请先安装 PaddleX 的 wheel 包,详细请参考 PaddleX本地安装教程

完成whl包的安装后,几行代码即可完成开放词汇目标检测模块的推理,可以任意切换该模块下的模型,您也可以将开放词汇目标检测的模块中的模型推理集成到您的项目中。运行以下代码前,请您下载示例图片到本地。

from paddlex import create_model
model = create_model(model_name='GroundingDINO-T')
results = model.predict(input='open_vocabulary_detection.jpg', prompt = 'bus . walking man . rearview mirror .', batch_size=1)
for res in results:
    res.print()
    res.save_to_img(f"./output/")
    res.save_to_json(f"./output/res.json")

运行后,得到的结果为:

{'res': "{'input_path': 'open_vocabulary_detection.jpg', 'boxes': [{'coordinate': [112.10542297363281, 117.93667602539062, 514.35693359375, 382.10150146484375], 'label': 'bus', 'score': 0.9348853230476379}, {'coordinate': [264.1828918457031, 162.6674346923828, 286.8844909667969, 201.86187744140625], 'label': 'rearview mirror', 'score': 0.6022508144378662}, {'coordinate': [606.1133422851562, 254.4973907470703, 622.56982421875, 293.7867126464844], 'label': 'walking man', 'score': 0.4384709894657135}, {'coordinate': [591.8192138671875, 260.2451171875, 607.3953247070312, 294.2210388183594], 'label': 'man', 'score': 0.3573091924190521}]}"}
运行结果参数含义如下: - input_path: 表示输入待预测图像的路径 - boxes: 每个预测出的object的信息 - label: 类别名称 - score: 预测得分 - coordinate: 预测框的坐标,格式为[xmin, ymin, xmax, ymax]

可视化图片如下:

相关方法、参数等说明如下:

  • create_model实例化开放词汇目标检测模型(此处以GroundingDINO-T为例),具体说明如下:
参数 参数说明 参数类型 可选项 默认值
model_name 模型名称 str
model_dir 模型存储路径 str
thresholds 模型使用的过滤阈值 dict/None None
  • 其中,model_name 必须指定,指定 model_name 后,默认使用 PaddleX 内置的模型参数,在此基础上,指定 model_dir 时,使用用户自定义的模型。
  • thresholds模型使用的过滤阈值,默认为None,表示使用上一层设置,参数设置的优先级从高到低为:predict参数传入 > create_model初始化传入 > yaml配置文件设置
  • GroundingDINO系列模型在推理时需要设置两个阈值,分别为box_threshold(默认0.3)和text_threshold(默认0.25),参数传入形式为{"box_threshold": 0.3, "text_threshold": 0.25}

  • 调用开放词汇目标目标检测模型的 predict() 方法进行推理预测,predict() 方法参数有 inputbatch_sizethresholdsprompt,具体说明如下:

参数 参数说明 参数类型 可选项 默认值
input 待预测数据,支持多种输入类型 Python Var/str/list
  • Python变量,如numpy.ndarray表示的图像数据
  • 文件路径,如图像文件的本地路径:/root/data/img.jpg
  • URL链接,如图像文件的网络URL:示例
  • 本地目录,该目录下需包含待预测数据文件,如本地路径:/root/data/
  • 列表,列表元素需为上述类型数据,如[numpy.ndarray, numpy.ndarray][\"/root/data/img1.jpg\", \"/root/data/img2.jpg\"][\"/root/data1\", \"/root/data2\"]
batch_size 批大小 int 任意整数 1
thresholds 模型使用的过滤阈值 dict/None
  • None,表示沿用上一层设置, 参数设置优先级从高到低为: predict参数传入 > create_model初始化传入 > yaml配置文件设置
  • dict,如{"box_threshold": 0.3, "text_threshold": 0.25},表示推理时box_threshold设置为0.3,text_threshold设置为0.25
None
prompt 模型预测使用的提示词 str 任意字符串
  • 对预测结果进行处理,每个样本的预测结果均为对应的Result对象,且支持打印、保存为图片、保存为json文件的操作:
方法 方法说明 参数 参数类型 参数说明 默认值
print() 打印结果到终端 format_json bool 是否对输出内容进行使用 JSON 缩进格式化 True
indent int 指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_jsonTrue 时有效 4
ensure_ascii bool 控制是否将非 ASCII 字符转义为 Unicode。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_jsonTrue时有效 False
save_to_json() 将结果保存为json格式的文件 save_path str 保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致
indent int 指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_jsonTrue 时有效 4
ensure_ascii bool 控制是否将非 ASCII 字符转义为 Unicode。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_jsonTrue时有效 False
save_to_img() 将结果保存为图像格式的文件 save_path str 保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致
  • 此外,也支持通过属性获取带结果的可视化图像和预测结果,具体如下:
属性 属性说明
json 获取预测的json格式的结果
img 获取格式为dict的可视化图像

关于更多 PaddleX 的单模型推理的 API 的使用方法,可以参考PaddleX单模型Python脚本使用说明

四、二次开发

当前模块暂时不支持微调训练,仅支持推理集成。关于该模块的微调训练,计划在未来支持。

评论