吴恩达深度学习笔记-卷积神经网络基础(第9课)

一、计算机视觉

  • 计算机视觉(Computer Vision)是深度学习研究的主要方向之一,主要研究内容分类如下:
    (1)图片分类
    在这里插入图片描述
    (2)对象检测
    在这里插入图片描述
    (3)神经风格转换
    在这里插入图片描述
  • 在应用计算机视觉时要面临一个挑战,就是数据的输入可能会非常大。
    例如在处理一张1000*1000像素大小的图片,最后的数据维度会是1000 *1000 *3,将此输入到神经网络中去,特征向量的维度高达300万,W1矩阵也将会十分巨大。

二、边缘检测示例

  • 使用电脑去识别图片里的对象的两个方式:
    (1)一是检测垂直边缘(vertical edges)
    (2)二是检测水平边缘(horizontal edges)
    在这里插入图片描述
    图片的边缘检测可以通过与相应滤波器filter进行卷积来实现。
  • 举一个6 * 6灰度图与一个3 * 3滤波器(垂直边缘检测算子)进行卷积的例子:
    在数学中 * 就是卷积的意思。卷积的计算过程是将3 * 3的filter覆盖到6 * 6的灰度图像上去,如覆盖到下图的蓝色部分,再依次对位相乘再相加得到-5填入结果矩阵。
    在这里插入图片描述
    将3 * 3filter依次从左到右、从上到下,最后得到一个4 * 4的结果矩阵:
    在这里插入图片描述

在python中不使用*来代表卷积,可以使用conv_forward()函数来表示卷积;在tensorflow环境下,可以使用tf.nn.conv2d();在keras环境下,可以使用Conv2D()

  • 为什么上面的例子可以进行垂直边缘检测呢?
    举一个简单的例子,如下图有一个6 * 6的灰度图,表示成图像就是左边偏白右边偏灰,垂直边缘即灰白交界处;将其与垂直边缘检测器进行卷积,得到右边的灰度图,中间白色区域对应6 * 6中检测到的中间的垂直边缘。
    在这里插入图片描述

三、更多边缘检测内容

  • 垂直边缘检测器能够识别从明到暗和从暗到明两种垂直边缘,如下图:
    在这里插入图片描述
    最后得到的结果的中间部分被翻转了,若对两者的区别不在乎,可以对矩阵取绝对值输出。
  • 其他的检测算子:
    Sobel滤波器
    对于上诉的垂直检测我们只用了其中一种数字组合,我们可以采取其他的数字组合,如下图:
    在这里插入图片描述
    它的优点在于增加了中间一行元素的权重,这使得结果的鲁棒性会更高一些。
    Scharr滤波器
    这也是一个垂直边缘检测器,将其进行90°翻转就能得到一个水平边缘检测器。
    在这里插入图片描述
  • 在深度学习过程中,想要检测复杂图像的边缘;不一定非得使用上述给出的特定数字;将filter当作一个参数矩阵,使用反向传播的方式去调整这些参数。最后将filter与灰度图进行卷积得到一个更好的检测结果。
    在这里插入图片描述

四、Padding

  • 对n * n的图使用f * f的filter进行卷积,得到 n-f+1 * n-f+1大小的图。
  • 卷积的一个缺点是:每次做卷积操作后,图像就会缩小;可能做了几次卷积操作后,图像就会变得很小了。
    第二个缺点是:角落边的像素只能被只一个输出所触碰,即边缘部分的像素在输出中使用的较少,会丢失边缘的信息。
  • 为了解决上面两个缺点,可以对原始图像进行扩充,如在原始图像最外层再填充一层像素,6 * 6的图像就会被填充成8 * 8的图像;在这例子中padding就是1,因为只添加了一层像素。
  • 如何选取合适的padding呢?
    valid convolutions:不填充,即padding=0;
    same convolutions:填充过后输出的与原始输入的尺寸相同。要求p满足:
    在这里插入图片描述

p:padding大小
f:filter大小

如6 * 6填充padding=1成8 * 8图像,经过3 * 3filter输出6 * 6的输出结果。

  • f通常是奇数,很少看到一个偶数的过滤器在计算机视觉里使用,认为有两个原因:
    (1)如果 f是一个偶数,那么你只能使用一些不对称填充。在same填充中,f是奇数我们可以以同样的数量填充四周,而不是左边填充多一点,右边填充少一点,这样不对称的填充。
    (2)当有一个奇数维过滤器,它就有一个中心点。有时在计算机视觉里,有一个中心像素点会更便于指出过滤器的位置。

五、卷积步长

  • Strided Convolutions
    filter矩阵在上下移动时一次移动的格子数。
    如下图,卷积步长为2:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • s表示卷积步长,f表示filter矩阵大小,n表示原始图片大小;卷积过后得到的结果大小为:
    在这里插入图片描述

  • 数学定义中的卷积:
    数学中对卷积操作前需要将filter矩阵对y=x进行翻转后再对原始图像进行覆盖相乘相加。
    在这里插入图片描述
    从技术上讲,之前使用的filter未翻转操作被称为互相关(cross-correlation)而不是卷积(convolution);但在深度学习文献中,按照惯例将这不进行翻转操作的叫做卷积操作。
    之所以深度学习中的filter不需要翻转是因为filter是通过梯度下降后得到的,可以理解为得到的filter其实就是翻转过后的了。

六、三维卷积

当我们不想处理灰度图,而是RGB彩色图,则需要对三维原始图进行卷积。对于三维RGB图片进行卷积,filter也需要是三维的

  • 如下图,6 * 6 *3的RGB图和3 * 3 * 3的filter进行卷积,得到4 * 4的结果图。RGB图和filter的三个维度分别代表height、width和channels,要求两者channels要一致。
    在这里插入图片描述

  • 计算过程:
    与灰度图的类似,先将filter覆盖到原始图上,将RGB三个通道分别与filter对应层进行相乘再相加,最后将GGB三个通道卷积得到的值相加在一起得到结果值;接下来就是在原始图上移动filter。
    在这里插入图片描述

  • 当你想要检测红色通道的垂直边缘时,可以将filter第一层设置为垂直边缘检测算子,第二第三层全设置为0;三层filter叠在一起形成一个f×f×3的过滤器,一个检测垂直边界的过滤器,但只对红色通道有用。

  • 若想同时检测垂直边缘、水平边缘或者45°的边缘,即需要多个filter应该怎么办呢?
    使用多个filter得到的结果组合成一个多维的矩阵。如下图,想同时检测垂直边缘和水平边缘,那么采用两个filter进行卷积,得到的结果叠加在一起得到一个4 * 4 * 2的结果。
    在这里插入图片描述

  • n ∗ n ∗ nc(通道数)的原始图与f ∗ f ∗ nc的filter进行卷积(padding=1),得到(n-f+1) * (n-f+1) * nc的输出矩阵

七、单层卷积网络

  • 单层卷积网络如下图所示:
    在这里插入图片描述原始图片分别与两个滤波器卷积得到两个4 * 4的结果矩阵,4 * 4的结果矩阵 + b当作当前层的输入z,将z经过非线性函数Relu分别输出两个4 * 4的结果矩阵;将两个结果矩阵合并在一起就是这个单层卷积网络的输出了,输出维度为4 * 4 * 2。
    大致流程是:先进行卷积运算,运算结果加上偏置得到激活函数的输入z,将z输入激活函数得到a,将各过滤器的a组合在一起成为该卷积网络的输出。

  • filter中的数字相当于单层神经网络中的权重w,一个3 * 3 * 3 的filter在卷积神经网络有3x3x3+1(bias)=28个参数,若有n个filter,最后的参数个数为n * 28个参数。
    可以发现,选定滤波器组后,参数数目与输入图片尺寸无关。如上述例子,无论原始图片再大,参数始终是n * 28个。即使这些图片很大,参数却很少,这就是卷积神经网络的一个特征,叫作“避免过拟合”。

  • 标记总结:
    f[l]:第l层filter的尺寸
    p[l]:第l层的padding
    s[l]:第l层的卷积步长
    nc[l]:第l层filter的个数
    每一个filter维度:f[l] * f[l] * nc[l-1]
    Input维度:nH[l-1] * nW[l-1] * nc[l-1]
    Output维度:nH[l] * nW[l] * nc[l]
    在这里插入图片描述
    激活函数输出:A[l] = m * nH[l-1] * nW[l-1] * nc[l]
    第l层weights数量:f[l] * f[l] * nc[l-1] * nc[l]
    第l层bias数量:nc[l]

八、简单卷积网络示例

【图片来自csdn博主:红色石头Will 图源
在这里插入图片描述
经过多层卷积,最后提取1960个features,将其平铺作为模型输入。
一般情况下,随着CNN层数增加,nH[l]和nW[l]逐渐减小,而nc[l]逐渐增大。

一般的卷积神经网络有三层:

  1. 卷积层(Convolution,CONV)
  2. 池化层(Pooling,POOL)
  3. 全连接层(Fully connected,FC)

十、池化层

卷积网络经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性

  • 最大池化(Max pooling)
    在滤波器算子覆盖的区域中保留区域里面的最大值。
    如下图,最大池化的参数是:f = 2,s = 2。滤波器为2 * 2,一次覆盖4个格子,选择其中的最大值;移动幅度为2,一次性移动两个格子。
    在这里插入图片描述
    最大池化操作的功能就是只要在任何一个象限内提取到某个特征,它都会保留在最大化的池化输出里。最大化运算的实际作用就是,如果在过滤器中提取到某个特征,那么保留其最大值。如果没有提取到这个特征,可能在这块区域中不存在这个特征,那么其中的最大值会很小,这就是最大池化的直观理解。
    最大池化只需要设置超参数f和s,没有其他参数需要反向传播来学习。

  • 平均池化(Average pooling)
    在滤波器算子覆盖的区域中计算区域里面的平均值。
    在这里插入图片描述

  • 维度变化,padding=0:
    在这里插入图片描述

十、卷积神经网络实例

  • 文献中卷积层的分类有两种:
    (1)第一种是:
    一个卷积层和一个池化层一起作为一层,这就是神经网络的Layer1
    在这里插入图片描述
    (2)第二种:
    卷积层作为一层,而池化层单独作为一层。

  • 在计算神经网络有多少层时,通常只统计具有权重和参数的层。因为池化层没有权重和参数,只有一些超参数。所以,本课题把CONV1和POOL1共同作为一个卷积层,并标记为Layer1。

  • 卷积神经网络实例:
    【图片来自csdn博主:红色石头Will 图源
    在这里插入图片描述
    在这里插入图片描述

【一层FC只有一个bias】

经过一系列的卷积和池化,将输出平坦化,输入全连接层。
卷积层用来提取特征,全连接层用来分类

十一、为什么使用卷积

与只用全连接层相比,卷积层的两个主要优势在于参数共享和稀疏连接

  • 如下图:
    使用卷积层的参数:(5 * 5 + 1)* 6 = 156个
    在这里插入图片描述
    使用全连接层的参数:3072 * 4704个
    在这里插入图片描述

  • 卷积网络映射这么少参数有两个原因:
    一是参数共享。一个filter可以在原图中进行遍历,即一个垂直滤波器可以检测全图的垂直边缘,可以在不同区域用同一个filter检测垂直边缘。
    二是稀疏连接
    稀疏连接含义如下图,绿色部分的输出仅依赖于原始图左上角的9个输入特征,红色部分的输出仅依赖于原始图中间的9个输入特征。
    在这里插入图片描述

神经网络可以通过这两种机制减少参数,以便用更小的训练集来训练它,从而预防过度拟合。
且卷积神经网络善于捕捉平移不变。通过观察可以发现,向右移动两个像素,图片中的猫依然清晰可见,因为神经网络的卷积结构使得即使移动几个像素,这张图片依然具有非常相似的特征,应该属于同样的输出标记。即CNN进行物体检测时,不太受物体所处图片位置的影响,增加检测的准确性和系统的健壮性

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值