一文吃透 Grounding DINO:从原理到实战,文本驱动目标检测入门教程【附源码】

《博主简介》

小伙伴们好,我是阿旭。
专注于计算机视觉领域,包括目标检测、图像分类、图像分割和目标跟踪等项目开发,提供模型对比实验、答疑辅导等。

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称 项目名称
1.【人脸识别与管理系统开发】 2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】 4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】 6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】 8.【基于深度学习的行人跌倒检测系统】
9.【基于深度学习的PCB板缺陷检测系统】 10.【基于深度学习的生活垃圾分类目标检测系统】
11.【基于深度学习的安全帽目标检测系统】 12.【基于深度学习的120种犬类检测与识别系统】
13.【基于深度学习的路面坑洞检测系统】 14.【基于深度学习的火焰烟雾检测系统】
15.【基于深度学习的钢材表面缺陷检测系统】 16.【基于深度学习的舰船目标分类检测系统】
17.【基于深度学习的西红柿成熟度检测系统】 18.【基于深度学习的血细胞检测与计数系统】
19.【基于深度学习的吸烟/抽烟行为检测系统】 20.【基于深度学习的水稻害虫检测与识别系统】
21.【基于深度学习的高精度车辆行人检测与计数系统】 22.【基于深度学习的路面标志线检测与识别系统】
23.【基于深度学习的智能小麦害虫检测识别系统】 24.【基于深度学习的智能玉米害虫检测识别系统】
25.【基于深度学习的200种鸟类智能检测与识别系统】 26.【基于深度学习的45种交通标志智能检测与识别系统】
27.【基于深度学习的人脸面部表情识别系统】 28.【基于深度学习的苹果叶片病害智能诊断系统】
29.【基于深度学习的智能肺炎诊断系统】 30.【基于深度学习的葡萄簇目标检测系统】
31.【基于深度学习的100种中草药智能识别系统】 32.【基于深度学习的102种花卉智能识别系统】
33.【基于深度学习的100种蝴蝶智能识别系统】 34.【基于深度学习的水稻叶片病害智能诊断系统】
35.【基于与ByteTrack的车辆行人多目标检测与追踪系统】 36.【基于深度学习的智能草莓病害检测与分割系统】
37.【基于深度学习的复杂场景下船舶目标检测系统】 38.【基于深度学习的农作物幼苗与杂草检测系统】
39.【基于深度学习的智能道路裂缝检测与分析系统】 40.【基于深度学习的葡萄病害智能诊断与防治系统】
41.【基于深度学习的遥感地理空间物体检测系统】 42.【基于深度学习的无人机视角地面物体检测系统】
43.【基于深度学习的木薯病害智能诊断与防治系统】 44.【基于深度学习的野外火焰烟雾检测系统】
45.【基于深度学习的脑肿瘤智能检测系统】 46.【基于深度学习的玉米叶片病害智能诊断与防治系统】
47.【基于深度学习的橙子病害智能诊断与防治系统】 48.【基于深度学习的车辆检测追踪与流量计数系统】
49.【基于深度学习的行人检测追踪与双向流量计数系统】 50.【基于深度学习的反光衣检测与预警系统】
51.【基于深度学习的危险区域人员闯入检测与报警系统】 52.【基于深度学习的高密度人脸智能检测与统计系统】
53.【基于深度学习的CT扫描图像肾结石智能检测系统】 54.【基于深度学习的水果智能检测系统】
55.【基于深度学习的水果质量好坏智能检测系统】 56.【基于深度学习的蔬菜目标检测与识别系统】
57.【基于深度学习的非机动车驾驶员头盔检测系统】 58.【太基于深度学习的阳能电池板检测与分析系统】
59.【基于深度学习的工业螺栓螺母检测】 60.【基于深度学习的金属焊缝缺陷检测系统】
61.【基于深度学习的链条缺陷检测与识别系统】 62.【基于深度学习的交通信号灯检测识别】
63.【基于深度学习的草莓成熟度检测与识别系统】 64.【基于深度学习的水下海生物检测识别系统】
65.【基于深度学习的道路交通事故检测识别系统】 66.【基于深度学习的安检X光危险品检测与识别系统】
67.【基于深度学习的农作物类别检测与识别系统】 68.【基于深度学习的危险驾驶行为检测识别系统】
69.【基于深度学习的维修工具检测识别系统】 70.【基于深度学习的维修工具检测识别系统】
71.【基于深度学习的建筑墙面损伤检测系统】 72.【基于深度学习的煤矿传送带异物检测系统】
73.【基于深度学习的老鼠智能检测系统】 74.【基于深度学习的水面垃圾智能检测识别系统】
75.【基于深度学习的遥感视角船只智能检测系统】 76.【基于深度学习的胃肠道息肉智能检测分割与诊断系统】
77.【基于深度学习的心脏超声图像间隔壁检测分割与分析系统】 78.【基于深度学习的心脏超声图像间隔壁检测分割与分析系统】
79.【基于深度学习的果园苹果检测与计数系统】 80.【基于深度学习的半导体芯片缺陷检测系统】
81.【基于深度学习的糖尿病视网膜病变检测与诊断系统】 82.【基于深度学习的运动鞋品牌检测与识别系统】
83.【基于深度学习的苹果叶片病害检测识别系统】 84.【基于深度学习的医学X光骨折检测与语音提示系统】
85.【基于深度学习的遥感视角农田检测与分割系统】 86.【基于深度学习的运动品牌LOGO检测与识别系统】
87.【基于深度学习的电瓶车进电梯检测与语音提示系统】 88.【基于深度学习的遥感视角地面房屋建筑检测分割与分析系统】
89.【基于深度学习的医学CT图像肺结节智能检测与语音提示系统】 90.【基于深度学习的舌苔舌象检测识别与诊断系统】
91.【基于深度学习的蛀牙智能检测与语音提示系统】 92.【基于深度学习的皮肤癌智能检测与语音提示系统】
93.【基于深度学习的工业压力表智能检测与读数系统】 94.【基于深度学习的CT扫描图像肝脏肿瘤智能检测与分析系统】
95.【基于深度学习的CT扫描图像脑肿瘤智能检测与分析系统】 96.【基于深度学习的甲状腺结节智能检测分割与诊断系统】

二、机器学习实战专栏【链接】 ,已更新31期,欢迎关注,持续更新中~~

三、深度学习【Pytorch】专栏【链接】

四、【Stable Diffusion绘画系列】专栏【链接】

五、YOLOv8改进专栏【链接】,持续更新中~~

六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

目录

  • 引言
  • 一、3类目标检测器:闭集、开集、开放词汇
    • [1. 闭集目标检测器(Closed-set Object Detectors)](#1. 闭集目标检测器(Closed-set Object Detectors))
    • [2. 开集目标检测器(Open-set Object Detectors)](#2. 开集目标检测器(Open-set Object Detectors))
    • [3. 开放词汇型目标检测器(Open-vocabulary Object Detectors)](#3. 开放词汇型目标检测器(Open-vocabulary Object Detectors))
  • [二、Grounding DINO 核心原理拆解](#二、Grounding DINO 核心原理拆解)
    • [1. 图像特征提取(基于 DINO)](#1. 图像特征提取(基于 DINO))
    • [2. 文本特征编码(基于 BERT)](#2. 文本特征编码(基于 BERT))
    • [3. 跨注意力融合(Cross Attention)](#3. 跨注意力融合(Cross Attention))
    • [4. 目标预测(Language-Guided Query Selection)](#4. 目标预测(Language-Guided Query Selection))
  • 三、环境搭建与安装
    • [1. 前置要求](#1. 前置要求)
    • [2. 安装步骤(命令行执行)](#2. 安装步骤(命令行执行))
  • [四、实战!用文本 Prompt 检测物体](#四、实战!用文本 Prompt 检测物体)
    • [1. 导入必要库](#1. 导入必要库)
    • [2. 检查 GPU 是否可用](#2. 检查 GPU 是否可用)
    • [3. 加载预训练模型](#3. 加载预训练模型)
    • [4. 用文本 Prompt 检测图片](#4. 用文本 Prompt 检测图片)
    • [5. 结果示例](#5. 结果示例)
  • 五、总结与展望
  • 参考资料

引言

在深度学习目标检测领域,我们早已习惯了这样的流程:搭建 GPU 环境、准备标注数据集、训练 YOLO/Faster R-CNN/DETR 等模型...... 整套流程步骤繁琐,还受数据集质量和算力限制,耗时耗力。

但如果告诉你,有一款工具能跳过所有训练步骤,直接通过文本描述就能检测图片中的任意物体------比如输入"左车道的红色汽车""可爱的婴儿""青苹果",就能精准输出目标的边界框和置信度,你会不会心动?

它就是 Grounding DINO ------一款强大的开放词汇型目标检测器。今天这篇文章,我们就从核心概念、工作原理、环境搭建到实战演示,带你一站式掌握这款工具!

一、3类目标检测器:闭集、开集、开放词汇

在深入 Grounding DINO 之前,我们需要先明确三类目标检测器的区别,这样才能更好地理解它的优势:

1. 闭集目标检测器(Closed-set Object Detectors)

  • 最常见的目标检测模型类型,比如 YOLO、SSD、Faster R-CNN、DETR 等
  • 只能检测预定义标签(如"汽车""行人""飞机"),标签范围固定
  • 优势:数据集质量高时效果稳定;劣势:需手动标注数据集,无法检测未定义类别

2. 开集目标检测器(Open-set Object Detectors)

  • 既能检测训练集中的已知类别,也能识别未知类别(标注为"unknown")
  • 优势:避免将未知物体误判为已知类别;劣势:模型选择少,实际应用场景有限(代表模型:Proser、OpenDet)

3. 开放词汇型目标检测器(Open-vocabulary Object Detectors)

  • 无需预定义标签,支持任意相关文本输入(单词、短语、句子均可)
  • 直接通过文本描述匹配图片中的目标,打破类别限制
  • 代表模型:Grounding DINO、GLIP、OWL-ViT(本文主角就是 Grounding DINO!)

二、Grounding DINO 核心原理拆解

Grounding DINO 之所以强大,核心在于它将"图像特征提取"与"文本语义理解"深度融合,整个工作流程可分为4步:

1. 图像特征提取(基于 DINO)

  • DINO 是一种自监督学习方法,无需人工标注数据,直接从图像中学习特征并生成特征图
  • Grounding DINO 采用预训练的 Vision Transformer(ViT-B/ViT-L)作为图像编码器,高效提取图像全局与局部特征

2. 文本特征编码(基于 BERT)

  • 通过 BERT 文本编码器,将输入的文本 Prompt(如"黑色的狗""白色的猫")转化为嵌入令牌(embedding tokens)
  • 这些令牌在嵌入空间中表征文本语义,语义相似的文本会聚集在同一区域

3. 跨注意力融合(Cross Attention)

  • 核心环节:通过跨注意力机制,建立图像特征与文本嵌入的关联,实现"文本-图像对齐"
  • 简单说:让模型知道"文本描述的目标"对应"图像中的哪个区域"

4. 目标预测(Language-Guided Query Selection)

  • 通过"语言引导查询选择模块"筛选出最相关的融合特征
  • 输入改进后的 DETR 检测头,最终输出目标的边界框(boxes)、置信度(logits)和对应文本短语(phrases)

三、环境搭建与安装

1. 前置要求

  • 已安装 Python 3.8+
  • GPU 支持(可选但推荐,需安装对应版本的 CUDA)
  • PyTorch 1.17+(GPU 版需匹配 CUDA 版本)

2. 安装步骤(命令行执行)

(1)克隆 Grounding DINO 仓库

bash 复制代码
git clone https://github.com/IDEA-Research/GroundingDINO.git

(2)安装依赖包

bash 复制代码
cd GroundingDINO/
pip install -e .

(3)下载预训练模型权重

bash 复制代码
mkdir weights  # 创建权重文件夹
cd weights
# 下载预训练权重文件
wget -q https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth
cd ..

(4)GPU 环境报错解决

若搭建 GPU 环境后出现 NameError: name '_C' is not defined,需先配置 CUDA 环境变量,再重新安装依赖:

bash 复制代码
# 替换为你的 CUDA 安装路径(如 /usr/local/cuda-12.9)
export CUDA_HOME=/path/to/cuda-12.9
pip install -e .  # 重新安装依赖

四、实战!用文本 Prompt 检测物体

环境搭建完成后,直接上代码!我们将用 Jupyter Notebook 演示完整流程,新手也能轻松跟上~

1. 导入必要库

python 复制代码
import cv2
from PIL import Image
import numpy as np
import torch
from torchvision.ops import box_convert
from groundingdino.models import build_model
from groundingdino.util.slconfig import SLConfig
from groundingdino.util.utils import clean_state_dict
from groundingdino.util.inference import annotate, load_image, predict
import groundingdino.datasets.transforms as T
from huggingface_hub import hf_hub_download

2. 检查 GPU 是否可用

python 复制代码
# 输出为 True 说明 GPU 环境配置成功
print(torch.cuda.is_available())

3. 加载预训练模型

python 复制代码
def load_model_hf(repo_id, filename, ckpt_config_filename, device='cpu'):
    # 从 Hugging Face 下载配置文件
    cache_config_file = hf_hub_download(repo_id=repo_id, filename=ckpt_config_filename)
    args = SLConfig.fromfile(cache_config_file)
    model = build_model(args)
    args.device = device
    
    # 下载并加载模型权重
    cache_file = hf_hub_download(repo_id=repo_id, filename=filename)
    checkpoint = torch.load(cache_file, map_location='cpu')
    log = model.load_state_dict(clean_state_dict(checkpoint['model']), strict=False)
    print(f"模型加载成功:{cache_file} \n => {log}")
    model.eval()  # 切换到推理模式
    return model

# 配置模型参数(直接使用 Hugging Face 上的预训练模型)
ckpt_repo_id = "ShilongLiu/GroundingDINO"
ckpt_filename = "groundingdino_swint_ogc.pth"
ckpt_config_filename = "GroundingDINO_SwinT_OGC.cfg.py"

# 加载模型(GPU 可用时替换 device='cuda')
model = load_model_hf(ckpt_repo_id, ckpt_filename, ckpt_config_filename, device='cuda')

4. 用文本 Prompt 检测图片

python 复制代码
# 1. 配置参数
TEXT_PROMPT = 'black dog, white cat'  # 多个文本 Prompt 用句号分隔
BOX_TRESHOLD = 0.45  # 边界框置信度阈值(可调整)
TEXT_TRESHOLD = 0.25  # 文本匹配阈值(可调整)

# 2. 加载测试图片(替换为你的图片路径)
local_image_path = "test_image.jpg"
image_source, image = load_image(local_image_path)

# 3. 执行目标检测
boxes, logits, phrases = predict(
    model=model,
    image=image,
    caption=TEXT_PROMPT,
    box_threshold=BOX_TRESHOLD,
    text_threshold=TEXT_TRESHOLD
)

# 4. 绘制边界框和标签
annotated_frame = annotate(
    image_source=image_source,
    boxes=boxes,
    logits=logits,
    phrases=phrases
)
# 转换图像通道(BGR → RGB,适配 PIL 显示)
annotated_frame = annotated_frame[..., ::-1]

# 5. 输出结果
print(f"检测到的目标数量:{len(boxes)}")
print(f"边界框坐标:{boxes}")
print(f"置信度:{logits}")
print(f"匹配的文本短语:{phrases}")

# 显示标注后的图片
Image.fromarray(annotated_frame)

5. 结果示例

运行代码后,你会得到类似这样的输出:

复制代码
检测到的目标数量:2
边界框坐标:tensor([[0.2412, 0.6010, 0.4580, 0.7889], [0.7945, 0.4216, 0.3380, 0.6429]])
置信度:tensor([0.9110, 0.5470])
匹配的文本短语:['black dog', 'white cat']

同时会显示标注了"黑色的狗""白色的猫"边界框和置信度的图片,检测效果一目了然~

五、总结与展望

Grounding DINO 最核心的优势在于打破了传统目标检测的类别限制------无需标注数据集、无需训练,只要输入文本描述,就能检测任意物体,极大降低了目标检测的使用门槛。

无论是快速原型开发、小众场景检测(如"公交车旁的足球运动员""货架上的绿色苹果"),还是科研实验,它都能发挥巨大作用。

参考资料


好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

相关推荐
天一生水water26 分钟前
变分模态分解(VMD)的教程
人工智能
荆棘鸟智能34 分钟前
林业遥感长势评估怎么做?从NDVI时序分析到LiDAR蓄积量回归
人工智能·算法·智慧林业
代码方舟43 分钟前
数据科学风控实战:基于天远全能消金报告构建自动化信用评估网关
运维·人工智能·自动化
Yan-英杰44 分钟前
2026年数据采集服务怎么选?4大主流平台(亮数据 Bright Data、Apify、ScrapingBee、Zyte)深度对比
人工智能·神经网络·microsoft·机器学习·ai开发工具
xiaoqi01951 小时前
机器学习因子分析实战:从量化特征到可视化决策
人工智能·python·机器学习
代码AI弗森1 小时前
Twilio 与 OpenAI 合作调研:从验证码客户到实时语音分发层
人工智能
m0_587383001 小时前
深度解析24小时自助健身房系统开发:从架构设计到落地部署
人工智能·小程序·数据挖掘·系统架构·需求分析
zhiyouTech1 小时前
实体基因做底座:新港智优科技旗下机灵AI的GEO增长服务体系观察
人工智能·科技
dozenyaoyida1 小时前
AI与大模型新闻日报 | 2026-09-30
大数据·人工智能·大模型·新闻
液态不合群1 小时前
AI低代码选型终局:SaaS轻量化vs私有化可控性深度博弈
人工智能·低代码·数字化·ai低代码