神经网络入门(二)卷积网络在图像识别的应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liyaohhh/article/details/50363184

卷积的概念





      线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。做法很简单。首先,我们有一个二维的滤波器矩阵和一个要处理的二维图像。然后,对于图像的每一个像素点,计算它的邻域像素和滤波器矩阵的对应元素的乘积,然后加起来,作为该像素位置的值。这样就完成了滤波过程。具体地说一个滤波器就是一个n*n的矩阵,和对应的图像进行卷积,可以得到图像的大致特征,例如这个滤波器可以得到右偏45度特性的等等。下图就是滤波器的操作。
                                                               
        对图像和滤波矩阵进行逐个元素相乘再求和的操作就相当于将一个二维的函数移动到另一个二维函数的所再位置。这个操作叫做卷积操作或者协相关,但是要注意的是,协相关需要先对卷积核进行180度的反转。这两个操作是属于线性相关的,具有平移不变性,也就是说,图像的A到图像B,图像B的操作是图像A中相邻像素经过滤波器加和得到的。对于滤波器,简单的说几点,每一个滤波器最好是奇数*奇数,因为只有这样,才可以找到中心点,滤波器的元素之和是1,意味着图像的亮度在变换前后没有太大的变化,如果大于1,图像就会变亮,否则就会变暗。对于滤波之后的结果,可能出现大于255或者小于0的,我们把它当做0或者255来描述。这里仅仅介绍了简单和卷积操作,其他的例如图像的锐化,边缘检测等等,参考大神的博客




卷积神经网络的简单介绍




          有一段时间,神网络出现很不受欢迎,因为神经网络可以做到的事情,SVM,逻辑回归,随机森林都可以搞定,这些算法的思想简单理解,也不容易出现过拟合。但是神经网络就有所不同了,他虽然可以摸你任何的连续性的函数,但是也仅仅是一层隐含层,它容易过拟合并且计算速度慢耗时间,就不受到欢迎。知道科学家开始慢慢的研究猫的视网膜和神经突触的关系之后,慢慢的神经网络就开始复活了,变得如此的牛掰deep learning就是从它引申出来的。深度学习领域最早开始的莫过于卷积神经网络在图像识别领域的应用。我们在认识他之前,先来看看这玩意儿是如何工作的。如下图所示。
                                   



            如上图所示,是一个简单的图像识别的案例。在这里前面的CONV就是卷及操作  ,我们可以简单的理解成为在一幅图图像上用了10个卷积核从而产生了第一层,REUL就是max(0,thresh)函数,就是说,大于thresh的就是255,否则就是0。POOL操作就是把上一层的结果进行放缩,例如把上一层的2*2邻域内的像素相加,加biase,作用于sigmoid函数之后的结果。之后我们会来详细的探讨这些操作。最后呢有一个softmax回归。就是对应于逻辑回归,softmax可以是多分类器。会发现是一个汽车的概率最大了,我们认为这个输入的图片就是汽车。哈哈,就是这么神奇。



卷积网络的各个概念介绍



        卷积操作





              哈哈,这里,我们来看看上面说的那些概念都是啥东西。我们都从最简单的案例来看看。

            
 
             

        局部感受野:


                上面左边的那个图片:输入时32*32*3的输入像素,是一个3d图像,首先看看,如果卷及操作上去就连接输入图片的全部神经元(一个像素叫做一个神经元)是不切实际的,这个和实际也还是相符的,我们人观察事物都是从局部的特征去抽取麻,但是需要注意的是,这个卷及操作一下对应的三个维度的操作。例如,输入32*32*3的像素,我们的滤波器是5*5的卷积核,每一个卷基层上有对应5*5*3个权重,也就是说你一下应该对应的是5*5*3的3维的像素区域,而不是5*5的区域,懂了吧,哈哈。每一5*5的滤波器我们认为有25个权重值。右边的那个图片大家很熟悉吧,他应该是对应的POOL操作的。
        

      空间映射

                  上面我们讨论了如何进行卷积操作,这里来谈谈输入的像素和输出像素的之间的对应关系是怎样的。这里我们用W表示输入图片的大小,S代表卷积核每次滑动的步长,F代表卷积核的大小,P代表0边界填充大小。我们用公式(WF+2P)/S+注意:当计算的数值不是整数的时候代表步长选择的有问题。 
            
      看上图,局部感受野的大小就是3,输入的像素的大小是5,用来填充边界的0的个数是1,卷积
核滑动的步长是1,可以得到最终的结果是5。再看看右边的这个图,他和左面的区别就是右边这个图卷积核
的滑动的步长是2。注意啦,滑动步长位3是不允许滴。PS,LZ认为,滑动步长位1是最好的,因为,这个1和
边界补充的0的格式刚好抵消,使得图像的真正大小并没有发生变化,对吧。


        参数共享

                    
                         参数共享是解决卷积网络中参数过多的一个机制,我们来看看。假如有一张大小为55*55*96=290,400像素
的神经元,每一个卷积核有11*11*3=363个权重参数和1个biase,这种情况下中共有290,400*363=105,705,600个参数,这也太多了吧。仅仅在第一个卷基层就有这么多的参数,太多了。我们可以让每55*55的平面都具有相同的卷积核,那么就有96*11*11*2=38,848个卷积核,或者加上96个biase总计34,944个参数。这里参数减少也对反向传播的时候计算有利。注意:参数共享机制并不是万能的,当我们仅仅想识别一幅图像中的人脸买我们需要不同的卷积核去处理,应该用眼部的卷积核和头发的卷积核等等来处理。说了这么多我们来直观的看看。





        说道这里我们仅仅是阐述了在卷积方面的操作,下篇文章我们再来探讨其他的细节。

 

                   














展开阅读全文

没有更多推荐了,返回首页