2018.4.29 星期日
[1]Razavian A S, Azizpour H, Sullivan J, et al. CNNFeatures Off-the-Shelf: An Astounding Baseline for Recognition[C]// IEEEConference on Computer Vision and Pattern Recognition Workshops. IEEE ComputerSociety, 2014:512-519.
1. 目标:
过去的图像方面的识别技术多数是基于一套基本的流程:数据预处理->模型描述->特征提取->分类器等等。而CNN很大程度上包含了整个过程,可以认为CNN的前面几层都是一种层次化的特征提取器,而接近结尾的层(如softmax等)则担当了分类器的作用。
那么考虑下面,假设有一个现成的,针对某个具体问题A训练好的CNN,仅仅使用它的前几层来提取图像信息,再配合使用一些经典分类器(SVM等),是否可以在其他的问题B,C上也得到比较好的结果呢?
2. 方法:
特征提取用的CNN选择的是OverFeat[1],一个在ImageNet ILSVRC 2013上训练的神经网络,结构如下:
特征提取使用的是OverFeat从第一层到第一个全连接层的网络,会将图像映射到一个4096维的特征向量。这个向量会被L2 normalize。分类器使用的是一个简单的SVM。整个过程被称为CNN-SVM,另外还有把训练数据进行扩充(augment)得到的新的CNNaug-SVM。
3. 实验:
Image Classification:
实验目标是验证图像分类的准确性,使用的是PascalVOC数据集,包含20类图片共约10000张,被识别的目标不一定在图像中央,总体难度要高过ImageNet。数据集提供了bounding box,不过实验中未使用。
结果如下:
可以看出,CNN-SVM的结果全面优于其他方法。高出约10%。关于CNN的层数与准确率的关系,实验结果如下:
横轴是层数,纵轴是准确率。这里的层数也包含了relu,pooling等层,因此到全连接层为止共23层。可以看出层数对准确率的影响基本是正增长。不过在relu层由于部分信息的损失(负数为0)而有所下跌。
另一个Image Classification的实验是MIT-67 indoor scenes数据集。共67类15620张图。主要是各类场景的识别。由于不同场景中经常可能出现相同物件,因此难度非常高。实验结果如下:
可以看出准确率超过了许多方法。唯一一个比较接近的结果也使用了CNN。从confusion matrix中可以看出,识别的准确率还是非常高的,并不是低空掠过的那种。少数识别错误的类型都是些人类都有可能搞错的类型(如书店-图书馆)。
Fine grained recognition:
细粒度识别,指的是在同类物体中识别子类,比如在猫科中识别 [布偶猫,孟加拉虎,哆啦A梦] 这样,是一个应用型很强的研究方向。
实验使用的数据集是Caltech-UCSDBirds (CUB) 200-2011数据集和Oxford 102 flowers数据集。前者是包含200种鸟类共11788张图片的鸟类数据集,包含各种标定信息(实验中未使用)。后者是一个包含102种花朵,每种40~258张的花卉图片,带有分割标定(实验中未使用)
实验结果如下图:
上图是鸟类,下图是花卉,可以看出,即使在没有使用额外标定信息的情况下,结果依然可以超过大多数的方法(甚至这些方法是用标定)
4. 总结:
仅仅使用现成的CNN作为特征提取器,在各个图像处理任务中达到的效果依然十分惊人,作者得到的结论是:现在是CNN的天下了。