论文阅读笔记(二)细粒度图像分类

来源:互联网 发布:linux查看ssh端口号 编辑:程序博客网 时间:2024/06/09 15:29

0、参考文献

[1]见微知著 http://geek.csdn.net/news/detail/191718

[2]Cyiano http://blog.csdn.net/Cyiano/article/details/72081855

1、概要

细粒度图像识别是现在图像分类中一个颇具挑战性的任务,它的目标是在一个大类中的数百数千个子类中正确识别目标。

相同的子类中物体的动作姿态可能大不相同,不同的子类中物体可能又有着相同的动作姿态,这是识别的一大难点。

细粒度图像分类的关键点在寻找一些存在细微差别的局部区域。

如何有效地对前景对象进行检测,并从中发现重要的局部区域信息,成为了细粒度图像分类算法要解决的关键问题。

对细粒度分类模型,可以按照其使用的监督信息的强弱,分为“基于强监督信息的分类模型”和“基于弱监督信息的分类模型”两大类。

2、基于强监督信息的细粒度图像分类模型

所谓“强监督细粒度图像分类模型”是指:在模型训练时,为了获得更好的分类精度,除了图像的类别标签外,还使用了物体标注框(Object Bounding Box)和部位标注点(Part Annotation)等额外的人工标注信息,如图所示。


1)Part-based R-CNN   《Part-based R-CNNs for Fine-grained Category Detection》

Part-based R-CNN就是利用R-CNN算法对细粒度图像进行物体级别(例如鸟类)与其局部区域(头、身体等部位)的检测,其总体流程如图所示。


首先利用Selective Search等算法在细粒度图像中产生物体或物体部位可能出现的候选框(Object Proposal)。

之后用类似于R-CNN做物体检测的流程,借助细粒度图像中的Object Bounding Box和Part Annotation可以训练出三个检测模型(Detection Model):一个对应细粒度物体级别检测;一个对应物体头部检测;另一个则对应躯干部位检测。

然后,对三个检测模型得到的检测框加上位置几何约束,例如,头部和躯干的大体方位,以及位置偏移不能太离谱等。这样便可得到较理想的物体/部位检测结果(如图右上)。

接下来将得到的图像块(Image Patch)作为输入,分别训练一个CNN,则该CNN可以学习到针对该物体/部位的特征。

最终将三者的全连接层特征级联(Concatenate)作为整张细粒度图像的特征表示。

显然,这样的特征表示既包含全部特征(即物体级别特征),又包含具有更强判别性的局部特征(即部位特征:头部特征/躯干特征),因此分类精度较理想。但在Part-based R-CNN中,不仅在训练时需要借助Bounding Box和Part Annotation,为了取得满意的分类精度,在测试时甚至还要求测试图像提供Bounding Box。这便限制了Part-based R-CNN在实际场景中的应用。

2)Pose Normalized CNN 《Bird Species Categorization Using Pose Normalized Deep Convolutional Nets》

有感于Part-based R-CNN,S. Branson等人提出在用DPM算法得到Part Annotation的预测点后同样可以获得物体级别和部位级别的检测框,如图所示。


与之前工作不同的是,Pose Normalized CNN对部位级别图像块做了姿态对齐操作。此外,由于CNN不同层的特征具有不同的表示特性(如浅层特征表示边缘等信息,深层特征更具高层语义),该工作还提出应针对细粒度图像不同级别的图像块,提取不同层的卷积特征。

在图中,针对全局信息,提取FC8特征;基于头部信息则提取最后一层卷积层特征作为特征表示。最终,还是将不同级别特征级联作为整张图像的表示。

如此的姿态对齐操作和不同层特征融合方式,使得Pose Normalized CNN在使用同样多标记信息时取得了相比Part-based R-CNN高2%的分类精度。

3)Mask-CNN 《Mask-CNN: Localizing Parts and Selecting Descriptors for Fine-Grained Image Recognition》

该模型亦分为两个模块,第一是Part Localization;第二是全局和局部图像块的特征学习。

需要指出的是,与前两个工作的不同在于,在Mask-CNN中,提出借助FCN学习一个部位分割模型(Part-Based Segmentation Model)。其真实标记是通过Part Annotation得到的头部和躯干部位的最小外接矩形,如图中(c)所示。


在FCN中,Part Localization这一问题就转化为一个三分类分割问题,其中,一类为头部、一类为躯干、最后一类则是背景。

FCN训练完毕后,可以对测试集中的细粒度图像进行较精确地part定位,下图展示了一些定位效果图。


可以发现,基于FCN的part定位方式可以对大多数细粒度图像进行较好的头部和躯干定位。

同时,还能注意到,即使FCN的真实标记是粗糙的矩形框,但其预测结果中针对part稍精细些的轮廓也能较好地得到。

在此,称预测得到的part分割结果为Part Mask。不过,对于一些复杂背景图像(如图右下)part定位结果还有待提高。

在得到Part Mask后,可以通过Crop获得对应的图像块。

同时,两个Part Mask组合起来刚好可组成一个较完整的Object Mask。

同样,基于物体/部位图像块,Mask-CNN训练了三个子网络。

在此需要特别指出的是,在每个子网络中,上一步骤中学到的Part/Object Mask还起到了一个关键作用,即“筛选关键卷积特征描述子”(Selecting Useful Convolutional Descriptor),如下图(c)-(d)。这个模块也是作者首次在细粒度图像分类中提出的。


筛选特征描述子的好处在于,可以保留表示前景的描述子,而去除表示背景的卷积描述子的干扰。

筛选后,对保留下来的特征描述子进行全局平均和最大池化(Global Average/Max Pooling)操作,后将二者池化后的特征级联作为子网络的特征表示,最后将三个子网特征再次级联作为整张图像的特征表示。

3、基于弱监督信息的细粒度图像分类模型

虽然上述三种基于强监督信息的分类模型取得了较满意的分类精度,但由于标注信息的获取代价十分昂贵,在一定程度上也局限了这类算法的实际应用。因此,目前细粒度图像分类的一个明显趋势是,希望在模型训练时仅使用图像级别标注信息,而不再使用额外的Part Annotation信息时,也能取得与强监督分类模型可比的分类精度。这便是“基于弱监督信息的细粒度分类模型”。

细粒度分类模型思路同强监督分类模型类似,也需要借助全局和局部信息来做细粒度级别的分类。而区别在于,弱监督细粒度分类希望在不借助Part Annotation的情况下,也可以做到较好的局部信息的捕捉。当然,在分类精度方面,目前最好的弱监督分类模型仍与最好的强监督分类模型存在差距(分类准确度相差约1%~2%)。

4)Two Level Attention Model 《The Application of Two-level Attention Models in Deep Convolutional Neural Network for Fine-grained Image Classification》

顾名思义,该模型主要关注两个不同层次的特征,分别是物体级别和部件级别信息。当然,该模型并不需要数据集提供这些标注信息,完全依赖于本身的算法来完成物体和局部区域的检测。其整体流程如下图所示。


该模型主要分为三个阶段。1. 预处理模型:从输入图像中产生大量的候选区域,对这些区域进行过滤,保留包含前景物体的候选区域;2. 物体级模型:训练一个网络实现对对象级图像进行分类;

在此需要重点介绍的是,3. 局部级模型。我们来看,在不借助Part Annotation的情况下,该模型怎样做到Part检测。

由于预处理模型选择出来的这些候选区域大小不一,有些可能包含了头部,有些可能只有脚。

为了选出这些局部区域,首先利用物体级模型训练的网络来对每一个候选区域提取特征。

接下来,对这些特征进行谱聚类,得到K个不同的聚类簇。如此,则每个簇可视为代表一类局部信息,如头部、脚等。这样,每个簇都可以被看做一个区域检测器,从而达到对测试样本局部区域检测的目的。

5)Constellations 《Neural Activation Constellations: Unsupervised Part Model Discovery with Convolutional Networks》

Constellations方案是利用卷积网络特征本身产生一些关键点,再利用这些关键点来提取局部区域信息。对卷积特征进行可视化分析,如下图所示,发现一些响应比较强烈的区域恰好对应原图中一些潜在的局部区域点。


因此,卷积特征还可以被视为一种检测分数,响应值高的区域代表着原图中检测到的局部区域。不过,特征输出的分辨率与原图相差较大,很难对原图中的区域进行精确定位。受到前人工作的启发,作者采用的方法是通过计算梯度图来产生区域位置,具体公式不展开。

卷积层的输出共有P维通道,可分别对应于P个关键点位置。后续对这些关键点或通过随机选择或通过Ranking来选择出重要的M个。得到关键点后分类就是易事啦。其分类处理流程如下图所示。


6)Bilinear CNN 《Bilinear CNNs for Fine-grained Visual Recognition》

深度学习成功的一个重要精髓,就是将原本分散的处理过程,如特征提取,模型训练等,整合进了一个完整的系统,进行端到端的整体优化训练。不过,在以上所有的工作中,我们所看到的都是将卷积网络当做一个特征提取器,并未从整体上进行考虑。最近,T.-Y. Lin、A.RoyChowdhury等人设计了一种端到端的网络模型Bilinear CNN,在CUB200-2011数据集上取得了弱监督细粒度分类模型的最好分类准确度。 

如下图所示,一个Bilinear模型Β由一个四元组组成:Β=(fA,fB,Ρ,C)。

其中,fA,fB代表特征提取函数,即图中的网络A、B;P是一个池化函数(Pooling Function);C则是分类函数。


特征提取函数f (•)的作用可以看作一个函数映射,f:LXI→RcXD将输入图像I与位置区域L映射为一个cXD 维的特征。

而两个特征提取函数的输出,可以通过一个双线性操作进行汇聚,得到最终的Bilinear特征。

其中池化函数 的作用是将所有位置的Bilinear特征汇聚成一个特征。

到此Bilinear向量即可表示该细粒度图像,后续则为经典的全连接层进行图像分类。

一种对Bilinear CNN模型的解释是,网络A的作用是对物体/部件进行定位,即完成前面介绍算法的物体与局部区域检测工作,而网络B则是用来对网络A检测到的物体位置进行特征提取。

两个网络相互协调作用,完成了细粒度图像分类过程中两个最重要的任务:物体、局部区域的检测与特征提取。

另外,值得一提的是,Bilinear模型由于其优异的泛化性能,不仅在细粒度图像分类上取得了优异效果,还被用于其他图像分类任务,如行人重检测(Person Re-ID)。