0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【连载】深度学习笔记9:卷积神经网络(CNN)入门

人工智能实训营 2018-10-08 12:56 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前面的八篇学习笔记,基本上都是围绕着深度神经网络(DNN)和全连接网络(FCN)在学习。从本篇开始,笔者将跟着大家一起学习和研究深度学习的另一个主题——卷积神经网络(Convolutional Neural Network),也就是我们平常眼熟的 CNN。卷积神经网络作为当前计算机视觉领域的核心技术,发展到如今已是枝繁叶茂。笔者对于这一块的初步打算是从卷积网络的基本原理讲起,将卷积网络的前向传播和反向传播过程讲清楚,以及如何使用 numpytensorflow 实现卷积网络。然后会从深度卷积网络的发展历程出发,对主要的经典深度网络进行深度剖析,对计算机视觉的三大核心任务:图像分别、目标检测和图像分割等技术算法进行详细学习和讲解。

从前面的学习中,我们了解了深度神经网络的一般结构,它的前向传播和反向传播机制,而卷积神经网络相较于深度神经网络,其主要区别就在于卷积层,卷积层的存在使得神经网络具备更强的学习能力。除了卷积层之外,池化层(Pooling layer)的存在也使得卷积神经网络的鲁棒性更强,最后则是 DNN 中常见的全连接层(Fully Connected layer)。一个典型的卷积神经网络通常包括这三层。

卷积神经网络的结构

那到底什么是卷积?
从数学来说,卷积可以理解为一种类似于加权运算一样的操作。在图像处理中,针对图像的像素矩阵,卷积操作就是用一个卷积核来逐行逐列的扫描像素矩阵,并与像素矩阵做元素相乘,以此得到新的像素矩阵。这个过程是为卷积。其中卷积核也叫过滤器或者滤波器,滤波器在输入像素矩阵上扫过的面积称之为感受野。可能你还有点晕,让我来更详细的解释下。

卷积过程


且看上面的动图(这里感谢一下 NG 大大给我们提供这么好的教学资料),我们用一个 3x3 的滤波器去扫描一个 5x5 的像素矩阵,用滤波器中每一个元素与像素矩阵中感受野内的元素进行乘积运算,可得到了一个 3x3 的输出像素矩阵,这个输出的 3x3 像素矩阵能够较大程度的提取原始像素矩阵的图像特征,这也是卷积神经网络之所以有效的原因。为防止有同学不清楚卷积是如何计算的,笔者以输出像素矩阵中第一个元素 4 为例,演示一下计算过程:

1x1 + 1x0 + 1x1 + 0x0 +1x1 + 1x0 + 0x1 +0x0 + 1x1 = 4

当然,这里你可能会问:如何确定经过卷积后的输出矩阵的维度?我们是有计算公式的。假设原始输入像素矩阵的 shape 为 nxn,滤波器的 shape 为 fxf,那么输出像素矩阵的 shape 为 (n-f+1)x(n-f+1)

大体上卷积操作就是这么个过程,是不是非常简单。但这里我们也需要注意两个问题:第一个就是滤波器移动的步幅问题,上面的例子中我们的滤波器的移动步长为 1 ,即在像素矩阵上一格一格平移。但如果滤波器是以两个单位或者更多单位平移呢?这里就涉及到卷积过程中的 stride 问题。第二个问题涉及到卷积操作的两个缺点,第一个缺点在于每次做卷积,你的图像就会变小,可能做了几次卷积之后,你的图像就变成 1x1,这就不好办了。第二个缺点在于原始输入像素矩阵的边缘和角落的像素点只能被滤波器扫到一次,而靠近像素中心点的像素点则会被多次扫到进行卷积。这就使得边缘和角落里的像素特征提取不足,这就涉及到卷积过程中的 padding 问题。

针对第一个问题,也就是卷积步长问题,其实也很简单,就是按照正常的卷积过程去操作,只不过每次多走一个像素单位而已。且看卷积步幅为 2 的卷积操作示例:


我们用一个 3x3 的滤波器去对原始像素为 7x7 的图像进行卷积操作,设定卷积步长为 2,可看到输出像素矩阵的第二行第一个元素 69 的计算跨越了两个像素格点,计算过程为:

3x3 + 4x4 + 8x4 + 7x1 + 8x0 + 3x2 + 4x-1 + 2x0 + 1x3 = 69

加入步长之后我们的输出像素矩阵的 shape 的计算公式需要更新一下为:
((n-f)/s+1)x((n-f)/s+1) 。其中 s 为步长。

针对第二个问题,卷积神经网络采用一种叫做 padding 的操作,即对原始像素边缘和角落进行零填充,以期能够在卷积过程中充分利用边缘和角落的像素特征。至于填充多少 0 像素值,一般有两个选择,一是 valid 填充,也就是不填充,所以就不用管它了。我们在意的是有填充,就是第二种,same 填充方法。即填充后,输入和输出大小是一致的,对于nxn大小的输入像素,如果你用填充了 p 个像素点之后,n 就变成了 n+2p,最后输出像素的 shape 计算公式就变成了 ((n+2p-f)/s+1)x((n+2p-f)/s+1),要想让 n+2p-f+1=n 的话,输入输出大小相等,则 p=(f-1)/2。所以,一般而言,滤波器的大小 f 都会选择为奇数个。

实际操作中,padding 的编程写法如下:

def zero_pad(X, pad):
  X_pad = np.pad(X, ((0,0), (pad, pad), (pad, pad), (0, 0)), 'constant')  
return X_pad

numpy 一行代码即可搞定。测试效果如下:

np.random.seed(1)
x = np.random.randn(4, 3, 3, 2) x_pad = zero_pad(x, 2) fig, axarr = plt.subplots(1, 2) axarr[0].set_title('x') axarr[0].imshow(x[0,:,:,0]) axarr[1].set_title('x_pad') axarr[1].imshow(x_pad[0,:,:,0])

本节对卷积神经网络的卷积细节进行了详细的讲解和笔记。关于带有颜色通道的卷积操作我们下次笔记见。

本文由《自兴动脑人工智能》项目部 凯文 投稿。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 人工智能
    +关注

    关注

    1813

    文章

    49757

    浏览量

    261695
  • 机器学习
    +关注

    关注

    66

    文章

    8541

    浏览量

    136241
  • 深度学习
    +关注

    关注

    73

    文章

    5591

    浏览量

    123923
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    自动驾驶中常提的卷积神经网络是个啥?

    在自动驾驶领域,经常会听到卷积神经网络技术。卷积神经网络,简称为CNN,是一种专门用来处理网格状数据(比如图像)的
    的头像 发表于 11-19 18:15 1853次阅读
    自动驾驶中常提的<b class='flag-5'>卷积</b><b class='flag-5'>神经网络</b>是个啥?

    CNN卷积神经网络设计原理及在MCU200T上仿真测试

    数的提出很大程度的解决了BP算法在优化深层神经网络时的梯度耗散问题。当x&gt;0 时,梯度恒为1,无梯度耗散问题,收敛快;当x&lt;0 时,该层的输出为0。 CNN
    发表于 10-29 07:49

    NMSIS神经网络库使用介绍

    (q7_t) 和 16 位整数 (q15_t)。 卷积神经网络示例: 本示例中使用的 CNN 基于来自 Caffe 的 CIFAR-10 示例。神经网络由 3 个
    发表于 10-29 06:08

    构建CNN网络模型并优化的一般化建议

    整个模型非常巨大。所以要想实现轻量级的CNN神经网络模型,首先应该避免尝试单层神经网络。 2)减少卷积核的大小:CNN
    发表于 10-28 08:02

    卷积运算分析

    的数据,故设计了ConvUnit模块实现单个感受域规模的卷积运算. 卷积运算:不同于数学当中提及到的卷积概念,CNN神经网络中的
    发表于 10-28 07:31

    在Ubuntu20.04系统中训练神经网络模型的一些经验

    模型。 我们使用MNIST数据集,训练一个卷积神经网络CNN)模型,用于手写数字识别。一旦模型被训练并保存,就可以用于对新图像进行推理和预测。要使用生成的模型进行推理,可以按照以下步骤进行操作: 1.
    发表于 10-22 07:03

    CICC2033神经网络部署相关操作

    读取。接下来需要使用扩展指令,完成神经网络的部署,此处仅对第一层卷积+池化的部署进行说明,其余层与之类似。 1.使用 Custom_Dtrans 指令,将权重数据、输入数据导入硬件加速器内。对于权重
    发表于 10-20 08:00

    如何在机器视觉中部署深度学习神经网络

    图 1:基于深度学习的目标检测可定位已训练的目标类别,并通过矩形框(边界框)对其进行标识。 在讨论人工智能(AI)或深度学习时,经常会出现“神经网络
    的头像 发表于 09-10 17:38 711次阅读
    如何在机器视觉中部署<b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>神经网络</b>

    自动驾驶感知系统中卷积神经网络原理的疑点分析

    背景 卷积神经网络(Convolutional Neural Networks, CNN)的核心技术主要包括以下几个方面:局部连接、权值共享、多卷积核以及池化。这些技术共同作用,使得
    的头像 发表于 04-07 09:15 659次阅读
    自动驾驶感知系统中<b class='flag-5'>卷积</b><b class='flag-5'>神经网络</b>原理的疑点分析

    BP神经网络卷积神经网络的比较

    多层。 每一层都由若干个神经元构成,神经元之间通过权重连接。信号在神经网络中是前向传播的,而误差是反向传播的。 卷积神经网络
    的头像 发表于 02-12 15:53 1341次阅读

    如何优化BP神经网络学习

    优化BP神经网络学习率是提高模型训练效率和性能的关键步骤。以下是一些优化BP神经网络学习率的方法: 一、理解学习率的重要性
    的头像 发表于 02-12 15:51 1453次阅读

    BP神经网络的优缺点分析

    BP神经网络(Back Propagation Neural Network)作为一种常用的机器学习模型,具有显著的优点,同时也存在一些不容忽视的缺点。以下是对BP神经网络优缺点的分析: 优点
    的头像 发表于 02-12 15:36 1612次阅读

    BP神经网络深度学习的关系

    BP神经网络深度学习之间存在着密切的关系,以下是对它们之间关系的介绍: 一、BP神经网络的基本概念 BP神经网络,即反向传播
    的头像 发表于 02-12 15:15 1363次阅读

    深度学习入门:简单神经网络的构建与实现

    深度学习中,神经网络是核心模型。今天我们用 Python 和 NumPy 构建一个简单的神经网络神经网络由多个
    的头像 发表于 01-23 13:52 856次阅读

    人工神经网络的原理和多种神经网络架构方法

    在上一篇文章中,我们介绍了传统机器学习的基础知识和多种算法。在本文中,我们会介绍人工神经网络的原理和多种神经网络架构方法,供各位老师选择。 01 人工神经网络   人工
    的头像 发表于 01-09 10:24 2272次阅读
    人工<b class='flag-5'>神经网络</b>的原理和多种<b class='flag-5'>神经网络</b>架构方法