精华内容
下载资源
问答
  • 细粒度图像识别流程
    千次阅读
    2021-10-28 14:15:09

    一、概要

        和细粒度识别中的DCL方法不同,LIO(Look-into-object)方法的作者认为仅仅通过学习不同种类物体的可区分视觉模式进行分类是不严谨的,更重要的是要对物体的整体结构进行建模,这是从视觉机制得到的启发:人类在看到目标后,首先是锁定目标的范围,然后在目标所在范围内分析目标的内部结构特征,进而做出判断。基于此,提出了OEL(目标范围学习)和SCL(空间上下文学习)两个可插拔的学习模块,来实现细粒度目标分类。

        同时,LIO方法无需额外的标注工作量,通过自监督的方式实现了OEL和SCL模块的学习。最终的推理阶段,OEL和SCL模块可以完全去掉,几乎没有额外的推理开销。

    二、架构

        图1是LIO的概要图,输入经过骨干网提取特征映射,特征映射分别输入OEL和SCL模块进行学习,两个模块共同促进骨干网学习定位对象和对象内部区域的相对位置。

    图 1. LIO概要

        图2是LIO的网络结构。1、绿色区域是Backbone,负责预测输出类别标签,同时输出的特征映射分别接入OEL和SCL模块;2、蓝色区域表示OEL模块,其输出一个Mask接入到SCL模块;3、灰色区域是SCL模块,同时接收到Backbone和OEL的Mask输入。注意:橙色虚线仅在前向传播时起作用,反向传播时是不起作用的

    图 2. LIO网络结构

    三、OEL

        Object Extent Learning,用于学习定位目标的大致范围,学的好与坏将直接关系到最终分类的性能。确定目标范围一般需要事先进行标注,然后进行训练,但这样做成本很大。OEL另辟蹊径,为了学习图像 I 中目标的范围,它通过采样一定数目与 I 同类别的图像,并进行计算得出一个语义Mask,该Mask矩阵反映了目标的大致范围,实现了自监督学习。流程如下:

    1.     采样N个同类别样本;
    2.     在Backbone上前向传播得到 N 个样本的特征映射集合 F
    3.     每个特征映射与 I 对应的特征映射 f 做区域相似性计算,得到多个Mask矩阵(相似性计算通过向量点乘实现);
    4.     将多个Mask矩阵融合为一个Mask;

        图 3 是经过区域相似性计算得出的一个Mask。融合后的Mask会参与到OEL的损失函数中,驱动骨干网学习输出和Mask矩阵一致的目标输出。使用多个Mask融合的原因是考虑到了图像存在的视角和形变因素,也许鲁棒性会更好

    图 3. 区域相似性计算

     四、SCL

        Spatial Context Learning,空间上下文学习,旨在建模目标区域中不同部分的位置关系,依赖OEL模块学习到的特征映射。具体方法是对目标区域的非中心部分与目标区域的中心部分(极坐标原点)的极坐标进行预测。

        极坐标的采用是一大亮点。目标存在不同的形态,采用笛卡尔坐标系建模不同部分之间的位置关系,需要对绝对位置进行建模,而绝对位置对参考坐标系很敏感,建模会比较困难。极坐标不存在该问题,它采用相对坐标,所有位置都是相对极点进行计算,建模相对容易。

        SCL的损失是距离损失 + 极角损失。距离损采用MSE,极角损失是一个方差的形式,目的是增强模型的预测稳定性,能hold住不同形态下的坐标预测,鲁棒性更好

    五、Backbone + OEL + SCL

        Backbone,OEL和SCL三个模块互相配合,各司其职。OEL定位目标,SCL学习目标不同部分的位置关系,Backbone结合OEL和SCL的反馈,对特征做进一步加工,做最终的分类预测。

    六、LIO与DCL的比较

        根据论文原文解释,LIO和DCL都适用于细粒度图像分类任务,但是成文思路不同。

    •  DCL目的是学习辨识对象的局部区域;
    •  LIO目的是建模或理解对象的整体结构;

        所以,LIO在柔性物体的细粒度分类方面要比DCL好一些(比如区分不同鸟类),但是在刚性物体分类方面DCL要更好一些,原文的实验中,汽车和飞行器的实验结果是DCL由于LIO,而CUB(鸟类数据集)上的结果LIO要明显由于DCL。

    更多相关内容
  • 细粒度图像分类(FGVC)---综述

    万次阅读 多人点赞 2019-04-28 16:28:02
    细粒度图像分类问题是对大类下的子类进行识别细粒度图像分析任务相对通用图像(General/Generic Images)任务的区别和难点在于其图像所属类别的粒度更为精细。 以图1为例,通用图像分类其任务诉求是将“袋鼠”和...

    一、概述

    资源

    Awesome Fine-grained Visual Classification
    Awesome Fine-Grained Image Analysis – Papers, Codes and Datasets----weixiushen

    什么是细粒度图像分类

    细粒度图像分类问题是对大类下的子类进行识别。细粒度图像分析任务相对通用图像(General/Generic Images)任务的区别和难点在于其图像所属类别的粒度更为精细。
    以图1为例,通用图像分类其任务诉求是将“袋鼠”和“狗”这两个物体大类(蓝色框和红色框中物体)分开,可见无论从样貌、形态等方面,二者还是很容易被区分的;而细粒度图像的分类任务则要求对“狗”该类类别下细粒度的子类,即分别为“哈士奇”和“爱斯基摩犬”的图像分辨开来。正因同类别物种的不同子类往往仅在耳朵形状、毛色等细微处存在差异,可谓“差之毫厘,谬以千里”。不止对计算机,对普通人来说,细粒度图像任务的难度和挑战无疑也更为巨大。
    在这里插入图片描述

    意义

    细粒度图像分类无论在工业界还是学术界都有着广泛的研究需求与应用场景。与之相关的研究课题主要包括识别不同种类的鸟、狗、花、车、飞机等。在实际生活中,识别不同的子类别又存在着巨大的应用需求。例如, 在生态保护中, 有效识别不同种类的生物,是进行生态研究的重要前提。如果能够借助于计算机视觉的技术, 实现低成本的细粒度图像识别, 那么无论对于学术界, 还是工业界而言, 都有着非常重要的意义。

    细粒度图像分类的挑战

    由于分类的粒度很小,细粒度图像分类非常困难,在某些类别上甚至专家都难以区分。主要原因有三:
    子类之间差异细微:只在某个局部上有细微差异,如狗的眼睛
    子类内部差异巨大:如姿态、背景带来的差异
    受视角、背景、遮挡等因素影响较大

    细粒度分类常用方法

    目前细粒度图像分类基本上都 采用深度学习的方法,取得不错的效果。具体来说,大致可以分为以下几类:

    1. 使用通用DCNN(Deep Convolutional Neural Network,深度卷积神经网络)进行细粒度分类,该方法难以捕获有区别性的局部细节,目前已经不太常用;
    2. 基于定位-识别的方法:先找到有区分度的局部,然后进行特征提取和分类,该方法又可分为强监督和弱监督两种;
    3. 基于网络集成的方法:使用多个DCNN对细粒度识别中的相似特征进行判别;
    4. 卷积特征的高阶编码方法:将cnn特征进行高阶转换然后进行分类,主要有fisher vector、双线性模型、核融合等。

    二、基于定位-识别的方法

    人类区分相似物体时,通常会通过快速扫描的方式先找到具有区别性的区域,然后在该区域仔细进行比对识别。与人类的方式类似,基于定位-识别的方法将细粒度图像识别分为两个部分:区别性区域定位和区域中的细粒度特征学习。在区别性区域定位时,通常会以强监督或弱监督的方式利用深度神经网络的卷积特征响应;而在细粒度特征学习时,则从定位到的各个区域中分别抽取特征,并将各特征组合到一起最后进行分类。
    强监督的方法不仅需要类别标签,而且需要部件标注和关键部位框,该种方法取得了不错的效果,但缺点在于需要昂贵的人工标注,而且人工标注的位置不一定是最佳的区别性区域,这完全依赖于标注者的认知水平。
    进来,很多弱监督的方法被提出来。该类方法利用注意力机制、聚类等手段来自动发现区别性区域,不需要部件标注,仅仅有分类标签即可完成训练。
    当前有很多方法在朝这方面努力,从大的发展趋势来看,基于定位-分类的细粒度图像分类方法经历了从手工特征工程到多阶段方法再到end to end的发展过程。

    2.1 强监督

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

    2.1.1 Part-based R-CNN

    <Part-based R-CNNs for fine-grained category detection - ECCV2014>
    相信大家一定对R-CNN不陌生,顾名思义,Part-based R-CNN就是利用R-CNN算法对细粒度图像进行物体级别(例如鸟类)与其局部区域(头、身体等部位)的检测,其总体流程如下图所示。
    在这里插入图片描述
    首先利用Selective Search等算法在细粒度图像中产生物体或物体部位可能出现的候选框(Object Proposal)。之后用类似于R-CNN做物体检测的流程,借助细粒度图像中的Object Bounding Box和Part Annotation可以训练出三个检测模型(Detection Model):一个对应细粒度物体级别检测;一个对应物体头部检测;另一个则对应躯干部位检测。然后,对三个检测模型得到的检测框加上位置几何约束,例如,头部和躯干的大体方位,以及位置偏移不能太离谱等。这样便可得到较理想的物体/部位检测结果(如图3右上)。
    接下来将得到的图像块(Image Patch)作为输入,分别训练一个CNN,则该CNN可以学习到针对该物体/部位的特征。最终将三者的全连接层特征级联(Concatenate)作为整张细粒度图像的特征表示。显然,这样的特征表示既包含全部特征(即物体级别特征),又包含具有更强判别性的局部特征(即部位特征:头部特征/躯干特征),因此分类精度较理想。

    Part R-CNN的进步是明显的. 从局部区域的检测定位, 到特征的提取, 该算法均基于卷积神经网络, 并针对细粒度图像的特点进行改进优化, 以改进通用物体定位检测算法在该任务上的不足, 达到了一个相对比较高的准确度. 同时,该算法进一步放松了对标记信息的依赖程度, 在测试时无需提供任何标记信息, 大大增强了算法的实用性. 、
    其不足之处在于,第一是 利用自底向上的区域产生方法, 会产生大量无关区域, 这会在很大程度上影响算法的速度. 第二是不仅在训练时需要借助Bounding Box和Part Annotation,为了取得满意的分类精度,在测试时甚至还要求测试图像提供Bounding Box,这便限制了Part-based R-CNN在实际场景中的应用。第三是该算法本身的创新性十分有限, 既然局部区域对于细粒度图像而言是关键所在, 那么对其进行定位检测则是必要的途径. 只是引入现有的通用定位算法, 似乎并不能很好地解决该问题。

    2.1.2Pose Normalized CNN

    <Bird Species Categorization Using Pose Normalized Deep Convolutional Nets - 2014>
    姿态归一化CNN的创新之处在于使用原型对图像进行了姿态对齐操作, 并针对不同的局部区域提取不同网络层的特征, 以试图构造一个更具区分度的特征表示. 它在原有的局部区域模型的基础上, 进一步考虑了鸟类的不同姿态的干扰, 减轻了类内方差造成的影响, 从而取得了较好的性能表现. 但是, 该算法对于关键点的检测精度较为敏感, 利用DP算法对关键点进行检测, 其精度为75.7%。

    有感于Part-based R-CNN,S. Branson等人提出在用DPM算法得到Part Annotation的预测点后同样可以获得物体级别和部位级别的检测框,如下图所示。与之前工作不同的是,Pose Normalized CNN对部位级别图像块做了姿态对齐操作。

    此外,由于CNN不同层的特征具有不同的表示特性(如浅层特征表示边缘等信息,深层特征更具高层语义),该工作还提出应针对细粒度图像不同级别的图像块,提取不同层的卷积特征。该网络将经过姿态归一化提取的conv5、fc6等底层特征与未对齐的fc8高级特征进行融合

    训练阶段,姿态归一化网络使用DPM预测2D位置及13个语义部位关键点,或者直接使用已提供的物体框及部位标注信息学习姿态原型。将不同的部位图像进行弯曲,并且使用不同的DCNN(AlexNet)提取其特征。最后拼接各个部位及整张图像的特征训练分类器。

    最终,还是将不同级别特征级联作为整张图像的表示。如此的姿态对齐操作和不同层特征融合方式,使得Pose Normalized CNN在使用同样多标记信息时取得了相比Part-based R-CNN高2%的分类精度。

    在这里插入图片描述

    2.1.3 基于多候选区集成的部件定位(Part localization using multi-proposal consensus)

    <Part Localization using Multi-Proposal Consensus for Fine-Grained Categorization - BMVA2015>

    使用基于AlexNet的单个DCNN定位关键点和区域。

    将AlexNet最后的fc8层替换为两个产生关键点及视觉特征的输出层。使用边缘框分块(edge box crops)方法将图像分块,之后产生其特征点位置及视觉特征,去除自信度低的预测结果。之后取剩余预测结果的中心点,作为最终关键点预测结果。并使用将部件检测网络中关键点位置的特征,将其拼接,使用200路一对所有SVM分类器进行分类。

    2.1.4部件堆积CNN(Part-stack CNN,PS-CNN)

    <Part-stacked CNN for fine-grained visual categorization - CVPR2016>

    基于人工标记的强部件标注信息,PS-CNN使用全卷积网络进行部件定位和一个双流的分类网络对物体及部件的特征进行编码

    全卷积网络将CNN中的全连接层使用1×1的卷积代替,其输出特征图的维度小于输入图像维度。输出特征图的每个像素点对应输入图像的一个区域,该区域称为其感受野。FCN具有以下优点:1)其特征图可以直接作为部件的定位结果应用于分类网络;2)FCN能够同时得到多部件的定位结果;3)FCN的学习及推理较为高效。
    使用FCN得到conv5中M个关键点的位置之后,将定位结果输入到分类网络,使用两级架构分析图像物体级及部件级的特征。
    部件级网络首先通过共享层提取特征,之后分别计算关键点周围的部件特征。物体级别网络使用标注框提取对象级CNN特征,及pool5特征。之后将部件级网络及物体级网络特征图合并,进行分类。
    在这里插入图片描述

    2.1.5 Deep LAC(Location Alignment Classification)

    <Deep LAC: Deep localization, alignment and classification for fine-grained recognition - CVPR2015>

    Deep LAC在同一个网络中进行部件定位、对齐及分类,提出了VLF(valve linkage function,阀门连接函数)函数,进行Deep LAC中的反向传播,其能够自适应地减小分类及对齐的误差,并且更新定位结果。

    部件定位子网络包含5个卷积层及3个全连接层。输出为框的左上角及右下角点的坐标。

    对齐子网络接收部件定位结果,执行模板对齐,产生姿态对齐的部件图像。对齐子网络进行平移、缩放、旋转等操作用于姿态对齐区域的生成。同时,该子网络还负责反向传播过程中分类及定位结果的桥接作用。

    对齐子网络中的VLF是一个非常关键的模块,优化定位及分类子网络间的连接,协调分类结果与定位结果。使网络达到稳定状态。
    在这里插入图片描述

    Mask-CNN

    <Mask-CNN : Localizing Parts and Selecting Descriptors for Fine-Grained Image Recognition --Pattern Recognition, 2018>
    该模型亦分为两个模块,第一是Part Localization;第二是全局和局部图像块的特征学习。需要指出的是,与前两个工作的不同在于,在Mask-CNN中,借助FCN学习一个部位分割模型(Part-Based Segmentation Model)。其真实标记是通过Part Annotation得到的头部和躯干部位的最小外接矩形,如下图(c)所示。在FCN中,Part Localization这一问题就转化为一个三分类分割问题,其中,一类为头部、一类为躯干、最后一类则是背景。
    在这里插入图片描述
    FCN训练完毕后,可以对测试集中的细粒度图像进行较精确地part定位,下图展示了一些定位效果图。可以发现,基于FCN的part定位方式可以对大多数细粒度图像进行较好的头部和躯干定位。同时,还能注意到,即使FCN的真实标记是粗糙的矩形框,但其预测结果中针对part稍精细些的轮廓也能较好地得到。在此,我们称预测得到的part分割结果为Part Mask。不过,对于一些复杂背景图像(如图6右下)part定位结果还有待提高。

    在得到Part Mask后,可以通过Crop获得对应的图像块。同时,两个Part Mask组合起来刚好可组成一个较完整的Object Mask。同样,基于物体/部位图像块,Mask-CNN训练了三个子网络。

    在此需要特别指出的是,在每个子网络中,上一步骤中学到的Part/Object Mask还起到了一个关键作用,即“筛选关键卷积特征描述子”(Selecting Useful Convolutional Descriptor),如图7( c)-(d)。这个模块也是我们首次在细粒度图像分类中提出的。筛选特征描述子的好处在于,可以保留表示前景的描述子,而去除表示背景的卷积描述子的干扰。筛选后,对保留下来的特征描述子进行全局平均和最大池化(Global Average/Max Pooling)操作,后将二者池化后的特征级联作为子网络的特征表示,最后将三个子网特征再次级联作为整张图像的特征表示。
    在这里插入图片描述

    实验表明,基于筛选的Mask-CNN在仅依靠训练时提供的Part Annotation(不需要Bounding Box,同时测试时不需额外监督信息)取得了目前细粒度图像分类最高的分类精度(在经典CUB数据上,基于ResNet的模型对200类不同鸟类分类精度可达87.3%)。此外,借助FCN学习Part Mask来进行Part定位的做法也取得了Part定位的最好结果。

    2.2 弱监督

    值得借鉴的思想:目标检测中—基于弱监督的目标定位
    Weakly Supervised Object Localization
    cvpr2020-南大提伪监督目标定位方法,弱监督目标定位的最新SOTA

    2.2.1 两级注意力(Two-level attention)

    两级注意力(Two Level Attention)算法第一个尝试不依赖额外的标注信息, 而仅仅使用类别标签来完成细粒度图像分类的工作。 两级注意力结合了三种类型的注意力:生成候选图像块的自底向上注意力、选择相关块形成特定物体的对象级自顶向下注意力、定位判别性部件的部件级自底向上注意力。通过整合这些类型的注意力机制训练特定的DCNN,以提取前景物体及特征较强的部件。该模型容易泛化,不需要边界框及部件标注。

    之后基于FilterNet选择出来的框训练DomainNet。特别地,使用相似矩阵将中间层分为K个簇,簇的作用域部件检测器相同。之后各个簇筛选出的图像块被缩放到DomainNet输入大小,生成其激活值,之后将不同部件的激活值汇总并训练一对多SVM分类器。最终,将物体级与部件级注意力预测结果合并,以利用两级注意力的优势。
    在这里插入图片描述
    总体上来看, 两级注意力模型较好地解决了在只有类别标签的情况下, 如何对局部区域进行检测的问题. 但是, 利用聚类算法所得到的局部区域, 准确度十分有限. 在同样使用Alex Net的情况下, 其分类精度要低于强监督的Part R-CNN算法。

    2.2.2 细粒度分类的注意力(Attention for fine-grained categorization)

    <Attention for fine-grained categorization - RCLR2015>

    人类在识别时通常不断移动物体以观察相关的特征,并不断将特征添加到图像表征序列中。
    AFGC(细粒度分类注意力模型)是一个基于GoogLeNet的RNN( deep recurrent neural network,深度递归神经网络),在每个时间步处理一个多分辨率的图像块。网络使用该图像块更新图像的表征,并与之前的激活值相结合,输出下一注意点的位置或输出物体最终分类结果。
    在这里插入图片描述

    2.2.3 FCN注意力模型(FCN attention)

    FCN attention是基于强化学习的全卷积注意力定位网络,其能够自适应地选择多任务驱动的注意力区域。由于其基于FCN架构,因而更加高效,并且能够对多个物体部件进行定位,同时提取多个注意力区域的特征。其中,不同部件可以有不同的预定义大小。网络共包括局部定位模块和分类模块。

    局部定位模块使用全卷积网络进行部件定位,其基于VGG16模型,输出单通道的自信度映射图。置信度最高的区域被选择作为部件位置。每个时间步都生成一个特定的部件位置。

    分类模块对所有部件及整张图像进行分类。对局部图像裁剪到模型输入大小,最后取所有部件及全局预测的均值。
    在这里插入图片描述

    2.2.4 多样化视觉注意力(Diversified visual attention)

    DVAN(diversified visual attention network,多样注意力网络 )提高视觉注意力多样性以提取最大程度的判别性特征。包括四个部分:注意力区域生成、CNN特征提取、多样性视觉注意力、分类。 该网络**采用LSTM作为注意力机制**,在不同时间步生成不同的注意力区域。传统注意力模型只关注单个位置,DVAN使用特定的损失函数联合判别多个位置的特征。同时每个时间步都会预测物体类别,最后采用各预测结果的均值。

    在这里插入图片描述

    RACNN

    本文中,提出了一个全新的循环注意力卷积神经网络(recurrent attention convolutional neural network——RA-CNN),用互相强化的方式对判别区域注意力(discriminative region attention)和基于区域的特征表征(region-based feature representation)进行递归学习。
    在网络结构设计上主要包含3个scale子网络,每个scale子网络的网络结构都是一样的,只是网络参数不一样,在每个scale子网络中包含两种类型的网络:分类网络和APN网络。数据流程为:输入图像通过分类网络提取特征并进行分类,然后attention proposal network(APN)网络基于提取到的特征进行训练得到attention区域信息,再将attention区域crop出来并放大,再作为第二个scale网络的输入,这样重复进行3次就能得到3个scale网络的输出结果,通过融合不同scale网络的结果能达到更好的效果。
    在这里插入图片描述
    RA-CNN 通过尺度内分类损失(intra-scale classification loss)和尺度间排序损失(inter-scale ranking loss)进行优化,以相互学习精准的区域注意力(region attention)和细粒度表征(fine-grained representation)。RA-CNN 并不需要边界框(bounding box)或边界部分的标注(part annotations),而且可以进行端到端的训练。
    本文采用交替优化的方式进行训练。

    MACNN

    这篇文章提出了一个多注意力卷积神经网络(MA-CNN),让part generation 和 feature learning能互相强化。同时模型抛弃手工标记attention part 的方法,采用弱监督学习方法。(手工标注attention part 难定标注位置,且耗费人力)
    本文亮点:

    1. 利用feature map 不同通道(channels)关注的视觉信息不同,峰值响应区域也不同这一特点,聚类响应区域相近的通道,得到 attention part。
    2. 由于1中part 定位方式特殊,本文提出了一个channel grouping loss,目的让part内距离更近(intra-class similarity),不同part距离尽量远(inter-class separability)。

    在这里插入图片描述
    MA-CNN框架如上图所示。模型分为三部分,base network、channel grouping layers 和part classification sub-networks.

    输入一张图片(a)给网络,通过base network 产生feature map(b);将(b)中的各通道展开,以12个通道为例,得到(c),可见每个通道都有一个峰值响应区域(白色部分),同时有些通道的峰值响应区域相近(同一种颜色外框表示);文中通过堆叠的全连接层达到聚类效果,把相近的区域归为一类,如图(e),图中划为4类。同类的channel相加,取sigmoid(归一化到0-1)产probabilities,等效于产生4个空间注意区域,即4个mask(局部定位!),这四个mask分别和feature map 进行点乘,得到4个局部精细化的特征,分别进行分类。
    MA-CNN 通过交替优化的学习方式(轮流优化两个loss函数),使对每个part的softmax分类损失,及对每个part的channel grouping loss(Lcng)收敛。

    MAMC

    很多工作是独立的检测一个物体的多个关键性区域,忽略了物体的多个关键性区域的内在关联,因此,学习到的注意力模块很可能集中在同一个区域,并且缺乏本地化多个具有区别特征的部分的能力,这些特征可以区分类似的细粒度类。另外,很多方法都是multi-stage的,不够高效;或者需要很复杂的一些初始化,工作量大。
    从大量的实验研究中,作者观察到一种有效的细粒度分类的视觉注意机制应该遵循三个标准:1)检测到的部分要均匀分布在目标体上,提取出不相关的特征;2)各部分特征应该可以单独对不同类的对象进行区分;3)局部区域提取器应轻量化,以便在实际应用中按比例放大。

    本文提出的弱监督方法可以高效精确地获取判别区域。如下图所示,本文方法框架有两部分组成:1)压缩-多扩展one-squeeze multi-excitation(OSME)模块,轻微增加计算量(也不算太轻),从多个注意力区域提取特征。2)多注意力多类别约束multi-attention multi-class constraint(MAMC),加强注意力区域之间的通信。本文方法比其他方法具有端到端单阶段的优势。

    在这里插入图片描述
    OSME
    也是一种弱监督下的部件定位的注意力方法。先前工作总结:1)部件检测。往往将部件检测和特征提取分开,计算开销增大。2)软注意力,来自响应可视化。
    如上图,我们的框架以ResNet50作为baseline, SEnet通过压缩-扩展操作对输出特征图再校准。为了产生P个特定注意力的特征图,我们从SEnet延伸,把一次扩展操作换成多次扩展操作。
    在压缩操作中,我们聚合特征图空间产生通道级的描述子,和通道数一致。全局平均池化是一种简单高效的通道统计特征描述方法。
    在扩展操作中,对通道描述子施加多个独立门机制,产生多个注意力图。门机制中是FC+Relu+FC+Sigmoid,由于sigmoid特性,其输出对通道间的非互斥关系进行了编码。我们利用其输出对起初Resnet50的输出进行再次加权,得到特定注意力图。
    为了对每个特定注意力图进行特征提取,将这些特定注意力图展平成向量之后输入进FC层。
    简单而言,本文通过对baseline输出全剧平均池化之后进行多次门操作获得P个特征向量。并认为这些特征向量是对不同非互斥部件/特征的聚类(这里还不能称为判别性特征)。
    MAMC
    下面解决的问题可以描述为,如何让以上模块产生的注意力特征指向类别,产生判别性注意力特征。先前方法总结: 1)把以上注意力特征合并进行softmax loss(指交叉熵损失函数),softmax loss不能掌握两两注意力特征之间的关系,2)递归搜索机制,会把初代误差迭代方放大。还要使用强化学习以及一些复杂的初始化方法。我们的方法在训练中增强两两部件之间的关系。这种方法就是多注意力多类别机制。以下就是度量学习的框架了。
    训练集组织:我们有图像-类别对,为了刻画图片之间的注意力和同一子类内的注意力之间的关系,我们重新组织输入Batch(参考度量学习)。参考文章 Improved Deep Metric Learning with Multi-class N-pair Loss Objective中的N-pair采样方法。具体而言就是,每个batch中有N对图片,每对两张图片来自同一个子类,取一个图片为锚点(anchor),另一个为此anchor的正样本,然后给出他们所属类别。那么经过OSME模块,假设有P个excitation,那么每个样本就各自产生P个注意力特征向量。

    Learning a Discriminative Filter Bank within a CNN(DFL-CNN)

    <Learning a Discriminative Filter Bank within a CNN for Fine-grained Recognition - CVPR2018>
    端到端的细粒度识别可以分为两类:一个是定位-分类子网络 ,另一个是端到端特征编码。

    第一类方法,定位-分类子网络,包含了由定位网络辅助的分类网络。分类网络的中级学习是由定位网络中定位信息(部位定位和分割掩码)加强的。早期工作是依赖于数据集的额外部位标注信息,最近的只需要分类标签。不管标注信息,这些方法的的共同当即就是先寻找到匹配的部位在比较它们的外观。 第一步要求对象类间的语义部分可以共享,鼓励不同部位之间的表示相似,但是,为了有区分性,第二步鼓励在不同类别之间部位表示是不同的。这种微妙的冲突可能需要在定位网络和分类网络进行权衡,这可能会降低单个集成网络的分类表现。这种权衡也涉及到实践,在训练时,这两个网络往往分开交替训练,因此网络会变得复杂

    第二类方法,端到端的特征编码方法,利用了卷积特征的高阶统计编码(如 bilinear pooling)增强了CNN中层学习能力。与定位分类自网络比较来说,端到端的网络虽然有效,但可解释性和在严格非严格领域的性能很难保持一致性。

    作者的主要贡献设计了一个CNN框架中,不需要额外的部分或边框注释,以端到端的方式就可以学习有区别的mid_level patches.这样我们的辨别性patch就不用各个类之间共享,只需要有辨别性的apperance就行了。因此,我们的网络完全专注于classification,避免了识别和定位之间的权衡

    实现是通过1×1的卷积核作为小的‘’部位检测子“设计一个非对称的、多支路的结构来利用patch-level信息和全局外观表示,并且引入了非随机初始化滤波器监督去激活特征块的滤波器。
    在这里插入图片描述
    非对称结构的两条支路核心组件如上图所示。
    **P-stream:**这个组件后接分类器(比如全连接层和softmax层)形成网络判别的P-stream,其中预测是通过判断判别性块检测子的响应来预测的。P-stream是使用Conv4_3的输出,并且对这个特征图使用较小的感受野,一片的大小为92×92,跨步是8。
    **G-stream:**细粒度图像识别还要依赖于全局形状和表观,所以另一个支路保存的是更深的卷积核和全连接,第一个全连接编码全局信息通过线性结合整个卷积特征图。因为这个支路关注于全局信息,所以我们称之为G-stream。
    **side-branch:**为了让框架学习特定于类的判别补丁检测器,我们通过引入跨通道池层和softmax损耗层,对多个通道的特征进行综合。

    (ECCV 2018) Learning to Navigate for Fine-grained Classification

    三、基于网络集成的方法

    将细粒度数据集划分为几个相似的子集分别进行分类,或直接使用多个神经网络来提高细粒度分类的性能。

    3.1子集特征学习网络(Subset feature learning networks)

    Subset feature learning for fine-grained category classification—CVPR2015

    包括通用CNN及特定CNN两个部分。

    使用大规模数据集上预训练的通用CNN并在细粒度数据集上迁移学习。同时,在其fc6特征上使用LDA降维。
    将细粒度数据集中外观相似的类聚类为K个子类,并训练K个特定的CNN。
    在测试时,使用子集CNN选择器(subset selector CNN ,SCNN)选择输入图像相应的子集CNN。SCNN使用K个聚类结果作为类标签,将fc8的softmax输出数量改为K。之后,使用最大投票法确定其子类。
    在这里插入图片描述

    3.2 混合DCNN(Mixture of deep CNN)

    Fine-grained classification via mixture of deep convolutional neural networks—CVPR2015

    MixDCNN不对数据集进行划分,学习K个特定的CNN。输入图像经过K个CNN,K个子CNN的分类结果通过分类占位概率(occupation probability)进行融合,其定义如下,通过占位概率,MixDCNN可以实现端到端训练。
    α k = e C k ∑ c = 1 K e C c \alpha_{k}=\frac{e^{C_{k}}}{\sum_{c=1}^{K} e^{C_{c}}} αk=c=1KeCceCk
    其中,Ck为第K个CNN的最佳分类结果。
    在这里插入图片描述

    3.3 CNN树(CNN tree)

    Learning finegrained features via a CNN tree for large-scale classification —CVPR2015
    在多分类问题中,某个类通常与其他几个类相混淆,这些容易相互混淆的类被称为混淆集。在混淆集中,应该使用判决性更强的特征对其进行区分。
    首先在类集合上训练模型,之后评估训练好模型每个类的混淆集,将各类的混淆集合并为几个混淆超集。之后将混淆超集做为子节点,在其上进一步学习,重复该过程,直到CNN树达到最大深度。
    在这里插入图片描述

    3.4 多粒度CNN( Multiple granularity CNN)

    Multiple granularity descriptors for fine-grained categorization —ICCV2015
    子类标签包含某实体在该类中的层次信息。使用这些层次信息可以训练一系列不同粒度的CNN模型。这些模型的内部特征表示有不同的兴趣域,能够提取覆盖所有粒度的判别性特征。

    多粒度CNN包含多个CNN,每个CNN都在给定的粒度进行分类。即多粒度CNN是由多个单粒度识别CNN组成。ROI通过自底向上的区域生成方法生成,与粒度相关。同时,ROI的选择是跨粒度相关的,细粒度的ROI通常是由粗粒度的ROI采样而来。之后,将ROI输入到各个粒度的特征提取网络提取其多粒度特征,最后将多粒度特征合并,产生最终的分类结果。
    在这里插入图片描述

    四、高阶特征编码

    双线性汇合(bilinear pooling)在细粒度图像分析及其他领域的进展综述
    【AAAI2020系列解读 01】新角度看双线性池化,冗余、突发性问题本质源于哪里?

    Bilinear CNN Models for Fine-grained Visual Recognition—ICCV2015

    源码
    双线性汇合(bilinear pooling)计算不同空间位置的外积,并对不同空间位置计算平均汇合以得到双线性特征。外积捕获了特征通道之间成对的相关关系,并且这是平移不变的。双线性汇合提供了比线性模型更强的特征表示,并可以端到端地进行优化,取得了和使用部位(parts)信息相当或甚至更高的性能。

    另一种对Bilinear CNN模型的解释是,网络A的作用是对物体/部件进行定位,即完成前面介绍算法的物体与局部区域检测工作,而网络B则是用来对网络A检测到的物体位置进行特征提取。两个网络相互协调作用,完成了细粒度图像分类过程中两个最重要的任务:物体、局部区域的检测与特征提取。另外,值得一提的是,bilinear模型由于其优异的泛化性能,不仅在细粒度图像分类上取得了优异效果,还被用于其他图像分类任务,如行人重检测(person Re-ID)。
    在这里插入图片描述
    网络架构很简单,主要就是用外积(matrix outer product)来组合两个CNN(A和B)的feature map (当然也可以不用CNN),bilinear layer如下:
    bilinear ( l , I , f A , f B ) = f A ( l , I ) T f B ( l , I ) \left(l, I, f_{A}, f_{B}\right)=f_{A}(l, I)^{T} f_{B}(l, I) (l,I,fA,fB)=fA(l,I)TfB(l,I)

    • 其中位置 l l l 涵盖了位置和尺度, I I I 是图像。
    • fA和fB分别指两个CNN特征提取器,将输入图像I与位置区域L映射为一个cXD 维的特征。f 的维度是(K,D),D是指channel。
    • 如果A和B输出的特征维度分别是(K,M)和(K,N),经过bilinear后维度变为(M,N)。
    • 求和池化函数(sum pooling)的作用是将所有位置的Bilinear特征汇聚成一个特征。

    由于特征的位置维度被池化掉了,得到的bilinear特征是orderless的。另外注意,外积导致特征的维度D 增大为原来的平方。
    最后将bilinear特征经过符号平方根变换,并增加l2标准化(elementwise normalization layer),然后输入分类器,完成分类任务。

    这里的两个CNN可以共享部分参数,三种不同的方式如下图:
    在这里插入图片描述

    后续研究方向
    后续双向性汇合研究方向大致分为两类:设计更好的双线性汇合过程,以及精简双线性汇合。其中,对双线性汇合过程的设计主要包括对汇合结果规范化过程的选择及其高效实现,以及融合一阶和二阶信息。精简双线性汇合设计大致有三种思路:利用PCA降维、近似核计算、以及低秩双线性分类器。

    Low-rank Bilinear Pooling for Fine-Grained Classification-CVPR2017

    这篇文章的目的是要降低Bilinear pooling模型的参数维度,同时提高模型的精度。论文与第一篇论文模型不同的是,这篇论文采用对称的网络模型,也就是两个steam是相同的,那么只需要训练一个CNN过程就好,大大的减少了计算的开支。同时特征的意义就变为在位置i上特征的相关性矩阵。最后论文采用了一个低秩的分类器进行分类。

    Hierarchical Bilinear Pooling for Fine-Grained Visual Recognition

    源码:https://github.com/luyao777/HBP-pytorch
    基于Bilinear pooling的模型已经被实验验证了在细粒度认知的有效性,然而很多之前的方法忽略了层间局部特征的交互和细粒度特征的学习是相互关联的同时也能强化彼此。
    以此为出发点,作者提出来一种跨层的bilinear pooling方法来捕获层间局部特征关系,然后在这个基础上提出了一种新的分层双线性池框架来集成多个跨层双线性特征,以提高它们的表示能力。
    和之前的定位局部来学习细粒度特征不同,作者将来自不同卷积层的激活视为对不同部件属性的响应,而不是显式地定位对象局部,利用跨层双线性池捕获局部特性的跨层间交互,这对于细粒度识别非常有用。
    在这里插入图片描述

    Higher-Order Integration of Hierarchical Convolutional Activations for Fine-Grained Visual Categorization ICCV2017

    针对细粒度分类的难点,1. part annotation 和 detection 需要专业知识且很多part-based方法都是为了训练精确的 part detector 而严重依赖于精确地 part annotation; 2. Parts 通常有很多尺寸,而深度计卷积中的每个点对应一个特定的感受野,因此单层卷积层在描述不同尺寸的 part 时能力有限;3. Part 与 part 之间的关系是复杂的,高阶的。对于目标外形建模的关键在于发掘目标局部的共同外形。但缺陷是只能发掘很少 part 的一阶关系。

    本文针对以上问题,提出了基于融合高阶的多等级的卷积特征(Hierarchical convolutional activations) 。如果把卷积特征作为局部描述子 ,那么多等级的卷及特征就可以是不同尺度的局部特描述子。在处理 part interaction 的问题时,作者通过核融合的方法,使用多项式描述子将不同层的特征综合在一起。本文的创新点在于为融合不同层的的卷积响应开辟了新视角。

    总结

    在细粒度分类任务由于存在较大的类内差异和细微的内间差异,导致传统的人工特征工程无法达到理想效果。深度学习的出现,为该任务带来巨大的效果提升,在许多场景中达到实用的水平。本文综述了目前常见的三类基于深度学习的细粒度图像分类方法。
    基于定位-分类的方法借鉴了人类进行细粒度分类的过程,研究相对充分,是最主流的方法。早期,基于定位-分类的方法多采用强监督学习,需要大量的人工来标注图像的关键区域。Part R-CNN[3]是较早采用区域定位技术的细粒度分类算法,其进步是明显的. 从局部区域的检测定位, 到特征的提取, 该算法均基于卷积神经网络, 并针对细粒度图像的特点进行改进优化, 以改进通用物体定位检测算法在该任务上的不足, 达到了一个相对比较高的准确度. 其不足之处在于, 利用自底向上的区域产生方法, 会产生大量无关区域, 这会在很大程度上影响算法的速度. 另一方面, 该算法本身的创新性十分有限, 既然局部区域对于细粒度图像而言是关键所在, 那么对其进行定位检测则是必要的途径. 只是引入现有的通用定位算法, 似乎并不能很好地解决该问题。在此基础上,后续有很多改进算法,例如Pose Normalized CNN[4]通过姿态对齐操作,减小了类内差异。而part stacked CNN[5] 和mask-CNN[6]则利用FCN进行区域定位,提高了定位精度。
    近年来,由于工业领域的应用需要,基于定位-分类方法的研究逐渐向弱监督学习转移,通过注意力机制、通道聚类等方法构建定位子网络,实现区分性区域的发现。其中,两级注意力(Two Level Attention)算法[7]是第一个尝试不依赖额外的标注信息, 而仅仅使用类别标签来完成细粒度图像分类的工作,该方法通过聚类实现区域定位,准确度有限。此后,RNN、LSTM以及FCN等网络被当做注意力机制引入弱监督方法中来,进一步提升定位的准确度。在定位子网络的基础上,MAMC[12]等网络引入了空间约束,改善定位区域的辨识度。
    高阶编码方法通过将CNN特征进行高阶综合,提升特征的表达能力,其最主要的技术路线是双线性模型[13],此外,Higher-Order Integration of Hierarchical Convolutional Activations[2]通过核融合方式为高阶编码提供了新的视角。
    Bilinear模型提供了比线性模型更强的特征表示,并可以端到端地进行优化,取得了和使用部位(parts)信息相当或甚至更高的性能,其缺点在于外积导致特征的维度 增大为原来的平方。
    后续双向性汇合研究方向大致分为两类:设计更好的双线性汇合过程,以及精简双线性汇合。其中,对双线性汇合过程的设计主要包括对汇合结果规范化过程的选择及其高效实现,以及融合一阶和二阶信息。精简双线性汇合设计大致有三种思路:利用PCA降维、近似核计算、以及低秩双线性分类器。
    网络集成方法采用了分而治之的思想,主要方法是将细粒度数据集划分为几个相似的子集分别进行分类,或直接使用多个神经网络来提高细粒度分类的性能。当某些类特别容易混淆时,采用该方法能取得不错的效果,缺点是认为干预的因素较多,不能采用端到端的学习方式。

    其它相关

    or-wavelet:https://blog.csdn.net/qq_41332469/article/details/93197565

    消除Aliasing!加州大学&英伟达提出深度学习下采样新思路:自适应低通滤波器层

    ECCV2020 | Cityscapes上83.7 mIoU,通过解耦的主体和边缘监督改进语义分割

    【图像分类】细粒度图像分类----文末有细粒度分类的相关竞赛介绍

    展开全文
  • 向AI转型的程序员都关注了这个号????????????人工智能大数据与深度学习 公众号:datayx细粒度图像识别 (fine-grained image recognition),...


    向AI转型的程序员都关注了这个号????????????

    人工智能大数据与深度学习  公众号:datayx

    细粒度图像识别 (fine-grained image recognition),即 精细化分类。

    细粒度图像分类(Fine-Grained Categorization),
    又被称作子类别图像分类(Sub-Category Recognition),
        是近年来计算机视觉、模式识别等领域一个
        非常热门的研究课题. 其目的是对粗粒度的大类别
        进行更加细致的子类划分, 但由于子类别间细微的
        类间差异和较大的类内差异, 较之普通的图像分类
        任务, 细粒度图像分类难度更大.

    目前, 绝大多数的分类算法都遵循这样的流程框架:

    首先找到前景对象(鸟)及其局部区域(头、脚、翅膀等), 之后分别对这些区
    域提取特征. 对所得到的特征进行适当的处理之后, 用来完成分类器的训练
    和预测.
    精细化分类
    识别出物体的大类别(比如:计算机、手机、水杯等)较易,但如果进一步去判断更为精细化的物体分类名称,则难度极大。
    最大的挑战在于,同一大类别下 不同 子类别 间的 视觉差异 极小。
    因此,精细化分类 所需的图像分辨率 较高。

    目前,精细化分类的方法主要有以下两类:

    1. 基于图像重要区域定位的方法:
    该方法集中探讨如何利用弱监督的信息自动找到图像中有判别力的区域,
    从而达到精细化分类的目的。
    2. 基于图像精细化特征表达的方法:
    该方法提出使用高维度的图像特征(如:bilinear vector)对图像信息进行高阶编码,
    以达到准确分类的目的。
    按照其使用的监督信息的多少 分为 强监督 和 弱监督
    信息的细粒度图像分类模型
    

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

    0. DeCAF Deep Convolutional Activation Feature

    1. 基于部件的CNN Part-based R-CNN

    https://arxiv.org/pdf/1407.3867.pdf

    2. 姿态归一化CNN Pose Normalized CNN

    https://arxiv.org/pdf/1406.2952.pdf

    3. 基于部位分割模型的 Mask-CNN

    https://blog.csdn.net/cyiano/article/details/71440358

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

    1. 两级注意力算法 Two Level Attention Model

    https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Xiao_The_Application_of_2015_CVPR_paper.pdf

     该模型主要关注两个不同层次的特征, 分别是对象级(Object-Level)和
        局部级(Part-Level), 即在以往强监督工作中所使用的标注框和局部区域位置
    这两层信息.
    

      a. 在预处理阶段, 主要是从原始图像中检测并提取前景对象, 以减少背景信息带来的干扰.           仅仅使用卷积网络来对ss算法产生的区域中的背景区域进行过滤. 这样导致的结果是, 对于一张输入图像, 可能对应许多包含前景对象的候选区域.

           b. 对象级模型,对对象级图像进行分类。一个区域候选, 经过卷积网络之后, 得到一个softmax 层的输出. 对所有区域的输出求平均, 作为该图像最终的softmax层输出.

           c. 局部级模型, 为了从繁杂的候选区域中选出关键的局部区域           

    1. 首先利用对象级模型得到的网络来对每一个候选区域提取特征.          

    2. 对这些特征进行谱聚类, 得到k个不同的聚类簇, 每个簇代表一个局部信息, 如头部、脚等.        

    3. 将不同局部区域的特征级联成一个特征向量,用来训练SVM, 作为局部级模型给出的分类器.        

    d. 最后, 将对象级模型的预测结果与局部级模型的结果相结合, 作为模型的最终输出.

    2. 星座(Constellations)算法

    https://arxiv.org/pdf/1504.08289v3.pd

    3. Bilinear CNN

    https://arxiv.org/pdf/1504.07889.pdf

    数据集

    CUB200-2011 Caltech-UCSD Birds-200-2011

         http://www.vision.caltech.edu/visipedia/CUB-200-2011.html

     共包含200 种不同类别, 其中每类都有30+ 个训练图像,共11,788张鸟类图像数据. 每张图像包含15个局部部位标注点(part annotation)用来标记鸟类的身体部位,312 个二值属性, 1个标注框, 以及语义分割图像 

    Stanford Dogs 120种不同种

    http://vision.stanford.edu/aditya86/ImageNetDogs/

    狗的图像数据, 共有20,580 张图, 只提供标注框 和 类别标注数据

    Oxford Flowers

    http://www.robots.ox.ac.uk/~vgg/data/flowers/

        分为两种不同规模的数据 库, 分别包含17种类别和102种类别的花. 其中,
        102种类别的数据库比较常用, 每个类别包含了40到258 张图像数据, 总共有8,189张图像. 
        该数据库只提供语义分割图像, 不包含其他额外标注信息.

    Cars

    http://ai.stanford.edu/~jkrause/cars/car_dataset.html
        提供196类不同品牌不同年份不同车型的车辆图像数据, 一共包含有16,185张图像,
        分成训练集(8,144张)和测试集(8,041张)
        只提供标注框信息。

    FGVC-Aircraf Fine-Grained Visual Classification of Aircraft

    http://www.robots.ox.ac.uk/~vgg/data/fgvc-aircraft/

        提供102 类不同的飞机照片,每一类别含有100 张不同的照片, 整个数据库共
        有10,200张图片, 只提供标注框信息.

    算法框架

    1. CNN  特征提取网络(科目卷积层 、 属目卷积层、种目卷积层)    提取不同层面的特征
    2. APN  注意力建议网络   得到不同的关注区域
    3. DCNN 卷积细粒度特征描述网络
    4. 全连接层之后得到粗细粒度互补的层次化特征表达,再通过 分类网络softmax 输出结果
    

    注意力模型(Attention Model) 注意力机制

    被广泛使用在自然语言处理、图像识别及语音识别等各种不同类型的深度学习任务中,
    是深度学习技术中最值得关注与深入了解的核心技术之一。 
    视觉注意力机制是人类视觉所特有的大脑信号处理机制。
    人类视觉通过快速扫描全局图像,获得需要重点关注的目标区域,也就是一般所说的注意力焦点,
    而后对这一区域投入更多注意力资源,以获取更多所需要关注目标的细节信息,而抑制其他无用信息。
    这是人类利用有限的注意力资源从大量信息中快速筛选出高价值信息的手段,
    是人类在长期进化中形成的一种生存机制,人类视觉注意力机制极大地提高了视觉信息处理的效率与准确性。
    
    把Attention仍然理解为从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,
    忽略大多不重要的信息,这种思路仍然成立。
    聚焦的过程体现在权重系数的计算上,权重越大越聚焦于其对应的Value值上,
    即权重代表了信息的重要性,而Value是其对应的信息。
    

    图片描述(Image-Caption)

    是一种典型的图文结合的深度学习应用,输入一张图片,人工智能系统输出一句描述句子,
    语义等价地描述图片所示内容。
    可以使用Encoder-Decoder框架来解决任务目标。
    1. 此时编码部分Encoder输入部分是一张图片,一般会用CNN来对图片进行特征抽取;
    2. 解码Decoder部分使用RNN或者LSTM和注意力机制来输出自然语言句子。
    

    RA-CNN

    MSRA通过观察发现,对于精细化物体分类问题,其实形态、轮廓特征显得不那么重要,
    而细节纹理特征则起到了主导作用。
    因此提出了 “将判别力区域的定位和精细化特征的学习联合进行优化” 的构想,
    从而让两者在学习的过程中相互强化,
    也由此诞生了 “Recurrent Attention Convolutional Neural Network”
    (RA-CNN,基于递归注意力模型的卷积神经网络)网络结构。
    

       RA-CNN 网络可以更精准地找到图像中有判别力的子区域,

    然后采用高分辨率、精细化特征描述这些区域,进而大大提高精细化物体

    分类的精度: 论文地址

    http://openaccess.thecvf.com/content_cvpr_2017/papers/Fu_Look_Closer_to_CVPR_2017_paper.pdf

    RA-CNN思想

    1. 首先原图大尺度图像通过 CNN 卷积网络 提取特征,
       一部分进过APN(Attention Proposal Net 注意力建议网络)得到注意力中心框(
    感兴趣区域,例如上半身区域),
       另一部分通过全连接层再经过softmax归一化分类概率输出;
    2. 对第一步得到的注意力中心框(感兴趣区域,例如上半身区域),再进行1的步骤,
       得到更小的注意力中心框,和分类概率;
    3. 对第二步得到的注意力中心框(感兴趣区域,例如头部区域),通过卷积网络提取特征,
    通过全连接层再经过softmax归一化分类概率输出;
    
    

    阅读过本文的人还看了以下文章:

    TensorFlow 2.0深度学习案例实战

    基于40万表格数据集TableBank,用MaskRCNN做表格检测

    《基于深度学习的自然语言处理》中/英PDF

    Deep Learning 中文版初版-周志华团队

    【全套视频课】最全的目标检测算法系列讲解,通俗易懂!

    《美团机器学习实践》_美团算法团队.pdf

    《深度学习入门:基于Python的理论与实现》高清中文PDF+源码

    特征提取与图像处理(第二版).pdf

    python就业班学习视频,从入门到实战项目

    2019最新《PyTorch自然语言处理》英、中文版PDF+源码

    《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码

    《深度学习之pytorch》pdf+附书源码

    PyTorch深度学习快速实战入门《pytorch-handbook》

    【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》

    《Python数据分析与挖掘实战》PDF+完整源码

    汽车行业完整知识图谱项目实战视频(全23课)

    李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材

    笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!

    《神经网络与深度学习》最新2018版中英PDF+源码

    将机器学习模型部署为REST API

    FashionAI服装属性标签图像识别Top1-5方案分享

    重要开源!CNN-RNN-CTC 实现手写汉字识别

    yolo3 检测出图像中的不规则汉字

    同样是机器学习算法工程师,你的面试为什么过不了?

    前海征信大数据算法:风险概率预测

    【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

    VGG16迁移学习,实现医学图像识别分类工程项目

    特征工程(一)

    特征工程(二) :文本数据的展开、过滤和分块

    特征工程(三):特征缩放,从词袋到 TF-IDF

    特征工程(四): 类别特征

    特征工程(五): PCA 降维

    特征工程(六): 非线性特征提取和模型堆叠

    特征工程(七):图像特征提取和深度学习

    如何利用全新的决策树集成级联结构gcForest做特征工程并打分?

    Machine Learning Yearning 中文翻译稿

    蚂蚁金服2018秋招-算法工程师(共四面)通过

    全球AI挑战-场景分类的比赛源码(多模型融合)

    斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

    python+flask搭建CNN在线识别手写中文网站

    中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程

    不断更新资源

    深度学习、机器学习、数据分析、python

     搜索公众号添加: datayx  


    机大数据技术与机器学习工程

     搜索公众号添加: datanlp

    长按图片,识别二维码

    展开全文
  • 细粒度图像分类(FGVC)--- 综述

    千次阅读 2021-03-07 21:34:31
    一、概述什么是细粒度图像分类意义细粒度图像分类的挑战细粒度分类常用方法 二、基于定位-识别的方法2.1 强监督2.1.1 Part-based R-CNN2.1.2Pose Normalized CNN2.1.3 基于多候选区集成的部件定位(Part loca...

    原文链接:https://www.its404.com/article/xys430381_1/89640699

    目录

    一、概述

    什么是细粒度图像分类

    细粒度图像分类问题是对大类下的子类进行识别。细粒度图像分析任务相对通用图像(General/Generic Images)任务的区别和难点在于其图像所属类别的粒度更为精细。
    以图1为例,通用图像分类其任务诉求是将“袋鼠”和“狗”这两个物体大类(蓝色框和红色框中物体)分开,可见无论从样貌、形态等方面,二者还是很容易被区分的;而细粒度图像的分类任务则要求对“狗”该类类别下细粒度的子类,即分别为“哈士奇”和“爱斯基摩犬”的图像分辨开来。正因同类别物种的不同子类往往仅在耳朵形状、毛色等细微处存在差异,可谓“差之毫厘,谬以千里”。不止对计算机,对普通人来说,细粒度图像任务的难度和挑战无疑也更为巨大。
    在这里插入图片描述

    意义

    细粒度图像分类无论在工业界还是学术界都有着广泛的研究需求与应用场景。与之相关的研究课题主要包括识别不同种类的鸟、狗、花、车、飞机等。在实际生活中,识别不同的子类别又存在着巨大的应用需求。例如, 在生态保护中, 有效识别不同种类的生物,是进行生态研究的重要前提。如果能够借助于计算机视觉的技术, 实现低成本的细粒度图像识别, 那么无论对于学术界, 还是工业界而言, 都有着非常重要的意义。

    细粒度图像分类的挑战

    由于分类的粒度很小,细粒度图像分类非常困难,在某些类别上甚至专家都难以区分。主要原因有三:
    子类之间差异细微:只在某个局部上有细微差异,如狗的眼睛
    子类内部差异巨大:如姿态、背景带来的差异
    受视角、背景、遮挡等因素影响较大

    细粒度分类常用方法

    目前细粒度图像分类基本上都 采用深度学习的方法,取得不错的效果。具体来说,大致可以分为以下几类:

    1. 使用通用DCNN(Deep Convolutional Neural Network,深度卷积神经网络)进行细粒度分类,该方法难以捕获有区别性的局部细节,目前已经不太常用;
    2. 基于定位-识别的方法:先找到有区分度的局部,然后进行特征提取和分类,该方法又可分为强监督和弱监督两种;
    3. 基于网络集成的方法:使用多个DCNN对细粒度识别中的相似特征进行判别;
    4. 卷积特征的高阶编码方法:将cnn特征进行高阶转换然后进行分类,主要有fisher vector、双线性模型、核融合等。

    二、基于定位-识别的方法

    人类区分相似物体时,通常会通过快速扫描的方式先找到具有区别性的区域,然后在该区域仔细进行比对识别。与人类的方式类似,基于定位-识别的方法将细粒度图像识别分为两个部分:区别性区域定位和区域中的细粒度特征学习。在区别性区域定位时,通常会以强监督或弱监督的方式利用深度神经网络的卷积特征响应;而在细粒度特征学习时,则从定位到的各个区域中分别抽取特征,并将各特征组合到一起最后进行分类。
    强监督的方法不仅需要类别标签,而且需要部件标注和关键部位框,该种方法取得了不错的效果,但缺点在于需要昂贵的人工标注,而且人工标注的位置不一定是最佳的区别性区域,这完全依赖于标注者的认知水平。
    进来,很多弱监督的方法被提出来。该类方法利用注意力机制、聚类等手段来自动发现区别性区域,不需要部件标注,仅仅有分类标签即可完成训练。
    当前有很多方法在朝这方面努力,从大的发展趋势来看,基于定位-分类的细粒度图像分类方法经历了从手工特征工程到多阶段方法再到end to end的发展过程。

    2.1 强监督

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

    2.1.1 Part-based R-CNN

    <Part-based R-CNNs for fine-grained category detection - ECCV2014>
    相信大家一定对R-CNN不陌生,顾名思义,Part-based R-CNN就是利用R-CNN算法对细粒度图像进行物体级别(例如鸟类)与其局部区域(头、身体等部位)的检测,其总体流程如下图所示。
    在这里插入图片描述
    首先利用Selective Search等算法在细粒度图像中产生物体或物体部位可能出现的候选框(Object Proposal)。之后用类似于R-CNN做物体检测的流程,借助细粒度图像中的Object Bounding Box和Part Annotation可以训练出三个检测模型(Detection Model):一个对应细粒度物体级别检测;一个对应物体头部检测;另一个则对应躯干部位检测。然后,对三个检测模型得到的检测框加上位置几何约束,例如,头部和躯干的大体方位,以及位置偏移不能太离谱等。这样便可得到较理想的物体/部位检测结果(如图3右上)。
    接下来将得到的图像块(Image Patch)作为输入,分别训练一个CNN,则该CNN可以学习到针对该物体/部位的特征。最终将三者的全连接层特征级联(Concatenate)作为整张细粒度图像的特征表示。显然,这样的特征表示既包含全部特征(即物体级别特征),又包含具有更强判别性的局部特征(即部位特征:头部特征/躯干特征),因此分类精度较理想。

    Part R-CNN的进步是明显的. 从局部区域的检测定位, 到特征的提取, 该算法均基于卷积神经网络, 并针对细粒度图像的特点进行改进优化, 以改进通用物体定位检测算法在该任务上的不足, 达到了一个相对比较高的准确度. 同时,该算法进一步放松了对标记信息的依赖程度, 在测试时无需提供任何标记信息, 大大增强了算法的实用性. 、
    其不足之处在于,第一是 利用自底向上的区域产生方法, 会产生大量无关区域, 这会在很大程度上影响算法的速度. 第二是不仅在训练时需要借助Bounding Box和Part Annotation,为了取得满意的分类精度,在测试时甚至还要求测试图像提供Bounding Box,这便限制了Part-based R-CNN在实际场景中的应用。第三是该算法本身的创新性十分有限, 既然局部区域对于细粒度图像而言是关键所在, 那么对其进行定位检测则是必要的途径. 只是引入现有的通用定位算法, 似乎并不能很好地解决该问题。

    2.1.2Pose Normalized CNN

    <Bird Species Categorization Using Pose Normalized Deep Convolutional Nets - 2014>
    姿态归一化CNN的创新之处在于使用原型对图像进行了姿态对齐操作, 并针对不同的局部区域提取不同网络层的特征, 以试图构造一个更具区分度的特征表示. 它在原有的局部区域模型的基础上, 进一步考虑了鸟类的不同姿态的干扰, 减轻了类内方差造成的影响, 从而取得了较好的性能表现. 但是, 该算法对于关键点的检测精度较为敏感, 利用DP算法对关键点进行检测, 其精度为75.7%。

    有感于Part-based R-CNN,S. Branson等人提出在用DPM算法得到Part Annotation的预测点后同样可以获得物体级别和部位级别的检测框,如下图所示。与之前工作不同的是,Pose Normalized CNN对部位级别图像块做了姿态对齐操作。

    此外,由于CNN不同层的特征具有不同的表示特性(如浅层特征表示边缘等信息,深层特征更具高层语义),该工作还提出应针对细粒度图像不同级别的图像块,提取不同层的卷积特征。该网络将经过姿态归一化提取的conv5、fc6等底层特征与未对齐的fc8高级特征进行融合

    训练阶段,姿态归一化网络使用DPM预测2D位置及13个语义部位关键点,或者直接使用已提供的物体框及部位标注信息学习姿态原型。将不同的部位图像进行弯曲,并且使用不同的DCNN(AlexNet)提取其特征。最后拼接各个部位及整张图像的特征训练分类器。

    最终,还是将不同级别特征级联作为整张图像的表示。如此的姿态对齐操作和不同层特征融合方式,使得Pose Normalized CNN在使用同样多标记信息时取得了相比Part-based R-CNN高2%的分类精度。

    在这里插入图片描述

    2.1.3 基于多候选区集成的部件定位(Part localization using multi-proposal consensus)

    <Part Localization using Multi-Proposal Consensus for Fine-Grained Categorization - BMVA2015>

    使用基于AlexNet的单个DCNN定位关键点和区域。

    将AlexNet最后的fc8层替换为两个产生关键点及视觉特征的输出层。使用边缘框分块(edge box crops)方法将图像分块,之后产生其特征点位置及视觉特征,去除自信度低的预测结果。之后取剩余预测结果的中心点,作为最终关键点预测结果。并使用将部件检测网络中关键点位置的特征,将其拼接,使用200路一对所有SVM分类器进行分类。

    2.1.4部件堆积CNN(Part-stack CNN,PS-CNN)

    <Part-stacked CNN for fine-grained visual categorization - CVPR2016>

    基于人工标记的强部件标注信息,PS-CNN使用全卷积网络进行部件定位和一个双流的分类网络对物体及部件的特征进行编码

    全卷积网络将CNN中的全连接层使用1×1的卷积代替,其输出特征图的维度小于输入图像维度。输出特征图的每个像素点对应输入图像的一个区域,该区域称为其感受野。FCN具有以下优点:1)其特征图可以直接作为部件的定位结果应用于分类网络;2)FCN能够同时得到多部件的定位结果;3)FCN的学习及推理较为高效。
    使用FCN得到conv5中M个关键点的位置之后,将定位结果输入到分类网络,使用两级架构分析图像物体级及部件级的特征。
    部件级网络首先通过共享层提取特征,之后分别计算关键点周围的部件特征。物体级别网络使用标注框提取对象级CNN特征,及pool5特征。之后将部件级网络及物体级网络特征图合并,进行分类。
    在这里插入图片描述

    2.1.5 Deep LAC(Location Alignment Classification)

    <Deep LAC: Deep localization, alignment and classification for fine-grained recognition - CVPR2015>

    Deep LAC在同一个网络中进行部件定位、对齐及分类,提出了VLF(valve linkage function,阀门连接函数)函数,进行Deep LAC中的反向传播,其能够自适应地减小分类及对齐的误差,并且更新定位结果。

    部件定位子网络包含5个卷积层及3个全连接层。输出为框的左上角及右下角点的坐标。

    对齐子网络接收部件定位结果,执行模板对齐,产生姿态对齐的部件图像。对齐子网络进行平移、缩放、旋转等操作用于姿态对齐区域的生成。同时,该子网络还负责反向传播过程中分类及定位结果的桥接作用。

    对齐子网络中的VLF是一个非常关键的模块,优化定位及分类子网络间的连接,协调分类结果与定位结果。使网络达到稳定状态。
    在这里插入图片描述

    Mask-CNN

    <Mask-CNN : Localizing Parts and Selecting Descriptors for Fine-Grained Image Recognition --Pattern Recognition, 2018>
    该模型亦分为两个模块,第一是Part Localization;第二是全局和局部图像块的特征学习。需要指出的是,与前两个工作的不同在于,在Mask-CNN中,借助FCN学习一个部位分割模型(Part-Based Segmentation Model)。其真实标记是通过Part Annotation得到的头部和躯干部位的最小外接矩形,如下图(c)所示。在FCN中,Part Localization这一问题就转化为一个三分类分割问题,其中,一类为头部、一类为躯干、最后一类则是背景。
    在这里插入图片描述
    FCN训练完毕后,可以对测试集中的细粒度图像进行较精确地part定位,下图展示了一些定位效果图。可以发现,基于FCN的part定位方式可以对大多数细粒度图像进行较好的头部和躯干定位。同时,还能注意到,即使FCN的真实标记是粗糙的矩形框,但其预测结果中针对part稍精细些的轮廓也能较好地得到。在此,我们称预测得到的part分割结果为Part Mask。不过,对于一些复杂背景图像(如图6右下)part定位结果还有待提高。

    在得到Part Mask后,可以通过Crop获得对应的图像块。同时,两个Part Mask组合起来刚好可组成一个较完整的Object Mask。同样,基于物体/部位图像块,Mask-CNN训练了三个子网络。

    在此需要特别指出的是,在每个子网络中,上一步骤中学到的Part/Object Mask还起到了一个关键作用,即“筛选关键卷积特征描述子”(Selecting Useful Convolutional Descriptor),如图7( c)-(d)。这个模块也是我们首次在细粒度图像分类中提出的。筛选特征描述子的好处在于,可以保留表示前景的描述子,而去除表示背景的卷积描述子的干扰。筛选后,对保留下来的特征描述子进行全局平均和最大池化(Global Average/Max Pooling)操作,后将二者池化后的特征级联作为子网络的特征表示,最后将三个子网特征再次级联作为整张图像的特征表示。
    在这里插入图片描述

    实验表明,基于筛选的Mask-CNN在仅依靠训练时提供的Part Annotation(不需要Bounding Box,同时测试时不需额外监督信息)取得了目前细粒度图像分类最高的分类精度(在经典CUB数据上,基于ResNet的模型对200类不同鸟类分类精度可达87.3%)。此外,借助FCN学习Part Mask来进行Part定位的做法也取得了Part定位的最好结果。

    2.2 弱监督

    值得借鉴的思想:目标检测中—基于弱监督的目标定位
    Weakly Supervised Object Localization
    cvpr2020-南大提伪监督目标定位方法,弱监督目标定位的最新SOTA

    2.2.1 两级注意力(Two-level attention)

    两级注意力(Two Level Attention)算法第一个尝试不依赖额外的标注信息, 而仅仅使用类别标签来完成细粒度图像分类的工作。 两级注意力结合了三种类型的注意力:生成候选图像块的自底向上注意力、选择相关块形成特定物体的对象级自顶向下注意力、定位判别性部件的部件级自底向上注意力。通过整合这些类型的注意力机制训练特定的DCNN,以提取前景物体及特征较强的部件。该模型容易泛化,不需要边界框及部件标注。

    之后基于FilterNet选择出来的框训练DomainNet。特别地,使用相似矩阵将中间层分为K个簇,簇的作用域部件检测器相同。之后各个簇筛选出的图像块被缩放到DomainNet输入大小,生成其激活值,之后将不同部件的激活值汇总并训练一对多SVM分类器。最终,将物体级与部件级注意力预测结果合并,以利用两级注意力的优势。
    在这里插入图片描述
    总体上来看, 两级注意力模型较好地解决了在只有类别标签的情况下, 如何对局部区域进行检测的问题. 但是, 利用聚类算法所得到的局部区域, 准确度十分有限. 在同样使用Alex Net的情况下, 其分类精度要低于强监督的Part R-CNN算法。

    2.2.2 细粒度分类的注意力(Attention for fine-grained categorization)

    <Attention for fine-grained categorization - RCLR2015>

    人类在识别时通常不断移动物体以观察相关的特征,并不断将特征添加到图像表征序列中。
    AFGC(细粒度分类注意力模型)是一个基于GoogLeNet的RNN( deep recurrent neural network,深度递归神经网络),在每个时间步处理一个多分辨率的图像块。网络使用该图像块更新图像的表征,并与之前的激活值相结合,输出下一注意点的位置或输出物体最终分类结果。
    在这里插入图片描述

    2.2.3 FCN注意力模型(FCN attention)

    FCN attention是基于强化学习的全卷积注意力定位网络,其能够自适应地选择多任务驱动的注意力区域。由于其基于FCN架构,因而更加高效,并且能够对多个物体部件进行定位,同时提取多个注意力区域的特征。其中,不同部件可以有不同的预定义大小。网络共包括局部定位模块和分类模块。

    局部定位模块使用全卷积网络进行部件定位,其基于VGG16模型,输出单通道的自信度映射图。置信度最高的区域被选择作为部件位置。每个时间步都生成一个特定的部件位置。

    分类模块对所有部件及整张图像进行分类。对局部图像裁剪到模型输入大小,最后取所有部件及全局预测的均值。
    在这里插入图片描述

    2.2.4 多样化视觉注意力(Diversified visual attention)

    DVAN(diversified visual attention network,多样注意力网络 )提高视觉注意力多样性以提取最大程度的判别性特征。包括四个部分:注意力区域生成、CNN特征提取、多样性视觉注意力、分类。 该网络**采用LSTM作为注意力机制**,在不同时间步生成不同的注意力区域。传统注意力模型只关注单个位置,DVAN使用特定的损失函数联合判别多个位置的特征。同时每个时间步都会预测物体类别,最后采用各预测结果的均值。

    在这里插入图片描述

    RACNN

    本文中,提出了一个全新的循环注意力卷积神经网络(recurrent attention convolutional neural network——RA-CNN),用互相强化的方式对判别区域注意力(discriminative region attention)和基于区域的特征表征(region-based feature representation)进行递归学习。
    在网络结构设计上主要包含3个scale子网络,每个scale子网络的网络结构都是一样的,只是网络参数不一样,在每个scale子网络中包含两种类型的网络:分类网络和APN网络。数据流程为:输入图像通过分类网络提取特征并进行分类,然后attention proposal network(APN)网络基于提取到的特征进行训练得到attention区域信息,再将attention区域crop出来并放大,再作为第二个scale网络的输入,这样重复进行3次就能得到3个scale网络的输出结果,通过融合不同scale网络的结果能达到更好的效果。
    在这里插入图片描述
    RA-CNN 通过尺度内分类损失(intra-scale classification loss)和尺度间排序损失(inter-scale ranking loss)进行优化,以相互学习精准的区域注意力(region attention)和细粒度表征(fine-grained representation)。RA-CNN 并不需要边界框(bounding box)或边界部分的标注(part annotations),而且可以进行端到端的训练。
    本文采用交替优化的方式进行训练。

    MACNN

    这篇文章提出了一个多注意力卷积神经网络(MA-CNN),让part generation 和 feature learning能互相强化。同时模型抛弃手工标记attention part 的方法,采用弱监督学习方法。(手工标注attention part 难定标注位置,且耗费人力)
    本文亮点:

    1. 利用feature map 不同通道(channels)关注的视觉信息不同,峰值响应区域也不同这一特点,聚类响应区域相近的通道,得到 attention part。
    2. 由于1中part 定位方式特殊,本文提出了一个channel grouping loss,目的让part内距离更近(intra-class similarity),不同part距离尽量远(inter-class separability)。

    在这里插入图片描述
    MA-CNN框架如上图所示。模型分为三部分,base network、channel grouping layers 和part classification sub-networks.

    输入一张图片(a)给网络,通过base network 产生feature map(b);将(b)中的各通道展开,以12个通道为例,得到(c),可见每个通道都有一个峰值响应区域(白色部分),同时有些通道的峰值响应区域相近(同一种颜色外框表示);文中通过堆叠的全连接层达到聚类效果,把相近的区域归为一类,如图(e),图中划为4类。同类的channel相加,取sigmoid(归一化到0-1)产probabilities,等效于产生4个空间注意区域,即4个mask(局部定位!),这四个mask分别和feature map 进行点乘,得到4个局部精细化的特征,分别进行分类。
    MA-CNN 通过交替优化的学习方式(轮流优化两个loss函数),使对每个part的softmax分类损失,及对每个part的channel grouping loss(Lcng)收敛。

    MAMC

    很多工作是独立的检测一个物体的多个关键性区域,忽略了物体的多个关键性区域的内在关联,因此,学习到的注意力模块很可能集中在同一个区域,并且缺乏本地化多个具有区别特征的部分的能力,这些特征可以区分类似的细粒度类。另外,很多方法都是multi-stage的,不够高效;或者需要很复杂的一些初始化,工作量大。
    从大量的实验研究中,作者观察到一种有效的细粒度分类的视觉注意机制应该遵循三个标准:1)检测到的部分要均匀分布在目标体上,提取出不相关的特征;2)各部分特征应该可以单独对不同类的对象进行区分;3)局部区域提取器应轻量化,以便在实际应用中按比例放大。

    本文提出的弱监督方法可以高效精确地获取判别区域。如下图所示,本文方法框架有两部分组成:1)压缩-多扩展one-squeeze multi-excitation(OSME)模块,轻微增加计算量(也不算太轻),从多个注意力区域提取特征。2)多注意力多类别约束multi-attention multi-class constraint(MAMC),加强注意力区域之间的通信。本文方法比其他方法具有端到端单阶段的优势。

    在这里插入图片描述
    OSME
    也是一种弱监督下的部件定位的注意力方法。先前工作总结:1)部件检测。往往将部件检测和特征提取分开,计算开销增大。2)软注意力,来自响应可视化。
    如上图,我们的框架以ResNet50作为baseline, SEnet通过压缩-扩展操作对输出特征图再校准。为了产生P个特定注意力的特征图,我们从SEnet延伸,把一次扩展操作换成多次扩展操作。
    在压缩操作中,我们聚合特征图空间产生通道级的描述子,和通道数一致。全局平均池化是一种简单高效的通道统计特征描述方法。
    在扩展操作中,对通道描述子施加多个独立门机制,产生多个注意力图。门机制中是FC+Relu+FC+Sigmoid,由于sigmoid特性,其输出对通道间的非互斥关系进行了编码。我们利用其输出对起初Resnet50的输出进行再次加权,得到特定注意力图。
    为了对每个特定注意力图进行特征提取,将这些特定注意力图展平成向量之后输入进FC层。
    简单而言,本文通过对baseline输出全剧平均池化之后进行多次门操作获得P个特征向量。并认为这些特征向量是对不同非互斥部件/特征的聚类(这里还不能称为判别性特征)。
    MAMC
    下面解决的问题可以描述为,如何让以上模块产生的注意力特征指向类别,产生判别性注意力特征。先前方法总结: 1)把以上注意力特征合并进行softmax loss(指交叉熵损失函数),softmax loss不能掌握两两注意力特征之间的关系,2)递归搜索机制,会把初代误差迭代方放大。还要使用强化学习以及一些复杂的初始化方法。我们的方法在训练中增强两两部件之间的关系。这种方法就是多注意力多类别机制。以下就是度量学习的框架了。
    训练集组织:我们有图像-类别对,为了刻画图片之间的注意力和同一子类内的注意力之间的关系,我们重新组织输入Batch(参考度量学习)。参考文章 Improved Deep Metric Learning with Multi-class N-pair Loss Objective中的N-pair采样方法。具体而言就是,每个batch中有N对图片,每对两张图片来自同一个子类,取一个图片为锚点(anchor),另一个为此anchor的正样本,然后给出他们所属类别。那么经过OSME模块,假设有P个excitation,那么每个样本就各自产生P个注意力特征向量。

    Learning a Discriminative Filter Bank within a CNN(DFL-CNN)

    <Learning a Discriminative Filter Bank within a CNN for Fine-grained Recognition - CVPR2018>
    端到端的细粒度识别可以分为两类:一个是定位-分类子网络 ,另一个是端到端特征编码。

    第一类方法,定位-分类子网络,包含了由定位网络辅助的分类网络。分类网络的中级学习是由定位网络中定位信息(部位定位和分割掩码)加强的。早期工作是依赖于数据集的额外部位标注信息,最近的只需要分类标签。不管标注信息,这些方法的的共同当即就是先寻找到匹配的部位在比较它们的外观。 第一步要求对象类间的语义部分可以共享,鼓励不同部位之间的表示相似,但是,为了有区分性,第二步鼓励在不同类别之间部位表示是不同的。这种微妙的冲突可能需要在定位网络和分类网络进行权衡,这可能会降低单个集成网络的分类表现。这种权衡也涉及到实践,在训练时,这两个网络往往分开交替训练,因此网络会变得复杂

    第二类方法,端到端的特征编码方法,利用了卷积特征的高阶统计编码(如 bilinear pooling)增强了CNN中层学习能力。与定位分类自网络比较来说,端到端的网络虽然有效,但可解释性和在严格非严格领域的性能很难保持一致性。

    作者的主要贡献设计了一个CNN框架中,不需要额外的部分或边框注释,以端到端的方式就可以学习有区别的mid_level patches.这样我们的辨别性patch就不用各个类之间共享,只需要有辨别性的apperance就行了。因此,我们的网络完全专注于classification,避免了识别和定位之间的权衡

    实现是通过1×1的卷积核作为小的‘’部位检测子“设计一个非对称的、多支路的结构来利用patch-level信息和全局外观表示,并且引入了非随机初始化滤波器监督去激活特征块的滤波器。
    在这里插入图片描述
    非对称结构的两条支路核心组件如上图所示。
    **P-stream:**这个组件后接分类器(比如全连接层和softmax层)形成网络判别的P-stream,其中预测是通过判断判别性块检测子的响应来预测的。P-stream是使用Conv4_3的输出,并且对这个特征图使用较小的感受野,一片的大小为92×92,跨步是8。
    **G-stream:**细粒度图像识别还要依赖于全局形状和表观,所以另一个支路保存的是更深的卷积核和全连接,第一个全连接编码全局信息通过线性结合整个卷积特征图。因为这个支路关注于全局信息,所以我们称之为G-stream。
    **side-branch:**为了让框架学习特定于类的判别补丁检测器,我们通过引入跨通道池层和softmax损耗层,对多个通道的特征进行综合。

    (ECCV 2018) Learning to Navigate for Fine-grained Classification

    三、基于网络集成的方法

    将细粒度数据集划分为几个相似的子集分别进行分类,或直接使用多个神经网络来提高细粒度分类的性能。

    3.1子集特征学习网络(Subset feature learning networks)

    Subset feature learning for fine-grained category classification—CVPR2015

    包括通用CNN及特定CNN两个部分。

    使用大规模数据集上预训练的通用CNN并在细粒度数据集上迁移学习。同时,在其fc6特征上使用LDA降维。
    将细粒度数据集中外观相似的类聚类为K个子类,并训练K个特定的CNN。
    在测试时,使用子集CNN选择器(subset selector CNN ,SCNN)选择输入图像相应的子集CNN。SCNN使用K个聚类结果作为类标签,将fc8的softmax输出数量改为K。之后,使用最大投票法确定其子类。
    在这里插入图片描述

    3.2 混合DCNN(Mixture of deep CNN)

    Fine-grained classification via mixture of deep convolutional neural networks—CVPR2015

    MixDCNN不对数据集进行划分,学习K个特定的CNN。输入图像经过K个CNN,K个子CNN的分类结果通过分类占位概率(occupation probability)进行融合,其定义如下,通过占位概率,MixDCNN可以实现端到端训练。
    α k = e C k ∑ K c = 1 e C c α k = e C k ∑ c = 1 K e C c αk=eCk∑Kc=1eCcαk=eCk∑c=1KeCc αk=eCkKc=1eCcαk=eCkc=1KeCc

    其中,Ck为第K个CNN的最佳分类结果。
    在这里插入图片描述

    3.3 CNN树(CNN tree)

    Learning finegrained features via a CNN tree for large-scale classification —CVPR2015
    在多分类问题中,某个类通常与其他几个类相混淆,这些容易相互混淆的类被称为混淆集。在混淆集中,应该使用判决性更强的特征对其进行区分。
    首先在类集合上训练模型,之后评估训练好模型每个类的混淆集,将各类的混淆集合并为几个混淆超集。之后将混淆超集做为子节点,在其上进一步学习,重复该过程,直到CNN树达到最大深度。
    在这里插入图片描述

    3.4 多粒度CNN( Multiple granularity CNN)

    Multiple granularity descriptors for fine-grained categorization —ICCV2015
    子类标签包含某实体在该类中的层次信息。使用这些层次信息可以训练一系列不同粒度的CNN模型。这些模型的内部特征表示有不同的兴趣域,能够提取覆盖所有粒度的判别性特征。

    多粒度CNN包含多个CNN,每个CNN都在给定的粒度进行分类。即多粒度CNN是由多个单粒度识别CNN组成。ROI通过自底向上的区域生成方法生成,与粒度相关。同时,ROI的选择是跨粒度相关的,细粒度的ROI通常是由粗粒度的ROI采样而来。之后,将ROI输入到各个粒度的特征提取网络提取其多粒度特征,最后将多粒度特征合并,产生最终的分类结果。
    在这里插入图片描述

    四、高阶特征编码

    双线性汇合(bilinear pooling)在细粒度图像分析及其他领域的进展综述
    【AAAI2020系列解读 01】新角度看双线性池化,冗余、突发性问题本质源于哪里?

    Bilinear CNN Models for Fine-grained Visual Recognition—ICCV2015

    源码
    双线性汇合(bilinear pooling)计算不同空间位置的外积,并对不同空间位置计算平均汇合以得到双线性特征。外积捕获了特征通道之间成对的相关关系,并且这是平移不变的。双线性汇合提供了比线性模型更强的特征表示,并可以端到端地进行优化,取得了和使用部位(parts)信息相当或甚至更高的性能。

    另一种对Bilinear CNN模型的解释是,网络A的作用是对物体/部件进行定位,即完成前面介绍算法的物体与局部区域检测工作,而网络B则是用来对网络A检测到的物体位置进行特征提取。两个网络相互协调作用,完成了细粒度图像分类过程中两个最重要的任务:物体、局部区域的检测与特征提取。另外,值得一提的是,bilinear模型由于其优异的泛化性能,不仅在细粒度图像分类上取得了优异效果,还被用于其他图像分类任务,如行人重检测(person Re-ID)。
    在这里插入图片描述
    网络架构很简单,主要就是用外积(matrix outer product)来组合两个CNN(A和B)的feature map (当然也可以不用CNN),bilinear layer如下:
    bilinear b i l i n e a r ( l , I , f A , f B ) = f A ( l , I ) T f B ( l , I ) ( l , I , f A , f B ) = f A ( l , I ) T f B ( l , I ) ( l , I , f A ​ , f B ​ ) = f A ​ ( l , I ) T f B ​ ( l , I ) bilinear ( l , I , f A , f B ) = f A ( l , I ) T f B ( l , I ) \left(l, I, f_{A}, f_{B}\right)=f_{A}(l, I)^{T} f_{B}(l, I) (l,I,fA​,fB​)=fA​(l,I)TfB​(l,I) bilinear(l,I,fA,fB)=fA(l,I)TfB(l,I)(l,I,fA,fB)=fA(l,I)TfB(l,I)(l,I,fA,fB)=fA(l,I)TfB(l,I)

    其中位置 l l l 涵盖了位置和尺度, I I I 是图像。
    fA和fB分别指两个CNN特征提取器,将输入图像I与位置区域L映射为一个cXD 维的特征。f 的维度是(K,D),D是指channel。
    如果A和B输出的特征维度分别是(K,M)和(K,N),经过bilinear后维度变为(M,N)。
    求和池化函数(sum pooling)的作用是将所有位置的Bilinear特征汇聚成一个特征。

    • 其中位置 l l l 涵盖了位置和尺度, I I I 是图像
    • fA和fB分别指两个CNN特征提取器,将输入图像I与位置区域L映射为一个cXD 维的特征。f 的维度是(K,D),D是指channel
    • 如果A和B输出的特征维度分别是(K,M)和(K,N),经过bilinear后维度变为(M,N)
    • 求和池化函数(sum pooling)的作用是将所有位置的Bilinear特征汇聚成一个特征

      由于特征的位置维度被池化掉了,得到的bilinear特征是orderless的。另外注意,外积导致特征的维度D 增大为原来的平方。
      最后将bilinear特征经过符号平方根变换,并增加l2标准化(elementwise normalization layer),然后输入分类器,完成分类任务。

      这里的两个CNN可以共享部分参数,三种不同的方式如下图:
      在这里插入图片描述

      后续研究方向
      后续双向性汇合研究方向大致分为两类:设计更好的双线性汇合过程,以及精简双线性汇合。其中,对双线性汇合过程的设计主要包括对汇合结果规范化过程的选择及其高效实现,以及融合一阶和二阶信息。精简双线性汇合设计大致有三种思路:利用PCA降维、近似核计算、以及低秩双线性分类器。

      Low-rank Bilinear Pooling for Fine-Grained Classification-CVPR2017

      这篇文章的目的是要降低Bilinear pooling模型的参数维度,同时提高模型的精度。论文与第一篇论文模型不同的是,这篇论文采用对称的网络模型,也就是两个steam是相同的,那么只需要训练一个CNN过程就好,大大的减少了计算的开支。同时特征的意义就变为在位置i上特征的相关性矩阵。最后论文采用了一个低秩的分类器进行分类。

      Hierarchical Bilinear Pooling for Fine-Grained Visual Recognition

      源码:https://github.com/luyao777/HBP-pytorch
      基于Bilinear pooling的模型已经被实验验证了在细粒度认知的有效性,然而很多之前的方法忽略了层间局部特征的交互和细粒度特征的学习是相互关联的同时也能强化彼此。
      以此为出发点,作者提出来一种跨层的bilinear pooling方法来捕获层间局部特征关系,然后在这个基础上提出了一种新的分层双线性池框架来集成多个跨层双线性特征,以提高它们的表示能力。
      和之前的定位局部来学习细粒度特征不同,作者将来自不同卷积层的激活视为对不同部件属性的响应,而不是显式地定位对象局部,利用跨层双线性池捕获局部特性的跨层间交互,这对于细粒度识别非常有用。
      在这里插入图片描述

      Higher-Order Integration of Hierarchical Convolutional Activations for Fine-Grained Visual Categorization ICCV2017

      针对细粒度分类的难点,1. part annotation 和 detection 需要专业知识且很多part-based方法都是为了训练精确的 part detector 而严重依赖于精确地 part annotation; 2. Parts 通常有很多尺寸,而深度计卷积中的每个点对应一个特定的感受野,因此单层卷积层在描述不同尺寸的 part 时能力有限;3. Part 与 part 之间的关系是复杂的,高阶的。对于目标外形建模的关键在于发掘目标局部的共同外形。但缺陷是只能发掘很少 part 的一阶关系。

      本文针对以上问题,提出了基于融合高阶的多等级的卷积特征(Hierarchical convolutional activations) 。如果把卷积特征作为局部描述子 ,那么多等级的卷及特征就可以是不同尺度的局部特描述子。在处理 part interaction 的问题时,作者通过核融合的方法,使用多项式描述子将不同层的特征综合在一起。本文的创新点在于为融合不同层的的卷积响应开辟了新视角。

      总结

      在细粒度分类任务由于存在较大的类内差异和细微的内间差异,导致传统的人工特征工程无法达到理想效果。深度学习的出现,为该任务带来巨大的效果提升,在许多场景中达到实用的水平。本文综述了目前常见的三类基于深度学习的细粒度图像分类方法。
      基于定位-分类的方法借鉴了人类进行细粒度分类的过程,研究相对充分,是最主流的方法。早期,基于定位-分类的方法多采用强监督学习,需要大量的人工来标注图像的关键区域。Part R-CNN[3]是较早采用区域定位技术的细粒度分类算法,其进步是明显的. 从局部区域的检测定位, 到特征的提取, 该算法均基于卷积神经网络, 并针对细粒度图像的特点进行改进优化, 以改进通用物体定位检测算法在该任务上的不足, 达到了一个相对比较高的准确度. 其不足之处在于, 利用自底向上的区域产生方法, 会产生大量无关区域, 这会在很大程度上影响算法的速度. 另一方面, 该算法本身的创新性十分有限, 既然局部区域对于细粒度图像而言是关键所在, 那么对其进行定位检测则是必要的途径. 只是引入现有的通用定位算法, 似乎并不能很好地解决该问题。在此基础上,后续有很多改进算法,例如Pose Normalized CNN[4]通过姿态对齐操作,减小了类内差异。而part stacked CNN[5] 和mask-CNN[6]则利用FCN进行区域定位,提高了定位精度。
      近年来,由于工业领域的应用需要,基于定位-分类方法的研究逐渐向弱监督学习转移,通过注意力机制、通道聚类等方法构建定位子网络,实现区分性区域的发现。其中,两级注意力(Two Level Attention)算法[7]是第一个尝试不依赖额外的标注信息, 而仅仅使用类别标签来完成细粒度图像分类的工作,该方法通过聚类实现区域定位,准确度有限。此后,RNN、LSTM以及FCN等网络被当做注意力机制引入弱监督方法中来,进一步提升定位的准确度。在定位子网络的基础上,MAMC[12]等网络引入了空间约束,改善定位区域的辨识度。
      高阶编码方法通过将CNN特征进行高阶综合,提升特征的表达能力,其最主要的技术路线是双线性模型[13],此外,Higher-Order Integration of Hierarchical Convolutional Activations[2]通过核融合方式为高阶编码提供了新的视角。
      Bilinear模型提供了比线性模型更强的特征表示,并可以端到端地进行优化,取得了和使用部位(parts)信息相当或甚至更高的性能,其缺点在于外积导致特征的维度 增大为原来的平方。
      后续双向性汇合研究方向大致分为两类:设计更好的双线性汇合过程,以及精简双线性汇合。其中,对双线性汇合过程的设计主要包括对汇合结果规范化过程的选择及其高效实现,以及融合一阶和二阶信息。精简双线性汇合设计大致有三种思路:利用PCA降维、近似核计算、以及低秩双线性分类器。
      网络集成方法采用了分而治之的思想,主要方法是将细粒度数据集划分为几个相似的子集分别进行分类,或直接使用多个神经网络来提高细粒度分类的性能。当某些类特别容易混淆时,采用该方法能取得不错的效果,缺点是认为干预的因素较多,不能采用端到端的学习方式。

      其它相关

      or-wavelet:https://blog.csdn.net/qq_41332469/article/details/93197565

      消除Aliasing!加州大学&英伟达提出深度学习下采样新思路:自适应低通滤波器层

      ECCV2020 | Cityscapes上83.7 mIoU,通过解耦的主体和边缘监督改进语义分割

    展开全文
  • 关于细粒度图像识别的一些思考

    千次阅读 2017-11-20 11:11:32
    背景细粒度图像识别是图像分类中的一个颇具挑战性的任务,它的目标是在一个大类中的众多子类中正确的识别目标。但是相同子类中物体的动作和姿态步态可能相同,不同子类间又有可能有着相同的姿态,这是识别的一大难点...
  • [实战]200类鸟类细粒度图像分类

    万次阅读 多人点赞 2020-02-17 11:13:11
    [实战]200类鸟类细粒度分类识别 我又来了!!!! 一、图像分类 这次进行实战项目,鸟类细粒度分类识别实战。再讲细粒度分类之前,让我们先回顾一下图像分类吧。 图像分类是计算机视觉的最基础的一个任务,从...
  • 细粒度图像分类研究综述

    万次阅读 多人点赞 2018-05-23 16:35:46
    细粒度图像分类问题是计算机视觉领域一项极具挑战的研究课题, 其目标是对子类进行识别,如区分不同种类的鸟。由于子类别间细微的类间差异和较大的类内差异, 传统的分类算法不得不依赖于大量的人工标注信息。近年来, ...
  • 细粒度图像分类 fine-grained classification

    万次阅读 多人点赞 2018-12-09 11:59:22
    细粒度图像分类又被称作子类别图像分类,是近年来计算机视觉、模式识别等领域的研究热点,其目的是对粗粒度的大类别进行更加细致的子类划分。但由于子类别间的细微差别以及较大的类内差异,较之普通的图像分类任务,...
  • 见微知著——细粒度图像分析 大家应该都会有这样的经历:逛街时看到路人的萌犬可爱至极,可仅知是“犬”殊不知其具体品种;初春踏青,见那姹紫嫣红丛中笑,却桃杏李傻傻分不清……实际上,类似的...
  • 简单来说,就是想做细粒度图像分类(特征细腻,类间差异小,类内差异大等原因)。别人都是通过关键区域标注、注意力机制等方法解决,这篇文章作者另辟蹊径,从损失函数入手,很有创意。 但是作者不想给模型增加...
  • 度量学习、细粒度识别相关论文阅读笔记(二)——Look Closer to See Better:Recurrent Attention Convolutional Neural Network for Fine-grained Image Recognition—RA-CNN(细粒度、注意力机制) 细粒度分类...
  • 细粒度图像分类(FGVC)理解与探究

    千次阅读 2020-01-20 22:55:12
    细粒度图像分类(FGVC)理解与探究 细粒度图像分类与传统图像分类而言,细粒度图像分类中所需要进行分类的图像中的可判别区域(discriminative parts)往往只是在图像中很小的一块区域内。 在传统的图像分类网络中,...
  • 后续实验可证实,基于深度描述子筛选的思想不仅有利于细粒度图像检索,对细粒度图像识别同样大有裨益。 具体而言,研究人员通过对分析对象添加 keypoints,进而生成 keyparts,从而生成有关 ground truth 的边界框。...
  • 原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经...书的购买链接书的勘误,优化,源代码资源获取全文PDF请查看:基于深度学习的细粒度图像分类综述1.简介细粒度图像分类 (Fine-grained image categorizat...
  • 同样地,电脑也可以通过识别更低层次的特征(曲线,直线)来进行图像识别。电脑用卷积层识别这些特征,并通过更多层卷积层结合在一起,就可以像人类一样识别出爪子和腿之类的高层次特征,从而完成任务。这正是CNN所...
  • Transformer在细粒度分类上的应用

    千次阅读 2021-03-25 21:18:53
    TransFG :Transformer在细粒度分类上的应用一级目录二级目录三级目录 一级目录 二级目录 三级目录
  • 声明:本文原创,未经本人同意,禁止任何形式的转载!!! 后记:这篇文章虽然是19年放出来,但是是我在18年初的时候写的,所以...特别是在细粒度图像分类领域,深度特征提取技术让其获得了巨大的性能提升。基于...
  • 细粒度图像识别主要是对某个类别的子类进行细分类,例如狗的品种、不同品牌不同型号的车。往往大类总体外观差不多,需要通过一些局部的细节来进行区分,而局部的细节又随着当前目标的姿态不同在图像中的位置也不同,...
  • 见微知著:细粒度图像分析进展

    千次阅读 2017-04-10 16:41:06
    作者简介:魏秀参,南京大学计算机系机器学习与数据挖掘所(LAMDA)博士生,专攻计算机视觉和机器学习。曾在国际顶级期刊和会议发表多篇学术论文,并两次获得国际计算机视觉相关竞赛冠亚军。...有别于通用图像分...
  • 与传统的动作识别不同,AQA 更具有挑战性:动作识别可以从一张或几张图像识别一个动作,AQA 则需要遍历整个动作序列来评估动作的质量。现有的大多数 AQA 方法都是通过视频的深度特征来回归不同的动作质量得分,...
  • 》》大赛背景: **ACCV大会(AsianConference on Computer Vision)是由亚洲计算机视觉联合会举办的两年一次的计算机视觉领域...**本次大赛——ACCV 2020 国际细粒度网络图像识别竞赛,是由南京理工大学、英国爱丁堡大
  • 本文为细粒度分类数据集的处理方法
  • SIGAI特约作者 卢宪凯 上海交通大学在读博士 其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-...细粒度图像分类 (Fine-grained image categorization), 又被称作子类别图像分类 (Sub-category rec...
  • Look Closer to See Better: Recurrent Attention Convolutional Neural Network for Fine-...本文介绍了一种recurrent attention convolutional neural network (RA-CNN),用于细粒度图像分类。本文总体的思想并不...
  • 论文阅读笔记(二)细粒度图像分类

    万次阅读 多人点赞 2017-10-03 12:43:02
    0、参考文献 [1]见微知著 ... ... 1、概要 细粒度图像识别是现在图像分类中一个颇具挑战性的任务,它的目标是在一个大类中的数百数千个子类中正确识别目标。 相同的子类中物体的动作姿态可能大不相
  • 近年来,深度学习的发展极大推动了细粒度分类在交通、医疗、工业、农业、电商等领域的...数据标注:细粒度图像的标注往往需要相关专业知识(如医学等),这给标注带来了极大困难。因此,自监督学习是未来的一大趋势。
  • 论文: Context-aware Attentional Pooling (CAP) for Fine-grained Visual Classification  论文认为大多数优秀的细粒度图像识别方法通过发掘目标的局部特征来辅助识别,却没有对局部信息进行标注,而是采取弱监督...
  • 细粒度视觉分类(FGCV,Fine-Grained Visual Categorization)即识别细分类别的任务,一般它需要同时使用全局图像信息与局部特征信息精确识别图像子类别。细粒度分类是计算机视觉社区最为有趣且有用的开放问题之一,...
  • 允峰 发自 凹非寺量子位 报道 | 公众号 QbitAI当我们还对玫瑰、月季和蔷薇傻傻分不清楚的时候,计算机视觉已经可以在一万种极其相似的自然界物种里精确地分门别类了。图像分类是计算机视觉...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,886
精华内容 1,554
热门标签
关键字:

细粒度图像识别流程