一、引言
随着大模型技术向边缘侧渗透,"文本即查询"的开放词汇目标检测正在成为工业视觉、智能安防和机器人感知的核心能力。GroundingDINO 作为当前最具代表性的多模态检测模型之一,能够根据任意自然语言提示在图像中定位目标,无需针对特定类别重新训练。本文将结合 sophon-demo 官方例程,详细介绍如何将 GroundingDINO 移植并部署到土星云 SE110S 系列加速卡上,涵盖算法原理、典型场景、模型编译与推理全流程。
二、GroundingDINO 算法简介
2.1 核心思想
GroundingDINO 由 IDEA Research 于 2023 年提出,其名称中的 "Grounding" 指代视觉定位(Visual Grounding),"DINO" 则继承自 DETR 系列的端到端检测范式。它将文本提示与图像输入共同送入模型,输出与文本语义对齐的检测框,从而实现"说什么、检什么"的开放词汇检测能力。
2.2 网络架构
模型整体由四个核心模块构成:图像主干(Swin-T)、文本主干(BERT-base)、特征融合器(Feature Enhancer)以及语言引导的查询选择与跨模态解码器。图像分支提取多尺度视觉特征,文本分支输出词级嵌入,二者通过双向注意力完成深度融合;解码器在融合特征上直接生成带类别标签的边界框,省去了传统检测器的 NMS 后处理依赖。
2.3 技术亮点
其一,开放词汇:支持 COCO 以外的任意类别描述,甚至可以用 "a person wearing red shirt" 这类短语进行细粒度检索;
其二,零样本迁移:在不微调的情况下即可在下游数据集取得较强表现,在 COCO 上零样本 mAP 可达 52.5;
其三,端到端:基于集合预测与二分匹配,无需锚框设计与手工后处理,推理流程简洁;其四,可作为开放词汇检测器与 SAM 等分割模型级联,构成"检测+分割"的视觉基础模型流水线,广泛应用于自动标注与图像编辑场景。
2.4 与传统检测器的对比
相比 YOLO、Faster R-CNN 等闭集检测器,GroundingDINO 的最大区别在于输入侧引入了文本模态。传统检测器只能输出训练时定义的固定类别,新增类别需要重新标注与训练;而 GroundingDINO 通过文本提示即可动态切换检测目标,在类别频繁变化的场景下大幅降低了迭代成本。当然,这种灵活性也带来了更大的模型体量与计算开销,因此在边缘端部署时需要针对硬件特性做专门优化。
三、典型使用场景
GroundingDINO 的开放词汇特性使其特别适合类别不固定、需求频繁变化的边缘场景:
(1)工业质检:产线上缺陷种类随批次变化,工程师可通过文本提示灵活定义"划痕、凹陷、异物"等缺陷,无需为每条产线重训模型。
(2)智能安防:在边缘盒子中根据安保人员输入的"未戴安全帽人员""遗留包裹"等自然语言指令实时检索画面。
(3)机器人感知:服务机器人通过语音指令识别"桌子上的蓝色杯子",完成抓取前的目标定位。
(4)数据标注自动化:作为预标注工具,用文本提示批量生成检测框,大幅降低人工标注成本。
(5)多模态 Agent 视觉前端:为大语言模型驱动的智能体提供可交互的视觉感知接口。
四、土星云 SE110S 平台概述
土星云 SE110S 系列是面向边缘推理场景的高性能 AI 加速产品,基于 BM1684X 芯片,单卡 INT8 算力可达 32TOPS,支持 FP16/INT8 混合精度推理,具备典型功耗低、视频解码路数多、工业级宽温等特性,非常适合在边缘服务器、工控机和智能盒中部署多模态大模型。SE110S 提供 PCIe 与 SoC 两种形态,配套完整的 TPU-MLIR 编译工具链和 SAIL 推理接口,支持 PyTorch、ONNX 等主流框架模型的一键转换。
五、模型部署全流程
5.1 环境与代码准备
首先克隆官方例程仓库并进入 GroundingDINO 目录,执行下载脚本获取预编译 BModel、ONNX 模型、测试数据与 BERT 分词器:
git clone https://github.com/sophgo/sophon-demo.git |
下载完成后,models/BM1684X 目录下会得到 groundingdino_bm1684x_fp16.bmodel,这是可直接在 SE110S 上运行的 FP16 模型;datasets 目录包含测试图片、视频与 COCO 类别文件。
5.2 模型编译
若需自行从 ONNX 编译 BModel,需安装对应版本的 TPU-MLIR 工具链,并在 scripts/gen_fp16bmodel_mlir.sh 中配置 ONNX 路径、输出目录与输入 shape,随后指定目标平台执行:
./scripts/gen_fp16bmodel_mlir.sh bm1684x |
编译脚本会调用 model_transform 与 model_deploy 完成图优化、算子降级与 FP16 量化,最终生成可在 SE110S 上加载的 BModel 文件。
5.3 Python 推理
Python 例程基于 PIL 与 SAIL 接口,入口脚本为 python/groundingdino_pil.py。安装依赖后执行:
cd python |
其中 --text_prompt 支持以英文句号分隔多个类别,模型会根据提示输出对应检测框与置信度。推理结果会保存为带标注的图片,可直观验证开放词汇检测效果。需要注意的是,文本提示建议使用英文单词或简短短语,类别之间用英文句号分隔并在末尾保留句号,这与官方仓库的输入格式保持一致。
5.4 C++ 推理
对性能要求更高的生产环境,推荐使用 cpp/groundingdino_sail 下的 C++ 例程。该实现基于 SAIL 封装,预处理与后处理均在 C++ 侧完成,避免了 Python 开销。编译方式如下:
cd cpp/groundingdino_sail |
六、性能测试与优化建议
使用 bmrt_test 可测试模型的理论推理时间。在 SE110S(BM1684X)上,groundingdino_bm1684x_fp16.bmodel 的单图推理约为 285ms;完整程序端到端性能中,C++ 版本的解码、预处理、推理、后处理分别约为 5.8ms、6.1ms、468ms、6.1ms,显著优于 Python 版本的预处理耗时。
优化建议:
- 优先使用 C++ SAIL 接口,可将预处理时间从 150ms 级降至 6ms 级,端到端帧率提升明显;
- 对输入分辨率做合理缩放,在精度允许范围内降低图像尺寸可线性减少推理耗时,官方模型默认输入为 800×1333;
- 文本提示尽量精简,过长的句子会增加 BERT 编码与注意力计算开销;
- 多卡场景可通过 devid 绑定不同 TPU 核实现流水线并行;
- 若对实时性要求极高,可尝试 INT8 量化进一步压缩模型体积与推理延迟,但需关注量化精度损失。
七、总结
GroundingDINO 将自然语言理解与目标检测深度融合,为边缘端带来了灵活、可交互的视觉感知能力。借助土星云 SE110S 系列的算力与完整工具链,开发者可以快速完成从 ONNX 到 BModel 的编译转换,并通过 Python 或 C++ 接口实现高效推理。无论是工业质检、智能安防还是机器人感知,开放词汇检测都正在成为边缘 AI 应用的新范式,而 SE110S 与 GroundingDINO 的组合为这一范式提供了可落地的工程方案。