过去我们已经知道被称为紧密连接的神经网络。这些网络的神经元被分成若干组,形成连续的层。每一个这样的神经元都与相邻层的每一个神经元相连。下图显示了这种体系结构的一个示例。
图1. 密集连接的神经网络结构
当我们根据一组有限的人工设计的特征来解决分类问题时,这种方法很有效。例如,我们根据足球运动员在比赛期间的统计数据来预测他的位置。然而,当处理照片时,情况变得更加复杂。当然,我们可以将每个像素的像素值作为单独的特征,并将其作为输入传递给我们的密集网络。不幸的是,为了让该网络适用于一张特定的智能手机照片,我们的网络必须包含数千万甚至数亿个神经元。另一方面,我们可以缩小我们的照片,但在这个过程中,我们会丢失一些有用的信息。我们立马意识到传统的策略对我们没有任何作用,我们需要一个新的有效的方法,以充分利用尽可能多的数据,但同时减少必要的计算和参数量。这就是CNNs发挥作用的时候了。
数字图像的数据结构
让我们先花一些时间来解释数字图像是如何存储的。你们大多数人可能知道它们实际上是由很多数字组成的矩阵。每一个这样的数字对应一个像素的亮度。在RGB模型中,彩色图像实际上是由三个对应于红、绿、蓝三种颜色通道的矩阵组成的。在黑白图像中,我们只需要一个矩阵。每个矩阵都存储0到255之间的值。这个范围是存储图像信息的效率(256之内的值正好可以用一个字节表达)和人眼的敏感度(我们区分有限数量的相同颜色灰度值)之间的折衷。
图2. 数字图像的数据结构
卷 积
核卷积不仅用于神经网络,而且是许多其他计算机视觉算法的关键一环。在这个过程中,我们采用一个形状较小的矩阵(称为核或滤波器),我们输入图像,并根据滤波器的值变换图像。后续的特征map值根据下式来计算,其中输入图像用f表示,我们的kernel用h表示,结果矩阵的行和列的索引分别用m和n表示。
图3. 核卷积的例子
将过滤器放置在选定的像素上之后,我们从kernel中提取每个相应位置的值,并将它们与图像中相应的值成对相乘。最后,我们总结了所有内容,并将结果放在输出特性图的对应位置。上面我们可以看到这样的操作在细节上是怎么实现的,但是更让人关注的是,我们通过在一个完整的图像上执行核卷积可以实现什么应用。图4显示了几种不同滤波器的卷积结果。
图4. 通过核卷积得到边缘[原图像:https://www.maxpixel.net/Idstein-Historic-Center-Truss-Facade-Germany-3748512]
有效卷积和相同卷积
如图3所示,当我们用3x3核对6x6的图像进行卷积时,我们得到了4x4特征图。这是因为只有16个不同的位置可以让我们把滤波器放在这个图片里。因为每次卷积操作,图像都会缩小,所以我们只能做有限次数的卷积,直到图像完全消失。更重要的是,如果我们观察卷积核如何在图像中移动,我们会发现位于图像边缘的像素的影响要比位于图像中心的像素小得多。这样我们就丢失了图片中包含的一些信息。通过下图,您可以知道像素的位置如何改变其对特征图的影响。
图5. 像素位置的影响
为了解决这两个问题,我们可以用额外的边框填充图像。例如,如果我们使用1px填充,我们将照片的大小增加到8x8,那么与3x3滤波器卷积的输出将是6x6。在实践中,我们一般用0填充额外的填充区域。这取决于我们是否使用填充,我们要根据两种卷积来判断-有效卷积和相同卷积。这样命名并不是很合适,所以为了清晰起见:Valid表示我们仅使用原始图像,Same表示我们同时也考虑原图像的周围边框,这样输入和输出的图像大小是相同的。在第二种情况下,填充宽度应该满足以下方程,其中p为填充宽度和f是滤波器维度(一般为奇数)。
步幅卷积
图6. 步幅卷积的例子
在前面的例子中,我们总是将卷积核每次移动一个像素。但是,步幅也可以看作卷积层超参数之一。在图6中,我们可以看到,如果我们使用更大的步幅,卷积看起来是什么样的。在设计CNN架构时,如果希望感知区域的重叠更少,或者希望feature map的空间维度更小,我们可以决定增加步幅。输出矩阵的尺寸——考虑到填充宽度和步幅——可以使用以下公式计算。
过渡到三维
空间卷积是一个非常重要的概念,它不仅能让我们处理彩色图像,更重要的是在单层中应用多个卷积核。第一个重要的原则是,过滤器和要应用它的图像必须具有相同通道数。基本上,这种方式与图3中的示例非常相似,不过这次我们将三维空间中的值与卷积核对应相乘。如果我们想在同一幅图像上使用多个滤波器,我们分别对它们进行卷积,将结果一个叠在一起,并将它们组合成一个整体。接收张量的维数(即我们的三维矩阵)满足如下方程:n-图像大小,f-滤波器大小,nc-图像中通道数,p-是否使用填充,s-使用的步幅,nf-滤波器个数。
共3条
1/1 1 跳转至页
卷积神经网络数学原理解析
关键词: 卷积 神经网络 数学 原理 解析
共3条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |