vit细粒度图像分类(九)RAMS-Trans学习笔记

1.摘要

在细粒度图像识别(FGIR)中,区域注意力的定位和放大是一个重要因素,基于卷积神经网络(cnn)的方法对此进行了大量探索。近年来发展起来的视觉变压器(ViT)在计算机视觉任务中取得了可喜的成果。与cnn相比,图像序列化是一种全新的方式。然而,ViT的感受野大小有限,由于其patch的大小固定,缺乏像cnn那样的局部关注,并且无法生成多尺度特征来学习判别区域关注。
为了便于在没有框/部分注释的情况下学习判别区域注意,我们使用注意权值的强度来衡量原始图像对应的patch令牌的重要性。我们提出了递归注意多尺度变压器(RAMS-Trans),它利用变压器的自注意以多尺度方式递归学习判别区域注意。
具体来说,我们的方法的核心是动态补丁建议模块(DPPM)引导区域放大,以完成多尺度图像补丁的集成。DPPM从全尺寸图像斑块开始,通过在每个尺度上生成的注意力权重的强度作为指标,迭代地扩大区域注意力,从全局到局部生成新的斑块。我们的方法只需要ViT本身的注意力权重,并且可以很容易地进行端到端训练。
大量的实验表明,除了高效的CNN模型外,ram - trans的性能优于并发作品,在三个基准数据集上取得了最先进的结果。

2.问题

细粒度图像识别一直是一个具有挑战性的问题。目前大多数方法都是由卷积神经网络(cnn)主导的。与传统的图像分类问题不同,FGIR存在类内方差大、类间方差小的问题。因此,FGIR方法需要能够识别和定位图像中的区域注意力,这对分类至关重要。FGIR有一类方法称为基于零件的方法[2,36],其中一些方法使用额外的监督信息,如边界框/零件注释来定位关键区域。然而,标记边界框/部件注释是一项需要大量资源的劳动密集型任务。如何利用模型自身产生的有效信息进行区域注意力定位和放大,是FGIR必须面对的研究方向之一。

2.1发现

cnn的有效性无需在此进一步解释。然而,我们需要再次强调的是,cnn有效的一个关键方面是其翻译不变性和局部特征表示能力。随着深度的增加,cnn会不断下采样,同时模型的接受域也会增加,从而可以同时利用feature map的全局和局部信息。例如,在VggNet[29]和ResNet[17]等网络中,底层卷积的接受场较小,具有更多的局部信息,而高卷积的接受场较大,具有更多的全局信息。作品[41]和[20]将这一特性用于FGIR。一些作品利用了CNN本身特征图的注意属性,如[40]和[35]利用图像特征的注意图来选择区域关注。

变压器[32]近年来逐渐从NLP[6,7,38]的研究热点转向CV任务[9,46]。视觉变压器(vision transformer, ViT)的提出给计算机视觉带来了新的冲击,引起了业界对图像序列化的研究兴趣。ViT将分割后的图像块平坦化,并将其转换为patch令牌。与NLP中的字符序列类似,这些标记将被发送到多头自注意机制进行训练。由于补丁标记是位置不可知的,因此将添加位置嵌入以增加空间信息。然而,当ViT遇到FGIR时,有两个主要问题需要解决。首先,该模型一次处理所有的patch令牌,当数据集的复杂性增加时,例如当图像分辨率很高或图像背景混乱时,该模型可能无法有效捕获patch令牌中携带的区域注意力。

2.2发展

相反,当图像分辨率较低时,这种固定的patch大小更容易使模型丢失局部信息。其次,ViT与cnn的不同之处在于,补丁令牌的长度不会随着其编码器块的增加而改变,因此不能有效地扩展模型的接受域。因此,对于fgil,我们可以做的不仅仅是将平整的原始图像块输入到Transformer中。如果我们借鉴cnn的特点,在模型中引入对局部区域的关注,即扩展有效接受野,则模型的识别性能有可能进一步提高。那么我们就遇到了一个非常重要的问题,如何在注重利用全局信息的ViT中发掘和发现局部信息?最新的transferg[16]给了我们一个很好的答案,那就是利用ViT固有的注意力权重。无论是在变压器的NLP领域还是在ViT训练中,大多数工作都只是简单地要求使用最后一层分类令牌信息,丢弃了看似附属的注意权值。将最后一层变压器前的所有注意权值相乘得到patch令牌的重要性排序,然后将选中的令牌与全局分类令牌作为输入序列连接到最后一层变压器。然而,这种硬注意过滤在两种情况下容易失败,一种是在图像分辨率小的情况下,另一种是在数据集的高复杂性的情况下。在前一种情况下,许多重要的本地信息不容易获得,如果此时必须过滤掉大多数令牌信息,则很可能会失去分类性能。在后一种情况下,当注意机制失效时,模型很容易根据不正确的令牌信息做出错误的判断。

2.3创新

通过初步的可视化实验,我们发现注意权重的强度可以直观地与斑块包含目标物体的程度相关。为此,我们提出了递归注意多尺度变压器(RAMS-Trans),它利用变压器的自注意机制以多尺度方式递归学习区别区域注意。具体来说,该方法的核心是提出的动态补丁建议模块(DPPM),该模块旨在自适应地为每张图像选择最具判别性的区域。

  • DPPM从完整的图像斑块开始,通过在每个尺度上生成的注意力权重的强度作为指标,将区域注意力从全局扩展到局部生成新的斑块。细尺度网络以循环方式将前一尺度放大的趋势区域作为输入。•我们从序列到序列学习的角度重新表述了FGIR问题,并设计了一种新的可视化变压器架构,即循环注意多尺度变压器(RAMS-Trans)。它结合了cnn在扩大接受域、加强局部性方面的优势,以及transformer在利用全局信息方面的优势。
  • •作为一个实例,我们利用变压器框架,特别是使用多头自关注权重来定位和放大感兴趣的区域,通过顺序化图像来实现我们完全关注的特征表示。
  • •广泛的实验表明,与传统的cnn相比,我们的RAMS-Trans模型可以学习到更好的特征表示,并在三个流行的FGIR基准(CUB-200-2011, Stanford Dogs和iNaturalist2017)上并行工作。

2.4补充

CNN based Fine-grained image recognition

FGIR可分为定位分类子网络、端到端特征编码和外部信息三个方向,其中前两个方向是本节的主要内容。根据是否利用边界框/部分注释信息,将第一种方法分为强监督[2,23,36]和弱监督[15]。这类方法通过训练有监督或弱监督的定位子网络来定位关键部件区域。然后,分类子网利用定位子网捕获的细粒度区域信息,进一步提高分类能力。mask - cnn[36]基于部位标注,利用FCN对关键部位(头部、躯干)进行局部化,生成物体/部位加权的蒙版。然而,获取零件注释会增加额外的高额标记成本。许多方法使用注意机制来设置特定的子网络结构,以便仅使用图像级注释来进行分类。第二种方法通常设计端到端模型,将判别特征编码为高阶信息。从双线性池[24]到紧凑核池[13],许多工作使用不同的方法,如设计核模块[5]或特殊损失函数[42]来降低高阶特征的维数。然而,这些方法很难从全局特征视图中获得精细的方差,很难超越以前的方法。

与我们的工作非常接近的一种方法是RA-CNN[12],其共同点是在两个尺度的作用下学习区域特征。然而,我们与RA-CNN有以下两个关键区别。首先,我们不需要额外的参数来学习区域的坐标,我们只需要依靠变压器训练附带的注意权值来进行区域的注意学习。第二,我们不需要强迫2的精度高于1,我们是让两个量表相互学习,共同提高精度。

Transformer in Vision

受用于NLP任务的Transformer[32]的启发[6,7,38],最近出现了大量的模型,它们在计算机视觉方面严重依赖Transformer[9,46]。[3]和[46]是较早将变压器应用于目标检测的工作。ViT[9]是第一个将2D图像转换为1D patch token的作品,将其馈送到后续的变压器层进行训练,达到了与cnn图像识别相当的准确率。DeiT[31]通过引入仿真令牌对ViT[9]进行了增强,并采用知识蒸馏对CNN教师的输出进行了模拟,在大规模数据集上无需训练即可获得满意的结果。SETR[44]提出了一种纯粹基于自注意的编码器来执行语义分割。

最相关的工作是tgf[16],它也利用了对FGIR的关注。然而,有一个关键的区别。我们使用注意力权重来放大和重用区域注意力,而Transformer只过滤Transformer最后一层中的patch令牌。其次,我们提出了一种循环结构来提取和学习多尺度特征,以获得更好的视觉表现。

我们的模型在各种图像分辨率和大规模fir数据集上都很优越(见第4节)。

3.网络

3.1整体结构

循环关注多尺度变压器(RAMS-Trans)的框架。输入从全局全尺寸图像到局部区域关注(从左到右)。将变压器各层的关注权相加,生成patch mask矩阵,其中红色1表示激活patch。红色框表示已选择的补丁。请注意,线性投影、变压器层和Fc(完全连接)层是参数共享的,而CLS令牌则不是。

 众所周知,vit能够很好捕捉到图像中的可判别信息,能够确认图像中那一部分区域与任务高度相关,所以先使用vit找到这个任务高相关的区域,把它提取出来,之后再用vit重新推理一遍。

可以这样理解,你想要找一本书,第一次vit推理的作用是帮你找到一个图书馆,第二次vit帮你从图书馆中找到那本书。

固然想法很好,但是要考虑实际情况,如果那个图书馆很小,整个场馆只有十本书,那么两次vit推理就没有必要,还要考虑到推理耗费的时间对于准确率的提升是否的有性价比的。

3.2 Preliminaries: Vision Transformer

Image Tokenization

ViT的创新和关键在于它将2D图像处理成类似字符串的1D序列,然后将其馈送到由标准Transformer编码器堆叠的块中。具体来说,维特푥重塑形象,푥∈R퐻×푊×3,与某些补丁大小,变成一个2 d序列补丁푥푝,푥푝∈R푁×(푃×푃×3),H, W是原始图像的高度和宽度分别3通道的原始RGB图像的数量,和P是人为地设置补丁大小用来分割图像。在ViT中,푃的大小通常是16或32。푁为拆分后的补丁总数,푁=퐻× /푃2。然后ViT使用可训练的线性投影将矢量化的patch푥푝映射到潜在的퐶维嵌入空间中,得到patch令牌푥푝푎푡푐,其中푥푝푎푡푐∈R푁×퐶。

与BERT类似,ViT还初始化类令牌(CLS),以便在令牌化阶段进行最终分类,这些令牌将与补丁令牌连接起来,然后发送到后续的转换器层。此外,由于后续变压器输入的patch令牌是位置不可知的,图像处理依赖于每个像素的空间信息,因此ViT将位置嵌入到每个patch中,可以在后续的训练过程中不断学习:

其中푥푐푙푠∈r1x퐶,푥푝푠∈R(1+푁)×퐶分别为CLS和位置嵌入。然而,固定patch大小的fgfr图像标记化可能存在两个问题:(1)模型一次处理所有patch令牌,当数据集的复杂性增加时,例如,具有混乱的背景,模型可能无法有效捕获patch令牌中携带的区域注意力。(2)这种固定的patch大小使得模型在图像分辨率较低时更容易丢失局部信息。 

Encoder Blocks

ViT的主要结构是block,由一堆퐿Transformer的标准编码器组成。每个块由多头自注意网络(MSA)和前馈网络(FFN)组成,后者由两个完全连接的层组成。푘푡层的输出可表示为:

其中퐿푁(·)表示层归一化操作[1]。CNN图像处理的独特之处在于,随着模型深度的增加,原始图像不断被下采样,同时模型的接受野不断变大,从而可以同时利用图像的全局和局部信息。ViT与cnn的不同之处在于,随着编码器块数量的增加,patch令牌的长度不会改变,模型的接受域不能得到有效扩展,这可能会影响模型在FGIR上的精度。

3.3 Proposed Network

SCDA[35]和RA-CNN[12]的启发,我们提出了循环注意多尺度变压器(RAMS-Trans)来解决上述问题。我们以图2中的两个尺度为例。

首先,模型接受原始输入图像푥1,计算后输出各变压器层的交叉熵损失1和多头自关注权푤푙。然后将푤푙输入到DPPM中,DPPM首先输出原始图像푥1上对应的patch mask矩阵,即二值patch mask矩阵,然后根据该矩阵通过最大连通区域搜索算法得到푥1上区域关注的座标值。在第二阶段,我们通过双线性插值算法获得局部图像输入푥2,从푥1放大,通过l层编码器块重新计算得到交叉熵损失2和多头自关注权푤2。

需要强调的是,我们方法的核心是如何利用ViT本身的特征在原始图像中找到区域注意力,打破ViT因patch大小固定而产生的接受野限制,进而利用多尺度图像表示实现对物体更有效的识别。在cnn中,SCDA使用多通道特征映射的融合来实现目标的定位,从中我们得到启发,因为ViT将原始图像处理成补丁令牌供后续使用MSA和FFN计算,我们是否可以由此得到原始图像对应的每个patch的重要性푥1?由于Transformer的核心之一是MSA,因此很自然会想到使用自关注权重来尝试完成此任务。我们首先进行视觉评估:

Visual Evaluation

依靠ViT预训练附带的注意权值,就可以准确定位原始图像中的目标区域,并丢弃不相关和有噪声的区域。在图1中。,我们展示了来自CUB-200-2011、斯坦福狗和iNaturalist2017三个数据集的一些图像。我们使用在ImageNet21k上预先训练的ViT模型提取他们的注意力权重,而根本不需要对目标数据集进行微调,然后使用CAM将它们可视化[45]。在图1中,我们可以看到,仅使用原始的注意力权重,我们就可以很好地定位原始图像中的对象,并掩盖背景和噪声区域。

以上可视化过程说明了ViT在计算其MSA机制时产生的自注意权值与目标物体在原始图像中的位置有一定的相关性。

Dynamic Patch Proposal Module

我们的目标是从푁1/ 2x푁1/2补丁中自适应地选择不同数量的补丁来重组푥2。我们首先将各变压器层的关注权取为:

其中Q、K分别为查询向量和关键向量。然后正则化푤푙

其中휒是正则化因子퐸是对角矩阵。 

然后,我们建议对所有先前层的注意权值进行积分,并对所有层的修改后的注意权值递归地应用矩阵乘法,如下:

 我们计算푔中所有位置的平均值푔作为阈值来确定目标的定位位置。特别是为了提高定位能力,进一步确定区域注意力,我们设计了放大因子훼作为超参数来提高阈值: 

其中,~푀(푥,푦)是补丁掩码矩阵,(x, y)是这些푁1/2 ×푁1/2位置中的特定位置。最后,我们使用算法1提取~푀的最大连接分量,对原始图像中的区域注意力进行定位和缩放푥1。 

3.4 Implementation

我们介绍了损失函数的实现细节以及规模类令牌。

Loss Function

在训练阶段,我们的损失函数表示为多任务损失

它们是互补的。휆为平衡两种损失权重的系数,在实验中取1.0。퐿푠푠푠1表示尺度1的细粒度分类损失,퐿푠푠푠2为引导损失,用于引导模型选择更具判别性的区域。这两种损失在反向传播过程中共同作用以优化模型的性能。它使最终的收敛模型能够根据对象的整体结构特征或区域注意特征进行分类预测。

在测试阶段,我们删除了scale 2以减少大量的计算,因此我们的方法在实际应用中不会花费太长时间进行预测。

Scale-wise Class Token

在3.1节中,我们描述了类令牌是如何生成的以及它的作用,主要是与补丁令牌交换信息,最后将类信息提供给分类层。然而,在我们的框架中,原始图像的区域注意力会被定位和放大,因此在尺度之间patch令牌会不同,如果在尺度之间共享类令牌,可能会影响最终的分类性能。因此,我们提出了基于规模的类令牌,即使用不同的类令牌来适应不同规模的补丁令牌:

我们在随后的不同分辨率的实验中证明了这种设计的有效性。 

4.实验

4.1实验设置

4.1.1 数据集

CUB-200-2011[33]、Stanford Dogs[22]和iNaturalist2017[18]。

4.1.2实验细节

我们从ImageNet21k上预训练的官方ViT-B_16模型加载模型权重。在所有的实验中,我们使用SGD优化器进行优化,初始学习率为0.03,动量为0.9。我们用权重衰减0。我们使用余弦退火来调整批次大小为16的学习率。该模型总共训练了10000步,其中前500步是热身。我们通过将最短的边缩放到600来调整输入图像的大小,并随机裁剪一个448 × 448的区域进行训练。在测试中,我们使用中心裁剪将图像大小更改为448 × 448。我们将图像分割成ViT中的小块,小块大小为16 × 16。超参数훼选择为1.3。我们使用Pytorch完成了整个模型的构建,并在Tesla V-100 gpu上运行了所有实验。

4.2对比试验

4.3消融实验

4.4可视化

5.结语

在本文中,我们提出了一种新的循环关注多尺度变压器(RAMS-Trans)架构,该架构结合了cnn在扩大有效接受场、加强局域性方面的优势,以及变压器在利用全局信息方面的优势。在没有边界框/部分注释和额外参数的情况下,RAMS-Trans使用转换器的自关注权重来衡量与原始图像对应的补丁标记的重要性,并以多尺度方式递归地学习判别区域关注。最后但并非最不重要的是,我们的方法可以很容易地在CUB-200-2011、斯坦福狗和大规模iNaturalist2017数据集中进行端到端训练,并达到最先进的水平。如何更精确地定位区域注意力,进一步提高分类精度是今后的工作方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/665887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

npm ERR! code CERT_HAS_EXPIRED

执行npm i报错: npm ERR! code ETIMEDOUT npm ERR! syscall connect npm ERR! errno ETIMEDOUT npm ERR! network request to https://registry.npmjs.org/react-redux failed, reason: connect ETIMEDOUT 104.16.2.35:443 npm ERR! network This is a problem rel…

使用ESP32-S3对MQ-135空气质量传感器的使用记录(Arduino版)

一、硬件上: 1、使用esp32开发板的04引脚与AO连接,检测AO引脚的电平 二、软件上: 1、使用Arduino快速完成开发 2、源码: // Potentiometer is connected to GPIO 04 (Analog ADC1_CH3) const int adcPin 4;// variable for s…

十大排序算法之堆排序

堆排序 在简单选择排序文章中,简单选择排序这个“铁憨憨”只顾着自己做比较,并没有将对比较结果进行保存,因此只能一遍遍地重复相同的比较操作,降低了效率。针对这样的操作,Robertw.Floyd 在1964年提出了简单选择排序…

再谈Redis三种集群模式:主从模式、哨兵模式和Cluster模式

总结经验 redis主从:可实现高并发(读),典型部署方案:一主二从 redis哨兵:可实现高可用,典型部署方案:一主二从三哨兵 redis集群:可同时支持高可用(读与写)、高并发,典型部署方案:三主三从 一、概述 Redis 支持三种集群模式,分别为主从模式、哨兵模式和Cluster模式。…

YOLOv5改进 | 主干篇 | 反向残差块网络EMO一种轻量级的CNN架构(附完整代码 + 修改教程)

一、本文介绍 本文给大家带来的改进机制是反向残差块网络EMO,其的构成块iRMB在之前我已经发过了,同时进行了二次创新,本文的网络就是由iRMB组成的网络EMO,所以我们二次创新之后的iEMA也可以用于这个网络中,再次形成二次创新,同时本文的主干网络为一种轻量级的CNN架构,在…

记录在树莓派中部署PI-Assistant开源项目(GPT语音对话)的BUG

核心 在部署PI-Assistant(https://github.com/Lucky-183/PI-Assistant)项目中,首先要进行环境安装,官网文档中提供的安装命令如下: pip install requests arcade RPi.GPIO pydub numpy wave sounddevice pymysql cn2…

MySql 慢SQL配置,查询,处理

一.慢SQL配置相关 1.查看慢SQL是否开启 执行下面命令查看是否开启慢SQL show variables like %slow_query_log; 复制代码 OFF: 未开启ON: 2.打开慢SQL配置 执行下面的命令开启慢查询日志 set global slow_query_logON; 复制代码 3.修改慢查询阈值 前面介绍了SQL执行到达了…

基于RT-Thread(RTT)的HAL库+ADC+DMA多通道采集

前言 在使用到RTT的ADC设备框架进行AD的多通道采集时,发现数据会跳变,觉得可能是没有加DMA的缘故,但RTT好像没有对应的DMA接口函数(或者我没找到),故尝试不使用RTT的ADC设备框架,直接使用HAL库…

指针详解(3)

各位少年,大家好,我是博主那一脸阳光,今天介绍 二级指针 指针数组,还有个指针数组模拟二维数组。 前言:在浩瀚的C语言编程宇宙中,指针犹如一把打开内存世界大门的独特钥匙,它不仅是理解程序运行…

React Hooks 学习笔记

1.useState() 实现对页面数据的存储,当数据改变时候,自动触发render函数 2.useRef 用来解决两个问题: 1).是获取DOM元素或子组件的实例对象 2).存储渲染周期之间共享的数据 3.useEffect 4.useLayoutEffect 5…

Javaweb之SpringBootWeb案例之 @ConfigurationProperties的详细解析

4.3 ConfigurationProperties 讲解完了yml配置文件之后,最后再来介绍一个注解ConfigurationProperties。在介绍注解之前,我们先来看一个场景,分析下代码当中可能存在的问题: 我们在application.properties或者application.yml中配…

图论练习2

内容:路径计数DP,差分约束 最短路计数 题目大意 给一个个点条边的无向无权图,问从出发到其他每个点的最短路有多少条有自环和重边,对答案 解题思路 设边权为1,跑最短路 表示的路径数自环和重边不影…

WPS Office18.7软件日常更新

【应用名称】:WPS Office 【适用平台】:#Android 【软件标签】:#WPS 【应用版本】:18.6.1➡18.7 【应用大小】:160MB 【软件说明】:软件日常更新。WPS Office是使用人数最多的移动办公软件。独有手机阅读模…

正点原子--STM32定时器学习笔记(1)

这部分是笔者对基本定时器的理论知识进行学习与总结!,主要记录自己在学习过程中遇到的重难点,其他一些基础点就一笔带过了! 1. 定时器概述 1.1 软件定时原理 使用纯软件(CPU死等)的方式实现定时&#xf…

机器学习_15_贝叶斯算法

文章目录 1 贝叶斯定理相关公式2 朴素贝叶斯算法2.1 朴素贝叶斯算法推导2.2 朴素贝叶斯算法流程 3 高斯朴素贝叶斯4 伯努利朴素贝叶斯5 多项式朴素贝叶斯6 贝叶斯网络6.1 最简单的一个贝叶斯网络6.2 全连接贝叶斯网络6.3 “正常”贝叶斯网络6.4 实际贝叶斯网络:判断…

算法学习——华为机考题库5(HJ31 - HJ35)

算法学习——华为机考题库5(HJ31 - HJ35) HJ31 单词倒排 描述 对字符串中的所有单词进行倒排。 说明: 1、构成单词的字符只有26个大写或小写英文字母; 2、非构成单词的字符均视为单词间隔符; 3、要求倒排后的单…

LeAPI 后端接口开发 - 发布、下线接口

一、上线接口(仅管理员) 1. 校验请求参数 2. 判断(测试)接口是否可以调用 引入调用接口的客户端(自己写的 SDK)注入客户端实例调用接口 3. 修改数据库中接口的状态 /*** 上线(发布&#xff…

爬虫(二)

1.同步获取短视频 1.只要播放地址对Json数据解析,先把列表找出: 2.只想要所有的播放地址,通过列表表达式循环遍历这个列表拿到每个对象,再从一个个对象里面找到Video,再从Video里面找到播放地址(play_addr),再从播放地址找到播放…

动态内存管理 智能指针 shared_ptr、unique_ptr、weak_ptr + 定制删除器

动态内存管理常出现的两种问题: 1.忘记释放内存,造成内存泄漏 2.这块内存还有其他指针指向的情况下,就释放了它,会产生引用非法内存的指针,例如 如果类中有属性指向堆区,做赋值操作时会出现浅拷贝的问题 内存泄漏分…

在jetbrains IDEA/Pycharm/Android Studio中安装官方rust插件,开始rust编程

在idea插件市场搜索rust:JetBrains Marketplace ,就可以找到rust插件: jetbrains官方rust插件地址:[Deprecated] Rust - IntelliJ IDEs Plugin | Marketplace 直接在idea中搜索rust好像是搜不到的: 需要在这个插件市场…