1、 传统图像分类优缺点
图像分类的传统流程涉及2个模块:特征提取和分类。
传统的特征提取是从原始图像中提取手工设计的特征,如Haar、LBP、HOG等,然后采用分类器对其进行分类(如SVM、boost、cascade)。其缺点有如下几点:
1) 其属于浅层学习,对特征的刻画能力是有限的。如果选择的特征缺乏代表性,模型的准确率就会大大降低;
2) 其需要人力不断调整模型参数,不断迭代才能达到比较好的效果,所以开发周期比较长。
3) 该方法和人类学习识别物体的过程不一致,具有局限性。
当前一个比较好的传统特征提取方法是使用多种特征提取器,然后对其进行特征组合,使得特征根据有代表性。
2、 为什么要使用DNN模型
深度学习相当于一个多层的感知机,其理论基础是模仿人的视听觉信息进入大脑后在不同皮层上的处理。其对图像逐层进行自动的特征提取,每层的特征都不一样,其对目标的特征具有更好的刻画能力。所以对于大数据的训练,深度学习方法比较有优越性。
其缺点是计算量大,时间效率是一个问题。
3、 几种常见的DNN网络构架:
3.1 AlexNet
其证明了CNN在复杂模型下的有效性,推动了DL的发展。
AlexNet与传统的CNN(比如LeNet)的重要改动如下:
1) 数据增强。包括水平翻转、随机裁剪、平移变换、颜色、光照变化。
2) Dropout。Dropout方法和数据增强一样,都是防止过拟合。其是ALexNet一个很大的创新。
3) Relu**函数。用Relu代替了传统的Tanh和Logistic,其对数据进行非线性变换,一定程度上缓解了过拟合并且计算简单。
4) LRN(Local ResponseNormalization)。其是用临近的数据做归一化,该方法贡献了1.2%的Top-5的错误率。
5) 多GPU并行(最重要),提高时间效率。
3.2 VGG16
其采用了AlexNet的构架,其在ImageNet的Top5的准确度为92.3%。其改进之处为:
1) 网络更深。
2) 采用连续几个3x3的卷积核代替Alexnet中较大的卷积核(11x11, 5x5)。对于给定的感受野(与输出有关的输入图片的局部大小),采用堆积的小卷积核优于大的卷积核,因为多层非线性层可以增加网络深度来保证学习更复杂模式,从而得到更复杂和更有代表性的特征,并且采用的参数更少。
3.3 googleNet/Inception
VGG在ImageNet上表现良好,但其计算量大,所以并不高效。googleNet基于这样的理念:由于图像在相邻区域存在相关性,会产生信息冗余,所以其在深度网络中大部分的**值是不必要的(为0),因此,高效的深度网络架构应该是**值之间是稀疏连接的,这意味着512个输出特征图是没有必要与所有的512输入特征图相连。
因此其提出了inception的模块,这个模块使用密集结构来近似一个稀疏的CNN。其特点为:
1) 其增加网络宽度(并联),并且每一个支路的卷积核数量设置得非常小。
2) *使用瓶颈层(实际上为1x1的卷积)来降低featureMap的通道数,然后采用大的卷积核进行卷积,从而减少计算量。
3) 使用了不同大小的卷积核来抓取不同的视野。
4) *在最后的卷积层后使用了全局均值池化层替代全连接层,大大减少了参数的数量。要知道在AlexNet中,全连接层参数占整个网络总参数的90%,使用一个更深更大的网络使得GoogLeNet移除全连接层之后还不影响准确度。其在ImageNet上的top-5准确度为93.3%,但是速度还比VGG还快。
3.4 ResNet
从前面看见,随着网络深度增加,网络的准确度应该同步增加。当网络增加到一定程度的时候,因为参数更新时,梯度从后面向前面传播的,增加网络深度后,比较靠前的层的梯度会很小,这意味着这些层基本上学习停滞了,这就产生梯度消失问题。同时当网络更深时意味着参数空间很大,优化问题变得很难,因此简单地去增加网络反而会出现更高的训练误差。
深度网络训练问题称为退化问题,因此引入残差单元在输入和输出之间建立了一个直接的连接,这样新增的层仅仅需要在原来的输入层基础上进行学习新的特征,会比较容易。残差单元如下图所示:
与GoogLeNet类似,ResNet也最后使用了全局均值池化层。利用残差模块,可以训练152层的残差网络。其准确度比VGG和GoogLeNet要高,但是计算效率也比VGG高。152层的ResNet其top-5准确度为95.51%
3.5 denseNet的基本结构
https://www.leiphone.com/news/201708/0MNOwwfvWiAu43WO.html
DenseNet是一种具有密集连接的卷积神经网络。在该网络中,任何两层都有直接的连接,也就是说网络每一层的输入都是前面所有层的输出的并集,而该层所学习到的特征图也会被直接传给其后面所有层作为输入。下图是DenseNet的一个示意图
如果记第I层的变换函数为H_I(通常对于一组或者两组Batch-Normalization,Relu和Convolution的操作),输出为x_I,那么用下面的公式描述DenseNet每一层的变换:
X_I= H_I([x_0, x_1, …, x_{I-1}])
DenseNet的想法很大程度上来源于去年在ECCV上的一个叫做随机深度网络(Deep Networks with stochastic depth)工作。当时其提出一种类似于Droupout的方法来改进ResNet。其发现训练过程中随机地扔掉一些层,可以显著的提高ResNet的泛化性能。这个方法的成功至少给我们两点启发:
1) 神经网络其实并不是一个递进层级的结构,也就是说网络的某一层不仅仅依赖于上一层的特征,而可以依赖于前面层学习到的特征。
2) 其在训练过程中随机扔掉很多层也不会破坏算法的收敛,说明了ResNet具有比较明显的冗余性,网络中每一层都只提取了很少的特征(即所谓的残差)。
DenseNet的设计正是基于上述2点。让网络的每一层与前面层相连,实现特征的重复利用;同时把网络的每一层设计得特别窄,即只学习非常少的特征图(最极端的情况是每层只学习一特征图),达到降低冗余性的目的。
DenseNet的优点是省参数、省计算及扛过拟合。
总结
随着越来越复杂的架构的提出,一些网络可能就流行几年就走下神坛,但是其背后的设计哲学却是值得学习的。这篇文章对近几年比较流行的CNN架构的设计原则做了一个总结。译者注:可以看到,网络的深度越来越大,以保证得到更好的准确度。网络结构倾向采用较少的卷积核,如1x1和3x3卷积核,这说明CNN设计要考虑计算效率了。一个明显的趋势是采用模块结构,这在GoogLeNet和ResNet中可以看到,这是一种很好的设计典范,采用模块化结构可以减少我们网络的设计空间,另外一个点是模块里面使用瓶颈层可以降低计算量,这也是一个优势。这篇文章没有提到的是最近的一些移动端的轻量级CNN模型,如MobileNet,SqueezeNet,ShuffleNet等,这些网络大小非常小,而且计算很高效,可以满足移动端需求,是在准确度和速度之间做了平衡
转载网址:
https://zhuanlan.zhihu.com/p/32116277
https://www.jiqizhixin.com/articles/2017-12-18-2
[参考文献]
[1] DE Rumelhart, GE Hinton, RJ Williams, Learning internal representations byerror propagation. 1985 – DTIC Document.
[2] Y. LeCun , B. Boser , J. S. Denker , D. Henderson , R. E. Howard , W.Hubbard and L. D. Jackel, “Backpropagation applied to handwritten zip coderecognition”, Neural Computation, vol. 1, no. 4, pp. 541-551, 1989.
[3] Kaiming He, Deep Residual Learning,http://image-net.org/challenges/talks/ilsvrc2015_deep_residual_learning_kaiminghe.pdf
[4] Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learningapplied to document recognition. Proceedings of the IEEE, 86(11):2278–2324,1998.
[5] A. Krizhevsky, I. Sutskever, and G. Hinton. Imagenet classification withdeep convolutional neural networks. In Advances in Neural InformationProcessing Systems 25, pages 1106–1114, 2012.
[6] Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott E. Reed,Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, Andrew Rabinovich: Goingdeeper with convolutions. CVPR 2015: 1-9
[7] Karen Simonyan, Andrew Zisserman: Very Deep Convolutional Networks forLarge-Scale Image Recognition. CoRR abs/1409.1556 (2014)
[8] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Deep ResidualLearning for Image Recognition. IEEE Conference on Computer Vision and PatternRecognition (CVPR), 2016
[9] 一些对应的caffe实现或预训练好的模型:https://github.com/BVLC/caffe https://github.com/BVLC/caffe/wiki/Model-Zoo
[10] K. Fukushima. Neocognitron: A self-organizing neural network model for amechanism of pattern recognition unaffected by shift in position. BiologicalCybernetics, 36(4): 93-202, 1980.
[11] Densely Connected Convolutional Networks[J]