论文来自南京大学计算机软件新技术国家重点实验室
(《Pattern Recognition》) Mask-CNN:Localizing parts and selecting descriptors for fine-grained bird species categorization
(NIPS 2016) Mask-CNN:Localizing Parts and Selecting Descriptors for Fine-Grained Image Recognition
细粒度(fine-grained)图像识别主要有两个难点:
1)类间差异小(都属于同一个物种下的小类)
2)类内差异大(受姿态、尺度和旋转等因素影响)
这篇文章主要证明“selecting useful deep features”对细粒度识别有很大的作用。文中提出的Mask-CNN模型是“全卷积网络(FCN)”,并基于part annotations利用了FCN来:
①定位关键部位(头部head、躯干torso);
②生成带weighted object/part mask。
由于丢弃了全连接层,所以Mask-CNN相对于其他算法,速度更快效率更高;在两个鸟类数据集上取得了state of art的结果。
细粒度识别任务(鸟、花、车辆识别)与传统的分类任务相比,其更多的是从"critical parts of object"获得信息。
最直接的表示物体部位信息的方法就是利用“deep convolutional features”,而在此之前所有“part-based fine-grained approaches”都是直接利用的卷积特征,并没有对特征进行评估、筛选。
训练时需要两种label:
① part annotations :先分成两个子集(头、躯干),然后将覆盖part子集的最小矩形作为 part mask(GT)。剩下的都是background。
利用FCN将part localization看做是 three-class segmentation task,从而可以在测试阶段,生成weighted mask用在 part localization 和 useful feature selection。有了part-mask,合起来就是object-mask。
② image-level label
结合上面的网络结构示意图可以知道,在最后的卷积层输出feature map后,利用前面得到的part-mask和object-mask作为权重,与对应像素点点乘。然后再分别进行max pooling和average pooling得到最终的feature vector。
M-CNN的优点和主要贡献:
细粒度识别方法主要分为三种:
其他的part-based方法在测试时,往往还需要bounding box做辅助,但是本文方法不需要;还有weakly-surpervised part-based方法(利用Heatmap)但是结果都没本文的方法好;本文的中间特征维数低且没有全连接层,所以速度快,效率高。
训练FCN,这里用到的是FCN-8s.
训练FCN时,为了提高效率,所有的训练和测试图片都保持原始的分辨率;训练时从原图的正中间crop出384x384的Image patch作为FCN的输入,躯干和头部的最小覆盖矩阵作为ground truth,其余视为背景部分。
Inference阶段,FCN输出对应整体、头部和躯干的三个heat maps(文章中说in the same size as the original input image,可我还是不清楚到底是origin image还是crop后的input image大小。)。最终预测出来的segmentation结果作为weighted mask在特征选择阶段会用到。下面是FCN在Inference阶段的输出:
可以看出虽然ground truth并不准确(因为是最小矩形框),但是网络的输出还是比较精准的。后面的实验表明,object/part-mask对后面的细粒度识别有非常大的改善。
分为三个支流,以original image这个输入的分支举例:
先将输入resize到hxh(h=224/h=448),以VGG 16作为基本模型,丢弃全连接层,即最后利用的是pool5输出的features(7x7x512)。同时将上一步中FCN输出的object-mask代入(通过双线性插值将object-mask resize到7*7)。
接下来就是feature selection :" the descriptor should be kept by weights when it locates in the object region. If it locates in the background region, that descriptor will be discarded."(阈值好像没说。)
然后分别进行maxpooling和average pooling得到(512+512)-d的特征向量。
将三个分支分别输出1024-d的特征向量进行连接并送入分类器中进行分类(测试时发现logistic regression比softmax效果要好些).
[To facilitate the convergence of three- stream CNNs, each single stream corresponding to the whole image, head and torso is fine-tuned on its input images separately.]
两个细粒度图像识别数据集:
BirdSnap
先介绍个广泛使用的细粒度标准数据集 :
Caltech-UCSD Birds-200-2011 | BirdSnap | |
categories | 200 | 500 |
training images | 5994 | 47386 |
test images | 5794 | 2443 |
label type | part annotations + image lable | image label |
实验结果当然都是state of art了,下图。
接下来就是一些对比实验,主要还是之前提到的几点: