学习笔记P20-CNN

学习网址:https://www.bilibili.com/video/av48285039?p=20

前言

CNN【Convolutional Neural Network,CNN或ConvNet】通常被用在影像处理的问题上,但是并不是说只有CNN才能做影像处理,一般的Neuron Network也可以做这件事。

例如做影像分类,通常就是train一个NN,输入一个图片【该图片表示成pixels,是一个vector】,输出这个图片对应的类别【假如有10个类别,那么输出就是10个dimension】。

实际上我们在训练一个NN时,我们希望在NN的structure里面,每一个neuron都代表一个最基本的classifier,这在以往的经验中也得到了验证。

例如输入一张图片pixels的vector,第一层的layer:第一个neuron就判断有没有绿色出现,第二个neuron判断有没有黄色出现,。。。,最后一个neuron判断有没有斜条纹出现。第二层layer做出比第一层更加复杂的判别:第一个neuron判断是否有条纹来识别窗栏,。。。,最后一层layer则做出更加复杂的判断,第一个neuron判断是否是蜂巢,第二个判断是否是车轮。。。

现在面对的问题:

用一般的fully connection NN做影像处理时,往往需要很多参数;例如有一张100X100的彩色图片,把它转化成一个vector就是:100X100X3的pixels就是3万维;假设NN的layer有1000个neuron,那么第一层的layer就有30000X1000个参数。这参数也太多了。

所以CNN要做的事情就是来简化这个NN 的structure;根据人的经验,图片中某些weight是用不到的,所以在一开始就可以把它过滤掉。因此不用FNN,而用其他的方式用比较少的参数来做影像处理。所以CNN是比传统的DNN要简单的(结构上拥有更少的参数)。

小结:用全连接前馈网络来处理图像时,会存在两个问题:

1)参数太多;

2)局部不变性特征:FNN很难提取局部不变特征,一般需要进行数据增强来提高性能。

为什么可以用CNN来处理图片?或者为什么可以用部分的pattern就可以识别图片?或为什么我们可以直接把一些参数拿掉,只用很少的参数就可以做影像处理?

这里有如下观察:

第一个观察:Some patterns are much smaller than the whole image.

——》A neuron does not have to see the whole image to discover the pattern.

 

解释:在影像处理问题中,图片的pattern要比整张图片小,所以在图片的pattern识别时不需要关注整张图片。

假设第一层layer的哪些neuron是侦查有没有某种pattern出现,而大部分pattern是比整张image还要小的,所以对一个neuron来说他要判断是否出现这个pattern是不需要看整张image的,只要看一部分就可以决定这个事情。

举例来说:

 

即从图片中识别鸟嘴,我们只需要看图片的一部分就可以判断是不是鸟嘴。

第二个观察:The same pattern appear in different regions.

解释:同样的pattern可以出现在图片的不同部分【他们代表同样的含义,同样的形状;他们可以用同样的neuron来侦测】。

举例来说:

上面来张图片,第一张鸟嘴在左上方,第二张鸟嘴在中间。在侦测鸟嘴这件事情上他们不需要用不同的参数来做,可以让两个neuron共用一组参数;即share parameters来减少需要用的参数的量。

第三个观察:Subsampling the pixels will not change the object.

解释:对图片的pixel做抽样不会改变对原来物体的识别。

举例说明:

把一张图片的奇数行偶数列拿掉,变成原来1/10的大小,不会影响人对这张image的理解。

所以做Subsampling对影响辨识来说可能没有太大的影响,所用可以通过这种方式让参数减少。

基于以上对影像处理的观察设计了CNN的架构;如下CNN的整个架构图:

目前的卷积神经网络一般是由卷积层、池化层和全连接层交叉堆叠而成的前馈神经网络,使用BP算法进行训练。CNN有三个结构上的特性:

1)局部不变性

2)权重共享

3)pooling

对应于上面三个观察。

再来看看上面3个观察在CNN架构中的处理:

观察一:要侦测一个pattern不需要看整张图片,只要看image的一小部分就可以。

观察二:同样的pattern可能会出现在不同图片的不同区域。

观察三:图像识别可以做subsampling。

前两个观察是用CNN的convolution layer来实现的,第三个观察是用Pooling layer来实现。

下面看看每个layer要做的事情:

一、convolution

1.1 filter的作用

假设我们有一张6X6的黑白图片,【1就表示有墨迹,0表示没有墨迹】。在convolution中有一组filter【每个filter就相当于FNN中的一个neuron,它是一个matrix】,filter中的每个值都是nn中的parameter,它和NN中的weights和biases是一样的都需要学习得到。

一个3X3的filter含义:在侦测一个3X3的pattern;它不是看整张image,而是看部分来侦探有没有某个pattern出现。

每个filter都会和输入的matrix做内积,有多少filter就可以得到多少feature map。

下面看看彩色图片的例子:

小结:

在图像处理中,卷积通常为特征提取的有效方法。一幅图像经过卷积操作后得到的结果称为特征映射(Feature Map)。

filter的效果图示:

给出在图像处理中几种:常用的滤波器,以及其对应的特征映射。图中最上面的滤波器是常用的高斯滤波器,可以用来对图像进行平滑去噪;中间和最下面的过滤器可以用来提取边缘特征。

 

convolution和fully connected有什么关系?

convolution的过程其实就是fully connected把一些weight拿掉而已:

减少了参数,原来6X6的输入都要与参数做运算,现在只有3X3个输入需要与对应参数做运算。

参数共享,filter在对6X6的图片做运算时,每个stride的参数都是一样的。这样实现了参数共享,需要的参数就更少了。

故从效果上来看,卷积层相比于全连接层减少了参数实现了参数共享。

二、pooling

以Max pooling为例:

三、flatten的作用

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值