一,计算机视觉
1,引入
计算机视觉,这个名词来自于什么?从生活中谈起,它可以帮助驾驶汽车,进行人脸识别和许多图片的识别。所以,在图像中提取信息就成为了计算机视觉的一大应用,但是,我们都知道,一张图片中所蕴涵的信息量非常大,也就是说输入向量的维度非常大,因此,我们需要引入新的计算方式,来帮助我们处理更大信息量的图片。
2,边缘检测
边缘检测,这是一种计算机处理图片的方式,在一个神经网络中,前面的层识别物体的较大特征,靠后的层来识别较小的特征像眼睛,最后的层识别最小的特征,将这些特征组合起来就成功提取出图片内蕴含的信息。
更直观的来说,在这张图片中,让计算机来提取出图片中的元素,它首先会识别竖直和水平的直线,或者类直线,而从一张图片中提取出这些“边缘”我们就称为边缘检测。
那么问题来了,如何进行边缘检测呢?
我们通常使用过滤器对矩阵进行卷积运算,用来表示。
左边这个矩阵就代表一张图片的灰度图像,它没有RGB三色,所以是一个的矩阵,而右边这个矩阵就称作过滤器。用这个过滤器对矩阵进行卷积运算。
我们从左上角开始,将过滤器覆盖到矩阵的左上角,这时矩阵中每个格子都有两个数字,我们将这两个数字相乘,最后相加,填入右边左上角第一个格子中。
每次向右移动一格,重复上述算法,填入第二个格子,以此类推。
最终一个的矩阵通过
的过滤器卷积后变成
的矩阵。
我们加入图片来更好说明卷积运算的意义
我们有一张左边亮右边暗的图片,通过这个过滤器卷积后,最终变成了暗亮暗的图片,而中间的亮区域,在原矩阵就对应暗和亮交界的区域。由此,卷积运算帮我们更加直观的找到了从亮到暗过度的这条线,如果图片元素非常大,这个区域就很直观的体现为“边缘”。
当然,过滤器不仅仅是图中的这一种,还有像sobel过滤器:,增加了中间一行元素的权重,使得结果的鲁棒性会更高,还有scharr过滤器:
3,padding
padding是一种常用的卷积操作,简单来说就是”扩充“矩阵,这样做可以让卷积后的结果变得与原矩阵的大小相同,或者变成自己想要的大小。
在这里,我们将矩阵扩大两个单元格,里面都填充0,这样做,使得矩阵大小变成 ,在卷积后则变成
,这与原来的矩阵规模其实是一样的。
4,卷积步长
一句话概括,卷积步长就是过滤器在原矩阵中每次移动的长度。
有了上面的元素,我们可以对一个已知规模的矩阵和过滤器进行计算来确定卷积后矩阵的规模
在这里,矩阵规模为,过滤器规模为
,padding为p,步长为s,卷积后的矩阵规模就是下图显示的那样
特别的,如果当不为整数,我们采用向下取整来确保它是一个整数
5,三维卷积
当图片为彩色时,它由三个图层Red,Blue,Green组成,这三个图层我们称为”通道数“,如果我们想对这个三维矩阵进行卷积,就要涉及到三维卷积的运算
首先要注意的一点是,过滤器的通道数必须与原矩阵的通道数相同,但是如果我们只想要对一层矩阵卷积比如只对红色进行卷积运算,那么过滤器的后面两层中的元素全部为0
我们将要卷积的区域看作一个立方体,在这个立方体中有27个元素,和一维卷积运算一样,我们将过滤器的27个元素覆盖到原矩阵上,进行相乘,并将27个结果相加,放入到右侧矩阵中的第一行,然后不断根据步长来移动,最终填满整个矩阵
6,单层卷积网络
首先我们用两个过滤器对矩阵进行卷积,并生成两个独立的矩阵,接着我们增加参数。
通过Python的广播机制给这16个元素都加上同一偏差。然后应用非线性函数,为了说明,它是一个非线性激活函数ReLU,输出结果是一个4×4矩阵。
然后把这两个矩阵堆叠起来,最终得到一个4×4×2的矩阵。我们通过计算,从6×6×3的输入推导出一个4×4×2矩阵,它是卷积神经网络的一层,把它映射到标准神经网络中四个卷积层中的某一层或者一个非卷积神经网络中。
我们通过更多的例子不难发现,即使原矩阵的维度再大,卷积后的维度却很小,这是卷积神经网络的一个特征叫做”避免过拟合“
最后总结以下卷积层中的标记
7,池化层
卷积神经网络经常使用池化层来缩减模型的大小,提高运算速度和所提取特征的鲁棒值。
这是一种池化类型,为”最大池化“,意思就是,将原矩阵分成四份,每一份中提取一个最大值组成一个新的矩阵。 (步长为2)
除了这样池化,我们也可以用步长为1来池化
除了最大池化,还有一种常用的池化类型为”平均池化“
意思很简单,就是对每一个区域取平均值