沉睡在草稿箱的笔记
摘要
细粒度识别现在流行的关注点是如何定位最有辨别力的区域、拥有互补信息的区域、以及多粒度的区域。很少有工作对多粒度进行处理。(1).一种全新的渐进式训练方式:根据上一层和上一阶段的更小的粒度信息,添加新的层;(2).使用简单的拼图生成器规范带有不同粒度信息的图片【翻译的不对】。
引言
现有的FGVC的方法要么显式的寻找标识区域,要么隐式的定位,将这些局部特征融合在一起,进行分类。很多工作都是依靠标识区域,但是很少有工作去研究:1.哪些标识区域对细粒度识别更加有效;2. 如何融合哪些来自不同区域的信息?
来自不同区域的信息是能够避免类内变化的影响【不懂】。例如专家需要观察鸟头的整体结构和更加细粒度的区域比如鸟喙的形状。也就是,仅仅判别标识区域是不足够的,而且模型要学习哪些区域是如何相互组合作用的。最近的研究集中在“放大那些标识区域”,既不仅要识别某个部分,而且关注该部分最有鉴别力的区域,例如鸟头的喙。这些方法仅仅关注很少的一部分,而忽略其他被放大的区域,仅仅做些简单的融合。【这句话应该是说,找到了很多标识区域,但是却只利用了最具有典型性的一部分,而其他部分就只是简单的融合处理】。它们没有考虑到这些标识区域可能会通过相互呼应组成一个标志性特点。我们认为模型不仅仅要识别标注区域,而且考虑标注区域之间如何融合。
我们换了个立场,在这篇文章中,我们不会尝试显式的或者隐式的从标识区域提取特征。我们假设:细粒度信息分散在不同的视觉颗粒中,因此我们的模型鼓励学习到不同的视觉颗粒,同时学习融合它们。
直接应用渐进式训练对特征学习并没有好处,因为通过渐进式训练方法学习到多粒度信息会集中在相似的区域【不是很明白。。】。我们使用jigsaw puzzle generator 解决这个问题,在每一步迭代【翻译不准】,规范不同水平的粒度,并且在最后一步,仍然使用源图像训练【依旧不懂】。这有效的促进模型在Patch上进行操作,并且Patch的大小就是特定的颗粒的大小。它迫使网络的每个阶段关注局部Patch,而不是整个图像,因此这个方法的学习是颗粒级。注意,Destruction and Constrcution也使用了拼图的方式去解决细粒度图像识别。我们不同于他的方法,我们没有把拼图作为学习的一部分,我们只是将拼图作为引入不同物体区域的一个方法,协助渐进训练。
本文的贡献:渐进式的训练方案【不详细】。
相关工作
拼图
拼图操作能够帮助网络探索图片的空间联系。
渐进训练
我们运用渐进训练的方式去设计一个单独的网络。网络可以在一系列的train stage中,学习到信息。首先图片被分为一些小patch,用这些小patch训练模型的低层的层(low-level layers)。Patch的数量随着网络的layers的层级的增加,逐渐的增加。现有的渐进训练的方式都是在生成模型中,而很少应用在FGVCC上。
方法
在这一部分,PMG(Progressive Multi-Granluarity )训练框架。为了解决细粒度识别过程中的类内差距大的问题,我们鼓励模型在较浅的layers上学习稳定的细粒度信息,并随着训练,逐步将注意力转移到更深layers的大粒度抽象信息的学习上。
网络结构
这个方法是通用的,可以和骨干网络结合,比如ResNet。骨干网络(特征抽取)可以表示为F,其中F有L个stage。每个中间层的输出表示为Fl R H,W,C,其中H、W、C表示为第l个stage的特征图的高度、宽度和通道,l=[1,L]。我们的目标是在每个stage上做特征分类损失。处理F之外,引入卷积块H{l,conv}:第l个中间层的输出作为H卷积块的输入,之后将其转化为特征向量:V l = Hconvl (F l)。卷积块H之后的,跟一个分类块: yl = Hclassl (V l)。然后将每个stage的特征向量concat一个向量:
然后对Vconcat再进行分类
渐进训练
我们使用渐进训练,我们首先训练低层的stage,之后的训练,渐进的增加了stage。由于低层的视野域和表达能力有限,这网络将会先聚焦在局部的标识区域。相比较于直接训练整个网络,当随着stage的层级越高,这种逐渐增加的方式会定位标识区域从局部区域到全局结构,而不是直接同时学习所有的颗粒。对于来自于每个stage的输出和concat后的输出(特征向量),我们使用交叉熵:
【这一段应该是训练方法】在每一次iteration,每一个batch的数据会被使用S+1个step,在每个steps上,我们只训练一个stage。注意,所有在当前预测值下的参数会被更新优化,即使它们已经在之前的stage上,已经被更新了。
Jigsaw Puzzle Generator
在表达学习中,拼图游戏被发现很适合自监督任务。我们借用拼图游戏的概念,生成图片作为渐进训练的输入。图片划分为不同的颗粒区域,迫使模型在每个训练step上,学习和粒度相应的信息。假设图片d@(3,h,w),将图片平均分为n*n个patch,然后这些patch被随机的打乱,聚合成为一个新的图片P(d,n)。Patch的颗粒的大小由超参数n决定。
对于每个stage的超参数 n,两个条件需要被满足:1.Patch的size需要小于相应的stage,否则会影响拼图机制的效果;2.Patch的size会和视野域成正比例相加。每个stage的视野大概是上一部分的两倍。
在训练的过程中,训练数据的batch将会首先被拼图机制打碎重组,重组后的记做P(d,n)。被打碎的图片的标签不变,将P(d,n)输入,优化所有的参数。
拼图机制无法保证part的完整性,即使part的size比patch的更小,part仍有可能会被打碎。但这不一定是一个坏的影响,因为我们在训练以及拼图机制之前,会采用一个标准的随机裁剪,这样的话,每次patch都会和之前iteration不同。但是在这个iteratration被打碎,却不会一直被打碎,这样反而能让模型更加关注特定颗粒大小下的标识区域。