【深度学习】嘿马深度学习系统性知识教程第7篇:卷积神经网络,3.1 图像数据与边缘检测【附代码文档】

举报
程序员一诺python 发表于 2025/09/11 16:52:49 2025/09/11
【摘要】 1.1 深度学习介绍 深度学习与神经网络 1.2 神经网络基础 1.3 浅层神经网络 2.1 多分类与 TensorFlow 5、得出每次训练的准确率(通过真实值和预测值进行位置比较,每个样本都比较) 2.2 梯度下降算法改进 2.3.4 其它正则化方法 2.4 BN 与神经网络调优 3.1 图像数据与边缘检测 3.2 卷积神经网络(CNN)原理 3.3 经典分类网络结构 4.

🏆🏆🏆教程全知识点简介:1.1 深度学习介绍 深度学习与神经网络 1.2 神经网络基础 1.3 浅层神经网络 2.1 多分类与 TensorFlow 5、得出每次训练的准确率(通过真实值和预测值进行位置比较,每个样本都比较) 2.2 梯度下降算法改进 2.3.4 其它正则化方法 2.4 BN 与神经网络调优 3.1 图像数据与边缘检测 3.2 卷积神经网络(CNN)原理 3.3 经典分类网络结构 4.1 循环神经网络 4.1.4 GRU(门控循环单元) 4.1.5 LSTM(长短记忆网络) 4.2 词嵌入与 NLP 学习目标 4.2.2 词嵌入 4.2.3 Word2Vec案例 4.3 seq2seq 与 Attention机制 4.3.2 注意力机制 4.3.3 机器翻译案例 4.3.4 集束搜索(Beam Search) 4.3.5 BLEU-机器翻译的自动评估方法 4.7.3.6 完整代码 5.1 生成对抗网络(GAN) 5.2 自动编码器


📚📚仓库code.zip 👉直接-->:   https://gitee.com/yinuo112/AI/blob/master/深度学习/嘿马深度学习系统性知识教程/note.md    🍅🍅

✨ 本教程项目亮点

🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考


🎯🎯🎯全教程总章节


🚀🚀🚀本篇主要内容

卷积神经网络

了解卷积神经网络的构成
记忆卷积的原理以及计算过程
了解池化的作用以及计算过程
知道LeNet-5网络结构
了解经典的分类网络结构
知道NIN中1x1卷积原理以及作用
知道Inception的作用
了解迁移学习以及技巧
应用卷积神经网络进行手势识别

3.1 图像数据与边缘检测

学习目标

  • 目标

  • 了解卷积网络的历史

  • 了解边缘检测相关概念以及卷积运算过程

  • 应用

3.1.1 为什么需要卷积神经网络

计算机视觉领域,通常要做的就是指用机器程序替代人眼对目标图像进行识别等。那么神经网络也好还是卷积神经网络其实都是上个世纪就有的算法,只是近些年来电脑的计算能力已非当年的那种计算水平,同时现在的训练数据很多,于是神经网络的相关算法又重新流行起来,因此卷积神经网络也一样流行。

  • 1974年,Paul Werbos提出了误差反向传导来训练人工神经网络,使得训练多层神经网络成为可能。
  • 1979年,Kunihiko Fukushima(福岛邦彦),提出了Neocognitron, 卷积、池化的概念基本形成。
  • 1986年,Geoffrey Hinton与人合著了一篇论文:Learning representations by back-propagation errors。
  • 1989年,Yann LeCun提出了一种用反向传导进行更新的卷积神经网络,称为LeNet。
  • 1998年,Yann LeCun改进了原来的卷积网络,LeNet-5。

3.1.1.2 图像特征数量对神经网络效果压力

假设下图是一图片大小为28 * 28 的黑白图片时候,每一个像素点只有一个值(单通道)。那么总的数值个数为 784个特征。

那现在这张图片是彩色的,那么彩色图片由RGB三通道组成,也就意味着总的数值有28 28 3 = 2352个值。

从上面 得到一张图片的输入是2352个特征值,即神经网路当中与若干个神经元连接,假设第一个隐层是10个神经元,那么也就是23520个权重参数。

如果图片再大一些呢,假设图片为1000 1000 3,那么总共有3百万数值,同样接入10个神经元,那么就是3千万个权重参数。这样的参数大小,神经网络参数更新需要大量的计算不说,也很难达到更好的效果,大家就不倾向于使用多层神经网络了。

所以就有了卷积神经网络的流行,那么卷积神经网络为什么大家会选择它。那么先来介绍感受野以及边缘检测的概念。

[openpyxl 文档]

[python-magic 文档]

3.1.2 感受野

1962年Hubel和Wiesel通过对猫视觉皮层细胞的研究,提出了感受野(receptive field)的概念,Fukushima基于感受野概念提出的神经认知机(neocognitron)可以看作是卷积神经网络的第一个实现网络。

单个感受器与许多感觉神经纤维相联系,感觉信息是通过许多感受神经纤维发放总和性的空间与时间类型不同的冲动,相当于经过编码来传递。

3.1.3 边缘检测

[PyTorch 文档]

为了能够用更少的参数,检测出更多的信息,基于上面的感受野思想。通常神经网络需要检测出物体最明显的垂直和水平边缘来区分物体。比如

看一个列子,一个 6×6的图像卷积与一个3×3的过滤器(Filter or kenel)进行卷积运算(符号为 ), 也可能是矩阵乘法所以通常特别指定是卷积的时候代表卷积意思。

  • 相当于将 Filter 放在Image 上,从左到右、从上到下地(默认一个像素)移动过整个Image,分别计算 ImageImage 被 Filter 盖住的部分与 Filter的逐元素乘积的和

在这个6×6 的图像中,左边一半像素的值全是 10,右边一半像素的值全是 0,中间是一条非常明显的垂直边缘。这个图像与过滤器卷积的结果中,中间两列的值都是 30,两边两列的值都是 0,即检测到了原 6×66×6 图像中的垂直边缘。

注:虽然看上去非常粗,是因为 的图像太小,只有5个像素长、宽,所以最终得到结果看到的是两个像素位置,如果在一个500 x 500的图当中,就是一个竖直的边缘了。

随着深度学习的发展, 需要检测更复杂的图像中的边缘,与其使用由人手工设计的过滤器,还可以将过滤器中的数值作为参数,通过反向传播来学习得到。算法可以根据实际数据来选择合适的检测目标,无论是检测水平边缘、垂直边缘还是其他角度的边缘,并习得图像的低层特征。

卷积神经网络

了解卷积神经网络的构成
记忆卷积的原理以及计算过程
了解池化的作用以及计算过程
知道LeNet-5网络结构
了解经典的分类网络结构
知道NIN中1x1卷积原理以及作用
知道Inception的作用
了解迁移学习以及技巧
应用卷积神经网络进行手势识别

[Jupyter 文档]

[Statsmodels 文档]

3.2 卷积神经网络(CNN)原理

学习目标

  • 目标

  • 了解卷积神经网络的构成

  • 记忆卷积的原理以及计算过程
  • 了解池化的作用以及计算过程

  • 应用

3.2.1 卷积神经网络的组成

  • 定义

  • 卷积神经网络由一个或多个卷积层、池化层以及全连接层等组成。与其他深度学习结构相比,卷积神经网络在图像等方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他浅层或深度神经网络,卷积神经网络需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。

来看一下卷积网络的整体结构什么样子。

其中包含了几个主要结构

  • 卷积层(Convolutions)
  • 池化层(Subsampling)
  • 全连接层(Full connection)
  • 激活函数

[datetime 文档]

3.2.2 卷积层

[unittest 文档]

  • 目的

  • 卷积运算的目的是提取输入的不同特征,某些卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网路能从低级特征中迭代提取更复杂的特征。

  • 参数:

  • size:卷积核/过滤器大小,选择有1 1, 3 3, 5 * 5

  • padding:零填充,Valid 与Same
  • stride:步长,通常默认为1

  • 计算公式

3.2.2.1 卷积运算过程

[psutil 文档]

对于之前介绍的卷积运算过程, 用一张动图来表示更好理解些。一下计算中,假设图片长宽相等,设为N

  • 一个步长,3 X 3 卷积核运算

假设是一张5 X 5 的单通道图片,通过使用3 X 3 大小的卷积核运算得到一个 3 X 3大小的运算结果(图片像素数值仅供参考)

会发现进行卷积之后的图片变小了,假设N为图片大小,F为卷积核大小

相当于N−F+1=5−3+1=3N - F + 1 = 5 - 3 + 1 = 3N−F+1=5−3+1=3

如果 换一个卷积核大小或者加入很多层卷积之后,图像可能最后就变成了1 X 1 大小,这不是 希望看到的结果。并且对于原始图片当中的边缘像素来说,只计算了一遍,二对于中间的像素会有很多次过滤器与之计算,这样导致对边缘信息的丢失。

  • 缺点

  • 图像变小

  • 边缘信息丢失

3.2.3 padding-零填充

零填充:在图片像素的最外层加上若干层0值,若一层,记做p =1。

  • 为什么增加的是0?

因为0在权重乘积和运算中对最终结果不造成影响,也就避免了图片增加了额外的干扰信息。

[structlog 文档]

[logging 文档]

这张图中,还是移动一个像素,并且外面增加了一层0。那么最终计算结果 可以这样用公式来计算:

5+2∗p−3+1=55 + 2 * p - 3 + 1 = 55+2∗p−3+1=5

P为1,那么最终特征结果为5。实际上 可以填充更多的像素,假设为2层,则

5+2∗2−3+1=75 + 2 * 2 - 3 + 1 = 75+2∗2−3+1=7

3.2.3.1 Valid and Same卷积

有两种两种形式,所以为了避免上述情况,大家选择都是Same这种填充卷积计算方式

  • Valid :不填充,也就是最终大小为

  • (N−F+1)∗(N−F+1)(N - F + 1) * (N - F + 1)(N−F+1)∗(N−F+1)

  • Same:输出大小与原图大小一致,那么NNNN+2PN + 2PN+2P

  • (N+2P−F+1)∗(N+2P−F+1)(N + 2P - F + 1) * (N + 2P - F + 1)(N+2P−F+1)∗(N+2P−F+1)

那也就意味着,之前大小与之后的大小一样,得出下面的等式

(N+2P−F+1)=N(N + 2P - F + 1) = N(N+2P−F+1)=N

[phonenumbers 文档]

P=F−12P = \frac{F -1}{2}P=​2​​F−1​​

所以当知道了卷积核的大小之后,就可以得出要填充多少层像素。

3.2.3.2 奇数维度的过滤器

通过上面的式子,如果F不是奇数而是偶数个,那么最终计算结果不是一个整数,造成0.5,1.5.....这种情况,这样填充不均匀,所以也就是为什么卷积核默认都去使用奇数维度大小

  • 1 1,3 3, 5 5,7 7

  • 另一个解释角度

[Tornado 文档]

  • 奇数维度的过滤器有中心,便于指出过滤器的位置

当然这个都是一些假设的原因,最终原因还是在F对于计算结果的影响。所以通常选择奇数维度的过滤器,是大家约定成俗的结果,可能也是基于大量实验奇数能得出更好的结果。

3.2.4 stride-步长

以上例子中 看到的都是每次移动一个像素步长的结果,如果将这个步长修改为2,3,那结果如何?

![](https://fileserver.developer.huaweicloud.com/FileServer/getFile/communitytemp/20250911/community/383/461/571/0001696944383461571.20250911085039.04695854637534923094980527812868:2025091109504

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。