背景
近期需要找一些关于“语言信息辅助进行图像检测和分割”的模型资料,这里对找到的一些东西进行记录,写出来也供大家学习。
标题中Language-Image Detection(语言-图像检测),这里指的是:根据输入的提示词或句子来输出识别的分割或选框的任务,这类任务结合了自然语言处理(NLP)和计算机视觉(CV)的技术,旨在通过语言信息来指导图像处理和目标检测。
在这种任务中,输入的语言信息可以是描述物体外观或位置的句子、关键词或标签。模型会将这些语言输入转化为图像处理的指令,以便准确地定位和识别图像中的目标,并生成相应的分割或选框。
一、模型来源
一般找模型,是通过论文来看实验效果进行筛选的,往往需要对该领域有一定了解。但是如果新涉足,直接找难度比较大。这里推荐下本次采用的方式:通过相关数据集上的表现,找到近期且效果好的模型。
先看这个网站:“Papers with Code"
Browse the State-of-the-Art in Machine Learning | Papers With Code12583 leaderboards • 4774 tasks • 9471 datasets • 122628 papers with code.https://paperswithcode.com/sota一个知名的在线平台,专门收集和展示与机器学习、深度学习等相关领域的学术论文及其代码实现。网站的全称是"Papers with Code: The latest in machine learning",意为“带有代码的论文:机器学习领域的最新进展”。
里面可以分领域来查看相关文章和代码:
本次所关注的就是”Object Detection“分区,点开后,页面会有该领域的大致介绍,当然最重要的其实是 "Benchmarks(基准测试)",这些排行榜用于跟踪目标检测领域的进展。
比如这里就会显示:
这里选择下最受欢迎的MSCOCO:(下图数据截于写文当日)
横坐标是时间,纵坐标是 BOX AP(平均精度),下面可以筛选所用的网络,大家可以按需查找。
这样就能以较快的速度,筛选出目标的文章,大家有其他方法也欢迎分享学习。
二、Co-DETR
先讲上面(一)图中BOX AP最高的一个模型,即一种新颖的合作式混合分配训练方案,Co-DETR,以从多样化的标签分配方式中学习更高效、更有效的基于DETR的检测器。
先贴一下 GitHub和论文 链接,方便大家学习:
GitHub - Sense-X/Co-DETR: [ICCV 2023] DETRs with Collaborative Hybrid Assignments Training[ICCV 2023] DETRs with Collaborative Hybrid Assignments Training - Sense-X/Co-DETRhttps://github.com/Sense-X/Co-DETRhttps://arxiv.org/pdf/2211.12860v5.pdf
https://arxiv.org/pdf/2211.12860v5.pdf
2.1 前瞻补充 - DETR
由于这篇是对DETR的改善,所以需要先来简单介绍一下:
DETR是指"Detection Transformer",即检测变换器,是一种用于目标检测任务的深度学习模型,它结合了注意力机制和Transformer架构。
先贴一下论文以供学习:
https://arxiv.org/abs/2005.12872https://arxiv.org/abs/2005.12872
2.1.1 传统的目标检测
在这些方法中,首先会生成大量的候选区域或者提议,然后针对这些提议进行回归和分类,以确定每个区域是否包含感兴趣的对象,以及该对象的边界框位置和类别标签。
具体来说:
- Proposals(提议):是指一些可能包含感兴趣对象的区域,可以是候选框或者区域提议网络生成的候选区域。
- Anchors(锚点):是指一组预定义的固定大小和比例的框,用于在图像中定位对象。
- Window Centers(窗口中心):是指以图像中心为中心点,生成一系列不同大小的窗口,用于检测不同大小的对象。
这些提议、锚点或窗口中心作为模型的输入,通过回归和分类任务来预测每个区域内是否有对象以及对象的属性(如边界框位置和类别标签)。这种方法属于间接解决集合预测任务,因为它们并没有直接预测一组对象,而是通过生成候选区域和应用回归和分类来实现目标检测。
2.1.2 DETR 简介
DETR通过端到端的方式实现目标检测,与传统的基于区域提议的方法(如Faster R-CNN)相比,不需要使用候选框或者区域提议网络,而是直接从全局特征中预测目标框和类别。
将目标检测看作一种Set Prediction问题,并提出了一个十分简洁的目标检测Pipeline,即CNN提取基础特征,送入Transformer做关系建模,得到的输出通过二分图匹配算法与图片上的ground truth做匹配。
2.1.3 DETR 模型介绍
DETR使用传统的CNN骨干网络来学习输入图像的2D表示。模型将其展平,并在传入Transformer编码器之前补充位置编码。然后,Transformer解码器以一小组固定数量的学习位置嵌入(称之为对象查询)作为输入,并额外注意编码器输出。将解码器的每个输出嵌入传递给共享的前馈网络(FFN),用于预测检测(类别和边界框)或“无对象”类别。
补充介绍一下上图各部分作用:
-
CNN(Convolutional Neural Network)用于提取图像中的特征,这些特征对应着图像中的不同物体或物体的部分。CNN在DETR中的作用是将输入图像转换为一个具有语义信息的2D表示,这些信息可以帮助模型理解图像中的内容。
-
Positional Encoding(位置编码)是为了在输入序列中加入位置信息。由于Transformer模型只考虑序列的相对位置,而不考虑绝对位置,因此需要添加位置编码来帮助模型区分不同位置的特征。
-
Transformer编码器(Encoder)将CNN提取的特征序列进行编码,通过自注意力机制(Self-Attention)学习序列中元素之间的关系。这样,模型可以理解不同特征之间的依赖关系和重要性,并生成一个对输入图像的整体理解。
-
Transformer解码器(Decoder)则接收一组固定数量的位置嵌入(对象查询),这些嵌入代表模型关注的特定位置或对象。解码器将注意力集中在这些位置上,并结合编码器的输出,生成最终的检测结果。
-
前馈网络(Feed-Forward Network,FFN)接收解码器输出的每个嵌入,并根据这些嵌入进行分类或回归,以预测检测的目标对象及其属性(如类别和边界框)或判断是否存在目标对象。
2.1.4 端到端的概念
“端到端”(end-to-end)是指整个模型的训练和推理过程都在一个统一的框架内完成,没有中间步骤或额外的处理。这意味着模型从原始输入开始直接生成最终的输出,而不需要人工干预或手动处理。
在DETR中,端到端的意思是指模型从输入图像开始,通过CNN提取特征,然后通过Transformer编码器和解码器处理这些特征并生成最终的检测结果,再到最后的预测和判断过程,整个过程都是无缝连接的,没有额外的中间步骤或手动操作。
这种设计有助于简化模型的训练和部署过程,同时可以提高模型的效率和性能。
2.2 Co-DETR 引入
先具体说说DETR的缺点:
1. 探索较少的正样本查询
在训练过程中,模型对于真实存在的目标物体的关注点或关键特征的表示数量不足。正样本在这里指的是真实存在的目标物体,而查询则表示模型关注的特征。因此,如果将过少的查询分配给正样本,就意味着模型无法充分捕捉到目标物体的关键特征,从而影响了模型对目标物体的准确表示和预测。
2. 采用一对一集合匹配
意味着每个查询只与一个正样本匹配,这种匹配方式可能导致监督信号不足,即监督稀疏。因为如果一个查询只匹配一个正样本,那么对于其他部分的特征,模型就没有足够的监督信息来学习。这种监督稀疏会对编码器的区分特征学习产生负面影响,使得模型难以学习到有效的区分目标物体的特征。
3.监督稀疏对解码器的负面影响
解码器在进行目标检测时需要关注图像中不同位置的特征,以正确预测目标物体的属性。如果监督信号不足或监督稀疏,模型就无法准确学习到目标物体的关键特征和注意力分布,导致预测性能下降。
2.3 Co-DETR 模型
为了缓解这些问题,这篇提出了一种新颖的协作式混合分配训练方案,即Co-DETR,使用多样化的一对多标签分配来提高编码器和解码器的训练效率和有效性。
这种新的训练方案可以通过训练多个并行的辅助头部,这些头部受到一对多标签分配的监督,从而轻松提升端到端检测器中编码器的学习能力。其意义包括:
- 提高编码器和解码器的训练效率:辅助头部通过引入多样化的标签分配,如ATSS、FCOS和Faster RCNN等,丰富了对编码器输出的监督信号。这样,编码器可以更好地学习到目标物体的区分特征,从而提高训练效率。
- 提升解码器的训练有效性:辅助头部不仅可以增加监督信号,还可以将正样本的坐标信息编码到这些头部中。这些正样本包括正样本锚点和正样本提议。这样,在训练过程中,解码器可以利用这些正样本信息作为多组正样本查询,预测目标物体的类别和边界框。这种方式可以提升解码器的训练有效性,使其更好地理解和预测目标物体。
- 引入丰富的(正样本查询,地面真实框)对:辅助头部和多样化的标签分配可以引入大量的(正样本查询,地面真实框)对,从而增加训练数据的多样性和数量。这有助于模型更全面地学习目标物体的特征和属性,提高模型的泛化能力和检测性能。
在推理阶段,这些辅助头部被丢弃,因此这方法不会为原始检测器引入额外的参数和计算成本,同时也不需要手工设计的非极大值抑制(NMS)。
这里仅介绍一下核心思想,具体请参考论文。
三、MM Grounding DINO
查找上文资料的时候,发现MMLab有更新的研究成果,这里刚好看看:
照例先贴链接供大家学习:
mmdetection/configs/mm_grounding_dino at main · open-mmlab/mmdetection · GitHubOpenMMLab Detection Toolbox and Benchmark. Contribute to open-mmlab/mmdetection development by creating an account on GitHub.https://github.com/open-mmlab/mmdetection/tree/main/configs/mm_grounding_dinohttps://arxiv.org/abs/2401.02361
https://arxiv.org/abs/2401.02361
3.1 MMGD 引入
Grounding-DINO 是一种最先进的开放式检测模型,可处理多种视觉任务,包括开放词汇检测(OVD)、短语接地(PG)和指代表达理解(REC)。其有效性导致其被广泛采用为各种下游应用的主流架构。具体解释一下:
-
开放词汇检测(Open-Vocabulary Detection,OVD):这是指在文本或语音数据中识别和检测出大规模、开放式词汇或短语的过程。与传统的词汇表有限的情况不同,开放词汇检测可以处理未知、新兴或自动生成的词汇,从而更加适用于动态和多样化的语言环境。
-
短语接地(Phrase Grounding,PG):这涉及将自然语言中的短语或描述与现实世界中的实体或场景进行关联。例如,在视觉问答中,PG 可以帮助系统理解问题中描述的场景或对象,并将其正确地与图像中的实际内容进行匹配和理解。
-
指代表达理解(Referring Expression Comprehension,REC):这一概念与 PG 类似,但更加关注自然语言中的指代表达,如代词、名词短语等,以及如何将其与图像中的特定实体或区域相关联。REC 可以帮助计算机系统更好地理解描述中的指代关系,实现更准确的图像和文本理解。
然而,尽管其重要性,原始的 Grounding-DINO 模型由于其训练代码不可用而缺乏全面的公开技术细节。(并非完全开源,只提供测试和演示代码,且其使用的 Cap4M 数据集不是开源的)
3.2 MMGD 介绍
MM-Grounding-DINO,一个开源、全面且用户友好的基线模型,它采用了 MMDetection 工具箱构建。它采用了丰富的视觉数据集进行预训练,并使用各种检测和接地数据集进行微调。
三种视觉任务示例图:
MM-Grounding-DINO 遵循 Grounding-DINO 的官方测试代码,模型的结构几乎没有改变,除了初始化过程中的修改。基于 Grounding-DINO 框架,建议应用更多数据集进行预训练。
本篇论文贡献如下:
- 提出了基于 Grounding-DINO 的 MM-Grounding-DINO,这是一个基于丰富视觉数据集预训练的全面开源接地流水线,全面解决了 OVD、PG 和 REC 任务。
- 率先扩展了所有可用于 OVD、PG 和 REC 评估的基准测试,包括 COCO、LVIS、RefCOCO/+/g、Flickr30K Entities、ODinW13/35、gRefCOCO 和 D3。所有评估指标均可在 MMDetection 中轻松获取。
- 通过对多种外部特殊数据集进行微调,广泛评估了模型的迁移能力。
模型架构如图:
模型的组件包括:
- 提取文本特征的文本主干
- 提取图像特征的图像主干
- 深度融合图像和文本特征的特征增强器
- 查询初始化的语言引导查询选择模块
- 盒子细化的跨模态解码器
在各种基准测试中的结果,MM-Grounding-DINO 在广泛的任务上表现优于其他模型。
3.3 数据准备和处理
模型中一共提供了 5 种不同数据组合的预训练配置,数据采用逐步累加的方式进行训练,因此用户可以根据自己的实际需求准备数据。官方贴心的准备了详细的说明文档(有中文版):
-
Objects365 v1
-
COCO 2017
-
GoldG
-
GRIT-20M
-
V3Det
并且还准备了数据集的切分和可视化的工具:(给的链接是以Object365 v1为例)
切分:https://github.com/open-mmlab/mmdetection/blob/main/tools/misc/split_odvg.py
可视化原始数据集:https://github.com/open-mmlab/mmdetection/blob/main/tools/analysis_tools/browse_grounding_raw.py
可视化输出数据集:
https://github.com/open-mmlab/mmdetection/blob/main/tools/analysis_tools/browse_grounding_dataset.py
文档中还包括了: 预训练数据准备和处理、评测数据集、微调数据集
3.4 用法和说明
同样的,官方提供了详细的说明文档(有中文版):
https://github.com/open-mmlab/mmdetection/blob/main/configs/mm_grounding_dino/usage_zh-CN.mdhttps://github.com/open-mmlab/mmdetection/blob/main/configs/mm_grounding_dino/usage_zh-CN.md包括了从 安装 - 权重下载 - 三种测试 - 评测 - 结果可视化 - 模型复现训练 - 自定义微调 的完整过程
任务限制,本次不具体实现,大家感兴趣了可以去官网试试。
四、新架构 - Mamba
由于查阅上面资料的时候,浅补了一下Transformer架构的知识,结果看到了一个更新的架构Mamba,先放论文:
https://arxiv.org/abs/2312.00752https://arxiv.org/abs/2312.00752YouTube上有个大佬,视频很多讲模型的,放一下视频链接,下文很多介绍来自于他的视频:
https://www.youtube.com/@phdvlog2024https://www.youtube.com/@phdvlog2024
4.1 引入
先看下之前的模型发展:
目前很火的深度学习模型,大多都是基于2017年的Transformer架构及其核心的注意力模块。其核心就是自注意力机制:
关键在于上面那个矩阵,在Train阶段只需要算每一个点的注意力即可,但是在Test阶段要去矩阵里面进行对比,所以导致了其时间复杂度和空间复杂度都很高(O(n²))。
因为在GPU中,内存容量和计算速度成反比(金字塔结构),所以由于其内存比较大,限制了其运算的速度。(需要多次换入换出)
所以对比之后,就很需要一个新型架构:
4.2 模型介绍
Linear-Time Sequence Modeling with Selective State Spaces,即:具有选择性状态空间的线性时间序列建模。下面简单介绍一下Mamba的机制:
通过SSM(结构化状态空间模型)去解决矩阵内存的问题,通过一个递归的状态机(矩阵A通过主成分提取)。
通过一种类似蝶形的并行计算方法,提高运算速度。
通过一定的硬件感知算法,用一些额外的计算来替代内存的读写,提高了速度。
上图是论文中的示意图,即尽可能的把运算可以放到一些高速的GPU SRAM里面进行。
同时Mamba也设计了一个Selection部分来改进SSM:
4.3 模型效果
可以看到,两种架构下,在同一个模型(参数量相同)训练中的差异。所以Mamba可以胜任一些更长文本的任务,甚至可以扩展到视频的处理。
并且由于其输入输出都与Transformer相同,只是结构不同,所以有很好的可移植性。
五、Vision Mamba
紧接着一个月就出了运用该架构的论文。
https://arxiv.org/abs/2401.09417https://arxiv.org/abs/2401.09417对于两种架构进行了更详细的对比,有更直观的图:
图中可以看出,在语义分割、目标检测、实例分割 的任务中性能都更优越,计算和内存也都更加高效。(速度快了2.8倍,资源占用少了86.8%)
ViT结构模型:
VisionMamba结构:
两者是比较相似的,即用新的架构产生了新模型(速度很快)。
论文中的实验比较出,参数两更小,准确率也更高。
六、结语
本篇简单介绍了三个计算机视觉领域比较新的模型(DETR、Co-DETR和MM Grounding DINO),和一个更新的架构Mamba以及该架构的最新应用 Vision Mamba。
作为学习整理资料,介绍的都比较粗略,后续有需求会具体学习再补充。也欢迎大家讨论学习!