论文阅读:TransFG: A Transformer Architecture for Fine-grained Recognition

该博客介绍了一种用于细粒度视觉分类(FGVC)的新型Transformer框架——TransFG。TransFG利用Transformer的自注意力机制,通过部分选择模块(PSM)和对比特征学习来增强对关键图像区域的识别。它通过选择高权重token并应用对比损失来改进特征学习,从而提升网络区分微妙类间差异的能力。实验部分展示了TransFG在数据集上的表现。

目录

用细粒度识别Transformer架构

一、动机

二、方法

2.1 大致流程

2.2 步骤分解

三、实验

3.1 数据集


用细粒度识别Transformer架构

一、动机

     由于固有的微妙的类间差异,从子类别中识别对象的细粒度视觉分类(FGVC)是一项非常具有挑战性的任务。通过关注如何定位最具辨别力的图像区域,并依靠它们来提高网络捕获细微差异的能力来解决这个问题。Transformer的自注意力机制将每个token标记链接到分类标记,可以直观的将注意力链接的强度视为token重要性的指标。提出一种新的基于Transformer的框架TransFG。

二、方法

2.1 大致流程

图像序列化——碎片嵌入——TransFG

2.2 步骤分解

1、图像序列化

为了保留局部相邻结构,采取滑动窗口生成重叠碎片。滑动窗口大size为P,step为S;因此两个相邻的碎片共享一个大小为(P-S)*P的重叠区域

 2、碎片嵌入

将可训练的碎片映射到潜在的D维嵌入空间,将可学习的位置嵌入添加到碎片嵌入中以保留位置信息。

 3、TransFG层


ViT回顾:

单个Transformer层可以表示成如下:


 TransFG主要有两部分不同:部分选择模块(PSM)对比特征学习

 部分选择模块:

为了充分利用注意力信息,将改变最后一层的输入,对最后一层前面的所有层的权重累乘,选出

 然后选择权重最大的A_k个token作为最后一层的输入。

对比特征学习:

因为简单的交叉熵损失函数不足以完全监督特征学习,因为子类别之间的差异可能非常小。
采用对比损失最小化不同标签对应的分类token的相似度,最大化具有相同标签y的样的分类token的相似度

z:token   y:标签   sim():相似性函数

 

总之,最后的模型是用交叉熵损失和对比损失的综合训练的:(trick:可以用两个损失函数结果的运算来构成一个“新的”损失函数)

三、实验

3.1 数据集

源代码

### ViT-FOD: A Vision Transformer-based Fine-grained Object Discriminator ViT-FOD是一种基于视觉Transformer(Vision Transformer, ViT)的细粒度物体辨别模型。该模型旨在解决细粒度分类任务中的挑战,即在具有高度外观相似性的类别之间进行区分。细粒度分类任务通常涉及识别同一超类下的子类,例如不同种类的鸟类、车型或飞机型号等[^3]。 #### 核心思想与设计 ViT-FOD的核心思想是利用视觉Transformer的全局注意力机制来捕捉图像中细微的差异。与传统的卷积神经网络(CNN)相比,Transformer能够通过自注意力(Self-Attention)机制建立图像块(patches)之间的长距离依赖关系,从而避免了CNN中由于卷积核大小限制而受限的感受野问题。这种特性使得ViT-FOD在处理细粒度分类任务时能够更好地捕捉图像中的关键区域和细节特征[^4]。 ViT-FOD的设计通常包括以下几个关键部分: 1. **图像分割与嵌入**:输入图像首先通过一个stem层被分割成多个小块(patches),每个小块被视为一个“视觉标记”(visual token)。这些标记随后被线性嵌入到一个高维空间中,形成初始的特征表示[^2]。 2. **Transformer编码器**:嵌入后的视觉标记通过一个或多个Transformer编码器层进行处理。每个编码器层包含多头自注意力(Multi-Head Self-Attention, MHSA)模块和前馈神经网络(Feed-Forward Network, FFN)。MHSA模块能够捕捉图像块之间的全局依赖关系,而FFN则用于进一步提取局部特征[^3]。 3. **特征增强与分类**:在Transformer编码器之后,ViT-FOD通常会引入一些额外的机制来增强特征表示。例如,可以通过注意力机制聚焦于图像中的关键区域,或者通过多尺度特征融合来提升模型的判别能力。最终,增强后的特征被输入到一个分类头中,用于生成最终的分类结果[^5]。 #### 优势与创新 ViT-FOD的优势主要体现在以下几个方面: - **全局注意力机制**:通过自注意力机制,ViT-FOD能够捕捉图像中更广泛的上下文信息,这对于细粒度分类任务尤为重要,因为它能够帮助模型识别出微小但关键的差异。 - **灵活性与可扩展性**:ViT-FOD的设计允许灵活地调整模型的深度和宽度,从而在计算资源和性能之间取得平衡。此外,该模型可以轻松扩展到更高分辨率的输入图像,进一步提升其在复杂任务中的表现[^1]。 - **高效的压缩方法**:ViT-FOD可以结合静态或动态的ViT压缩方法,例如CF-ViT,以降低计算复杂度并提高推理速度。静态压缩方法通过手动设计模块来减少计算图的复杂性,而动态压缩方法则根据输入图像调整计算图,从而实现更高效的推理[^5]。 #### 应用场景 ViT-FOD适用于需要高精度细粒度分类的任务,例如: - **生物识别**:如鸟类、昆虫或植物种类的识别。 - **工业检测**:如汽车型号、电子产品型号的识别。 - **医学图像分析**:如医学图像中不同病变类型的区分。 ### 示例代码 以下是一个简化的ViT-FOD模型实现示例,展示了如何使用PyTorch构建一个基于视觉Transformer的细粒度分类模型: ```python import torch import torch.nn as nn from torchvision import models class ViTFOD(nn.Module): def __init__(self, num_classes, img_size=224, patch_size=16, embed_dim=768, depth=12, num_heads=12): super(ViTFOD, self).__init__() self.patch_size = patch_size self.num_patches = (img_size // patch_size) ** 2 self.cls_token = nn.Parameter(torch.zeros(1, 1, embed_dim)) self.pos_embedding = nn.Parameter(torch.randn(1, self.num_patches + 1, embed_dim)) self.patch_embed = nn.Conv2d(3, embed_dim, kernel_size=patch_size, stride=patch_size) self.transformer = nn.TransformerEncoder( nn.TransformerEncoderLayer(d_model=embed_dim, nhead=num_heads), num_layers=depth ) self.classifier = nn.Linear(embed_dim, num_classes) def forward(self, x): B = x.shape[0] x = self.patch_embed(x) # (B, embed_dim, H/patch_size, W/patch_size) x = x.flatten(2).transpose(1, 2) # (B, num_patches, embed_dim) cls_tokens = self.cls_token.expand(B, -1, -1) # (B, 1, embed_dim) x = torch.cat((cls_tokens, x), dim=1) # (B, num_patches + 1, embed_dim) x = x + self.pos_embedding x = self.transformer(x) x = x[:, 0] # Take the CLS token x = self.classifier(x) return x # Example usage model = ViTFOD(num_classes=200) # Assuming 200 fine-grained classes input_tensor = torch.randn(16, 3, 224, 224) # Batch of 16 images output = model(input_tensor) print(output.shape) # Should be (16, 200) ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值