论文阅读笔记 | Mask-CNN

论文来自南京大学计算机软件新技术国家重点实验室

(《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

Abstract

细粒度(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的结果。

Introduction

细粒度识别任务(鸟、花、车辆识别)与传统的分类任务相比,其更多的是从"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。

论文阅读笔记 | Mask-CNN_第1张图片

     ② image-level label

论文阅读笔记 | Mask-CNN_第2张图片

         结合上面的网络结构示意图可以知道,在最后的卷积层输出feature map后,利用前面得到的part-mask和object-mask作为权重,与对应像素点点乘。然后再分别进行max pooling和average pooling得到最终的feature vector。

M-CNN的优点和主要贡献:

  • 最先对feature进行select的
  • 丢弃了 全连接层 ,使得网络计算效率更高;与其他算法相比,利用了更少的特征维数;在数据集上取得最好的结果。

Related Work

细粒度识别方法主要分为三种:

  • Developing powerful deep models to learn a more discriminative feature representation
  • Aligning the object to eliminate pose variations and the infulence of camera position
  • Focusing on part-based representations (本文思路)

  其他的part-based方法在测试时,往往还需要bounding box做辅助,但是本文方法不需要;还有weakly-surpervised part-based方法(利用Heatmap)但是结果都没本文的方法好;本文的中间特征维数低且没有全连接层,所以速度快,效率高。

The Mask-CNN Model

Learning Object and Part Masks

训练FCN,这里用到的是FCN-8s.

训练FCN时,为了提高效率,所有的训练和测试图片都保持原始的分辨率;训练时从原图的正中间crop出384x384的Image patch作为FCN的输入,躯干和头部的最小覆盖矩阵作为ground truth,其余视为背景部分。

论文阅读笔记 | Mask-CNN_第3张图片

Inference阶段,FCN输出对应整体、头部和躯干的三个heat maps(文章中说in the same size as the original input image,可我还是不清楚到底是origin image还是crop后的input image大小。)。最终预测出来的segmentation结果作为weighted mask在特征选择阶段会用到。下面是FCN在Inference阶段的输出:

论文阅读笔记 | Mask-CNN_第4张图片

可以看出虽然ground truth并不准确(因为是最小矩形框),但是网络的输出还是比较精准的。后面的实验表明,object/part-mask对后面的细粒度识别有非常大的改善。

Training Mask-CNN

分为三个支流,以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.]

Experiments

两个细粒度图像识别数据集:

Caltech-UCSD Birds-200-2011  

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了,下图。

论文阅读笔记 | Mask-CNN_第5张图片

接下来就是一些对比实验,主要还是之前提到的几点:

  • feature selection非常有用
  • 三个分支对结果都有不同程度的贡献
  • max pooling + average pooling 比任意使用其中一个的结果都要好
  • MASK-CNN的三个分支不能共享前面的卷积层,否则效果变差

你可能感兴趣的:(深度学习,#,计算机视觉,fine-grained,part,annotations)