论文解读:Channel Importance Matters in Few-Shot Image Classification

news2025/3/3 18:36:02

文章汇总

参考文章ICML2022|Channel Importance Matters in Few-Shot Image Classification - 知乎

一句话总结

Channel bias问题,使模型在迁移到下游小样本分类任务时泛化能力较差,本文在测试阶段仅用一行代码就减弱这个问题的影响。

Channel bias问题

想象一下一个即将在miniImageNet上训练的模型。miniImageNet有很多动物类别,没有植物类别,但这些动物经常以各种植物为背景。

因此在训练的过程中(第一行),该模型发现,用于分辨这些动物的判别性特征是动物身体部位的一些细节,与背景无关,不禁窃喜,嘿嘿,这些植物都是些障眼法,可以被忽略,咱就关注那些动物身上的判别性特征就行。

可想而知,当此模型在测试阶段看到一堆iNaturalist的植物(第二行)时心里是崩溃的:这些玩意我都见过,但真的没啥印象呀,这咋区分的开:) 下一次该模型痛改前非,在iNaturalist上老老实实地训练,结果还是Too naive。测试时,一不小心碰上了细粒度Plant Disease数据集(第三行),又双叒叕懵逼了:这些不同的类别不都是一种植物么??这有啥区别,那些奇奇怪怪的纹路我也见过,但在之前训练时跟分类没啥关系啊,内心崩溃*2。

如果上面这个例子里的直觉是正确的,那么任何一种任务分布转移,都会导致判别性特征发生变化,而模型并未及时觉察出这一点,仍以过往经验来完成测试阶段的任务。很明显,模型训练之前学习得的“某种”经验不好使了,因此在测试时会表现差。

本质就是神经网络确实在测试阶段把channel 重视程度搞错了。我们把神经网络图像特征表示存在的这个问题称为channel bias问题。

偶然发现的函数

通过特定特征转换,对特征表示进行纠偏,使得性能有提升

其中k是一个大于0的超参数。在测试阶段,把这个函数逐一作用于每一个图像特征表示的每一个维度(也称为通道--channel),就这么简单的一个操作(仅需一行代码),我们发现,就能大幅度提升各种模型在各种测试数据集上的小样本分类性能

验证起效果场景

函数仅在存在任务分布偏移(训练和测试的数据集数据分布有明显差异)的时候才有效果

可视化分析函数作用

上图可视化了miniImageNet训练所学特征表示在Plant Disease上的channel情况。x轴每一条竖线是一个channel在这个数据集上的平均值,我们称为该值为Mean Magnitude of Channel(MMC)。红色和绿色分别为作用该函数前后的MMC。明显地,我们发现这个函数压低了高MMC的channel,并大幅度提升了低MMC的channel

好了,我们现在已经把Channel bias问题中的“特征”和神经网络所学特征表示的“channel”对等了起来,特征重视程度的偏差转化为了channel重视程度的偏差。我们也发现MMC可以作为channel重视程度的一种度量。

三个发现

1.神经网络确实在测试阶段把channel 重视程度搞错了。大的普通应变小,小的普遍应变大。在CUB上,一些MMC大的channel(靠右的那几个)其oracle MMC应降低5-10倍左右,而偏低的一些MMC(靠左的那一坨)则oracle MMC应提升乃至数十倍。我们把神经网络图像特征表示存在的这个问题称为channel bias问题。

2.任务分布转移大,则channel bias更严重。明显地,CUB的channel bias比miniImageNet测试集上严重的多。右图红色的线明显偏移了y=x,而左图偏移程度很小。

3.前面提到的简单函数对MMC进行了一定程度的纠偏。明显可以发现,蓝色的线比y=x更接近红色的线。因此虽然提出的简单函数仍然不够完美,但依然作出了该有的努力。

摘要

Few-Shot Learning (FSL)要求视觉模型在任务分布变化的情况下快速适应全新的分类任务。了解这种任务分配转变所带来的困难是FSL的核心。在本文中,我们展示了一个简单的通道智能特征转换可能是从通道角度解开这个秘密的关键。当面对测试时间数据集中新颖的少镜头任务时,这种转换可以大大提高学习图像表示的泛化能力,同时与数据集和训练算法的选择无关。通过对这种转换的深入分析,我们发现FSL中表征转移的困难源于图像表征的严重通道偏差问题:通道在不同的任务中可能具有不同的重要性,而卷积神经网络可能不敏感,或者对这种转移的反应不正确。这指出了现代视觉系统泛化能力的一个核心问题,是未来需要进一步关注的问题。我们的代码可在GitHub: Let’s build from here · GitHub Frankluox/Channel_Importance_FSL获得。

1. 介绍

深度卷积神经网络(Krizhevsky et al, 2012;他等人,2016)在过去十年中彻底改变了计算机视觉,使从大量图像中自动学习表征成为可能。学习到的表征可以很好地泛化到全新的图像。因此,在大多数基准测试中,图像分类性能接近人类。然而,除了识别以前看到的类别外,人类还可以在变换的环境中快速改变图像模式的焦点并且仅仅通过一些观察就能识别出新的类别。这种快速学习能力,被称为Few-Shot learning (FSL),挑战了当前视觉模型快速适应不同于训练中的新分类任务的能力。这种任务分布转移意味着新任务中的类别、图像域或类别粒度与训练任务中的类别、图像域或类别粒度存在偏差。

最近对少量图像分类的研究强调了学习图像表示质量的重要性(Raghu等人,2020;Doersch等,2020;Dhillon等,2020;田等,2020;Rizve et al, 2021),并且还表明,当存在任务分布转移时,神经网络学习的表征不能很好地泛化到新的少镜头分类任务(Chen et al, 2021;Doersch等,2020;Agarwal et al, 2021)。因此,研究任务分布的变化对图像表征泛化能力的影响是至关重要的。

如图1所示,任务分布的变化可能会导致判别图像特征的变化,而这些特征对当前的分类任务至关重要。例如,在动物识别任务中,在miniImageNet上训练的卷积神经网络可以成功地识别出与动物相关的判别信息。尽管网络学习到的表示可以编码一些植物信息(来自图像背景),但植物并没有作为miniImageNet的主要类别出现,并且对于网络来说,在从iNaturalist数据集采样的新颖的少数镜头任务中区分各种植物可能是不够的。

即使该网络在iNaturalist上训练得很好,可以识别植物,但由于粒度的变化,它很难适应识别植物病害的新任务,因为判别信息现在变成了更细粒度的叶片病变部分。

在本文中,我们证明了在少镜头学习中遇到的这种困难会导致学习图像表示(即特征)中的通道偏差问题。具体而言,在全局池化后的层中,学习到的特征中的不同通道寻求不同的模式(如Zhou et al ., 2015;Bau等人,2017))在训练过程中,并且通道根据其对训练任务的重要性进行加权(以有偏差的方式)。然而,当应用于新的小样本分类任务时,学习到的图像特征通常变化不大或不适应新任务的类别而发生不适当的变化。这种对训练任务的偏向可能导致在新任务中对图像特征的不精确关注。

导致我们发现通道偏置问题的是一个简单的变换函数,它是我们在数学分析课本中找到的。该转换函数仅在测试时动态地应用于图像表示的顶部通道,可以持续且大幅度地提高对分布外的少镜头分类任务的预测,与数据集和训练算法的选择无关(例如,在19个不同的测试时间数据集上,5-way 5-shot任务的平均改进为0.5-7.5%,如表1所示)。通过分析,我们发现通道偏差问题的存在。并表明该变换通过调整目标任务上图像表示的通道平均幅度(MMC)来校正通道重点。具体来说,它是一种平滑函数,可以抑制大MMC的通道,并在很大程度上放大小MMC的通道。

为了进一步理解通道偏置问题,我们在二值分类任务中对图像表示的MMC进行了oracle调整。这些研究表明,通道偏置问题存在于许多不同类型的目标任务中,并且随着分布偏移的扩大,通道偏置问题变得更加严重(如图6所示)。此外,通过测试时间镜头分析,我们验证了通道偏置问题在少镜头设置下需要更多的关注,而在多镜头设置下,简单的微调可以帮助解决该问题。

2. a Channel-wise Feature Transformation

见上面文章汇总

4. Analysis of the Number of Shots

我们已经看到,通道偏差问题是图像表示不能很好地推广到新的少量分类任务的主要原因之一。然而,有两个问题仍然需要回答:(1)我们仍然不清楚这个问题是否只与少拍图像分类有关。在之前的所有实验中,我们在每个类只给出5个标记图像的任务上进行测试。如果我们在新任务中有更多的训练样本会发生什么?(2)信道偏置问题对不同测试时间方法的影响有多大?如果我们有机会对学习到的表示进行微调,那么提出的简单转换是否仍然有效?为了回答这些问题,我们对三种具有代表性的测试时间方法进行了镜头分析实验,这些方法是大多数主流的少镜头分类算法所采用的或基础:(1)ProtoNet中提出的基于度量的最近邻质心分类器(NCC)方法,该方法首先对支持集中每个类的图像特征进行平均,形成类质心,然后将查询特征分配给最近邻质心的类;(2)线性分类器(LC),根据学习到的支持集中的图像特征训练线性层;(3)微调,利用支持集中的图像对特征提取器和线性层进行微调。在miniImageNet的训练集上使用最先进的S2M2算法对特征提取器进行训练,并在miniImageNet的测试集上使用上述三种测试时间方法,在支持集的每个类别中使用不同数量的标记图像进行测试。结果如图8所示。我们展示了所有方法的原始精度,以及简单变换对性能的影响。

我们首先看一下右图,它显示了简单变换对所有方法的影响。对于所有测试的照片,NCC和LC的性能增益保持在一个相对较高的值,每个类最多有400个标记图像。这表明信道偏置问题不仅与少镜头设置有关,而且存在于多镜头设置中。然而,当我们有大量的支持图像时,我们有另一种选择,直接微调特征提取器。微调方法有可能通过直接修改图像表示和校正信道分布来完全解决信道偏置问题。右图显示,简单的变换并没有改善微调方法,因此信道偏置问题确实在很大程度上得到了缓解。在左图中,微调方法在多镜头设置中表现出优势,但在少镜头设置中表现出不足。因此,我们可以推断,通道偏置问题只存在于少数镜头设置中,在这种情况下,冻结特征提取器并在学习到的特征上构建分类器是更好的选择。

我们还有另一个值得注意的观察结果。简单变换在NCC上的性能增益保持在一个固定值附近,而LC上的性能增益随着射击次数的增加而降低。从而在一定程度上缓解了多镜头环境下的信道偏置问题。这是因为更多的标记数据告诉线性分类器关于数据的类内方差的足够信息,从而可以通过修改线性变换矩阵的每一行的比例来调整MMC。因此,线性分类器可以稳定地提高其性能,当更多的标记数据进入时,直到无法实现更多的线性分离,并且需要使用时间微调来直接调整特征空间。

6. 结论

本文揭示了少样本图像分类中的通道偏置问题。这个问题可以通过本工作中提出的简单的通道特征转换来缓解。这种转换在测试时使用,不增加任何计算开销,可以应用于大多数预训练的卷积神经网络和少量学习算法。我们证明了它可以作为一种先验知识来规范特征的通道分布。进一步分析,包括对oracle MMC平差的推导,全面分析了信道偏置问题。我们希望本研究揭示的通道偏差问题,以及对不同测试时间方法的分析,可以让社区更好地理解少射分类中的任务分布转移和表征转移,从而有助于产生更好的算法。

参考资料

文章下载(ICML(CCF A) 2022)

https://arxiv.org/pdf/2206.08126.pdf

📎Channel Importance Matters in Few-Shot Image Classification.pdf

代码地址

GitHub - Frankluox/Channel_Importance_FSL: [ICML 2022] Channel Importance Matters in Few-shot Image Classification

核心代码

def simple_transform(x, beta):
    zero_tensor = torch.zeros_like(x)
    x_pos = torch.maximum(x, zero_tensor)
    x_neg = torch.minimum(x, zero_tensor)
    x_pos = 1/torch.pow(torch.log(1/(x_pos+1e-5)+1),beta)
    x_neg = -1/torch.pow(torch.log(1/(-x_neg+1e-5)+1),beta)
    return x_pos+x_neg

关于特征转换函数的讨论

见论文附录E

参考文章

ICML2022|Channel Importance Matters in Few-Shot Image Classification - 知乎

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

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

相关文章

3.7作业

网络聊天室&#xff1a; 程序代码&#xff1a; ser.c #include <myhead.h> //定义消息类型结构体 struct xiaoxi {char type;char name[20];char text[100]; };int main(int argc, const char* argv[]) {// 创建套接字int sfd socket(AF_INET, SOCK_STREAM, 0);if (s…

flutter编译后的windows程序缺少msvcp140.dllvcruntime140.dllvcruntime140_1.dll解决办法

//就是很多博文中提到了三剑客 msvcp140.dll vcruntime140.dll vcruntime140_1.dll 1.没有vs环境的不要把生成的debug下的exe发给别人&#xff0c;会出现莫名其妙的问题。缺少各种DLL文件&#xff0c;我这边收集了上面三个的dll下载链接&#xff1a;flutterdll.rar - 蓝奏云 2…

【动态规划】【数论】【区间合并】3041. 修改数组后最大化数组中的连续元素数目

作者推荐 视频算法专题 本文涉及知识点 动态规划汇总 数论 区间合并 LeetCode3041. 修改数组后最大化数组中的连续元素数目 给你一个下标从 0 开始只包含 正 整数的数组 nums 。 一开始&#xff0c;你可以将数组中 任意数量 元素增加 至多 1 。 修改后&#xff0c;你可以从…

java网络编程 02 socket

01.socket定义 02.TCP编程 import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket;public class clientSocket {public static void main(String[] args) throws IOException {//创建客户端socket&#xff0c;…

Get了!原来朋友圈定时发布如此简单!

你是不是也有这样的烦恼&#xff1f;微信号太多&#xff0c;有时候会顾不上发朋友圈&#xff1f; 别担心&#xff01;微信管理系统来帮你解决这个问题&#xff0c;实现朋友圈定时发布&#xff01;让我们一起来看看如何利用微信管理系统的强大功能来提升我们的社交媒体效率吧。…

请说明Vue中的解耦能力

Vue中的解耦能力是指在Vue框架中&#xff0c;我们能够有效地将代码分离成独立的组件或模块&#xff0c;使得这些组件之间的依赖关系减少&#xff0c;实现高内聚、低耦合的设计目标。利用Vue中的组件化开发&#xff0c;可以让不同的模块之间更容易地通信和协作&#xff0c;提高代…

echarts中toolbox 中文乱码问题

问题描述 本地引用的echarts源文件&#xff0c;页面其他部分编码显示正常&#xff0c;唯独toolbox鼠标悬停在上面时提示信息显示乱码。 如图所示&#xff1a; 尝试过的方法 使用sublime text 3&#xff0c;notepad&#xff0c;记事本更改文件编码为utf-8引入时&#xff0c;在sc…

短剧小程序:掌中剧院,随时演绎精彩

在快节奏的现代生活中&#xff0c;人们越来越追求高效与便捷。为了满足广大用户对短剧内容的热爱和追求&#xff0c;我们推出了全新的短剧小程序&#xff0c;让精彩剧情触手可及&#xff0c;随时随地为您带来欢乐与感动。 一、轻松点播&#xff0c;随享短剧魅力 通过短剧小程…

软件系统开发安全指南-word

应用系统设计安全主要涵盖以下几点&#xff1a; 1、应用系统架构安全设计 2、应用系统软件功能安全设计 3、应用系统存储安全设计 4、应用系统通讯安全设计 5、应用系统数据库安全设计 应用系统测试安全包含&#xff1a; 1、测试前置要求 2、测试方法及测试内容 3、测试环境及人…

10大AI工具

ChatGPT ChatGPT是由OpenAI开发的人工智能聊天机器人程序&#xff0c;全称为Chat Generative Pre-trained Transformer。它基于GPT-3.5架构&#xff0c;能够生成回答并根据聊天上下文进行互动。ChatGPT具备强大的对话能力&#xff0c;能在同一会话中回答上下文相关的问题&…

安卓简单登录

注意 有的朋友不知道登录咋写&#xff0c;这里我就简单给出相应代码&#xff0c;用的本地存储&#xff0c;没用网络请求&#xff0c;有需要可以替换成想要的&#xff0c;废话不多上代码 登录 import androidx.appcompat.app.AppCompatActivity;import android.content.Context…

JavaWeb----MySQL

一&#xff1a;JavaWeb相关介绍 Web&#xff1a;全球广域网&#xff0c;也称为万维网&#xff08;www&#xff09;&#xff0c;能够通过浏览器访问的网站 JavaWeb&#xff1a;是用Java技术来解决相关Web互联网领域的技术栈 JavaWeb流程 1.网页&#xff1a;展现数据 2.数据…

postman只读模式的解决办法

我大概是多次复制参数&#xff08;或是别的操作&#xff09;&#xff0c;进入了postman的只读模式。这时无法修改页面的传参&#xff0c;而且右上角的save按钮是灰色&#xff08;不可选&#xff09; 下面分享我的2种解决办法 第一种方法 在任务栏右键选中接口&#xff0c;选…

RUST 每日一省:发布到crates.io

github是开源代码分享的地方&#xff0c;rust的开源项目除了github&#xff0c;我们还可以将其发布到 crates.io 上&#xff0c;然后其它用户就可以使用cargo进行安装使用了。其实步骤很简单&#xff0c;只有三条命令了&#xff0c;我们一次来看一下。 1、cargo package 首先&a…

使用Navicat连接阿里云服务器上的MySQL数据库

打开navicat&#xff0c;连接如下&#xff1a; 服务器的默认密码是 root 连接时出现 使用 ls 查找 /etc/my.cnf ls /etc/my.cnf 用vi打开my.cnf&#xff1a; vi /etc/my.cnf看看是否有绑定本地回环地址的配置&#xff0c;如果有&#xff0c;注释掉下面这段文字&#xff1a;…

GitHub Desktop的常用操作【图形化】

文章目录 【1】仓库的创建和删除【2】文件操作【3】分支原理与分支操作1.分支创建2.分支合并 【4】标签 【1】仓库的创建和删除 在本地创建一个新的仓库&#xff1a; 然后输入仓库的名称&#xff0c;描述&#xff0c;并选择路径&#xff1a; 点击完后就发现我们的仓库创建好…

Anaconda的使用及spyder相关设置

Anaconda Anaconda是一个Python发行版&#xff0c;主要用于数据科学和机器学习领域。Anaconda集成了许多常用的数据科学工具和库&#xff0c;如NumPy、Pandas、Scikit-learn等&#xff0c;同时还包含了一个强大的包管理器conda和一个集成开发环境Spyder。Anaconda的目标是提供一…

鼠标光标选取文本、获取文本索引

1.效果图 这是在做一个字段分割的需求 2.思路 步骤一&#xff1a;通过document添加mouseup事件&#xff1b; 步骤二&#xff1a;通过window的getSelection()函数获取文本值&#xff1b; 步骤三&#xff1a;通过mouseup事件的event 类名来限制可截取元素的范围&#xff1b;…

论文解读:Meta-Baseline: Exploring Simple Meta-Learning for Few-Shot Learning

文章汇总 总体问题 通过对整体分类的训练(文章结构图中ClassifierBaseline)&#xff0c;即在整个标签集上进行分类&#xff0c;它可以得到与许多元学习算法相当甚至更好的嵌入。这两种工作之间的界限尚未得到充分的探索&#xff0c;元学习在少样本学习中的有效性仍然不清楚。…

【CSP】201403-3-命令行选项

CSP-201403-3-命令行选项 关键点&#xff1a;将整行字符串按空格分割 在解析命令行时&#xff0c;一个常见的需求是将整个命令行字符串分割成多个部分&#xff0c;通常以空格为分隔符。这些部分包括命令行工具的名称、选项&#xff08;可能带有前缀-或--&#xff09;和这些选项…