卷积神经网络

(一)卷积神经网络

卷积神经网络通常应用于计算机视觉。

(1)边缘检测

卷积运算是卷积神经网络最基本的组成部分,现在使用边缘检测来说明卷积运算。

      例如:现在有一个6x6的灰度图像。因为是灰度图像,所以它是6x6x1的矩阵,而不是6x6x3的矩阵,因为没有RGB三通道。为了检测图像中的垂直边缘,你可以构造一个3×3矩阵,例如 [ 1 0 − 1 1 0 − 1 1 0 − 1 ] \begin{bmatrix}1 & 0 & -1\\ 1 & 0 & -1\\ 1 & 0 & -1\end{bmatrix} 111000111。在卷积神经网络的术语中,它被称为过滤器(有些时候它被称为核)。对这个6x6的图像进行卷积运算,卷积运算用“ ∗ * ”来表示,用3×3的过滤器对其进行卷积。如下图所示:
在这里插入图片描述

1.1卷积计算过程:

      为了计算结果矩阵中的第一个元素,使用3×3的过滤器,将其覆盖在输入图像,然后进行元素乘法(element-wise products)运算,如下图所示:
在这里插入图片描述
[ 3 × 1 0 × 0 1 × ( − 1 ) 1 × 1 5 × 0 8 × ( − 1 ) 2 × 1 7 × 0 2 × ( − 1 ) ] = [ 3 0 − 1 1 0 − 8 2 0 − 2 ] \begin{bmatrix} 3 \times 1 & 0 \times 0 & 1 \times \left(-1 \right) \\ 1 \times 1 & 5 \times 0 & 8 \times \left( - 1 \right) \\ 2 \times1 & 7 \times 0 & 2 \times \left( - 1 \right) \\ \end{bmatrix} = \begin{bmatrix}3 & 0 & - 1 \\ 1 & 0 & - 8 \\ 2 & 0 & - 2 \\\end{bmatrix} 3×11×12×10×05×07×01×(1)8×(1)2×(1)=312000182,然后将该矩阵每个元素相加得到最左上角的元素,即 3 + 1 + 2 + 0 + 0 + 0 + ( − 1 ) + ( − 8 ) + ( − 2 ) = − 5 3+1+2+0+0 +0+(-1)+(-8) +(-2)=-5 3+1+2+0+0+0+(1)+(8)+(2)=5

      然后为了计算结果矩阵中第二个元素,你需要把蓝色的方块向右移动一步:
在这里插入图片描述
继续做同样的元素乘法: [ 0 × 1 1 × 0 2 × ( − 1 ) 5 × 1 8 × 0 9 × ( − 1 ) 7 × 1 2 × 0 5 × ( − 1 ) ] = [ 0 0 − 2 5 0 − 9 7 0 − 5 ] \begin{bmatrix} 0 \times 1 & 1 \times 0 & 2 \times \left(-1 \right) \\ 5 \times 1 & 8 \times 0 & 9 \times \left( - 1 \right) \\ 7 \times1 & 2 \times 0 & 5 \times \left( - 1 \right) \\ \end{bmatrix} = \begin{bmatrix}0 & 0 & - 2 \\ 5 & 0 & - 9 \\ 7 & 0 & - 5 \\\end{bmatrix} 0×15×17×11×08×02×02×(1)9×(1)5×(1)=057000295,然后加起来,所以是 0 × 1 + 5 × 1 + 7 × 1 + 1 × 0 + 8 × 0 + 2 × 0 + 2 × ( − 1 ) + 9 × ( − 1 ) + 5 × ( − 1 ) = − 4 0×1+5×1+7×1+1×0+8×0+2×0+2×(-1)+ 9×(-1)+5×(-1)=-4 0×1+5×1+7×1+1×0+8×0+2×0+2×(1)+9×(1)+5×(1)=4

接下来也是一样,继续右移一步:
在这里插入图片描述
结果为0,过程自己可以算一算(画图太累,不想算了).继续向右移一步:
在这里插入图片描述
验证一下: 2 × 1 + 9 × 1 + 5 × 1 + 7 × 0 + 3 × 0 + 1 × 0 + 4 × ( − 1 ) + 1 × ( − 1 ) + 3 × ( − 1 ) = 8 2×1+9×1+5×1+7×0+3×0+1×0+4×(-1)+ 1×(-1)+ 3×(-1)=8 2×1+9×1+5×1+7×0+3×0+1×0+4×(1)+1×(1)+3×(1)=8

接下来为了得到下一行的元素,现在把蓝色块下移:
在这里插入图片描述
以此类推,计算完矩阵中的其他元素:
在这里插入图片描述
      这些图片和过滤器是不同维度的矩阵,但左边矩阵容易被理解为一张图片,中间的这个被理解为过滤器,右边的图片我们可以理解为另一张图片。上面这个过滤器被称为垂直边缘检测器。

1.2垂直边缘检测

      为什么这个可以做垂直边缘检测呢?让我们来看另外一个例子。为了讲清楚,我会用一个简单的例子。这是一个简单的6×6图像,左边的一半是10,右边一般是0。如果你把它当成一个图片,左边那部分看起来是白色的,像素值10是比较亮的像素值,右边像素值比较暗,我使用灰色来表示0,尽管它也可以被画成黑的。图片里,有一个特别明显的垂直边缘在图像中间,这条垂直线是从黑到白的过渡线,或者从白色到深色。
在这里插入图片描述
      当你用一个3×3过滤器进行卷积运算的时候,这个3×3的过滤器可视化为下面这个样子,在左边有明亮的像素,然后有一个过渡,0在中间,然后右边是深色的。卷积运算后,你得到的是右边的矩阵(可以自己动手去算一算)。
在这里插入图片描述
      如果把最右边的矩阵当成图像,它是这个样子。在中间有段亮一点的区域,对应检查到这个6×6图像中间的垂直边缘。这里的维数似乎有点不正确,检测到的边缘太粗了。因为在这个例子中,图片太小了。如果你用一个1000×1000的图像,而不是6×6的图片,你会发现其会很好地检测出图像中的垂直边缘。在这个例子中,在输出图像中间的亮处,表示在图像中间有一个特别明显的垂直边缘。从垂直边缘检测中可以得到的启发是,因为我们使用3×3的矩阵(过滤器),所以垂直边缘是一个3×3的区域,左边是明亮的像素,中间的并不需要考虑,右边是深色像素。在这个6×6图像的中间部分,明亮的像素在左边,深色的像素在右边,就被视为一个垂直边缘,卷积运算提供了一个方便的方法来发现图像中的垂直边缘。


1.3边缘检测之区分正边和负边

区分正边和负边,这实际就是由亮到暗与由暗到亮的区别,也就是边缘的过渡。

在这里插入图片描述
      这张6×6的图片,左边较亮,而右边较暗,将它与垂直边缘检测滤波器进行卷积,检测结果就显示在了右边这幅图的中间部分。

在这里插入图片描述
      这幅图和上面那幅图比较有什么变化呢?它的颜色被翻转了,变成了左边比较暗,而右边比较亮。现在亮度为10的点跑到了右边,为0的点则跑到了左边。如果你用它与相同的过滤器进行卷积,最后得到的图中间会是-30,而不是30。如果你将矩阵转换为图片,就会是该矩阵下面图片的样子。现在中间的过渡部分被翻转了,之前的30翻转成了-30,表明是由暗向亮过渡,而不是由亮向暗过渡。
      如果你不在乎这两者的区别,你可以取出矩阵的绝对值。但这个特定的过滤器确实可以为我们区分这两种明暗变化的区别。


1.4更多的边缘检测

      再来看看更多的边缘检测的例子,我们已经见过这个3×3的过滤器,它可以检测出垂直的边缘。所以,看到右边这个过滤器,我想你应该猜出来了,它能让你检测出水平的边缘。提醒一下,一个垂直边缘过滤器是一个3×3的区域,它的左边相对较亮,而右边相对较暗。相似的,右边这个水平边缘过滤器也是一个3×3的区域,它的上边相对较亮,而下方相对较暗。
在这里插入图片描述

      再来看一个更加复杂的例子,左上方和右下方都是亮度为10的点。如果你将它绘成图片,右上角是比较暗的地方,这边都是亮度为0的点,我把这些比较暗的区域都加上阴影。而左上方和右下方都会相对较亮。如果你用这幅图与水平边缘过滤器卷积,就会得到右边这个矩阵。
在这里插入图片描述

      再举个例子,这里的30(右边矩阵中绿色方框标记元素)代表了左边这块3×3的区域(左边矩阵绿色方框标记部分),这块区域确实是上边比较亮,而下边比较暗的,所以它在这里发现了一条正边缘。而这里的-30(右边矩阵中紫色方框标记元素)又代表了左边另一块区域(左边矩阵紫色方框标记部分),这块区域确实是底部比较亮,而上边则比较暗,所以在这里它是一条负边。
在这里插入图片描述

      我们现在所使用的都是相对很小的图片,仅有6×6。但这些中间的数值,比如说这个10(右边矩阵中黄色方框标记元素)代表的是左边这块区域(左边6×6矩阵中黄色方框标记的部分)。这块区域左边两列是正边,右边一列是负边,正边和负边的值加在一起得到了一个中间值。但假如这个一个非常大的1000×1000的类似这样棋盘风格的大图,就不会出现这些亮度为10的过渡带了,因为图片尺寸很大,这些中间值就会变得非常小。

      总而言之,通过使用不同的过滤器,你可以找出垂直的或是水平的边缘。


1.5过滤器的种类

事实上,对于这个3×3的过滤器来说,我们使用了其中的一种数字组合。

在这里插入图片描述
      中间的被称为Sobel过滤器,它的优点在于增加了中间一行元素的权重,这使得结果的鲁棒性(健壮性)会更高一些。右边的被称为Scharr过滤器,它有着和之前完全不同的特性,实际上也是一种垂直边缘检测,如果你将其翻转90度,你就能得到对应水平边缘检测!

      随着深度学习的发展,我们学习的其中一件事就是当你真正想去检测出复杂图像的边缘,你不一定要去使用这几种过滤器所选择的这九个数字,你可以把这矩阵中的9个数字当成9个参数,并且在之后你可以学习使用反向传播算法,其目标就是去理解这9个参数。
在这里插入图片描述
      相比这种单纯的垂直边缘和水平边缘,它可以检测出45°或70°或73°,甚至是任何角度的边缘。所以将矩阵的所有数字都设置为参数,通过数据反馈,让神经网络自动去学习它们,我们会发现神经网络可以学习一些低级的特征,例如这些边缘的特征。不过构成这些计算的基础依然是卷积运算,使得反向传播算法能够让神经网络学习任何它所需要的3×3的过滤器,并在整幅图片上去应用它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值