Learning a Discriminative Filter Bank within a CNN for Fine-grained Recognition,细粒度图像识别

论文:Learning a Discriminative Filter Bank within a CNN for Fine-grained Recognition

简介与方法

本文方法看完有那么一点SSD的既视感,作者在论文中也提到灵感来源于SSD。总体上来看就像是一个单anchor单尺度(当然可以多尺度)的SSD来检测kM个目标,M是类别数,k是每个类别要检测的part数,最后再结合这些part来做最终的分类。也就是说网络关注的是每个anchor是否是某个part。

结合NTS-Net来看,NTS使用RPN来检测某个部分的信息量大小,它不关注这个anchor是什么,只关注这个anchor是否重要信息量是否多。就像faster-rcnn中RPN,不关注anchor是哪个类别,只关注这个anchor是否是个物体。fine-grained也有点类似检测的两段跟一段的方法了。本文属于一段方法,所以计算量理论上也会少一些。

本文的总体想法很简单直接,看下图,cnn在某一层的feature map(C x H x W),每一个像素的特征(C x 1 x 1)也就是一个特征向量,其感受野对应原图的某一个区域,相邻像素对应原图的stride距离。故训练一个C x 1 x 1的卷积核,来检测某种特定的局部特征,比如鸟的某种部位,车的某个位置,来进行细粒度的识别。论文里叫mid-level representation,因为是增强中间层的特征(太往后的对应的感受野太大了)。经过此卷积核卷积后可以得到一个响应图,响应最大的地方是这个局部特征可能在的位置,最大的响应通过全局最大池化GMP得到。

Learning a Discriminative Filter Bank within a CNN for Fine-grained Recognition,细粒度图像识别_第1张图片

论文举例如果用VGG-16的话,上面的Feature Map用conv4_3,对应的感受野是92x92,stride是8。

整个网络的结构(假设基于VGG):

Learning a Discriminative Filter Bank within a CNN for Fine-grained Recognition,细粒度图像识别_第2张图片

分为三个部分,左边两个分支是Asymmetric Two-stream,其中最左边即正常的vgg往后的部分,用于抽取全局特征,叫G-stream,并加上softmax跟分类Loss。中间分支是mid-level特征,叫P-stream。Conv6即要学习的Cx1x1的卷积核,一共kM个,M为类别数,k为每个类别要检测part数。GMP是全局最大池化,将每个卷积核检测到的最大响应pooling出来,为kM维响应特征。之后加softmax分类器跟分类Loss。

所以按这个方法的意思,某种局部特征的位置并不重要,存不存在是重要的,中间分支仅通过这个特征的“存在与否”作为分类依据。例如是否存在某种车标、某种鸟的头部特征等。而NTS-Net不同的地方在于,它将检测到的某个局部从原图抠出来,再输入网络得到这个局部的特征,并组合多个部分的特征进行分类,使用的是“局部信息”作为分类依据。这是两个方法在后端的不同点。

但P-stram仅仅这么训练是学不到某种局部特征的检测器的,这个分支看起来也仅仅是加了个常规的卷积层跟池化层而已,所以作者细化了这部分的训练:

Learning a Discriminative Filter Bank within a CNN for Fine-grained Recognition,细粒度图像识别_第3张图片

 将每组的k个响应,求均值之后再做M类的分类,目的是使得这k个响应属于某个特定的类别。这样在优化的时候可以使这k个卷积核更加关注于找到易于分此类别的特征。

最后一个重点就是这kM个卷积核的初始化,纵观整个网络,抛开softmax分类器的参数外,新的参数就是这kM个Cx1x1个卷积核的参数了,其他参数都用imagenet预训练的参数初始化。然而这kM个卷积核是有特定意义的,即某种特征的检测器,随机初始化并不好。考虑前面说的这些卷积核与conv4_3最大响应的特征有关,作者采用如下初始化方式(假设初始化第i类的k个卷积核):

  • 先用第i类数据过VGG(imagenet预训练的),在conv4_3的feature map(c x h x w)上,对C维度特征求L2 norms,得到一个h x w的强度map。
  • 用nms在这个强度map上找到n个响应最大位置。收集对应的n个c维特征。
  • 所有i类数据跑完后,将得到的c维特征求k-mean得到k个聚类中心,白化跟L2归一化后作为k个卷积核的初始值

Extension

也可以类似SSD那样进行多尺度的扩展。

Experiments

实验结果看起来也不错。

Learning a Discriminative Filter Bank within a CNN for Fine-grained Recognition,细粒度图像识别_第4张图片

Learning a Discriminative Filter Bank within a CNN for Fine-grained Recognition,细粒度图像识别_第5张图片

Learning a Discriminative Filter Bank within a CNN for Fine-grained Recognition,细粒度图像识别_第6张图片

 G、P分支的作用,以及GMP替换成GAP的差别,初始化作用等实验:

Learning a Discriminative Filter Bank within a CNN for Fine-grained Recognition,细粒度图像识别_第7张图片

 

你可能感兴趣的:(Fine-Grained,论文阅读)