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 结构
    Vision Transformers for Dense Prediction 论文阅读_第1张图片Vision Transformers for Dense Prediction 论文阅读_第2张图片
    空洞卷积可以使得感受野扩大的同时,但是特征空间维度不需要进行改变,但是空洞卷积得到的都是高分辨率的特征图,计算量比较大

  2. skip connection
    建立编码端到解码端的链接,下图为U-Net网络模型,将不经过下采样的feature map传递到解码端。
    Vision Transformers for Dense Prediction 论文阅读_第3张图片

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

    Vision Transformers for Dense Prediction 论文阅读_第4张图片
    介绍完背景之后,我们知道卷积处理特征图会有一些不可避免的缺点,这也是作者考虑使用其他的主干替代卷积的原因。

motivation

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

Architecture

Vision Transformers for Dense Prediction 论文阅读_第6张图片
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提取特征),不管使用那种模型,都会在四层中选取出特征图,作者关于这些层次的选取做了一些消融实验。
Vision Transformers for Dense Prediction 论文阅读_第7张图片

  (使用的评判指标应该都是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:切块之后图像的大小 

在这里插入图片描述

Vision Transformers for Dense Prediction 论文阅读_第8张图片

Read

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

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

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

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

Concatenate

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

Resample

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

Fusion

获取多尺度的特征图之后要对其进行融合,论文中采用的是RefineNet的模块
Vision Transformers for Dense Prediction 论文阅读_第10张图片
ReFineNet 结构图
Vision Transformers for Dense Prediction 论文阅读_第11张图片

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

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

你可能感兴趣的:(transformer,计算机视觉)