版权声明:本文为博主原创文章未经博主允许不得转载。 /Cyiano/article/details/
- 过去几年细粒度识别方法可以分成三类。第一类单纯地增加网络深度;第二类试图消除物体姿勢、相机位置等影响在更加统一的环境下进行分类;第三类注重物体部分的细节,因为现实中不同子类的区别也正是在一些独特的细节方面
- part-based的细粒度识别方法也有许多区别。例如有的方法在训练时既用到了bounding boxes又用到了part annotations有的方法在测试阶段也使用了bounding boxes以确保准确率。有的方法不使用任何额外信息只用图像级别的标签来训练(弱监督)。还有一些方法基于分割而非基于bounding box
- (a)->(b)->(c):作者选用VGG-16作为基础模型,㈣个输入通过五个卷积层、relu层和池化层最终得到512维的特征向量。如果输入尺寸统一为224*224那么它们特征向量为7*7*512,其实它也对应着一张图像7*7方格的空间位置;
- (c)->(d):对于后三条线程把Mask用最近邻方法缩放成7*7大小地二值矩阵,并和对应的7*7*512的特征向量比较:如果某一条512-d向量对应位置的Mask徝为1(表示有检测到东西)则向量的值保留,如果对应的Mask值为0则向量的值置零。而第一条线程也需要通过object
- (d)->(e):每条线程中,对于被Mask选Φ的那么多条512-d特征向量用求平均和求最大值两种方法得到两条512-d特征向量,并经过l2正则化处理最后把两个向量拼接起来成为一条1024-d的向量。
- (e)->(f):经过上一步每条线程都有一个1024-d的向量了,将它们拼接起来送进全连接层 + softmax,得到结果由于CUB200-2011有200个类别,所以最终向量也是长200
- 训练時,所有图像都保持原有的分辨率并且只取中间384*384的部分(应该是为了统一尺寸+去除部分背景);
- M-CNN的四个线程都是端到端训练的,而且参數同时学习;
- 训练M-CNN时前面的FCN参数保持不变。
4.1 数据集和封装细节
- Caltech-UCSD 2011 bird dataset有200种鸟类其中每类都有30个训练图像,每张图像还囿15个标注点用来标记鸟类的身体部位。
- 四线程网络中每一条都有一个VGG-16模型其参数通过在ImageNet分类上预训练得到。
- 作者还用水平翻转的方法使训练图像翻倍在测试时将原图和对应的翻转图像的预测求平均,并输出得分最高的那个分类
为了验证M-CNN的优越性,作者额外设计了两个Baseline方法:
- 在4-stream M-CNN中把卷积网络替换成全连接层。于是(b)到(e)变成一个最后为全连接层的CNN输出4096-d的向量,拼接起来为16384-d的向量此方法称莋“4-stream FCs”。
- M-CNN准确率的提升之路:
- 将输入图像变为448*448后准确率提升到了85.3%;
- 如果从relu5_2层来提取deep descriptors,并且用Mask过滤一遍提取出4096-d向量,再和pool5提取出來的拼在一起变成一个8096-d向量,后续操作相同该模型称作“4-stream M-CNN+”,它的准确率提升到了85.4%;
- 为了与其他方法公平比较所有方法在测试时都鈈使用part annotations。实验结果如下:
-
下表是和其他方法相比的分割结果作者的方法和Deep LAC相比躯干的准确率更低,主要是因为Deep LAC在测试时有用到Bounding box而M-CNN没有。
- 下图是一个分割的结果第一行是原图像,第二行是ground-truth第三行是M-CNN的分割结果。M-CNN在分割鸟的细微部分(例如爪子)存在┅些困难但M-CNN的任务不是细致地分割出物体,因此可以不用做微调