C/C++教程

细粒度:DCL论文笔记——Destruction and Construction Learning for Fine-grained Image Recognition

本文主要是介绍细粒度:DCL论文笔记——Destruction and Construction Learning for Fine-grained Image Recognition,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

细粒度:DCL论文笔记——Destruction and Construction Learning for Fine-grained Image Recognition

  • 综述
  • 主要思想
  • 网络结构
    • “破坏”学习
    • “构建”学习
  • 训练与测试
  • 总结

综述

论文题目:《Destruction and Construction Learning for Fine-grained Image Recognition》
会议时间:IEEE Conference on Computer Vision and Pattern Recognition 2019 (CVPR, 2019)
论文地址:https://openaccess.thecvf.com/content_CVPR_2019/papers/Chen_Destruction_and_Construction_Learning_for_Fine-Grained_Image_Recognition_CVPR_2019_paper.pdf
源码地址(PyTorch版本):https://github.com/JDAI-CV/DCL
针对领域:细粒度图像分类(FGVC)

主要思想

  在有辨识力的区域(discriminative parts)学习辨识力特征(discriminative feature)对细粒度图片分类具有重要的意义。现有的细粒度识别方法大致可以分为两类:①首先定位物体具有辨识力的部位,并且再基于这些部位做进一步的分类(如下图的a),但这种方法往往需要额外的人力标注,增加了训练成本;②尝试通过注意力机制以无监督的方式自动的定位有区别的部位(如下图的b),但这种方法往往需要额外的网络结构,增加了计算开销。

  本文中,作者提出了一种新的细粒度识别框架——“破坏和构造学习”(Destruction and Construction Learning)(如下图c)。除了标准的分类网络之外,作者还引入了DCL结构来自动地在有辨识力的区域学习。输入图像首先被破坏,从而让网络学习里面的局部细节,之后再将他们重构,让网络去学习区域之间的语义相关性

在这里插入图片描述

  对于“破坏”,作者提出了区域混淆机制来故意“混淆”全局的结构,该机制首先将输入的图片划分成局部的小区域,之后再将它们随机地打乱。对于细粒度识别,局部细节要比全局结构起着更重要的作用,随机打乱可以使图片丢弃全局结构,并保留局部的细节,从而迫使网络在有识别力的局部区域进行识别。但使用RCM打乱图像的同时,会让图像的外观发生实质性的变化,提高了识别的难度,因此,网络需要挖掘图像中的细节差异来对破坏的图像进行分类。

  但学习打乱后的图像并不都是有益的,打乱图像的同时,会引入一部分不确定的噪声视觉模式(noisy visual pattern),为了抵消负面影响,作者设计了一种对抗损失,让噪声模式的影响最小化,仅保留对分类有益的局部细节过滤无关因素。对抗损失与分类损失以对抗性的方式工作,以便从破坏的图像中仔细学习差异。

  对于“构建”,引入了区域对齐网络来恢复原始区域的排列,通过学习如何复原图像原始的布局,可以让网络理解每个区域的语义,便于对不同局部区域之间的相关性进行建模。

网络结构

  网络结构图如下图,主要由四个模块组成:①区域混淆机制(Region Confusion Mechanism):随机打乱输入图像的局部区域;②分类网络(Classification Network):将输入的细粒度图像进行特征提取,最后传入全连接层预测类别概率;③对抗学习网络(Adversarial Learning Network):设置对抗损失,用于区分是原始图像还是打乱后的图像;④区域对齐网络(region alignment network):附加在分类网络之后,用于恢复空间局部区域的空间布局。四个模块同时参与训练过程,而在测试过程中,只需要使用分类网络对原始图像做出类别预测。

在这里插入图片描述

“破坏”学习

  对于细粒度图像分类来说,局部的细节要比全局的结构重要很多,大多数情况下,细粒度类别通常拥有相似的全局结构并且仅在局部的细节上表现出差异来。本文中,作者提出了一种通过打乱局部区域来破坏全局结构的方法(称为RCM),可以更好地区分局部有辨识力的区域以及学习其中的辨识力特征。进一步地,作者又设计了一种对抗损失,来防止网络学习打乱图像中的噪声模式。

区域混淆机制(RCM)

  与自然语言处理做类别,打乱一个句子中单词的顺序,可以让网络去关注有辨识力的单词,并且忽略掉无关的单词。类似的,打乱图片的局部区域,同样可以让网络去学习局部区域中对最终分类有贡献的细节,本文中作者采用相邻打乱策略(每个小区域在相邻位置变动)。

  首先得到原始输入图像I,将其平均划分成 N × N N×N N×N个小区域,将其命名为:
R i , j 1 < i , j < N , 其 中 i 表 示 水 平 的 索 引 , j 表 示 垂 直 的 索 引 R_{i,j}\quad 1<i,j<N,其中i表示水平的索引,j表示垂直的索引 Ri,j​1<i,j<N,其中i表示水平的索引,j表示垂直的索引

对于R中的第 j j j行,生成一个尺寸为 N N N的随机向量 q j q_j qj​,其中第 i i i个元素 q j , i = i + r q_{j,i}=i+r qj,i​=i+r, r ∼ U ( − k , k ) r\sim U(-k,k) r∼U(−k,k)服从于 [ − k , k ] [-k,k] [−k,k]内的均匀分布, k k k是可调节的超参数( 1 ≤ k < N 1≤k<N 1≤k<N),决定了局部区域变动的范围, k k k越大,每个局部区域偏离当前位置的范围就越大(换句话说 k k k越大,图片打乱的力度就越大)。之后,利用得到的随机向量 q i q_i qi​对第 j j j行进行重新排列,得到了一组新的排列 δ j r o w \delta^{row}_j δjrow​,验证如下:
∀ i ∈ { 1 , … , N } , ∣ δ j r o w ( i ) − i ∣ < 2 k \forall i\in\{1,\dots,N\},|\delta^{row}_j(i)-i|<2k ∀i∈{1,…,N},∣δjrow​(i)−i∣<2k
类似的,通过上述步骤,对于第 i i i列,我们同样会得到一组新的排列 δ i c o l \delta^{col}_i δicol​,验证如下:
∀ j ∈ { 1 , … , N } , ∣ δ i c o l ( j ) − j ∣ < 2 k \forall j\in\{1,\dots,N\},|\delta^{col}_i(j)-j|<2k ∀j∈{1,…,N},∣δicol​(j)−j∣<2k
因此,原图 ( i , j ) (i,j) (i,j)上的区域被放到新的位置:
δ ( i , j ) = ( δ j r o w ( i ) , δ i c o l ( j ) ) \delta(i,j)=(\delta^{row}_j(i),\delta_i^{col}(j)) δ(i,j)=(δjrow​(i),δicol​(j))
作者利用这种方法,将原图进行打乱,破坏原有的全局结构,并且保证局部区域在一定范围内进行抖动,具体效果如下图:
在这里插入图片描述

  原始图像 I I I、相应被打乱的图像 ϕ ( I ) \phi(I) ϕ(I)与标签 l l l同时用于网络参数的训练,分类网络将图像映射到相应的概率分布向量 C ( I , θ c l s ) C(I,\theta_{cls}) C(I,θcls​),其中 θ c l s \theta_{cls} θcls​表示分类器的参数,之后利用交叉熵损失函数计算得到分类损失 L c l s L_{cls} Lcls​,进一步利用该损失优化网络:
L c l s = − ∑ I ∈ I l ⋅ l o g [ C ( I ) C ( ϕ ( I ) ) ] L_{cls}=-\sum_{I\in \Iota}l·log[C(I)C(\phi(I))] Lcls​=−I∈I∑​l⋅log[C(I)C(ϕ(I))]
其中, I \Iota I表示训练集图片。

对抗学习

  利用RCM打乱原始图像并不总是得到对细粒度分类有益的信息,在打乱原图的同时,也许会引入一些视觉上的噪声模式(如上图,被打乱的图像与原图具有不同的模式布局),学习这些噪声模式的特征,会影响对完整图像的分类预测。为此,作者提出了一种对抗损失 L A d v L_{Adv} LAdv​,用于防止RCM引起的噪声模式“偷偷进入特征空间”。

  考虑到原始图像与被破坏的图像属于两个不同的领域(一个是完整的领域、一个是不完整的领域),因此对抗损失与分类损失以对抗的方式去解决如下两个问题:①保持各自领域不变;②拒绝 I I I与 ϕ ( I ) \phi(I) ϕ(I)之间领域的特殊模式。(换句话说就是让网络能够清楚的分开两个领域的图像,可以正确地判断图像是被破坏的图像 ϕ ( I ) \phi(I) ϕ(I)还是未被破坏的图像 I I I)

  因此,作者为每张图片额外的生成一个标签 d ∈ { 0 , 1 } 2 d\in\{0,1\}^2 d∈{0,1}2,该标签表示了图片是否被破坏,1表示图片未被破坏,0表示图片被破坏。作者又在网络中增加了一个新的判别器(discriminator)分支,用于判断图片 I I I是否被破坏:
D ( I , θ a d v ) = s o f t m a x ( θ a d v C ( I , θ c l s [ 1 , m ] ) ) D(I,\theta_{adv})=softmax(\theta_{adv}C(I,\theta^{[1,m]}_{cls})) D(I,θadv​)=softmax(θadv​C(I,θcls[1,m]​))
其中, C ( I , θ c l s [ 1 , m ] ) C(I,\theta^{[1,m]}_{cls}) C(I,θcls[1,m]​)是特征提取网络第m层输出提取的特征向量, θ c l s [ 1 , m ] \theta^{[1,m]}_{cls} θcls[1,m]​表示分类网络中第1层到第m层中可学习的参数, θ a d v ∈ R d × 2 \theta_{adv}\in R^{d\times 2} θadv​∈Rd×2表示一层线性映射层。最终,判别器网络的对抗损失 L a d v L_{adv} Ladv​如下:
L a d v = − ∑ I ∈ I d ⋅ l o g [ D ( I ) ] + ( 1 − d ) ⋅ l o g [ D ( ϕ ( I ) ) ] L_{adv}=-\sum_{I\in \Iota}d·log[D(I)]+(1-d)·log[D(\phi(I))] Ladv​=−I∈I∑​d⋅log[D(I)]+(1−d)⋅log[D(ϕ(I))]
对抗学习合理性验证

  为了更好地理解对抗损失调整特征学习的过程,作者进一步将两组主干特征提取网络输出的特征可视化,分别是带有对抗损失训练和不带对抗损失训练得到的网络。给一个输入图像 I I I,作者将 m m m层输出的第 k k k张特征图命名为 F m k ( I ) F^k_m(I) Fmk​(I)。对于ResNet50,作者提取了最后一层池化层输出的特征向量(全连接层的输入)用于可视化展示,倒数第一层卷积层中,第 k k k个过滤器(filter)对真实标签 c c c的特征响应表示为:
r k ( I , c ) = F ‾ m k ( I ) × θ c l s [ m + 1 ] [ k , c ] 其 中 , θ c l s [ m + 1 ] [ k , c ] 表 示 为 第 k 张 特 征 图 与 标 签 类 别 c 之 间 的 权 重 ( 全 连 接 层 中 的 权 重 ) r^k(I,c)=\overline{F}^k_m(I)\times \theta^{[m+1]}_{cls}[k,c]\\ 其中,\theta^{[m+1]}_{cls}[k,c]表示为第k张特征图与标签类别c之间的权重(全连接层中的权重) rk(I,c)=Fmk​(I)×θcls[m+1]​[k,c]其中,θcls[m+1]​[k,c]表示为第k张特征图与标签类别c之间的权重(全连接层中的权重)

  作者计算了不同过滤器对原始图像和被破坏的图像的响应值,并且画出了散点图,每个带有积极响应的过滤器都被映射到了散点图中,坐标为 ( r ( I , c ) , r ( ϕ ( I ) , c ) ) (r(I,c),r(\phi(I),c)) (r(I,c),r(ϕ(I),c))(横坐标表示对原图的响应,纵坐标表示对破坏后图像的响应)。如下图所示,仅通过分类损失( L c l s L_{cls} Lcls​)训练得到的过滤器在散点图上的响应点更加密集,这意味着在被破坏的图像学习到的噪点模式(边缘风格的视觉模式或由RCM引入的不相关的视觉模式)对原图(具有完整物体的模式)的分类有比较大的影响,有可能会误导预测结果。因此需要加以处理,让网络区分出该图是原图还是破坏图,进一步过滤破坏图中不相关的视觉模式。

  作者进一步将利用 L c l s + L a d v L_{cls}+L_{adv} Lcls​+Ladv​结合训练得到的过滤器所绘制的散点图上的点标注上颜色,按特定数值上色,从蓝到红的过渡代表数值从-1到1的变化,散点图颜色数值计算公式如下:
δ k = F ‾ m k ( I ) × θ a d v [ k , 1 ] − F ‾ m k ( ϕ ( I ) ) × θ a d v [ k , 2 ] \delta_k=\overline{F}^k_m(I)\times \theta_{adv}[k,1]-\overline{F}^k_m(\phi(I))\times \theta_{adv}[k,2] δk​=Fmk​(I)×θadv​[k,1]−Fmk​(ϕ(I))×θadv​[k,2]
其中, θ a d v [ k , 1 ] \theta_{adv}[k,1] θadv​[k,1]表示在判别器中,特征图 F m k ( ⋅ ) F_m^k(·) Fmk​(⋅)到表示原始图像标签之间的权重,相应的 θ a d v [ k , 2 ] \theta_{adv}[k,2] θadv​[k,2]为特征图 F m k ( ⋅ ) F_m^k(·) Fmk​(⋅)到表示被破坏的图像标签之间的权重。 δ k \delta_k δk​评价了第 k k k个过滤器是否倾向于原图的视觉模式。如下图所示,网络过滤器对噪点模式的响应可以利用对抗损失,成功地将其区分出来(D VS. F)。图上的点可以被划分为三个部分。D:趋向于噪点模式的过滤器(噪点模式:被破坏的图像所特有的图像特征,由RCM引起),对破坏后的图具有较高的响应;F:趋向于全局上下文描述的过滤器(全局描述:原始图像特有的图像特征,即物体的全局结构),对原始图像具有较高的响应;E:由分类损失 L c l s L_{cls} Lcls​增强并且趋向于局部描述(细节)的过滤器,占绝大多数的过滤器(局部细节描述:原始图像与被破坏的图像之间公共的图像特征)

在这里插入图片描述
上图中,分别可视化了由 L c l s L_{cls} Lcls​训练和由 L c l s + L a d v L_{cls}+L_{adv} Lcls​+Ladv​训练得到的过滤器。第一行展示了原始图像 I I I和被被破坏的图像 ϕ ( I ) \phi(I) ϕ(I)。右边的2、3行分别展示了两种过滤器对 I I I和 ϕ ( I ) \phi(I) ϕ(I)的响应。右边分别展示了可视化后的特征图。散点图中,A,D:过滤器对 ϕ ( I ) \phi(I) ϕ(I)具有高响应;C,F:过滤器对 I I I具有高响应;B,E:过滤器对 I I I和 ϕ ( I ) \phi(I) ϕ(I)都具有高响应。

   L c l s L_{cls} Lcls​与 L a d v L_{adv} Ladv​共同构成破坏学习,让网络不仅可以增强局部辨识力的学习,还可以过滤掉无关的特征

“构建”学习

  考虑到相关区域的组合构建了复杂多样的视觉模式,作者又设计了一种模型学习方法来建模局部区域之间的相关性。具体地,作者提出了一个利用区域对齐损失 L l o c L_{loc} Lloc​优化的区域对齐网络,该网络测量图像中不同区域的位置精度(对原图做一个重构),通过端到端的训练,可以让骨干网络(backbone network)对区域之间的语义相关性进行建模(学习不同区域位置间的关联)。

  给出一张图片 I I I和对应破坏的图片 ϕ ( I ) \phi(I) ϕ(I),图片 I I I中坐标为 ( i , j ) (i,j) (i,j)的区域 R i , j R_{i,j} Ri,j​对应于图片 ϕ ( I ) \phi(I) ϕ(I)中的区域 R δ ( i , j ) R_{\delta(i,j)} Rδ(i,j)​,区域对齐网络处理分类网络 C ( ⋅ , θ c l s [ 1 , n ] ) C(·,\theta^{[1,n]}_{cls}) C(⋅,θcls[1,n]​)中一个卷积层的输出特征,其中 n n n表示分类网络的层数。输出的特征经过一层卷积核尺寸为 1 × 1 1\times 1 1×1的卷积层,将原特征图压缩成通道为2的特征图,并且不改变原图的大小,之后再将得到的特征图依次经过ReLU激活、平均池化层下采样,得到尺寸为 2 × N × N 2\times N\times N 2×N×N的对齐图,对齐网络的输出可以用如下公式表示:
M ( I ) = h ( C ( I , θ c l s [ 1 , n ] , θ l o c ) ) M(I)=h(C(I,\theta^{[1,n]}_{cls},\theta_{loc})) M(I)=h(C(I,θcls[1,n]​,θloc​))
其中, M ( I ) M(I) M(I)中两个通道的元素对应于区域的定位坐标。 h h h是作者提出的对齐网络, θ l o c \theta_{loc} θloc​表示对齐网络中的参数。之后,再将区域 R δ ( i , j ) R_{\delta(i,j)} Rδ(i,j)​预测的位置( R δ ( i , j ) R_{\delta(i,j)} Rδ(i,j)​位于原图 I I I的哪个位置)命名为 M δ ( i , j ) ( ϕ ( I ) ) M_{\delta(i,j)}(\phi(I)) Mδ(i,j)​(ϕ(I)),区域 R i , j R_{i,j} Ri,j​预测的位置( R i , j R_{i,j} Ri,j​位于原图的哪个位置)命名为 M i , j ( I , i , j ) M_{i,j}(I,i,j) Mi,j​(I,i,j)。这两个预测值的标签均为(i,j)。区域对齐损失 L l o c L_{loc} Lloc​由预测坐标和原始图像坐标的L1距离构成:
L l o c = ∑ I ∈ I ∑ i = 1 N ∑ j = 1 N ∣ M δ ( i , j ) ( ϕ ( I ) ) − [ i j ] ∣ 1 + ∣ M ( i , j ) ( I ) − [ i j ] ∣ 1 L_{loc}=\sum_{I\in\Iota}\sum^N_{i=1}\sum^N_{j=1}|M_{\delta(i,j)}(\phi(I))-\begin{bmatrix} i\\ j \end{bmatrix}|_1 +|M_{(i,j)}(I)- \begin{bmatrix} i\\ j \end{bmatrix}|_1 Lloc​=I∈I∑​i=1∑N​j=1∑N​∣Mδ(i,j)​(ϕ(I))−[ij​]∣1​+∣M(i,j)​(I)−[ij​]∣1​
  区域构建损失有利于定位图像中主要的对象,并且倾向于发现子区域之间的相关性。通过端到端的训练,区域构建损失可以帮助分类骨干网络建立对物体的深刻理解,并且让网络建模对象的结构信息,如对象的形状和对象各部分之间的语义关联

训练与测试

  训练过程:在该网络结构中,分类损失、对抗损失以及区域对齐损失共同参与到网络端到端的训练过程中,使网络可以利用增强的局部细节建模良好的对象部件来进行细粒度的识别,最后总的损失计算公式为:
L = α L c l s + β L a d v + γ L l o c L=\alpha L_{cls}+\beta L_{adv}+ \gamma L_{loc} L=αLcls​+βLadv​+γLloc​
  “破坏”学习可以帮助网络从有辨识力的区域学习图片的细节,并且**“构建”学习根据区域间语义的相关性,重新排列学习到的局部细节。因此,DCL可以基于来自辨别区域结构良好的细节特征**来生成一系列复杂多样的视觉表示。

  测试过程:测试过程只需要将原图输入到分类网络,利用参数$f(·,\theta^{[1,l]}_{cls})来对原图的类别进行预测,因此,除了主干分类网络用于计算之外,无需额外的计算开销。

  可视化展示:为了进一步证明DCL的有效性,作者将基线方法(只有分类网络)与DCL网络得到的特征图做了比较,对比图如下,可以看到DCL产生的特征图更能集中在判别区域,经过随机的破坏,网络也一致的突出有辨识力的区域,这进一步证明了DCL具有良好的鲁棒性。

在这里插入图片描述

总结

  本文,作者提出了一种基于用于细粒度分类的DCL网络。首先通过破坏学习,提高了识别的难度,从而引导网络学习细粒度识别中的专业知识(细节差异)。而构建学习可以模拟物体各部分之间的语义关联,从而引导网络学习物体各部分之间的相关性。同时,该网络在测试过程中只需要将图片传入主干特征提取网络中进行分类预测,计算量小,具有很好的实用价值。

以上仅是笔者的个人观点,若有错误,欢迎大家批评指正。

笔记原创,未经同意禁止转载!

这篇关于细粒度:DCL论文笔记——Destruction and Construction Learning for Fine-grained Image Recognition的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!