先注明:本篇文章用于自学,所以是各种讲解博文的集合和归纳
参考:
ViT论文逐段精读【论文精读】
CV攻城狮入门VIT(vision transformer)之旅——VIT原理详解篇
CV攻城狮入门VIT(vision transformer)之旅——VIT代码实战篇
Vision Transformer详解
【ICLR2021】ViT : Vision Transformer解读(论文+源码)

设计相关前置知识:
Layer Normalization解析
详解Transformer中Self-Attention以及Multi-Head Attention
常见问题:
1.为什么最后用cls作为分类信息?
因为所有的token都在跟其他token做交互信息,因此认为cls embdding能够从别的这些embedding里头去学到有用的信息,从而可以只根据cls的输出做一个判断
2.为什么VIT需要在大数据集上才有效果,CNN不用
因为VIT没有用太多的归纳偏置
在深度学习中,归纳偏置指的是模型对数据的先验假设或偏好。CNN(卷积神经网络)和VIT(Vision Transformer)在设计中确实体现了不同的归纳偏置。
CNN 具有的归纳偏置:
CNN 的归纳偏置主要体现在卷积和池化层的结构中。CNN在设计中引入了参数共享和局部感受野的概念,假设输入的局部区域在整个图像中的不同位置具有相似的特征,这体现了对平移不变性和局部结构的偏好。此外,池化层的使用也有助于减小特征图的尺寸,引入了一些平移不变性。
VIT 的归纳偏置:
VIT的设计中相对较少依赖于传统的卷积和池化层,而是采用自注意力机制来建模图像中像素之间的关系。在这个设计中,VIT更强调全局信息的捕获和长距离依赖关系,而不像CNN那样局限于局部结构。VIT的设计相对更灵活,不依赖于特定的卷积和池化操作,这意味着它在某种程度上具有更少的明显归纳偏置。
总体而言,CNN通过卷积和池化层引入了对平移不变性和局部结构的归纳偏置。而VIT则更加注重全局信息的建模,减少了对传统卷积结构的依赖,更加注重对图像全局关系的学习,因此在某种程度上可以说它相对"不依赖太多归纳偏置",更灵活地适应不同类型的视觉任务和数据。
从较小的数据集训练时,CNN和VIT谁的效果更好
在较小的数据集上训练时,通常来说,卷积神经网络(CNN)相对于Vision Transformer(VIT)更容易取得良好的效果。以下是一些原因:
参数数量:
CNN通常具有较少的参数量,这使得在小数据集上更容易进行训练。VIT的参数量较大,对于小数据集,过拟合的风险较高,而CNN可能更容易泛化。
特定领域的先验知识:
CNN在图像处理任务中表现优秀,并且在计算机视觉领域有丰富的先验知识。如果小数据集与CNN任务相似,CNN可能能够更好地利用这些领域特定的特征。
平移不变性:
对于图像数据,CNN天生具有平移不变性,这是通过卷积和池化层的操作实现的。这种不变性有助于模型更好地泛化到新的样本。
数据样本之间的关联性:
如果数据样本之间存在一定的关联性,CNN的局部感受野和参数共享机制可能能够更好地捕捉数据的结构和模式。
强大的数据假设(归纳偏置)让 CNN 比 ViT 更适合做教师网络
归纳偏置
VIT为什么需要与训练
VIT只有在非常大的数据集上进行预训练后,才会有好的效果
因此不建议直接训练自己的模型,而是使用现成的预训练权重(jx_vit_base_patch16_224_in21k-e5005f0a.pth)做迁移学习
Embedding层
TRM模块需要输入token序列,二维矩阵:[token的数量,token的维度]
输入是224 * 224 * 3的图片,切分成196个图像块(patch),每个patch维度768
具体实现利用卷积层,步距为16,卷积核的大小也为16,卷积核的个数设置为768
维度的变换是这样的:输入224 * 224 * 3的图片,通过卷积层变成14 * 14 * 768,然后打平高宽所对应的维度,变成196 * 768。当然,在输入Embedding层之前,需要加入类别和位置这两个参数。假设该图片属于A类别,就将1 * 768的向量与196 * 768的向量进行拼接,得到197 * 768的向量。最后再与位置编码进行数值上的相加,最后的向量是197 * 768。
位置编码
文章采用的是一维位置编码,一维的意思就是把展平后的图片看成一个序列,iT的位置编码也可以理解为一种可以训练的绝对位置编码
位置编码向量设置为一个可学习的向量,初始为全0的197*768维向量
本文详细解读了ViT(VisionTransformer)的原理,包括其在ICLR2021中的设计,与CNN的比较,以及为何在大数据集上效果更佳。讨论了VIT的自注意力机制和全球信息捕捉,以及在小数据集上CNN的相对优势。还涉及了预训练和迁移学习的重要性,以及Embedding层和位置编码的实现方法。
2441

被折叠的 条评论
为什么被折叠?



