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

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

参考资料


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

相关推荐
Ai缝合怪 博士1 小时前
【CVPR 2025即插即用】卷积模块篇 | EBlock有效编码器模块,适合低光图像增强、图像分类、实例分割、语义分割、图像去噪、边缘检测、医学图像分割、遥感目标检测等CV任务通用,涨点起飞
目标检测·低光增强·2026顶会顶刊即插即用模块·eblock有效编码器模块·图像分类、实例分割、语义分割·图像去噪、图像去模糊·darkir低光增强模型
星云_byto1 小时前
精读双模态目标检测系列八|TGRS 顶刊力作!CMFADet 狂涨 4.02% mAP,空域频域双增强 + 通道交互融合,轻量 108FPS 缝合即涨点!
人工智能·目标检测·计算机视觉·红外图像·rgb-ir融合
codefan※1 小时前
pytorch安装流程
人工智能·pytorch·python
KaMeidebaby1 小时前
卡梅德生物技术快报|免疫共沉淀 - Co-IP 实验在转录因子 ATF3/Smad4 蛋白互作研究中的应用实例解析
网络·人工智能·网络协议·tcp/ip·其他·算法·新浪微博
C_c..1 小时前
#YOLOv11 目标检测训练结果怎么看?一文看懂 Precision、Recall、mAP 指标
人工智能·yolo·目标检测·机器学习·计算机视觉·目标跟踪
笑脸惹桃花1 小时前
目标检测:YOLOv12环境配置,超详细,适合0基础纯小白
深度学习·yolo·目标检测·目标跟踪·yolov12
kTR2hD1qb1 小时前
深度学习进阶(二十五)RoPE:现代 NLP 的位置编码范式
人工智能·深度学习·自然语言处理
我爱cope1 小时前
【Agent智能体11 | 反思设计模式-评估反射的影响的方法】
人工智能·设计模式·语言模型·职场和发展
钓了猫的鱼儿1 小时前
基于深度学习+AI的无人机违规防控目标检测与预警系统(Python源码+数据集+UI可视化界面+YOLOv11训练结果)
人工智能·深度学习·无人机