卷积神经网络(一)——卷积、边缘化与池化层

卷积神经网络(一)

——卷积、边缘化与池化层

(原创内容,转载请注明来源,谢谢)

一、概述

卷积神经网络网络(Convolutional Neural Network,CNN),是一种神经网络的模型,在计算机视觉(computer vision,CV)领域运用广泛。

计算机视觉,旨在完成图像分类、物体识别、图像合成创作等工作,主要难度在于输入的特征值非常多。

例如对于一个64*64像素的图片,就一共要处理12288个特征,而更大的图片则需要处理的特征值更多,这就导致使用原来机器学习的模型解决问题时,速度会很慢。而CNN正好可以解决这个问题。

二、边缘检测

边缘检测(edge detection),即检测物体在图片中的边界,这是cv的基础。边缘检测的方法,是通过构建过滤器,令图片的rgb值和过滤器进行卷积,得到的结果即检测出的结果。

1、卷积计算

这里先考虑黑白图片,则没有rgb三个值,只有1个值,表示这个点的亮度。假定滤波器是一个3*3的矩阵,值如下图所示,原图的灰度值矩阵为下图左边那副图所示,则进行卷积计算:

卷积计算的方式如下:

设原图为矩阵A,是一个6*6的矩阵;滤波器为矩阵B,是一个3*3的矩阵。

1)先把B放到矩阵A上,并且A的[1,1]元素与B的[1,1]元素对其,则重叠出3*3的矩阵。

2)再把重叠的位置,对应的元素相乘,得到1个3*3的矩阵,设为C。

3)把C的所有元素相加,得到卷积结果矩阵[1,1]位置的值。

4)这里采用的步长是1。则接下来把B的[1,1]与A的[1,2]对齐,在进行上面步骤的计算,得到结果矩阵[1,2]位置的值。当一行计算完成,则把B的[1,1]与A的[2,1]对齐,进行计算,以此类推。

在Python中,有conv_forward函数可以实现矩阵的卷积,TensorFlow中是tf.nn.conv2d函数。

2、垂直边缘检测

上述的计算,即实现了垂直物体的边缘检测,下图的例子更为直观:

可以看到,经过这种滤波器的卷积,可以突出图片的垂直形状的灰度值,这利于后续的计算。

3、水平边缘检测

类似的,还有水平边缘检测的滤波器,如下图所示:

4、其他边缘检测滤波器

除了用上面的滤波器,还可以使用其他的值来实现边缘检测,常用的有sobel滤波器和scharr滤波器,下图展示的都是垂直滤波器。如果需要水平滤波器,只需要把下面的矩阵,对应元素放置到旋转90°的位置即可。

三、Padding

1、现有问题

上面的边缘检测,可以看到进行卷积的时候,6*6的矩阵和3*3的矩阵,卷积的结果变成4*4,这样一来图片变小了,多进行几次卷积,会导致图片消失;另外还有一个问题,在于图片边缘的点,参与卷积的次数较少,这样会损失图片边缘的信息量。

2、padding介绍

为了解决这个问题,可以使用padding的方式。Padding=1,表示在原图的最外层,加上全部都是0的一层的值,把6*6的矩阵变成8*8的矩阵,此时在进行卷积,可以发现最终得到的还是6*6的矩阵。

3、padding公式

考虑Padding后,矩阵卷积的结果矩阵的维度的通用公式:n+2p-f+1,其中n表示原图是n*n的图片,f表示滤波器是f*f的矩阵,p即padding,如下图所示:

4、p的选择

P通常有两种选择方式:

1)valid卷积,即令p=0。

2)same卷积,即保证输出矩阵大小和输入矩阵一致,此时p=(f-1)/2

从这里也可以看出,滤波器的维度f通常需要是奇数,这样保证可以用same卷积,且有中心像素点,便于指出滤波器的位置。

四、步长

步长,即计算卷积过程中,每次移动过滤器的幅度。这里幅度既代表了水平移动的幅度,也代表了垂直移动的幅度。如下图所示:

综合考虑步长、padding后,计算两个矩阵卷积后的输出矩阵的维度大小的公式如下:

五、立体矩阵卷积

上面是假是定图片是黑白的,当考虑到rgb时,则变成3维的,这里要对应的修改滤波器的维度。

假设图片是6*6*3的矩阵,这里的6*6*3称为高*宽*通道(channels),需要注意的是,滤波器的channels值和图片的channels值必须一样,才能进行卷积。

则6*6*3的矩阵与3*3*3的矩阵,卷积的结果是4*4*1。

为了得到rgb的特征,可以分别用不同的滤波器与图片进行卷积,得到不同的结果。

因此引入了多重滤波的概念,即原图同时与两个滤波器进行卷积,会得到两个结果矩阵,这里把两个结果矩阵进行重叠,形成的立体矩阵,即为多重滤波的结果。

六、卷积神经网络

1、单层

考虑到神经网络的第l层,则对应的常用的参数符号如下图所示:

这里滤波器即为待计算的参数。

2、多层

一幅图片,要进行处理,通常需要经过若干次卷积,例如下图所示:

这里有个常用的卷积方法:通常随着卷积层数的增加,涉及到的滤波器个数增加,但是滤波器本身的尺寸不变。所以通常卷积多层后,图片会变得细长型,如上图所示。

七、池化层

除了卷积,cnn还需要池化层,便于提取卷积的结果。

池化层,也是一种矩阵的计算,如下图所示:

一个2步长、宽度2的最大值池化层,即取出矩阵每个2*2子矩阵的元素最大值。下图右边那个是结果,值为9 2 6 3

对于立体矩阵,则每一层的进行池化的操作。

除了最大值池化,还有平均值池化。但是通常最大值池化更长用。

需要说明的是,池化层只有滤波器尺寸f和步长s两个超参数,这两个参数是不需要经过fp、bp进行学习的,是初始就设定好的参数。矩阵经过池化层后的维度计算,和之前卷积的维度计算公式一致。

常用的超参数设定,f=2、s=2、p=0。

八、总结

1、计算过程

图片经过cnn后的计算,如下图所示:

通常,会经过若干的卷积层+池化层(经常把卷积层和池化层共称为1层)的操作,再把矩阵按顺序纵向排列成n*1的矩阵,接下来进行若干次全连接层的计算(全连接层即原来的神经网络的计算,每个元素都参与计算),最终再经过一层softmax计算,得到结果矩阵。

2、优点

卷积的计算,减少参数的参与,例如对于32*32*3的图片,要得到28*28*6的矩阵,普通的神经网络会经过约3072*4704≈1400万次的计算,而卷积只需要经过(5*5+1)*6=156次计算。

另外,卷积有三大特点:

1)参数共享:特定滤波器在图片任一小块都适用,可以共享特征。

2)稀疏连接:每一小部分的输出值,与图片其他部分无关。

3)平移不变:图片平移,由于和原图相似,卷积计算的结果也是相似的。

3、过程总结

如下图所示:

——written by linhxx 2018.03.06

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2018-03-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

前Twitter资深工程师详解YOLO 2与YOLO 9000目标检测系统

AI研习社按:YOLO是Joseph Redmon和Ali Farhadi等人于2015年提出的第一个基于单个神经网络的目标检测系统。在今年CVPR上,Jose...

4896
来自专栏机器学习养成记

k折交叉验证(R语言)

“ 机器学习中需要把数据分为训练集和测试集,因此如何划分训练集和测试集就成为影响模型效果的重要因素。本文介绍一种常用的划分最优训练集和测试集的方法——k折交叉验...

1.3K9
来自专栏IT派

用Python实现机器学习算法——简单的神经网络

导读:Python 被称为是最接近 AI 的语言。最近一位名叫Anna-Lena Popkes的小姐姐在GitHub上分享了自己如何使用Python(3.6及以...

1020
来自专栏机器学习、深度学习

多目标检测跟踪文献代码汇总

The Multiple Object Tracking Benchmark https://motchallenge.net/ 高速跟踪: 当检测精度较高...

4725
来自专栏机器学习原理

深度学习——目标检测(1)什么是目标检测?RCNNRCNN的检测流程:Bounding-box回归

前言:深度学习在图像的应用中目标检测是最基本也是最常用的,下面介绍几种常见的目标检测算法或者模型

1562
来自专栏贾志刚-OpenCV学堂

卷积神经网络是如何实现不变性特征提取的

传统的图像特征提取(特征工程)主要是基于各种先验模型,通过提取图像关键点、生成描述子特征数据、进行数据匹配或者机器学习方法对特征数据二分类/多分类实现图像的对象...

1082
来自专栏机器学习算法与Python学习

卷积神经网络详解

注:看本文之前最好能构理解前馈圣经网络以及BP(后向传播)算法,可以看之前发的相关文章或者看知乎、简书、博客园等相关博客。 卷积神经网络(Convolution...

2928
来自专栏杂七杂八

K最近邻与线性分类器(下)

的系数),b为常数项,输出是10个数字,代表归属于不同的类。我们可以看下面的这个例子:假设一张图片由2*2的像素表示,共有三类,那上述公式的计算如下

1133
来自专栏技术小站

吴恩达深度学习 course4 卷积神经网络

传统的神经网络所存在的问题:图片的输入维度比较大,具体如下图所示,这就造成了权重w的维度比较大,那么他所占用的内存也会比较大,计算w的计算量也会很大

2403
来自专栏计算机视觉战队

每日一学——线性分类笔记(上)

线性分类 上一篇笔记介绍了图像分类问题。图像分类的任务,就是从已有的固定分类标签集合中选择一个并分配给一张图像。我们还介绍了k-Nearest Neighbor...

3305

扫码关注云+社区