其他分享
首页 > 其他分享> > Vision Transformers for Dense Prediction 论文阅读

Vision Transformers for Dense Prediction 论文阅读

作者:互联网

研一小菜鸡一枚,刚刚入门CV领域,最近对大火的Transformer 比较感兴趣,把刚刚阅读过的一篇论文和大家分享一下,第一次写文章,如有错误,还请指正。
先放一下论文链接:https://arxiv.org/pdf/2103.13413v1.pdf

Background

在阅读论文之前我们要先知道Dense prediction的定义
Dense Prediction:Pixelwise dense prediction is the task of predicting a label for each pixel in the image 也就是要标注出每个像素点的对象类别,例如在Depth Estimation 任务中,需要给出每个像素点对应的深度值。
在密集预测任务中,基于深度学习的做法主要有两种:

  1. 基于图像分块任务:利用像素,超像素块周围的小邻域进行独立的分类(使用的是全连接层,因此需要固定图像块的尺寸大小)
  2. 基于全卷积网络:对图像进行 pixel-to-pixel的预测,可以得到任意大小图形的分割结果,而且不需要对每个图像块进行分类,速度快。

在Transformer应用在Dense predicition中之前,全卷积网络在Dense predicition应用较多,但是卷积自身也有很多的缺点。
使用卷积作为主干时,需要逐步对图片进行下采样操作,以获得多个尺度上的特征,讲低级特征分组成抽象的高级特征,同时保证不会超出网络的内存。但是下采样操作有明显的缺点,在密集预测中尤其明显,经过下采样操作处理之后,特征的分辨率和粒度会丢失,而且这种丢失在解码阶段很难恢复。

 粗粒度图像分类:类别之间差异大,比如人、汽车、树
 细粒度图像分类:类别之间差异小,比如200种鸟的分类、100种花的分类

为了解决特征粒度损失提出了各种技术。

  1. dialated convolutions 结构
    普通卷积空洞卷积
    空洞卷积可以使得感受野扩大的同时,但是特征空间维度不需要进行改变,但是空洞卷积得到的都是高分辨率的特征图,计算量比较大

  2. skip connection
    建立编码端到解码端的链接,下图为U-Net网络模型,将不经过下采样的feature map传递到解码端。
    U-Net网络模型

  3. connecting multiresolution representations in parallel throughout the net-
    work
    在编码过程中保持多分辨率的特征图同时存在,传递给解码端。下图为HRNet,可以看出特征图在下采样的同时,也保留了高分辨率的特征,减少了粒度的损失。

    HRNet
    介绍完背景之后,我们知道卷积处理特征图会有一些不可避免的缺点,这也是作者考虑使用其他的主干替代卷积的原因。

motivation

这一节介绍一下作者为什么想到使用Transformer替代卷积,以及使用Transformer替代卷积有什么优点。
虽然有了前面提到的三项技术,但是这些技术的主干还是没有发生改变,仍然受制于卷积:要想获得一个大的感受野,就需要通过堆叠层数来实现,这需要消耗大量的内存。
这篇论文的代码以VIT作为baseline 放一下原文吧VIT原文
VIT架构
这是VIT的整体架构,在使用Transformer 编码过程中,Transfomer维持token的数量不变,而token和图像块是一一对应的关系,所以输入Transformer中的图像块的数量也不会发生改变,即特征图的分辨率不会变化,而且Transformer在整个的编码过程中一直是保持一个全局的感受野,不需要通过堆叠Transformer的层数来增大感受野,这是卷积不能做到的。

Architecture

DPT架构
DPT(Dense prediction Transformer)在输入Transformer编码前,对图像的处理是和VIT相同的,先将图片进行切块,flatten成vector ,增加一个class token(在 Depth Estimation是用不到的,作者在后面会对class token进行处理,有一个选项是直接忽略,为什么不在这个时候不加这个token呢? 我还没做实验,后面会试一下,有没有大佬能解答一下,会不会有什么影响)加入位置编码,最后输入Transformer 编码器中。

Transformer Encoder

作者一共使用了三种模型 DPT-Base(12层的Transformer Encoder)、DPT-Large(24 层的Transformer)、DPT-Hybrid(12层的Transformer Encoder,在对图像进行切块前,使用ResNet50提取特征),不管使用那种模型,都会在四层中选取出特征图,作者关于这些层次的选取做了一些消融实验。
在这里插入图片描述

  (使用的评判指标应该都是Absrel ,HRWSI,BlendedMVS,ReDWeb代表的应该是不同的数据集)
  3,6,9,12等等数字代表的是使用第几层Transformer 处理后的特征图,R0,R1代表的是ResNet block

作者发现高层和底层的特征都提取效果比只提取高层表现要好。

Convolutional decoder

在Transformer 提取的特征是(N+1)xD,要先对这些特征进行一些处理

    N = (H*W)/  p*p      p:切块之后图像的大小 

在这里插入图片描述

在这里插入图片描述

Read

首先,我们在切块的时候是切成了N块,但是收入过来的却是N+1块,这是因为我们在前面提价的class token,在这边我们要先处理掉。作者一共提供了三种方法来处理class token
在这里插入图片描述

  1. Ignore
    直接忽略掉添加的那个class token
    在这里插入图片描述

  2. add
    将class token 和其他的相加
    在这里插入图片描述

  3. proj
    将class token 和其他的concatenate,然后使用mlp处理。
    在这里插入图片描述
    作者在这也做了一下对比实验
    在这里插入图片描述
    直接忽略掉效果没有比proj差多少,为什么不能直接不加Class token呢

Concatenate

处理掉class token后,特征维度为NxD,需要进行拼接
在这里插入图片描述

Resample

获得特征图之后,需要对其进行处理,获取多尺度的特征图。
在这里插入图片描述

Fusion

获取多尺度的特征图之后要对其进行融合,论文中采用的是RefineNet的模块
在这里插入图片描述
ReFineNet 结构图
在这里插入图片描述

融合之后的特征图,针对不同的任务使用不同的head 进行处理。

解码部分写的有点烂,后面我在仔细看一下,在进行补充 ,如果有错误,还请各位大佬帮忙指正。

标签:Transformer,Transformers,卷积,Prediction,特征,token,图像,Dense,class
来源: https://blog.csdn.net/qq_42434944/article/details/121065404