论文笔记:Fine-Grained Visual Classification via PMG Training of Jigsaw Patches

细粒度分类新策略
提出了一种渐进式多粒度训练框架,通过不同训练步骤融合先前粒度级别的数据,利用拼图生成器帮助网络学习特定粒度特征,有效提高了细粒度分类的准确性。

Fine-Grained Visual Classification via Progressive Multi-Granularity Training of Jigsaw Patches

0 摘要

对哪种粒度最具有区别性以及如何在多粒度之间融合信息所做的工作较少。

本文突出的分类框架:

  1. 一种渐进式训练策略,在每个训练步骤都添加新层,以根据最后一步和上一阶段找到的较小粒度信息来利用信息
  2. 一个拼图生成器,形成包含不同粒度级别信息的图像(DCL提到的那个方法?

源代码:https://github.com/RuoyiDu/PMG-Progressive-Multi-Granularity-Training

1 引言

鲜有工作对哪种粒度最有区别的局部区域、如何将跨粒度信息融合在一起以实现分类准确性这两个问题进行研究。

跨粒度的信息有助于避免类内较大变化的影响。仅识别区分性部分通常不够,识别这些部分之间的相互作用方式也不够。

最近的研究集中在“放大”因子[11,36],即不仅识别零件,而且还聚焦于每个部分内真正有区别的区域。该方法主要集中在几个部分,而忽略了其他部分,也没有考虑如何将不同放大部分特征以协同方式融合在一起。作者认为,不仅需要识别部分及最具区分性的粒度,而且还需要如何有效地合并不同粒度的部分

既不显示也不隐式地从部分(或其放大版本)挖掘细粒度的特征表示。 而是假设:细粒度的区分性信息自然位于不同的视觉粒度之内,要鼓励网络以不同的粒度进行学习,同时将多粒度特征融合在一起

提出的框架可同时容纳零件粒度学习和跨粒度特征融合:

  1. 渐进训练策略,融合不同粒度特征
  2. 随机拼图生成器,鼓励网络学习特定粒度特征

**多粒度渐进式训练框架,以学习不同图像粒度之间的互补信息,在训练过程中按部进行,其中每一步重点是在网络的相应阶段训练特定于粒度的信息。**从更稳定的细粒度开始,逐渐过渡到粗粒度,避免了出现在较大区域中的大型内部类差异所造成的混淆。每个训练步骤结束时,在当前步骤训练的参数将传递到下一个训练步骤作为其参数初始化。

直接应用渐进式训练将不会有益于细粒度特征学习,因为获得的多粒度信息可能倾向于集中在相似区域上。通过引入一个拼图生成器来解决,在每个训练步骤中形成不同的粒度级别,仅最后一步使用原图像训练。 鼓励模型在块级别上工作,其大小特定于特定的粒度。本质上,迫使网络的每个阶段都重点关注局部补丁,而不是整个图像,从而学习特定于给定粒度级别的信息。
本文的主要贡献可归纳如下:

  1. 一种渐进式训练策略,以不同的训练步骤进行操作,并且在每个步骤中都融合了先前粒度级别的数据,最终在不同粒度之间训练了固有的互补属性,从而实现了细粒度的特征学习。
  2. 一个拼图生成器形成不同级别的粒度
  3. 渐进多粒度(PMG)训练框架表现很好

2 相关工作

细粒度分类

从强监督弱监督。弱监督工作中,大多数关注定位部分、互补部分、不同粒度的部分。但如何将这些部分的信息更好地融合在一起很多有人考虑。并且当前的融合技术可以大致分为两类:不同部分各自预测将其概率直接合并,特征合并进行预测。这两种方法都训练一个全连接融合层,将从不同部分提取的特征(图或向量)融合起来。

将不同部分的特征融合起来是一个难题。 本文基于细粒度对象的内在特征来解决这个问题:尽管类内差异大,但细微的细节显示了局部区域的稳定性。因此,引导网络逐步从小粒度到大粒度的特征学习,而不是先定位。

图像分割

通过采用拼图作为弱监督网络的初始化,使网络有更好的转换性能,该方法有助于网络利用图像的空间关系。

在one-shot learning中,图像分割操作用于数据增强,分割两个图像并交换图像块以生成新的训练图像。

DCL通过破坏全局结构来强调局部细节并重构图像以学习局部区域之间的语义相关性。但是,它会在整个训练过程中以相同大小分割图像,这意味着难以利用多粒度区域。

本文应用了一个拼图生成器来限制每个训练步骤中学习区域的粒度。

渐进式训练

该策略允许网络发现图像分布的大规模结构,然后将注意力转移到越来越多的尺度细节上。

本文采用渐进式训练的思想来设计一个可以通过一系列训练阶段学习这些信息的单一网络。

  1. 输入图像分割成块以训练模型低层
  2. 逐步增加补丁的数量,高层相应的层也添加进入并训练

3 方法

image-20210118193409607

鼓励模型在较浅的层中学习稳定的细粒度信息,并随着训练的进行逐渐将注意力转移到对深层中粗粒度的抽象信息的学习上。

3.1 网络架构

主干网络 F F F L L L个阶段,每个阶段的输出特征图为 F l ∈ R H l × W l × C l F^l\in\mathbb R^{H_l\times W_l\times C_l} FlRHl×Wl×Cl l = { 1 , 2 , . . . , L } l=\{1,2,...,L\} l={ 1,2,...,L}。目标是对在不同中间阶段提取的特征图施加分类损失。引入卷积块 H c o n v l H^l_{conv} Hconvl F l F^l Fl的输出作为输入变成为向量表示 V l = H c o n v l ( F l ) V^l=H^l_{conv}(F^l) Vl=Hconvl(Fl),再经过该阶段的分类模块 H c l a s s l H^l_{class} Hc

### Fine-grained Visual Classification with High-temperature Refinement and Background Suppression 的复现代码与教程 Fine-grained Visual Classification(细粒度视觉分类)是一项复杂任务,涉及从数据中学习特定类别的细粒度特征[^3]。为了实现论文Fine-grained Visual Classification with High-temperature Refinement and Background Suppression》中的方法,可以参考以下内容: #### 1. 论文方法概述 论文提出了一种结合高温细化(High-temperature Refinement)和背景抑制(Background Suppression)的方法来提升细粒度分类的性能。高温细化通过调整分类器的输出分布,增强对难分类样本的学习能力。背景抑制则通过减少背景区域的影响,聚焦于目标对象的关键部分。 #### 2. 复现代码资源 目前,许多研究者会在 GitHub 或其他开源平台上分享他们的复现代码。以下是可能的代码资源: - **GitHub 搜索**:可以在 GitHub 上搜索关键词“Fine-grained Visual Classification High-temperature Refinement Background Suppression”或直接查找论文作者的主页。 - **PyTorch 实现**:如果论文使用 PyTorch 作为框架,可以参考类似的细粒度分类项目,例如 `torchvision` 提供的预训练模型和自定义网络结构[^4]。 #### 3. 教程与实现步骤 以下是实现该方法的一个通用框架: ```python import torch import torch.nn as nn import torch.optim as optim from torchvision import models, transforms # 定义高温细化模块 class HighTemperatureRefinement(nn.Module): def __init__(self, class_num): super(HighTemperatureRefinement, self).__init__() self.classifier = nn.Sequential( nn.BatchNorm1d(part_feature), nn.Linear(part_feature, feature_size), nn.BatchNorm1d(feature_size), nn.ELU(inplace=True), nn.Linear(feature_size, class_num) ) def forward(self, x): return self.classifier(x) # 定义背景抑制模块 class BackgroundSuppression(nn.Module): def __init__(self, input_size, output_size): super(BackgroundSuppression, self).__init__() self.conv = nn.Conv2d(input_size, output_size, kernel_size=3, stride=1, padding=1) self.relu = nn.ReLU() def forward(self, x): return self.relu(self.conv(x)) # 主网络结构 class FGVCModel(nn.Module): def __init__(self, num_classes): super(FGVCModel, self).__init__() self.backbone = models.resnet50(pretrained=True) self.ht_refinement = HighTemperatureRefinement(num_classes) self.bg_suppression = BackgroundSuppression(2048, 512) def forward(self, x): features = self.backbone(x) suppressed_features = self.bg_suppression(features) output = self.ht_refinement(suppressed_features) return output # 初始化模型、损失函数和优化器 model = FGVCModel(num_classes=200) criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # 训练过程 def train_model(dataloader, model, criterion, optimizer, epochs=10): for epoch in range(epochs): for inputs, labels in dataloader: optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() ``` #### 4. 注意事项 - 数据集准备:确保使用适合细粒度分类的数据集,如 CUB-200-2011、Stanford Cars 或 Aircraft 等[^3]。 - 背景抑制效果:可以通过可视化中间层特征图来评估背景抑制的效果。 - 高温细化参数:调整温度参数以适应不同数据集的特性。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值