泛读文献:
- 1989_NC_LeCun_Backpropagation applied to handwritten zip code recognition
经典文章,第一次将反向传播算法应用于神经网络上。核心设计思路在于:尽可能减少free number的数量,而无需过多减少计算量。
另外,文章提出直接用归一化后的图片输入给网络,而不是将提取过特征的图片输入,证明了反向传播能够处理大量low-level的信息。
输入是一个16*16的归一化之后的图片,分为10个种类。
提出了权值共享,为什么?因为在一个地方重要的特征,在另一个地方可能也很重要,所以权值共享。但要注意偏置是不共享的。
随机初始化权值,激活函数为tanh,使用随机梯度更新算法。
还介绍了DSP的实现。
文章中总结特点:
1.不需要精心设计特征提取,直接通过网络学习即可,所以预处理较少。
2.大量连接但是参数很少(应该是因为使用的是卷积而不是全连接网络)
3.网络结构和权重的约束被设计成能体现任务的结构信息。(没太看出来)
4.训练高效
- 2013_TPAMI_Farabet_Learning Hierarchical Features for Scene Labeling
也是Lecun他们组的工作,将CNN用于Scene Labeling。
文章提出来Scene Labeling的挑战在于:需要将检测,分割,多类别识别的问题在一个过程中结合起来。
有两个主要问题:①怎样去产生好的对视觉信息的内在表征。②怎样去用上下文信息去保证自详细性的解释性。
他们发现,标注每个像素是困难的,因为某个像素不仅和周围有关,同时和非周围的其他地方有关,所以他们提出需要用多尺度的卷积神经网络。
整个方法分为两个步骤:
- 多尺度的卷积特征表示
- 基于图的分类(超像素,基于超像素的CRF分类)
- 2014_CVPR_Girshick_Rich feature hierarchies for accurate object detection and semantic segmentation
即RCNN的原文,但是FCN中提到了RCNN中也可做语义分割,所以着重把语义分割的部分看了一下,目标检测部份的都很熟悉了。
由于语义分割的关键技术在于区域分类(是由于当时语义分割都是基于区域的分割然后进行分类的),所以RCNN很容易整合到当时已有的框架中去。具体来说整合到了一个叫做O2P的一个框架中(O2P用了constrained parametric min-cuts,也即CPMC。每个图片生成了150个region proposals,然后每个类别预测。针对每个类别,使用SVR)
他们分析得到好的效果是由于CPMC的效果较好,和多种特征的second-order pooling(如SIFT和LBP)
他们扩展了PASCAL的训练集,然后用于训练。不过RCNN主要还是做的特征提取工作,分为两种特征提取手段,一种是针对目标crop出来的区域进行特征提取,另一种是针对目标的mask区域进行特征提取。
总结一下,RCNN做语义分割是为了展示他们有好的特征提取能力。
- 2015_TPAMI_He_Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
是Kaiming He的SPPnet原文。
出发点在于,当时几乎所有网络,都需要一个固定大小的图片输入(224*224),而这个设定是非常“人为的”。同时,固定大小的输入目前有两种模式,第一个就是将图片裁切一个224*224的patch,或者将图片warp到224*224的大小。裁切的话,对于较大的目标只能够包含目标的一部分,warp的话,对于一些形状(如长条形状的物体)有很大的形变影响,使得其特征发生改变。
经过分析,卷积层是不受图像大小变化而影响的,可以容忍不同尺寸的输入。关键问题在于全连接层,全连接层需要将特征映射到固定维度上,导致一个网络中,全连接层的输入必须保持一致,这也是之前网络必须保持同样大小输入的关键所在。
所以他们提出了spatial pyramid pooling(SPP),存在于卷积层和全连接层中间,如图:
关键操作就是在不同尺度的滑窗大小上进行pooling,但是保持滑窗大小占图像的比例一致,所以最后pooling完毕之后能够出现同样维度的特征向量,进而可以输入fc层进行分类。
在训练方面,还讨论了fix住图像输入训练和每个epoch更换图像尺寸的训练方法。(但是没有提到一个epoch中不同尺寸图片同时训练,应该是试过但是网络很难收敛)
- 2018_ICLR_Huang_Multi-Scale Dense Networks for Resource Efficient Image Classification
DenseNet的作者,清华大学黄高。
在人识别图片的时候,是很明显有简单图片和难的图片的区别的。比如下面两张马的图片。
左边的图片是很简单很普通的马,但是右边这个图片人也需要一定的时间来反应一下,才会做出这个是马的判断。
在图像分类问题中,有一个一直存在的问题:不管是什么图片,网络都会是用同样的计算量,经过同样的过程,花费同样的时间,得到了一个结果。所以网络将难的问题和简单的问题做了同等对待,进而导出结论:网络计算存在冗余(当然如果照这么说的话,我觉得也可能是存在难的图片计算量不够?不过网络的拟合能力应该足够去拟合这个问题了,主要肯定还是计算量冗余的问题)
进而提出了这个模型Multi-Scale DenseNet(MSDNet),模型分为三个不同尺度,在模型的底部有很多个分类器,如图:
通过计算,将简单图片从前面的分类器中直接出去,复杂的图片从后面的分类器中出去,以减少计算量。
文中出现两个贯穿全文的名词:anytime prediction和budgeted batch classification。这里捎带解释下,不明白的话也不大影响文章核心思想的理解。在anytime prediction中,对于每一张输入图像x都有一个计算资源限制条件(computational budget)B>0,相当于每次给模型输入一张图像,然后根据计算资源限制来给出预测结果。而在budgeted batch classification中是对每一个batch的输入图像都有一个computational budget B>0,假设这个batch里面包含M张图像,那么可能简单图像的耗时要小于B/M,而复杂图像的耗时要大于B/M。对上面这两个词有不同理解的同学欢迎讨论。在文中测试的时候作者的M取值是128(ImageNet数据集)和256(CIFAR-100数据集)。(参考https://blog.youkuaiyun.com/u014380165/article/details/78006893 )
- 2014_ECCV_Gupta_Learning Rich Features from RGB-D Images for Object Detection and Segmentation
深入做RGB-D图像为输入的各种图像理解任务(目标检测,实例分割,语义分割)
可能是因为时间较早,他们对于实例分割和语义分割的实现顺序有些许不同?
不过本篇论文最关键的点在于:CNN不太可能从单一的深度图中学习到一些关于深度的属性信息(如后面提到的几个属性),所以仅仅将Depth图像(Sparsity)进行输入是不够的,需要对于Depth图像进行处理,生成水平视差(horizontal disparsity)、离地高度(height above ground)、像素局部表面法向量和重力方向的夹角(angle with gravity),并将这些图像映射到0-255之后concat起来作为深度信息输入到CNN中,最终学到关于深度的特征(Rich-feature)。
由于发布时间比较早,所以CNN主要还是适用于提取特征,最终分类是通过SVM算法来的。
如图所示,以RGB和Depth同时为输入,进行contour detection和region proposal,然后对深度图利用该作者以前的算法来生成前面提到的Height和Angle属性图,接下来关于深度的三个通道图输入到DepthCNN中提取出关于深度的特征,RGB图像输入到RGBCNN中提取图像特征,最终一起输入SVM来进行分类。
比较令我感兴趣的是他们传统方法如何做分割,本篇文章做实例分割的方法是,每个类别取出前5000个检测结果。对于每个结果都计算一遍特征,之后将其输入至随机森林算法中获得一个50*50的前景置信图(foreground confidence map),然后把置信度高的区域通过超像素映射回到原图中去(这里面是有一个阈值进行判断)。