精读Relational Embedding for Few-Shot Classification

摘要

        作者没有对比现有方法的不足,而是直接提出少样本分类可以通过原学习“观察什么”和“注意哪里”的问题提高性能。文章提出里一个自关联模块SCR和一个交叉关联模块CCA,让模型先自我修正,再参照另一幅图像调整注意力范围,并最终优化少样本分类结果。

方法

架构

         架构部分没啥好说的,基本看图就行,SC是自关联信息提取模块,g为四个卷积处理自关联信息,两者一起构成SCR。CC是交叉联信息提取模块,h为两个卷积处理交叉关联信息,两者一起构成CCA,最终输出两张图象分类结果。

        不过以要注意的是,输入模型的两张图,一张是已知的支持图像support,一张是需要分类的查询图像query。

SCR

         在SCR中,模型计算每个像素与周围像素的哈达玛积,即同尺寸矩阵按位相乘。像素点X处的矩阵为该位置每个通道的数值组成的一维矩阵。之后,确定超参数dU和dV,选取周围的像素相对于X的位移量必须在[-dU,dU]X[-dV,dV]之间。比如令dU=1,X的横坐标为5,那么周边像素可选横坐标范围为[4,6],包括X本身。

        因为X处提取出的矩阵大小为1*C,哈达玛积之后依然为1*C。而确定dU和dV后,便可确定X周边可选像素个数为U*V,其中U=2dU+1,V=2dV+1。将这U*V个1*C矩阵合为一体,就是像素点X的周边信息,而一共有H*W个像素点,边缘处的点利用零填充保证其同样可以得到U*V个矩阵,则经过处理后,整个张量尺寸变为H*W*U*V*C。

        上面所说的,还只是图中红色模块,真正提取出自关联信息的,主要是下面四个卷积。第一个卷积负责减少通道数,降低计算量,后面两个在U*V维度上进行的3*3卷积将U*V个矩阵的信息综合到一点,并最终通过1*1卷积恢复通道数。最后还有一个残差连接。

CCA

        与SCR相似,CCA也是先提取信息,再处理,两者是分开的。第一步通过1*1卷积减少通道数。加下来的计算十分暴力,因为两张图象均为H*W大小,每个像素处有一个1*C'大小的矩阵。模型计算了两张图全部位置的点的相似度,因此计算后的张量大小达到了H*W*H*W*1。

        还看不懂的话,就理解为ai与bj计算余弦相似度,a与b均为一维向量,i与j范围均为[1,H*W],每个a分别于每个b做运算,最后得到了H*W*H*W个结果,将这些结果放入四维矩阵,就得到了交叉关联信息。

        最后之所以乘1而不是C',是因为SCR计算的是矩阵哈达玛积,结果依然为同规模矩阵,而CCA计算的是余弦相似度,是一个标量。

         此时,模型记录的只是任意两点之间的余弦相似度,而查询图像的点与支持图像中哪个像素关系最密切还没算出。此时要通过如下公式计算Aq。

A_{q}(x_{q})=\frac{1}{HW}\sum_{x_{s}} \frac{exp(\hat{C}(x_{q},x_{s})/\gamma )} {\sum_{x_{q}^{'}exp(\hat{C}(x_{q}',x_{s})/\gamma )}

        xq为查询图像上一个像素点,xs为支持图像上的像素点。

注意力池化

        得到的Aq并不是最终嵌入,想要得到最终嵌入,还需要将Aq与F按H*W的维度相乘,得到一个1*C的嵌入。按H*W是指,对于F来说,任意一个像素点上有C个通道,即C个值,这些值分别与Aq对应位置的值相乘,得到结果。再将同一通道上的H*W个点的数值加到一起,最终得到了C*1的嵌入q。

损失函数

        得到q还不够,还要经过一个全连接层得到分类结果。因此第一个损失是分类结果的损失。

L_{anchor}=-log\frac{exp(w_{c}^{T}z_{q}+b_{c})} {\sum_{c'=1}^{|C_{train}|}exp(w_{c'}^{T}z_{q}+b_{c'})}

       w和b分别为分类器的权重和偏移,w为c*1,b为标量。w和c均有|Ctrain|个,即数量为训练集类别数。

        在log内,分子一定会出现在分母那一堆数相加之中,所以分子越大,分母中其他数占比越小,整个数越大,但只能趋近于1,到不了1。经过log运算后的值也越从无穷小趋近于0,乘以-1后,就是分子越大,损失函数就从无穷大往0移动。

        同时,作者还希望同一个类的嵌入尽可能接近,因此提出了另一个损失函数。假设查询集和支持集各k张图,来自c个类,则计算出两个集中每个类的嵌入的平均值\left \{ \bar{q}^{(n)} \right \}_{n=1}^{N}\left \{ \bar{s}^{(n)} \right \}_{n=1}^{N},则损失函数为

       L_{metric}=-log\frac{exp(sim(\bar{s}^{(n)},\bar{q}^{(n)})/\tau )} {\sum_{n'=1}^{N}exp(sim(\bar{s}^{(n')},\bar{q}^{(n')})/\tau )}

        最终的损失函数为

        L=L_{anchor}+kL_{metric}

        k为超参数

消融实验

        实验部分懒得讲了,基本就是吹自己,而且确实达到了SOTA,因此直接讲消融实验。

1.SCR和CCA的有无

         简洁明了,看图就行

2.SCR模块的设计的影响

         这一块看得有点懵,大意是说在SCR中,把求出H*W*U*V*C的张量那一步,替换为求出H*W*U*V*C/G的张量,即把多个通道的数据打包成一组,每组大小为G。当G为1时即为本文方法。由图可知,不把不同通道的结果挤在一起效果最好。就是那个x没看懂啥意思。

3.CCA模块的设计的影响

         这个实验中讨论了CCA的有无和h中通道变化对性能的影响。虽然本文方法在CUB上表现更好,但连续两次通道数下降的方法却在mini-ImgNet上表现最佳。

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值