CNN之间的计算
参考内容
1、网易云课堂微专业——深度学习—04第一周:http://mooc.study.163.com/smartSpec/detail/1001319001.htm
2、CNN基础介绍:http://blog.csdn.net/fengbingchun/article/details/50529500
卷积神经网络(Convolutional Neural Networks,CNN)
1、基本计算原理
动态过程:
滤波器(过滤器:filter)的权值是根据你要检测的特征来决定的,在深度学习中,也即是要经过训练得到。检测的特征不同,权值就不一样。
如上单层的图像一般表示的是灰白图,既是没有颜色的,有颜色的RGB图像,会包含三个相同大小的图层,这时对应的滤波器也要变成三层,滤波器的层数(通道数)必须时刻与图像层数保持一致。。。
注意输出的是一个单层图
因为当一个三通道的过滤器与图像进行卷积时,是直接对27个数去加权计算它们的和得到一个结果,而不是分层计算。
2、卷积输出的大小计算
如上两个例子,5*5的图像经过3*3的滤波器得到一个3*3的结果,6*6*3d的图像经过3*3*3d的滤波器得到一个4*4*1d的结果,从单层的例子我们大概已经知道了是怎么计算的了,那么接下来转换成公式来表示一下。
由计算可知,每次卷积图像都会变小,以上还只是步长为1的情况(也即是每次只移动一个),有两个缺点:
1、每次卷积之后图像都会缩小,多次卷积之后呢, 可能会变得很小很小
2、会丢掉角落边缘像素的重要信息,看下面图像
在上面的边缘,从左到右像素检测的次数分别为1、2、3、2、1,可见角落边缘只被检测了一次,而中间可以被检测多次,这就会导致边角信息丢失。解决的办法是加入Padding。
3、加入Padding以及之后的计算
加入Padding的意思是在卷积之前,在原图像边缘上加入一层像素(也可以多层),一般也叫做补零(因为大多数时候我们添加的元素都是0)。
由上图可知,如果卷积之后要得到与原图像相同大小的图像,那么加入的Padding层数应该是(f - 1) / 2,也由此可见,我们用的过滤器 f 一般也是奇数的,这样才能整除计算,获得对称填充,还有一个原因是奇数的滤波器会有一个中心点,有时候在计算机视觉计算时,有个中心点会方便很多。
附:
Padding = 0的卷积被称为Valid Convolution
为了得到与原图像大小相同图像而加入Padding的卷积称为Same Convolution
3、加入卷积步长(Stride)
以上运算都是基于步长为1的情况,下面看看步长为2的情况:
在卷积运算时,如果滤波器超出了图像框,一般的操作是不进行运算。
4、三维卷积
(1)原始RGB三维图
(2)多个滤波器(卷积核)
以上操作都是基于单个滤波器的,无论是单层还是多层,一个滤波器只能检测一种特征,要检测多个特征,我们需要多个滤波器。
5、汇总