作为一个刚进入人工智能的小白来说,查了很多东西,才知道CNN这家伙干了啥。
理解前提:
1.卷积
1)局部链接
对待像图像这样的高维数据,直接让神经元与前一层的所有神经元进行全连接是不现实的,这样做的害处显而易见: 参数过多,根本无法计算.
所以我们让每个神经元只与输入数据的一个局部区域连接,这个局部区域的大小就是局部感受野(receptive field),尺寸上等同于filter的空间尺寸(比如5*5*3).
2)参数共享
2.图像采样
缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有两个:1、使得图像符合显示区域的大小;2、生成对应图像的缩略图。
放大图像(或称为上采样(upsampling)或图像插值(interpolating))的主要目的是放大原图像,从而可以显示在更高分辨率的显示设备上。对图像的缩放操作并不能带来更多关于该图像的信息, 因此图像的质量将不可避免地受到影响。然而,确实有一些缩放方法能够增加图像的信息,从而使得缩放后的图像质量超过原图质量的。
下采样原理:对于一幅图像I尺寸为M*N,对其进行s倍下采样,即得到(M/s)*(N/s)尺寸的得分辨率图像,当然s应该是M和N的公约数才行,如果考虑的是矩阵形式的图像,就是把原始图像s*s窗口内的图像变成一个像素,这个像素点的值就是窗口内所有像素的均值。
上采样原理:图像放大几乎都是采用内插值方法,即在原有图像像素的基础上在像素点之间采用合适的插值算法插入新的元素。
常用的插值方法
1、最邻近元法
2、双线性内插法
3、三次内插法
三次曲线插值方法计算量较大,但插值后的图像效果最好。
3.激活函数
作用:
1.引入非线性因素。
在我们面对线性可分的数据集的时候,简单的用线性分类器即可解决分类问题。但是现实生活中的数据往往不是线性可分的,面对这样的数据,一般有两个方法:引入非线性函数、线性变换。
2.线性变换
就是把当前特征空间通过一定的线性映射转换到另一个空间,让数据能够更好的被分类。
4.池化
Pooling 的本质,其实是采样,常规选择一组特征图形中的像素的最大值作为一个值。
5.感受野
局部感知野就是指卷积层的神经元只和上一层的feature
感受野:在卷积神经网络CNN中,决定某一层输出结果中一个元素所对应的输入层的区域大小,被称作感受野receptive field。
我们看这段定义非常简单,用数学的语言就是感受野是CNN中的某一层输出结果的一个元素对应输入层的一个映射。再通俗点的解释是,feature map上的一个点对应输入图上的区域。注意这里是输入图,不是原始图。好多博客写的都是原图上的区域,经过一番的资料查找,发现并不是原图。
另外加上一句,目前流行的物体识别方法都是围绕感受野来做的设计,就如上文提到的SSD和Faster RCNN。理解好感受野的本质我觉的有两个好处。一,理解卷积的本质;二,更好的理解CNN的整个架构。