视觉感知、Vision Grounding、目标检测、Transformer


视觉感知的任务有哪些:image classification,image segment,object detection,visual grounding,image caption,OCR。
而目标检测和vision grounding技术之间的区别在于vision grounding需要对图像中的语义描述更看重。

目标检测

目标检测sota结果,其中COCO2017 val数据集结果如下
image-20230811172640817

mAP

https://blog.csdn.net/m0_54634272/article/details/128475267
AP是一个类别的平均precision,一个类别对应一个AP。mAP是所有类别的AP的均值,一个模型对应一个mAP。coco并不计算一个类别的AP,而只计算mAP,所以coco说的AP也是指mAP。

COCO数据集目标检测评价指标中,AP / AP50 / AP75 指的是 APIoU=0.5:0.05:0.95/AP IoU=0.5/AP IoU=0.75 。IoU=.50:.05:.95 指的是交并比从0.5开始间隔0.05一直取值到0.95,然后求均值。

PR曲线计算过程
在这里插入图片描述
过程:

1.首先将所有的预测框按照得分从高到低排序

2.分别与同一张图片、同一类别的所有GTs计算IOU

3.根据阈值,判断这个预测框属于TP或者FP

4.得出当前阶段的precision和recall.(意思就是在遍历过程中,每判断一个预测框,就计算一次p、r)计算方法与以往有所不同:

precision = 当前遍历所检测的TP预测框个数 / 当前遍历检测到的TP和FP
recall = 当前遍历所检测的TP预测框个数 / 所有GT的个数

主要区别就在当前,目的是为了模仿取不同阈值每次遍历所有框计算pr曲线,用这种方法的时间复杂度是O(n).

所以一开始recall很低,precision很高,因为precision的分母基数小。

现在不同的数据集计算AP方式略有不同,但总体都是一个微分计算PR曲线面积的思想。

voc2007的计算方式是先平滑曲线,对于每个点取其右边最大的precision值,连成直线。(也叫插值AP法)

在这里插入图片描述
然后取11个点(在recall坐标轴每个0.1取一个点),直接平均11个点的precision的和。

voc2012的方法是直接计算平滑后的曲线与recall轴围成的面积。结果更加准确。
在这里插入图片描述
COCO map

coco计算ap的时候采用的是101个插值点,考虑更为精细。

并且还计算了不同iou阈值的ap,下面结果的第一行就是iou阈值在(0.5-0.95)内每个0.05取一个值计算ap,然后取平均

图像分割

https://blog.csdn.net/oYeZhou/article/details/111994155
数据集

Grounding

数据集

1、Phrase Localization:常用的数据集即Flickr30k Entities数据集[1],包含31783张image,每张图会对应5个不同的caption,所以总共158915个caption,以及244035个phrase-box标注。对于每个phrase还细分为people, clothing, body parts, animals, vehicles, instruments, scene, othera八个不同的类别。

另外很多phrase localization的工作还会在ReferItGame数据集[2](又称RefCLEF)上进行实验,这个数据集严格来说应该属于REC任务。图片来自ImageCLEF数据集,包含130525个expression,涉及238个不同的物体种类,有96654个物体,19894张图像。其中的数据是通过一种称为refer it game的双人游戏进行标注的

image-20230811190021433

  1. Referring expression comprehension:常用的有三个数据集RefCOCO[3], RefCOCO+[3], RefCOCOg[4]。这三个数据集的区别可以通过下面的样例理解:

image-20230811190040236

  • RefCOCOg采用的是非交互式标注法,选定区域请人标注,再请另外一批人根据标注的expression选择对应的region;
  • RefCOCO和RefCOCO+采用的是双人游戏 (Refer it game)的方式.

评估指标

  1. prediction box和groud-truth box的交并比(intersection over union,IoU)大于0.5记为一次正确定位,以此来计算准确率(Accuracy)。最近的一些工作使用Recall@k指标,表示预测概率前k大的prediction box和ground-truth box的IoU大于0.5的定位准确率。
  2. Pointing game,选择最终预测的attention mask中权重最大的像素位置,如果该点落在ground-truth区域内,记为一次正确定位。相比Acc指标更加宽松。

3.mAP

主流做法

目前visual grounding可以分为全监督(Fully-supervised)、弱监督(Weakly-supervised)、无监督(Unsupervised)三种。

image-20230811190108705
这里再简要扩展一下全监督和弱监督的主要做法

  • 全监督中,现在的做法可以分为two-stage和one-stage两种做法。two-stage就是第一个阶段先通过RPN或者传统的算法(Edgebox、SelectiveSearch)等提取候选的proposals以及它们的features,然后在第二个阶段进行详细的推理,例如常见的做法是把视觉特征和语言特征投射到一个公共的向量空间,计算相似度,选择最相近的proposal作为预测结果。one-stage则是基于目标检测领域的one-stage模型,例如YOLO、RetinaNet等。
  • 弱监督由于缺少phrase和box之间的mapping,会额外设计很多损失函数,例如基于reconstruction,引入external knowledge,基于image-caption匹配设计loss的等等。这里推荐一篇CVPR2021弱监督工作[6],很有学习价值~

目标检测领域知识

IOU

在这里插入图片描述

这里要谈两个threshold,一个用来识别正样本(如跟ground truth的IoU大于0.5),另一个用来标记负样本(即背景类,如IoU小于0.1),而介于两者之间的则为难例(Hard Negatives),若标为正类,则包含了过多的背景信息,反之又包含了要检测物体的特征,因而这些Proposal便被忽略掉。

RPN

Faster RCNN之RPN理解

RPN:其实是建立在feature maps上面的。RPN是Region Proposal Network的缩写,是一种用于目标检测的神经网络模块。RPN是Faster R-CNN算法中的一个重要组成部分,它用于生成候选区域(region proposals),即可能包含目标的区域。RPN通过在特征图上滑动一个小的窗口,对每个窗口位置预测若干个候选区域,同时给出每个候选区域是否包含目标的概率。RPN的输出结果被输入到Faster R-CNN的后续处理中,用于目标检测和分类。RPN的设计使得Faster R-CNN算法可以实现端到端的训练和推理,从而在目标检测任务中取得了很好的效果。

RPN的目标区域匹配主要包括两个步骤:正样本匹配和负样本匹配。

正样本匹配:对于每个真实目标框,RPN在特征图上找到与其IoU(Intersection over Union)最大的候选框作为正样本。如果一个候选框与任何真实目标框的IoU大于0.7,则将其标记为正样本。

负样本匹配:对于每个候选框,如果其与所有真实目标框的IoU都小于0.3,则将其标记为负样本。如果一个候选框与某个真实目标框的IoU在0.3到0.7之间,则将其标记为忽略样本,不参与训练。

需要注意的是,一个真实目标框可能会有多个候选框与其IoU大于0.7,此时只选择IoU最大的那个候选框作为正样本。同样,一个候选框也可能与多个真实目标框的IoU小于0.3,此时只选择IoU最小的那个真实目标框作为负样本。

RPN在特征图上的滑动窗口大小一般设置为3x3或者1x1。这是因为在卷积神经网络中,3x3的卷积核是最常用的卷积核,而1x1的卷积核可以用来进行通道数的变换。使用3x3或1x1的滑动窗口可以保证RPN的计算量较小,同时也能够捕捉到不同大小的目标。在实际应用中,RPN的滑动窗口大小也可以根据具体的任务和数据集进行调整。

1x1的卷积核可以用来进行通道数的变换,是因为它可以对每个像素点的通道进行线性组合,从而实现通道数的变换。具体来说,假设输入特征图的大小为HxWxC,其中C表示通道数,那么对于一个1x1大小的卷积核,它的权重矩阵大小为1x1xCxK,其中K表示输出通道数。对于输入特征图中的每个像素点,1x1卷积核会对其在C个通道上的特征值进行加权求和,得到一个新的特征值,从而实现通道数的变换。这个过程可以看作是一个全连接层,其中每个输入通道对应一个权重,每个输出通道对应一组权重。因此,1x1卷积核可以在不改变特征图大小的情况下,对通道数进行变换,从而实现网络的通道数控制和特征提取。

ROI pooling

什么是ROI pooling:ROI pooling是一种在深度学习中常用的技术,它用于在卷积神经网络中对不同大小的感兴趣区域(Region of Interest,ROI)进行特征提取和池化。ROI pooling的主要目的是将不同大小的ROI映射到相同大小的特征图上,以便进行后续的分类或检测任务。ROI pooling通常用于目标检测任务中,例如Faster R-CNN算法中就使用了ROI pooling来提取感兴趣区域的特征。

image-20230811172106426

FPN

多尺度检测在目标检测中变得越来越重要,对小目标的检测尤其如此。现在主流的目标检测方法很多都用到了多尺度的方法

FPN结构(Feature Pyramid Network,特征金字塔)中包括自下而上,自上而下和横向连接三个部分,如下图所示。这种结构可以将各个层级的特征进行融合,使其同时具有强语义信息和强空间信息,在特征学习中算是一把利器了。

image-20230811172129761

FPN实际上是一种通用架构,可以结合各种骨架网络使用,比如VGG,ResNet等。Mask RCNN文章中使用了ResNNet-FPN网络结构。如下图:

image-20230811172214131

(还有大量细节具体看https://zhuanlan.zhihu.com/p/37998710)

二阶段目标检测

目标检测是计算机视觉领域的一个重要任务,主要分为两种范式:

  1. 两阶段目标检测:两阶段目标检测方法首先通过一个区域提议网络(Region Proposal Network,RPN)生成一些可能包含目标的候选框,然后对每个候选框进行分类和位置回归,得到最终的目标检测结果。代表性的方法包括Faster R-CNN、R-FCN等。
  2. 一阶段目标检测:一阶段目标检测方法直接对整张图像进行分类和位置回归,不需要先生成候选框(图片网格化)。代表性的方法包括YOLO(You Only Look Once)、SSD等。

两阶段目标检测方法的优点是准确率高,但速度较慢;一阶段目标检测方法速度较快,但准确率相对较低。近年来,随着硬件性能的提升和算法的改进,一阶段目标检测方法在准确率和速度上都有了很大的提升,成为目标检测领域的热门研究方向。

Fast RCNN

Faster RCNN是两阶段的目标检测算法,包括阶段一的Region proposal以及阶段二的bounding box回归和分类。用一张图来直观展示Faster RCNN的整个流程:

image-20230811171942630

MaskRCNN网络框架

image-20230811172931169

Mask R-CNN算法实现流程:

  • 第一步:输入一幅你想处理的图片,然后进行对应的预处理操作,或者预处理后的图片;
  • 第二步:将其输入到一个预训练好的神经网络中(ResNet-FPN等)获得对应的多张不同尺度的特征图(feature map);
  • 第三步:对feature map中的每一点设定预定个的ROI,从而获得多个候选ROI;
  • 第四步:将这些候选ROI的9个尺度的anchor,通过ROI pooling,得到候选区域的ROI。送入RPN网络进行二值分类(前景或背景)和BB回归,过滤掉一部分候选的ROI;
  • 第五步:对这些剩下的ROI进行ROIAlign操作。ROIAlign摈弃了ROIpooling采用的取消取整的这种粗暴做法,采用双线性插值来得到固定四个点坐标的像素值,从而使得不连续的操作变得连续起来,返回到原图的时候误差也变得更小。(ROIAlign为创新点1)
  • 第六步:这些ROI进行分类(N类别分类),BB分类和MASK生成(在每个ROI里面进行FCN操作)(引入FCN生成Mask为创新点2)

总之,Mask R-CNN是一个非常灵活的框架,可以增加不同的分支完成不同的任务,可以完成目标分类、目标检测、实例分割,人体姿势识别等多种任务,真不愧是一个好算法。

(GLIP中使用到了MaskRCNN的信息)

一阶段目标检测

YOLO

YOLO的目标检测范式可以分为以下几个步骤:

  1. 输入图像分成S x S个网格,每个网格预测B个边界框和C个类别概率

  2. 对于每个边界框(Bbox),获取每个Bbox的confidence(置信度)。置信度表示边框内存在物体的把握,以及准确度。每个Bbox包含5个参数:x,y,w,h,confidence。confidence:当框内不存在目标时,confidence为0;当框内存在目标时,confidence等于边界框与真实框IoU。与真实框IoU最大的边界框就负责预测这个物体(目标的中心位置在边界框内才能称为边界框中存在目标。)

  3. 每个网格预测C个类别概率值:对于每个网格,计算其包含目标的概率和每个边界框的置信度(confidence score),即包含目标的概率和边界框预测的置信度的乘积。

  4. 对于每个边界框,选择置信度最高的类别作为其类别预测结果。

  5. 对于所有边界框,根据其置信度和类别概率进行筛选,得到最终的目标检测结果。

YOLO的优点是速度快,可以实时处理高分辨率图像,但准确率相对较低。近年来,YOLO的改进版本(如YOLOv2、YOLOv3)在准确率和速度上都有了很大的提升,成为目标检测领域的热门研究方向。

BLIP2

query
https://blog.csdn.net/jiaoyangwm/article/details/130048612

DETR

https://zhuanlan.zhihu.com/p/348060767
DETR中的Positional Embedding是一个固定值,Positional Embedding的代码如下,针对二维特征图的特点,DETR实现了自己的二维位置编码方式。是一个可学习的绝对位置编码。

# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
"""
Various positional encodings for the transformer.
"""
import math
import torch
from torch import nn
 
from util.misc import NestedTensor
 
 
class PositionEmbeddingSine(nn.Module):
    """
    This is a more standard version of the position embedding, very similar to the one
    used by the Attention is all you need paper, generalized to work on images.
    """
    def __init__(self, num_pos_feats=64, temperature=10000, normalize=False, scale=None):
        super().__init__()
        self.num_pos_feats = num_pos_feats
        self.temperature = temperature
        self.normalize = normalize
        if scale is not None and normalize is False:
            raise ValueError("normalize should be True if scale is passed")
        if scale is None:
            scale = 2 * math.pi
        self.scale = scale
 
    def forward(self, tensor_list: NestedTensor):
        x = tensor_list.tensors
        mask = tensor_list.mask
        assert mask is not None
        not_mask = ~mask
        y_embed = not_mask.cumsum(1, dtype=torch.float32)
        x_embed = not_mask.cumsum(2, dtype=torch.float32)
        if self.normalize:
            eps = 1e-6
            y_embed = y_embed / (y_embed[:, -1:, :] + eps) * self.scale
            x_embed = x_embed / (x_embed[:, :, -1:] + eps) * self.scale
 
        dim_t = torch.arange(self.num_pos_feats, dtype=torch.float32, device=x.device)
        dim_t = self.temperature ** (2 * (dim_t // 2) / self.num_pos_feats)
 
        pos_x = x_embed[:, :, :, None] / dim_t
        pos_y = y_embed[:, :, :, None] / dim_t
        pos_x = torch.stack((pos_x[:, :, :, 0::2].sin(), pos_x[:, :, :, 1::2].cos()), dim=4).flatten(3)
        pos_y = torch.stack((pos_y[:, :, :, 0::2].sin(), pos_y[:, :, :, 1::2].cos()), dim=4).flatten(3)
        pos = torch.cat((pos_y, pos_x), dim=3).permute(0, 3, 1, 2)
        return pos
 
 
class PositionEmbeddingLearned(nn.Module):
    """
    Absolute pos embedding, learned.
    """
    def __init__(self, num_pos_feats=256):
        super().__init__()
        self.row_embed = nn.Embedding(50, num_pos_feats)
        self.col_embed = nn.Embedding(50, num_pos_feats)
        self.reset_parameters()
 
    def reset_parameters(self):
        nn.init.uniform_(self.row_embed.weight)
        nn.init.uniform_(self.col_embed.weight)
 
    def forward(self, tensor_list: NestedTensor):
        x = tensor_list.tensors
        h, w = x.shape[-2:]
        i = torch.arange(w, device=x.device)
        j = torch.arange(h, device=x.device)
        x_emb = self.col_embed(i)
        y_emb = self.row_embed(j)
        pos = torch.cat([
            x_emb.unsqueeze(0).repeat(h, 1, 1),
            y_emb.unsqueeze(1).repeat(1, w, 1),
        ], dim=-1).permute(2, 0, 1).unsqueeze(0).repeat(x.shape[0], 1, 1, 1)
        return pos
 
 
def build_position_encoding(args):
    N_steps = args.hidden_dim // 2
    if args.position_embedding in ('v2', 'sine'):
        # TODO find a better way of exposing other arguments
        position_embedding = PositionEmbeddingSine(N_steps, normalize=True)
    elif args.position_embedding in ('v3', 'learned'):
        position_embedding = PositionEmbeddingLearned(N_steps)
    else:
        raise ValueError(f"not supported {args.position_embedding}")
 
    return position_embedding

DETR建立在Transformer 编码器-解码器架构上,结合基于集合的匈牙利损失
通过二部匹配强制对每个GT Box进行唯一的预测

DETR利用了一个标准的Transformer 编码器-解码器架构,将输入的特征映射转换为一组对象查询的特征

在对象查询特征(由解码器产生)的基础上,添加了一个3层的前馈神经网络(FFN)和一个线性投影作为检测头。

FFN作为回归分支来预测bbox的坐标, 编码标准化的框中心坐标、框高度和宽度(相对于图像大小)
线性投影作为分类分支,产生分类结果

对于DETR中的Transformer 编码器,query和key都是特征图中的像素。
输入的是ResNet特征映射(具有编码的位置嵌入)

对于DETR中的Transformer 解码器,输入包括来自编码器的特征映射,以及N个由可学习的位置嵌入表示的对象查询(例如,N个= 100)

在解码器中有两种类型的注意模块,即交叉注意模块和自我注意模块
在交叉注意模块中,对象查询从特征映射中提取特征

查询元素是object query,key是来自编码器的输出特性映射

在自注意模块中,object query相互交互,从而捕获它们之间的关系
query和key都是object query

Deformable DETR

https://zhuanlan.zhihu.com/p/520666550
https://blog.csdn.net/qq_54185421/article/details/125902884
https://blog.csdn.net/zero2255/article/details/128742045

DETR消除了目标检测中许多手工设计的组件,同时又有良好的性能

但由于Transformer Attention模块在处理图像特征图时的限制,具有收敛速度慢,特征空间分辨率有限的问题

为了缓解这些问题,提出了Deformable DETR,它的注意力模块只关注一个目标周围的一小部分关键采样点

Deformable DETR可以获得比DETR(特别是在小物体上)更好的性能,仅使用十分之一的epochs
因此训练速度有了十倍的速度提升

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Grounding DINO

https://zhuanlan.zhihu.com/p/627646794

论文地址:Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection
代码地址:https://github.com/IDEA-Research/GroundingDINO

Grounding DINO,将将基于Transformer的检测器DINO与真值预训练相结合。开集检测关键是引入language至闭集检测器,用于开集概念泛化。作者将闭集检测器分为三个阶段,提出一种紧密融合方案,一个特征增强器,一个语言引导的 query 选择,一个跨模态的检测器用于跨模态融合。
作者除了对新颖类别进行检测还进行特定属性目标识别。在COCO数据集上零样本检测达到52.5AP,在COCO数据集finetune后达到63AP。

框架

Grounding DINO采用双编码器,单解码器结构。图像backbone 用于提取图像特征,文本backbone用于提取文本特征,特征增强用于融合图像及文本特征,语言引导的query选择模块用于query初始化,跨模态解码器用于框精细化。

贡献

1、提出Grounding DINO通过多阶段跨模态融合改进开集目标检测器;
2、进一步在对REC(Referring Expression Comprehension,目标指代物理解)数据集进行评估;
3、在COCO, LVIS, ODinW, and RefCOCO数据集证明其有效性;

GLIP

https://zhuanlan.zhihu.com/p/492656989

https://cloud.tencent.com/developer/article/2136056

代码:https://github.com/microsoft/GLIP

mmdet dev3.x分支已经支持了glip

场景

visual grounding涉及计算机视觉和自然语言处理两个模态。简要来说,输入是图片(image)和对应的物体描述(sentence\caption\description),输出是描述物体的box。听上去和目标检测非常类似,区别在于输入多了语言信息,在对物体进行定位时,要先对语言模态的输入进行理解,并且和视觉模态的信息进行融合,最后利用得到的特征表示进行定位预测。visual grounding按照是否要对语言描述中所有提及的物体进行定位,可以进一步划分为两个任务:

1.Phrase Localization:又称为Phrase Grounding,如下图,对于给定的sentence,要定位其中提到的全部物体(phrase),在数据集中对于所有的phrase都有box标注。
image-20230811190142247

如何将object模型转为grounding

groudning模型的输入是短语、短语中名词的框和图片。
将object模型转为grounding的办法:通过prompt的方式将标签名转化为短语。
https://blog.csdn.net/joyce_peng/article/details/125786938

DyHead detector

一个新的动态 head 架构,通过注意力机制统一了目标检测 heads。通过将多个自注意力机制顺序地结合在一起,作者提出的方法能够在不增加任何计算开销的前提下明显地提升目标检测 heads 的表示能力。上述的多个自注意力机制即用于尺度感知的特征层级注意力机制、用于空间感知的空间位置注意力机制、用于任务感知的输出通道注意力机制

https://zhuanlan.zhihu.com/p/384587313

数据构造

使用大量的图像-文本数据扩大视觉概念

如果有一个好的关联模型(教师模型),我们可以通过自动生成大量图像-文本配对数据的关联框来增加GLIP的预训练数据,其中名词短语由NLP解析器检测。因此,我们可以在27M的关联数据上预训练GLIP-Large模型(学生模型),这些数据包括3M人工标注的细粒度数据和24M网上爬取的图像-文本对。对于24M的图像-文本对,有78.1M个高置信度的短语-边框伪注释,以及58.4M个唯一的名词短语。我们在图2中展示了两个生成框的真实示例。教师模型可以准确地定位一些可能很难理解的概念,如注射器、疫苗、美丽的蓝绿色加勒比海,甚至是抽象的单词。在这种语义丰富的数据上进行训练可以提供一个语义丰富的学生模型。相比之下,之前关于可扩展检测数据的工作根本无法预测教师模型预定义词汇表之外的概念。在这项研究中,我们表明,这种扩大关联数据的简单策略非常有效,大大提高了LVIS和13个下游检测任务的表现,尤其是在罕见类别上。当预训练的GLIP-L模型在COCO数据集上进行微调时,它在COCOval上达到了60.8AP,在COCOtest-dev上达到了61.5AP,超过了当前以各种方式扩大目标检测数据的公开SOTA模型。

image-20230811190238565

图2:GLIP的关联预测结果。GLIP可以关联稀有的实体、带有属性的短语,甚至是抽象的单词。

Framework

为了获得对图像的细粒度理解,正如许多任务所要求的那样,如目标检测、分割、人类姿态估计、场景理解、动作识别、视觉语言理解等,非常需要对象级视觉表示。

在本文中,我们证明了“短语关联”(PhraseGrounding,识别句子中短语和图像中对象/区域之间细粒度对应关系的任务)是一项有效且可扩展的预训练任务,可以学习对象级、语言感知和语义丰富的视觉表示,并提出了语言-图像关联预训练模型GLIP。我们的方法将短语关联和目标检测任务统一起来,因为目标检测可以被视为上下文无关的短语关联任务,而短语关联可以被视为上下文有关的目标检测任务。我们的主要贡献如下。

通过将目标检测改为短语关联,将检测和关联统一起来

使用大量的图像-文本数据扩大视觉概念

“大一统”的迁移学习模型

重点:Fusion(双向融合,早期融合),Word-Region Alignment Score(Contrastive learning)。

Fusion:这种融合方式的优点:提高了phrase grounding效果,使得视觉特征language-aware

Contrastive learning:将检测重新定义为一项关联任务。GLIP联合训练一个图像编码器和一个语言编码器来预测区域和单词的正确配对

单词区域对齐

「1、Unifying detection and grounding by reformulating object detection as phrase grounding」 改变了检测模型的输入:不仅输入图像,还输入 text prompt(包含检测任务的所有候选类别)。例如,COCO目标检测任务的 text prompt 是由80个COCO对象类别名组成的文本字符串,如图2(左)所示。通过将 object classification logits 替换为 word-region alignment 分数(例如视觉region和文本token的点积),任何 object detection 模型都可以转换为 grounding 模型,如图2(右)所示。与仅在最后点积操作融合视觉和语言的CLIP不同,GLIP利用跨模态融合操作,具有了深度的跨模态融合的能力。

区域/边框的视觉特征与token/短语的语言特征的点积。使用语言模型计算语言特征,这为新的检测(或关联)模型提供了双编码器架构。CLIP仅在最后的点积层融合视觉和语言,与此不同的是,GLIP采用深度跨模态融合,如图1(中)所示,这对于学习高质量的语言感知视觉表示和实现优秀的迁移学习性能至关重要。

「2、Scaling up visual concepts with massive image-text data」 给定 grounding 模型(teacher),可以自动生成大量图像-文本对数据的 grounding boxes 来扩充GLIP预训练数据,其中 noun phrases 由NLP解析器检测,图3为两个 boxes 的示例,teacher模型可以定位到困难的概念,如注射器、疫苗、美丽的加勒比海绿松石,甚至抽象的单词(视图)。在这种语义丰富的数据上训练可以生成语义丰富的student模型。

image-20230811190259560

用于检测和关联的统一框架。与经典的目标检测模型不同,我们通过将每个区域/边框与文本提示中的短语对齐,将检测重新定义为一项关联任务。GLIP联合训练一个图像编码器和一个语言编码器来预测区域和单词的正确配对。我们进一步将跨模态深度融合添加到两种模态的早期融合信息中,以学习语言感知的视觉表示。

效果

https://huggingface.co/spaces/haotiz/glip-zeroshot-demo

GLIP的学习重点主要还是单个样本的特征学习,但是对比学习这部分是缺失的。因此提出结合DetCLIP的对比学习策略。

如果引入新的concept dictionary,那么就需要考虑数据训练的平衡策略。

DetCLIP

image-20230811190329084

DetCLIPv2

开放域检测问题。他们提出了一种针对多数据源联合高效的并行训练框架,同时构建了额外的知识库来提供类别间的隐式关系。

动机

现有方法往往使用预训练好的分类大模型进行特征层面的蒸馏[1] 或通过对 caption 打伪标签加自训练的方式进行学习[2],但这样往往会受限制于分类大模型的性能以及 caption 标注不完全的问题。

现有 SOTA 开放域检测模型 GLIP[3] 通过将检测数据的格式转化为 Grounding 数据的格式进行多数据源的联合训练,充分利用不同数据源的优势(检测数据集对常见类别有较为完全的标注,而 Grounding 数据集对类别 cover 区间的范围更大)。然而,我们发现将类别名词简拼接的方式导致模型整体的学习效率降低,同时直接使用类别单词作为文本输入无法提供细粒度的类别之间的先验关系。

Framework

image-20230811190403090

UniTAB

https://github.com/microsoft/UniTAB

Toward Building General Foundation Models for Language, Vision, and Vision-Language Understanding Tasks

https://github.com/zhangxinsong-nlp/XFM

https://blog.csdn.net/weixin_51697828/article/details/123941421

Supervision Exists Everywhere: A Data Efficient Contrastive Language-Image Pre-training Paradigm

https://github.com/Sense-GVT/DeCLIP

mPLUG: Effective and Efficient Vision-Language Learning by Cross-modal Skip-connections

https://modelscope.cn/models/damo/mplug_visual-question-answering_coco_large_en/summary

image-20230811190424507

mPLUG由两个独立用于图像和文本的编码器、一个跨模态跳跃连接网络和一个用于文本生成的解码器组成。

mPLUG-2: A Modularized Multi-modal Foundation Model Across Text, Image and Video (ICML 2023)

https://github.com/X-PLUG/mPLUG-Owl

https://github.com/alibaba/AliceMind

https://cloud.tencent.com/developer/article/2293455

对于多模态基础模型,我们希望其不仅可以处理特定的多模态相关任务,还希望其处理单模态任务时也具有优异的性能。阿⾥达摩院团队发现现有的模型往往不能很好的平衡模态协作和模态纠缠的问题,这限制了模型在各种单模态和跨模态下游任务的性能。

基于此,达摩院的研究者提出了 mPLUG-2,其通过模块化的⽹络结构设计来平衡多模态之间的协作和纠缠问题,mPLUG-2 在 30 + 多 / 单模态任务,取得同等数据量和模型规模 SOTA 或者 Comparable 效果,在 VideoQA 和 VideoCaption 上超越 Flamingo、VideoCoca、GITv2 等超⼤模型取得绝对SOTA。此外,mPLUG-Owl 是阿⾥巴巴达摩院 mPLUG 系列的最新工作,延续了 mPLUG 系列的模块化训练思想,把 LLM 升级为⼀个多模态⼤模型。mPLUG-2 的研究论文已被 ICML 2023 接收。

image-20230811190459809
模型框图如上图 2 所示:(1) mPLUG-2 设计了⼀个统⼀的双 (dual) 视觉编码器模块,其中视频与图像输⼊共享的标准 Transformer 模块,⽤于建模空间信息局部时域建模模块⽤于视频相关任务的时域关系建模。(2) mPLUG-2 设计了⼀个新颖的通⽤层模块 ( universal layers module),⽤于作为不同模态之间的枢纽,其通过共享⾃注意⼒模块将视觉和语⾔模态投影到共同的以语⾔为导向的语义空间中。(3) mPLUG-2 使⽤额外的交叉注意⼒模块将通⽤视觉表示 (universal vision representation) 与原始细粒度视觉表示融合。详细的模块设计如图 2 所示。最后,mPLUG-2 的不同模块通过任务和模态指令 (task and modality instructions) 在单模态和跨模态任务上进⾏联合预训练。在推理过程中,mPLUG-2 可以使⽤模块化 Transformer 架构为各种单模态和交叉模态任务选择不同的模块。

X2-VLM: All-In-One Pre-trained Model For Vision-Language Tasks

https://github.com/zengyan-97/x2-vlm

VisorGPT: Learning Visual Prior via Generative Pre-Training

https://github.com/Sierkinhane/VisorGPT/tree/main/train

https://zhuanlan.zhihu.com/p/637938906

如何更友好、方便地获得空间限制条件?或者说如何自定义空间条件用于可控图像生成呢?例如自定义空间条件中物体的类别、大小、数量、以及表示形式(目标框、关键点、和实例掩码)

本文主要为大家介绍了VISORGPT方法,这是一种通过生成式预训练学习视觉先验的机制。它利用序列数据和语言建模的方法来学习关于位置、形状和类别之间关系的先验知识,并提供了对学习先验进行定制化采样的方法。

本文将空间条件中物体的形状、位置以及它们之间的关系等性质总结为视觉先验(Visual Prior),并使用Transformer Decoder以Generative Pre-Training的方式来建模上述视觉先验。因此,我们可以从学习好的先验中通过Prompt从多个层面,例如表示形式(目标框、关键点、实例掩码)、物体类别、大小和数量,来采样空间限制条件。

GLIGEN

完美控制对象的空间位置,Diffusion+目标检测

https://zhuanlan.zhihu.com/p/613909875

Unifying Architectures, Tasks, and Modalities Through a Simple Sequence-to-Sequence Learning Framework https://github.com/OFA-Sys/OFA

LAMM: Language-Assisted Multi-Modal Instruction-Tuning Dataset, Framework, and Benchmark

大型语言模型已成为实现通用人工智能的潜在途径。最近关于多模态大型语言模型的工作已经证明了它们在处理视觉模态方面的有效性。在这项工作中,我们将 MLLM 的研究扩展到点云,并展示了用于 2D 图像和 3D 点云理解的 LAMM 数据集和 LAMM 基准。我们还建立了一个可扩展的框架,以促进 MLLM 扩展到其他模式。我们的主要贡献有三方面:1)我们提出了 LAMM 数据集和 LAMM 基准,它们几乎涵盖了 2D 和 3D 视觉的所有高级视觉任务。广泛的实验验证了我们的数据集和基准的有效性。2) 我们展示了为 MLLM 构建指令调优数据集和基准的详细方法,这将使未来对 MLLM 的研究能够扩大规模并更快地扩展到其他领域、任务和模式。3) 我们提供了一个主要但潜在的 MLLM 培训框架,该框架针对模式的扩展进行了优化。我们还提供基线模型、综合实验观察和分析,以加速未来的研究。

VisionLLM

在这里插入图片描述

LISA: Reasoning Segmentation via Large Language Model

论文地址:https://arxiv.org/abs/2308.00692
GitHub:https://github.com/dvlab-research/LISA

长尾分布问题

https://zhuanlan.zhihu.com/p/153483585

举个简单的例子,如果要做一个动物分类数据集,猫狗等常见数据可以轻轻松松的采集数以百万张的图片,但是考虑到数据集的均衡,我们必须也给雪豹等罕见动物采集等量的样本,而随着类别稀有度的增加,其采集成本往往成指数增长。–问题发散思考:open domain,异常检测

image-20230811190520416

解决该问题的常用方法:重采样(re-sampling)和重加权(re-weighting)。这类方法本质都是利用已知的数据集分布,在学习过程中对数据分布进行暴力的hacking,即反向加权,强化尾部类别的学习,抵消长尾效应。

  • 重采样:对头部类别的欠采样(under-sampling)和2)对尾部类别的过采样(over-sampling)

  • 重加权:主要体现在分类的loss上,控制不同类别的损失权重,如focal loss

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值