cv 论文(CNN相关)

时间:2022-07-11 06:32:58

    最近发现很多以前看的论文都忘了,所以想写点东西来整理下之前的paper,paper主要是cv(computer vision)方向的。

    第一篇:Gradient-based learning applied to document recognition。这是1998年Yann Lecun的一篇大作,是研究CNN必看的一篇文章。文中提出的Le-Net5模型很好的识别了Mnist的手写体,此模型也被用到了很多银行的钞票识别上。下面来研究这篇paper的成果。文章参考:http://blog.csdn.net/zouxy09/article/details/8781543

 

    在分析这篇paper之前我们先要讲下CNN的基本原理,卷积神经网络是人工神经网络的一种,随着今年来DL的热潮而重新为人们所关注,卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。

CNN的历史:

    1962年Hubel和Wiesel通过对猫视觉皮层细胞的研究,提出了感受野(receptive field)的概念,1984年日本学者Fukushima基于感受野概念提出的神经认知机(neocognitron)可以看作是卷积神经网络的第一个实现网络,也是感受野概念在人工神经网络领域的首次应用。神经认知机将一个视觉模式分解成许多子模式(特征),然后进入分层递阶式相连的特征平面进行处理,它试图将视觉系统模型化,使其能够在即使物体有位移或轻微变形的时候,也能完成识别。通常神经认知机包含两类神经元,即承担特征抽取的S-元和抗变形的C-元。S-元中涉及两个重要参数,即感受野与阈值参数,前者确定输入连接的数目,后者则控制对特征子模式的反应程度。许多学者一直致力于提高神经认知机的性能的研究:在传统的神经认知机中,每个S-元的感光区中由C-元带来的视觉模糊量呈正态分布。如果感光区的边缘所产生的模糊效果要比*来得大,S-元将会接受这种非正态模糊所导致的更大的变形容忍性。我们希望得到的是,训练模式与变形刺激模式在感受野的边缘与其中心所产生的效果之间的差异变得越来越大。为了有效地形成这种非正态模糊,Fukushima提出了带双C-元层的改进型神经认知机。

   Van Ooyen和Niehuis为提高神经认知机的区别能力引入了一个新的参数。事实上,该参数作为一种抑制信号,抑制了神经元对重复激励特征的激励。多数神经网络在权值中记忆训练信息。根据Hebb学习规则,某种特征训练的次数越多,在以后的识别过程中就越容易被检测。也有学者将进化计算理论与神经认知机结合,通过减弱对重复性激励特征的训练学习,而使得网络注意那些不同的特征以助于提高区分能力。上述都是神经认知机的发展过程,而卷积神经网络可看作是神经认知机的推广形式,神经认知机是卷积神经网络的一种特例。

CNN的结构:

    卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成。

                                                           cv 论文(CNN相关)

    输入图像和三个不同的Filter经过卷积,加偏置,通过一个sigmoid函数得到C1,C1我们称之为Feature Map。然后C1经过sub-samples(相邻四个像素求平均,加偏置)得到S2,S2中的每个Map经过Filter,加偏置,通过sigmoid函数得到C3,C3经过sub-sample得到S4。如此反复,最终,这些像素值被光栅化,并连接成一个向量输入到传统的神经网络,得到输出。

    一般地,C层为特征提取层,每个神经元的输入与前一层的局部感受野相连,并提取该局部的特征,一旦该局部特征被提取后,它与其他特征间的位置关系也随之确定下来;S层是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射为一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。

    此外,由于一个映射面上的神经元共享权值,因而减少了网络*参数的个数,降低了网络参数选择的复杂度。卷积神经网络中的每一个特征提取层(C-层)都紧跟着一个用来求局部平均与二次提取的计算层(S-层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。(这些文中都有说明)

                    cv 论文(CNN相关)    cv 论文(CNN相关)

    CNN除了对shifts和distortions有较好的鲁棒性,CNN还具有传统人工神经网络不具备的一个优势,那就是“权值共享”。关于“权值共享”也许很多人有疑问,其实很简单,我的理解就是对于一个input,虽然有很多感受野(size:5x5),我们都只需要用同一个权值矩阵(Filter)与其相乘,加偏置。也就是说,所有的“感受野”的权值是共享的。这样可能有人就有疑问:“这样我们一副图像所提取的特征不就是相同的了吗”。不错,同一个Filter提取的Feature确实是相同的,但是我们这里可以用不同的Filter啊,这样我们就可以提取我们想要的特征(关于这个特征滤波器的选择,马毅的一篇PCANet中利用PCA提取trianImges的8个主成分,然后用每个主成分构成Filter,取得了非常不错的识别效果。)关于权值共享,这篇博文里面讲的非常清楚。http://blog.csdn.net/zouxy09/article/details/8781543

                                                        cv 论文(CNN相关)

                                                                 (左边:Fully connection 右边:locally connection)

    好了,了解了CNN的相关知识,现在我们可以进入这篇Paper的学习了。

    文章前面所讲到的一些数学优化的算法我们在此略过,直接分析文章的最核心部分,也就是文章给出的那篇网络结构。

                          cv 论文(CNN相关)

   不含输入层,此网络层一共有七层(C1, S2, C3, S4, C5, F6,output),这里我们输入的图片选为32x32(目的是使得手写体的特征都能在每个patch的中间,比如‘7’,最左上角的一个endpoint,右上角的Corner,和下面的endpoint,都刚好在patch的中间)。每一个patch就是一个cv 论文(CNN相关)(感受野)。C1层具有6个Feature Maps,每个Feature Maps连接着input的一个5x5的“receptive field”,这样每个receptive field就有5x5+1 = 26 个参数了。第二层的28*28是这样得到的,input中的receptive field的size是5x5,step为1,所以每行和每列都有(32-5+1 = 28)个神经元(经过sigmoid函数后这是一个具体的数)。所以Layer C1一共有26*6 = 156个parameters,156*28*28=122304个connections。

    从Layer C1到 Layer  C2的过程是这样的。对于C1中的每个Feature Map, 相邻的2x2区域求average,加上一个偏置,并且相邻的2x2区域部重叠。这样每个2x2的区域就有(1+1=2)个参数,整个S2层一共有2x6=12个参数。每个2x2区域有(4+1=5)个connections,所以一共有(4+1)*14*14=5880个connections。

    从Layer S2到 Layer C3要麻烦一些,这里首先要声明,不同于input到C1,这里的S2到C3,并非每个C3中的Feature map都和S2相连接。具体的连接情况如下图所示:

                                                   cv 论文(CNN相关)

    用文中的原话就是:The first six C3 feature maps take inputs from every contiguous subsets of three feature maps in S2。The next six take input from every contiguous subset of four. the next three take input from some discontinuous subsets, finally the last one takes from all S2 features maps.关于为什么要这么做文中也有讲解,具体列出了两个原因(个人不是很懂,具体可看paper)。这样我们C3层一共就有(3*6*26 + 4*9*26 + 6*26 = 1560)个参数,文章中的1516是错误的。一共有1560*100=156000个connections。

    从Layer C3 到 Layer S4分析如上sub-samples所示,一共有(1+1)x16=32个参数,(4+1)*5*5*16=2000个connections。C5的参数个数文中具体给出来的也没有分析,具体分析过程和S2到C3相同。F6层的之所以是84是由输入层决定的(每类有84个样本)。最后,输出层由欧式径向基函数(Euclidean Radial Basis Function)单元组成,每类一个单元,每个有84个输入。换句话说,每个输出RBF单元计算输入向量和参数向量之间的欧式距离。输入离参数向量越远,RBF输出的越大。一个RBF输出可以被理解为衡量输入模式和与RBF相关联类的一个模型的匹配程度的惩罚项。用概率术语来说,RBF输出可以被理解为F6层配置空间的高斯分布的负log-likelihood。

                                                                         cv 论文(CNN相关)

    yi是第i类,xj是第i类的第j个样本。接着我们来计算损失函数:loss function

                                                                           cv 论文(CNN相关)

                                                                          cv 论文(CNN相关)

    接着我们就可以用优化算法求出loss function的最小值,更新权值。。。。。

 

    接下来的两篇文章都是在CNN的基础上做了一些改进,得到了更好的分类效果,这里简单的提下他的思想。。

    第二篇:PCANet: A Simple Deep Learning Baseline for Image Classification?

    这篇文章是马毅等提出来的基于CNN和PCA的人脸识别的一篇文章,在上一篇我们了解了CNN的基本结构后,接下来讲这篇文章刚刚合适。

                                cv 论文(CNN相关)

    这是PCANet的一个结构图,从图中可以看出其实它就是一个卷积网络的形式,唯一不同的是Le-Net5所采用的权值(Filter)是通过训练过程不断迭代优化得到的,而PCANet所采用的Filter是通过直接提取“receptive field”得到maps, 然后利用PCA提取主成分,每个主成分就是一个Filter。接着把训练样本和测试样本通过这个已知Filter的网络提取Features,做分类。这样做的好处是,我们不用通过大量的迭代计算来求出最优的weights,节省了很多计算开销。同时线下训练出Filters,在实际做测试分类时也可以节省时间消耗。

    对于N个 input image。我们取size = 8x8,step = 1的一个patch去遍历input,得到一个Feature map,对这个Feature map,我们用PCA求出他的8个主成分,然后将8个主成分resize成8个Filter,然后像CNN那样得到8个 Feature maps。接下来的第二层和第一层的处理一样,到第三层我们得到了64个Feature maps。统计着64个Feature maps 得到8个直方图,这就是我们提取出来的Features 可以用来分类。

 

    第三篇:Face Recognition: A Convolutional Neural-Network Approach (Steve Lawrence)

    这篇文章我看的很粗略,文章的主要思想就是把传统的CNN的sub-sample做了一些改进。Le-Net5的结构中我们的sub-samples直接取相邻的4x4的patch求average,加偏置,然后通过一个sigmoid函数得到下一层的map,而这里作者改为用一个SOM算法得到一个缩放的作用。这样做的好处是下一层可以比较准确的保留上一层的信息,同时保持网络的拓扑结构不变,文章的大量篇幅都用在了SOM算法的介绍上。 下图就是SOM算法代替sub-sample的一个过程:

                                                                      cv 论文(CNN相关)

下图是改进后的卷积网络图

                                                 cv 论文(CNN相关)

 

总体流程图

                                                                  cv 论文(CNN相关)

 

 

    这几篇文章都是和CNN有关的,前一篇是传统的CNN网络结构,后面两篇是对CNN的一个改进,三篇放在一起看,融汇贯通,就不难理解卷积神经网络的精髓所在了。在这里多说一句,之所以卷积是有效的,这要归结于生物上的发现,也涉及到 sparse coding的相关知识。下一个博文我将主要讲解看过的一些sparse coding相关的文章,希望大家继续关注。。。。。