欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

The Devil is in the Channels: Mutual-Channel Loss for Fine-Grained Image Classification

发布时间:2023/12/16 83 豆豆
生活随笔 收集整理的这篇文章主要介绍了 The Devil is in the Channels: Mutual-Channel Loss for Fine-Grained Image Classification 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

论文:https://arxiv.org/pdf/2002.04264.pdf
代码:https://github.com/PRIS-CV/Mutual-Channel-Loss

1 总体思路

目标细粒度分类,由于子类别间的差异很小且类内差异很大,难度较普通图像分类更大。图1所示为细粒度图像分类数据集CUB-200[1]中的两个物种,加州鸥和北极鸥,从竖直方向的图片对比可以看出,两个不同物种长相非常相似,而从对比水平方向可知,同一物种由于姿态,背景以及拍摄角度的不同,存在较大的类内差异。 因此,要想顺利的对两个极为相似的物种进行细粒度分类,最重要的是在图像中找到能够区分这两个物种的区分性的区域块(discriminative part),并能够对这些有区分性的区域块的特征进行较好的表示。

图1 (a) 加州鸥

图1 (b) 北极鸥

由于深度卷积网络能够学习到非常鲁棒的图像特征表示,对图像进行细粒度分类的方法,大多都是以深度卷积网络为基础的,这些方法大致可以分为以下四个方向:

  • 基于常规图像分类网络的微调方法;
  • 基于细粒度特征学习(fine-grained feature learning)的方法;
  • 基于目标块的检测(part detection)和对齐(alignment)的方法;
  • 基于视觉注意机制(visual attention)的方法

以上内容引用自:https://zhuanlan.zhihu.com/p/53611407

本文作者另辟蹊径,没有采用上述四种方法,而是从损失函数入手,保持网络结构不变,设计了一种称为MC-loss(multi-channel loss)的损失函数。

2 MC-loss

作者提出的整体识别结构如下图所示,结合了交叉熵损失和MC-loss

图2

总体损失为交叉熵损失和MC-loss的加权和:

上面公式中出现的F表示输入图像通过卷积网络后提取的特征。对于一副输入图像,F∈RN×H×WF \in R^{N \times H \times W}FRN×H×W,N表示channel数量,H和W表示特征图的高和宽。

在MC-loss中,作者定义N=c×ξN = c \times \xiN=c×ξccc表示数据集中的总类别数,ξ\xiξ表示用于表示每一个类的channel数,ξ\xiξ是一个超参数,但一般应大于2。

对于一个给定的目标类别iii,其特征可以表示为Fi∈Rξ×WH,i=0,1,⋯,c−1F_i \in R^{\xi \times WH},i = 0,1,\cdots,c-1FiRξ×WH,i=0,1,,c1FiF_iFi可以表示为:

获取各类别的特征后,特征集F={F0,F1,⋯,Fc−1}F = \{F_0,F_1,\cdots,F_{c-1}\}F={F0,F1,,Fc1}送入图2所示的两个分支分别计算两项损失。交叉熵损失LCE(F)L_{CE}(F)LCE(F)鼓励网络提取有助于全局目标类别判别的特征。LMC(F)L_{MC}(F)LMC(F)则是关注不同的局部判别块的特征。

MC-loss 由两部分组成,分别为Ldis(F)L_{dis}(F)Ldis(F)Ldiv(F)L_{div}(F)Ldiv(F)

图3

2.1 Ldis(F)L_{dis}(F)Ldis(F)

Ldis(F)L_{dis}(F)Ldis(F)中的dis表示 discriminality component。如上面所示,作者设计用ξ\xiξ个channel的特征表示一个类别,discriminality component要求这些特征关注某个特定的类别并且每个channel的特征要足够有判别力

Ldis(F)L_{dis}(F)Ldis(F)可以表示成:

GAP表示Global Average Pooling,全局平均池化;
CCMP表示Cross-Channel Max Pooling,跨channel最大池化;
CWA表示Channel-Wise Attention,给定每个channel的重要性。Mi=diag(Maski)M_i = diag(Mask_i)Mi=diag(Maski)Maski∈RξMask_i \in R^{\xi}MaskiRξ是一个由0和1组成的mask,有⌈ξ2⌉\lceil \frac{\xi}{2} \rceil2ξ个1,⌊ξ2⌋\lfloor \frac{\xi}{2} \rfloor2ξ个0。

CWA:
CWA即使用Mask进行channel-attention,每次训练迭代中有一部分的channel不参与,迫使每一个channel都去学习足够有判别力的特征。相当于channel维度的dropout操作。CWA仅在训练过程中存在,推理时不使用。

CCMP
CCMP表示跨通道的最大池化操作,即在WH个空间位置选取各channel的最大值,即选取每一个空间位置上各channel的最大激活值。当然也可以使用跨通道平均池化,但平均池化等价于对各channel的激活值进行平均,不利于细粒度分类。

GAP
GAP是在空间维度进行平均池化,得到各类的预测结果。

总体来说,discriminality component通过CWA迫使每个channel学习到的特征足够有判别力,通过CCMP选取各channel的最大响应,然后通过GAP获取各类别的预测结果。总体训练目标是使得各类别的ξ\xiξ个channel学习得到的特征足够有能力进行类别判断

2.2 Ldiv(F)L_{div}(F)Ldiv(F)

Ldiv(F)L_{div}(F)Ldiv(F)表示diversity component,相当于计算各channel特征间的距离,从而得到所有channel的总体相似度。作者使用的方法相比于普遍使用的欧氏距离和KL散度计算量更小。

diversity component的目的是同一类别的ξ\xiξ个channel应该关注图像的不同区域,而不应该是同一类别的所有channel都关注最有判别力的区域,相当于空间注意力机制。具体的实现为:

先对特征的每一位置进行softmax操作,将其变为预测的类别。然后选取一个类别的ξ\xiξ个channel中各空间位置的最大值,然后在空间位置上求和,得到各类别的预测概率在所有channel内的和。然后对各类别求均值,值越大表示模型对于所有类别,不同的channel都关注到了图像的不同区域。

Ldiv(F)L_{div}(F)Ldiv(F)的物理意义表示模型对于数据集的所有类别,不同的channel都关注到了图像的不同区域,即取值越大越好

Ldiv(F)L_{div}(F)Ldiv(F)的取值上限为ξ\xiξ,表示不同channel的特征注意到了图像的不同区域。Ldiv(F)L_{div}(F)Ldiv(F)的取值下限为1,表示不同channel的特征注意到了图像的同一区域。如下图所示:

2.3 总结MC-Loss

MC-Loss通过Ldis(F)L_{dis}(F)Ldis(F)使得一个类别的ξ\xiξ个channel都尽可能学习关于该类别的有判别力的特征,如图3(b)中一组ξ\xiξ个channel的特征都变成了同一颜色;通过Ldiv(F)L_{div}(F)Ldiv(F)使得各个channel都关注图像的不同空间位置,如图3(b)中一组ξ\xiξ个channel的特征的不同位置都有了颜色加深的区域。总体实现了如下图所示的结果:

3 实验

数据集

参数设置
每一个类别对应的ξ\xiξ个通道是一个超参数,因为预训练的网络输出的channel数是固定的,作者为了在预训练网络上进行微调,设置了不同的类别具有不同数量的超参数,如使用VGG16作为预训练模型时,在CUB-200-2011数据集上,设置前88个类别各对应2个channel,后112个类别各对应3个channel。具体设置如下表所示:
训练时设置超参数u=0.005,λ=10u = 0.005,\lambda = 10u=0.005,λ=10

对比其他算法
消融研究
消融研究中从头训练模型,每个类别设置同样数量的channel数,设置超参数u=1.5,λ=10u = 1.5,\lambda = 10u=1.5,λ=10

ξ\xiξ的取值:
ξ=3\xi = 3ξ=3,分类效果和计算量都比较好。下面图给出了设置ξ=6\xi = 6ξ=6时,学习到了过于冗余的特征。

对比其他损失函数
可视化

用Grad-CAM做可视化,第一行可以看出不同的channel学习到了目标的不同区域帮助进行细粒度分类。第二行相比第一行可以看出,如果去掉LdivL_{div}Ldiv,那么不同的channel关注到的感兴趣区域会比较接近。第三行标明如果去掉CWA,只有一个channel学习到了比较有判别力的特征,其余的两个通道学习到的特征的判别能力都很有限。


MC-Loss-V2表示设置公式(6)为Ldivv2(F)=h(Fi)L_{div_v2}(F) = h(F_i)Ldivv2(F)=h(Fi),上表的实验结果表明MC-Loss-V2的效果不如MC-Loss。作者认为如果用公式(6)进行训练,那么不同类别的channel组之间相互影响,但MC-Loss-V2只考虑了一个类别,其他的channel组的diversity会受到损失。

4 代码分析

注意作者实现的CWA是通过在channel方向上应用最大池化实现的,具体为先对(N,C,H,W)的输入进行ttanspose操作,转化为(N,W,H,C)(N,W,H,C)(N,W,H,C),然后用于kernel大小为(1,ξ)(1,\xi)(1,ξ)的最大池化,实现在channel维度上的最大池化。代码为:

def forward(self, input):input = input.transpose(3,1)input = F.max_pool2d(input, self.kernel_size, self.stride,self.padding, self.dilation, self.ceil_mode,self.return_indices)input = input.transpose(3,1).contiguous()return input

总结

以上是生活随笔为你收集整理的The Devil is in the Channels: Mutual-Channel Loss for Fine-Grained Image Classification的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。