新一代零样本无训练目标检测

🏡作者主页:点击!

🤖编程探索专栏:点击!

⏰️创作时间:2024年12月2日21点02分


神秘男子影,

秘而不宣藏。

泣意深不见,

男子自持重,

子夜独自沉。

论文链接

点击开启你的论文编程之旅https://www.aspiringcode.com/content?id=17320697597148&uid=01ec6d85f5984256b968a6976921794c

检测作为计算机视觉领域的一项重要任务,旨在从图像中准确地识别并定位出感兴趣的目标。近年来,随着深度学习技术的快速发展,目标检测算法取得了显著的进展。本文将带您回顾目标检测技术的发展历程,从早期的二阶段算法,到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

成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"

"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"

神秘泣男子

相关推荐
Donvink17 分钟前
Transformers在计算机视觉领域中的应用【第3篇:Swin Transformer——多层次的Vision Transformer】
人工智能·深度学习·目标检测·计算机视觉·transformer
龙的爹233323 分钟前
2024论文翻译 | Multi-Review Fusion-in-Context
人工智能·深度学习·自然语言处理·prompt
梁小憨憨36 分钟前
变分推断(Variational Inference)
人工智能·算法·机器学习
资讯分享周1 小时前
思特奇亮相2024数字科技生态大会,以“智”谋新共赢AI新时代
人工智能·科技
HuggingAI1 小时前
Stable Diffusion Controlnet常用控制类型解析与实战课程 2
人工智能·ai·stable diffusion·ai绘画
一尘之中2 小时前
基于Transformer的编码器-解码器图像描述模型在AMD GPU上的应用
人工智能·深度学习·transformer
IT古董2 小时前
【机器学习】机器学习的基本分类-监督学习-决策树-C4.5 算法
人工智能·学习·算法·决策树·机器学习·分类
电子工程师UP学堂2 小时前
电子应用设计方案-37:智能鼠标系统方案设计
人工智能·单片机·嵌入式硬件·计算机外设
后端研发Marion2 小时前
【AI工具】强大的AI编辑器Cursor详细使用教程
人工智能·编辑器·cusor
pzx_0012 小时前
【时间序列预测】基于Pytorch实现CNN_LSTM算法
人工智能·pytorch·python·算法·cnn·lstm