核心内容摘要
告别付费,拥抱自由!“积积桶肤肤”——你的免费软件终极宝库
这篇文章介绍多模态模型Grounding DINOTransformer介绍可以看深度学习基础-5 注意力机制和Transformer多模态基础知识点可以看多模态-1 基础理论计算机视觉Transformer Backbone可以看计算机视觉Transformer-1 基础结构介绍Grounding DINO之前先说一下多模态领域中“Grounding”的含义传统目标检测输入待检测的图片模型输出图片中物体所在位置的矩形框和置信度(详细介绍可以看:计算机视觉-目标检测)这种模型依赖训练数据集对于训练数据集中不包含的物体要么检测不出来要么给出低置信度的其它物体类别标签。
多模态领域中的“Grounding”指的是模型能够检测任意用户输入文本中包含的物体也就是输入是待检测图片用户的检测要求比如输入一张图片用户的问题“图片中穿红色衣服的人在哪里”多模态模型应该给出穿红色衣服人的坐标回答将传统的目标检测流程变为了一个问答流程多模态模型的Grounding能力是一项重要的评测指标体现了模型的语义空间理解能力可以理解为是“开放集合目标检测(Open-Set Object Detection)”不像传统目标检测模型一样只认识训练数据集中已标记过的类别借助多模态能力可以检测查询文本中要求检测的任意物体类别。
一 模型结构与训练Grounding DINO整体结构如下分为4个部分
特征提取分别利用图像编码器、文本编码器提取输入图像文本的特征
特征增强基于交叉注意力(Cross-Attention)对齐图像编码表示和文本编码表示的语义信息
特征查询根据文本编码表示从图像编码表示中筛选出和当前输入文本最相关的特征信息
多模态解码生成在图像编码表示和文本编码表示的引导下解码出当前输入对应的输出(物体所在位置坐标、类别)
1 特征提取和增强首先利用图像编码器比如ViT、Swin Transformer(相关介绍可以看计算机视觉Transformer-1 基础结构)获取输入图像的特征编码表示因为Grounding任务需要多尺度的特征所以融合了图像编码器不同层的输出作为最终的图像特征编码表示。
利用文本编码器比如BERT获取输入文本的特征编码表示。
然后利用特征增强层融合图像特征编码表示和文本特征编码表示生成语义一致的图像文本联合表示(模态对齐)特征增强层的结构如下图所示Deformable Self-Attention的详细介绍可以看计算机视觉Transformer-2 目标检测
2 特征查询图像特征编码表示中大部分是冗余的比如用户可能只是提问“穿红色衣服的人在哪里”但是图像特征编码中包含着和用户问题无关的特征所以利用特征查询模块对图像特征编码进行筛选将哪些和“红色”、“穿衣服的人”相关的视觉语义信息保留下来剩下的不要了具体做法是计算图像特征编码表示和文本特征编码表示之间的内积相似度然后只保留Top-k个就可以Grounding DINO最后是从10000个图像特征编码表示中保留900个作为最相关的视觉语义信息编码。
3 多模态解码生成Grounding DION的解码生成流程采取的是类似DETR的方法(DETR介绍可以看计算机视觉Transformer-2 目标检测)将特征查询筛选出来的图像特征编码表示作为Object query输入到Decoder中解码出目标所在的位置和类别Decoder层的具体结构如下其中Cross-Modality Query就是上一步筛选出来的图像特征编码表示经过一个Self-Attention层提取自身的特征信息作为Q然后利用经过特征增强的图像特征编码表示和文本特征编码表示作为K、V通过对应模态的Cross-Attention层生成出融合输入图像、文本信息的Cross-Modality Query。
Cross-Modality Query是一个[N,d-model]的矩阵其中N是Object Query的个数论文中设置的是N900d-model是嵌入向量的维度然后将这900个query分别送到类别检测头、物体所在位置检测头类别检测头计算query和不同文本token的内积具有最大相似性的作为这个query的预测类别位置检测头利用FFN计算query对应物体的所在位置框坐标和DETR一样匈牙利匹配算法保证预测类别不重复每个真实类别只对应一个query最终利用Focal Loss计算类别预测损失L1GIoU Loss计算检测框损失反向传播训练整体的Grounding DINO。
二 输入文本处理Grounding DINO最后输出的预测类别来自于用户输入的文本而不是像以往目标检测模型的类别标签信息那么就有一个问题如何从用户输入的文本中提取出来应该检测的类别信息比如用户输入了“图片中穿红色衣服的人在哪里”起码应该提取出来“红色衣服”、“人”作为预测类别以往的提取方式要么是整个句子作为一个表示、要么每个词语作为一个表示Grounding DINO试了这两种方法都不怎么好自己重新提出了一种处理方式三 实验结果公共数据集实验结果推理速度实验结果