🏡作者主页:点击!
🤖编程探索专栏:点击!
⏰️创作时间:2024年12月2日21点02分
神秘男子影,
秘而不宣藏。
泣意深不见,
男子自持重,
子夜独自沉。
论文链接
检测作为计算机视觉领域的一项重要任务,旨在从图像中准确地识别并定位出感兴趣的目标。近年来,随着深度学习技术的快速发展,目标检测算法取得了显著的进展。本文将带您回顾目标检测技术的发展历程,从早期的二阶段算法,到YOLO系列,再到如今的Grounding Dino。
二阶段目标检测算法
R-CNN(Regions with CNN features)
R-CNN是第一个将深度学习应用于目标检测的算法,于2014年由Girshick等人提出。R-CNN采用选择性搜索算法提取候选区域,然后利用卷积神经网络(CNN)提取特征,最后通过支持向量机(SVM)进行分类。
Fast R-CNN
为了解决R-CNN速度慢、重复计算的问题,Girshick于2015年提出了Fast R-CNN。Fast R-CNN采用ROI(Region of Interest)Pooling层,实现了候选区域的共享特征提取,大大提高了检测速度。
Faster R-CNN
2015年,Ren等人在Fast R-CNN的基础上提出了Faster R-CNN。Faster R-CNN引入了区域建议网络(RPN),实现了候选区域的端到端训练,进一步提高了检测速度和准确性。
YOLO系列
YOLO(You Only Look Once)模型是一种流行的实时目标检测算法,它将目标检测任务视为一个单一的回归问题,通过单个卷积神经网络(CNN)同时预测多个边界框和类别概率,实现了端到端的快速检测,极大地提高了检测速度,同时保持了较高的准确性,使其在视频监控、自动驾驶等实时应用场景中具有广泛的应用价值。
Grounding Dino
Grounding Dino模型是一种创新的视觉目标检测方法,它结合了自然语言处理和计算机视觉的技术,通过使用Transformer架构来实现对图像中目标的定位和描述。
第一段:模型架构 Grounding Dino模型的核心是一个基于Transformer的编码器-解码器结构。编码器用于提取图像的特征,而解码器则负责将自然语言查询与图像特征进行匹配,生成目标的定位信息。这种架构允许模型理解图像内容与文本描述之间的关联,从而无需传统的边界框标注,直接通过文本指令来定位图像中的目标。
第二段:工作原理 在执行目标检测时,Grounding Dino模型接收一个图像和一个相关的文本查询作为输入。模型首先使用编码器提取图像的深层特征,然后解码器将这些特征与文本查询中的单词进行交互,通过注意力机制找出与查询最相关的图像区域。最终,模型输出一个定位热图,指示查询文本所指目标在图像中的位置。
第三段:优势与应用 Grounding Dino模型的优势在于其无需精确的边界框标注,降低了数据准备的成本,并且能够处理细粒度的目标检测任务。此外,由于其基于文本的查询机制,模型在处理复杂场景和具有描述性需求的应用中表现出色。这使得Grounding Dino在图像检索、交互式视觉问答系统等领域具有广泛的应用潜力。
演示效果
TEXT_PROMPT = "chair . person . dog . cat ."
TEXT_PROMPT = "chair . person . dog . cat ."
Grounding DINO
Model Overall (总体架构)
输入:
Input Text: 输入文本,例如"cat . person . mouse ."或"A cat sets on a table."
Input Image: 输入图像。
Text and Image Backbone Networks (文本和图像主干网络)
Text Backbone: 提取文本特征。
Image Backbone: 提取图像特征。
Feature Enhancer (特征增强器)
接收原始的文本特征和图像特征,并对其进行增强处理。
Cross-Modality Decoder (跨模态解码器)
Language-guide Query Selection: 根据语言信息选择查询。
Cross-Modality Queries: 生成跨模态查询。
Model Outputs (模型输出)
包括对比损失(Contrastive loss)和定位损失(Localization loss)。
Feature Enhancer (特征增强器)
功能模块:
Text-to-image Cross-Attention: 利用文本特征对图像特征进行增强。
Image-to-text Cross-Attention: 利用图像特征对文本特征进行增强。
Self-Attention Mechanism: 对文本和图像特征进行自注意力处理。
Feed Forward Network (FFN): 对增强后的特征进行进一步处理。
流程:
文本特征和图像特征分别经过各自的主干网络得到初步表示。
这些初步表示被送入特征增强器中。
特征增强器首先通过文本到图像的跨注意力机制增强图像特征,然后通过图像到文本的跨注意力机制增强文本特征。
增强后的特征再经过自注意力机制进一步优化。
最后,通过前馈神经网络(FFN)对特征进行最终处理。
A Decoder Layer (解码器层)
功能模块:
Cross-Modality Attention: 更新跨模态查询。
Self-Attention Mechanism: 对文本和图像特征进行自注意力处理。
Feed Forward Network (FFN): 对处理后的特征进行进一步处理。
流程:
跨模态查询通过跨模态注意力机制进行更新。
更新后的查询与文本和图像特征一起进入解码器层。
解码器层首先对文本和图像特征进行自注意力处理。
然后,通过前馈神经网络(FFN)对特征进行进一步处理。
Grounding DINO使用代码
预测多个类别
from groundingdino.util.inference import load_model, load_image, predict, annotate
import cv2
model = load_model("groundingdino/config/GroundingDINO_SwinT_OGC.py", "groundingdino/weights/groundingdino_swint_ogc.pth")
IMAGE_PATH = ".asset/cat_dog.jpeg"
TEXT_PROMPT = "chair . person . dog . cat ."
BOX_TRESHOLD = 0.35
TEXT_TRESHOLD = 0.25
image_source, image = load_image(IMAGE_PATH)
boxes, logits, phrases = predict(
model=model,
image=image,
caption=TEXT_PROMPT,
box_threshold=BOX_TRESHOLD,
text_threshold=TEXT_TRESHOLD,
device="cuda"
)
annotated_frame = annotate(image_source=image_source, boxes=boxes, logits=logits, phrases=phrases)
cv2.imwrite("annotated_image.jpg", annotated_frame)
模型训练
将model.eval()改成model.train()
修改代码67,68行
微调训练框架
from groundingdino.util.inference import load_model, load_image, predict, annotate
import cv2
model = load_model("groundingdino/config/GroundingDINO_SwinT_OGC.py", "groundingdino/weights/groundingdino_swint_ogc.pth")
"""
for epoch in range(epoches):
# 加载符合模型数据集标准的数据:每一次输入是一个列表,每一项是一个字典
for data in train_dataloader:
IMAGE_PATH=data['image_path']
image_source, image = load_image(IMAGE_PATH)
boxes, logits, phrases = predict(
model=model,
image=image,
caption=TEXT_PROMPT,
box_threshold=BOX_TRESHOLD,
text_threshold=TEXT_TRESHOLD,
device="cuda"
)
loss=loss_function(output,data['real_predict'])
optimiezer.zero_gard()
loss.backward()
optimiezer.step()
"""
模型部署
Grounding DINO权重下载
https://hf-mirror.com/ShilongLiu/GroundingDINO/tree/main
放入附件内容中:
BERT权重下载
https://hf-mirror.com/google-bert/bert-base-uncased/tree/main
随便放入那个文件夹都行,例如"D:/bert-base-uncased"
修改config文件:
安装依赖配置
设置环境变量
然后进入附件中:
pip install .
最后,运行代码
python demo.py
成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"
"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"
神秘泣男子