【人工智能基础08】卷积神经网络习题:卷积神经网络计算、图像填充、卷积的表达与设计

文章目录

  • 1. 卷积核计算
  • 2. 卷积神经网络计算
  • 3. 卷积核关注的特征
    • 问题解答
    • 水平边缘检测与水平条纹检测
    • 45度条纹检测
  • 4. 图像检测
  • 5. 卷积网络是特殊的全连接网络
  • 6. 输出矩阵的三种填充方法
  • 7. 卷积设计
  • 8.9 成像公式
  • 10. 卷积的计算次数
  • 11. 全连接层的计算

1. 卷积核计算

在这里插入图片描述

  1. 卷积操作过程

    • 对于给定矩阵 ( 2 3 1 0 3 4 1 2 3 ) \begin{pmatrix}2&3&1\\0&3&4\\1&2&3\end{pmatrix} 201332143 和卷积核 ( 1 1 2 − 3 ) \begin{pmatrix}1&1\\2&-3\end{pmatrix} (1213),步长为(1)。
    • 按照卷积运算规则,从矩阵左上角开始依次取 2 × 2 2\times2 2×2子矩阵与卷积核(相对于位置元素)相乘再求和,得到卷积后的结果为 ( − 4 − 2 − 1 2 ) \begin{pmatrix}-4&-2\\-1&2\end{pmatrix} (4122)
    • 注意不是矩阵乘法。
  2. ReLU激活操作过程

    • ReLU函数为 y = max ⁡ ( 0 , x ) y = \max(0,x) y=max(0,x), 将卷积结果 ( − 4 − 2 − 1 2 ) \begin{pmatrix}-4&-2\\-1&2\end{pmatrix} (4122)的每个元素代入ReLU函数。
    • 经过计算,被ReLU激活后的结果为 ( 0 0 0 2 ) \begin{pmatrix}0&0\\0&2\end{pmatrix} (0002)

 

2. 卷积神经网络计算

在这里插入图片描述

在这里插入图片描述

 

3. 卷积核关注的特征

在这里插入图片描述

 

问题解答

从数学角度看,卷积操作是对图像局部区域的加权求和。当卷积核中的权重有正有负时,在进行加权求和时,能够突出显示图像中像素值变化较大的区域。

  1. 左边卷积核

    • 当这个卷积核在图像上滑动进行卷积操作时,它会对图像中的竖条纹状特征有较强的响应。
    • 原因是:在竖条纹区域,卷积核中的 1 1 1 − 1 -1 1会分别与条纹的亮部和暗部(亮部的像素值比较大,暗部的像素值比较小)对应相乘并求和,得到较大的响应值。例如,如果图像中有一条垂直的亮条纹,当卷积核的 1 1 1与亮条纹对应时,会产生较大的正值。
  2. 右边卷积核

    • 当这个卷积核在图像上滑动进行卷积操作时,它会对图像中的横条纹状特征有较强的响应。
    • 原因是:在横条纹区域,卷积核中的 1 1 1 − 1 -1 1会分别与条纹的亮部和暗部对应相乘并求和,得到较大的响应值。例如,如果图像中有一条水平的亮条纹,当卷积核的 1 1 1与亮条纹对应时,会产生较大的正值。

 

水平边缘检测与水平条纹检测

  1. 水平边缘检测卷积核
  • 典型的水平边缘检测卷积核如Sobel算子的水平版本 K e d g e − h o r i z o n t a l = ( − 1 0 1 − 2 0 2 − 1 0 1 ) K_{edge - horizontal}=\begin{pmatrix}-1&0&1\\-2&0&2\\-1&0&1\end{pmatrix} Kedgehorizontal= 121000121
  • 原理:它主要是检测图像中水平方向上像素值的急剧变化,也就是边缘。
    • 当这个卷积核在图像上滑动时,通过对覆盖区域内像素值的加权求和来判断是否存在水平边缘。
    • 例如,当它滑过图像中从 左到右(注意卷积核左负右正) 像素值有明显变化(如从暗到亮)的区域时,由于卷积核左侧是负数权重,右侧是正数权重,加权求和后(右侧)会得到较大的值,从而检测到水平边缘。
  • 特点:这种卷积核对水平方向上的像素值变化敏感,旨在找到边缘位置,其响应值在边缘处较大,在平滑区域较小。
  1. 检测水平条纹的卷积核
  • 例如 K s t r i p e − h o r i z o n t a l = ( 1 1 1 0 0 0 − 1 − 1 − 1 ) K_{stripe - horizontal}=\begin{pmatrix}1&1&1\\0&0&0\\-1&-1&-1\end{pmatrix} Kstripehorizontal= 101101101 可以用于检测水平条纹。
  • 原理: 它是通过对水平方向上的像素值进行特定加权求和来检测水平条纹。
    • 当该卷积核在图像上滑动时,如果遇到水平条纹,其正负权重区域会分别与条纹的亮部和暗部对应相乘并求和,得到较大的响应值。
    • 例如,对于一条水平亮条纹,卷积核中的正数权重(第一行)与亮条纹对应时会产生较大的正值。
  • 特点:这种卷积核侧重于检测水平方向上具有一定宽度和对比度的条纹,其响应值在水平条纹区域较大,在其他区域较小。
  1. 不同点总结
  • 设计目的:水平边缘检测卷积核的目的是找到水平方向上像素值的急剧变化(边缘),而检测水平条纹的卷积核是为了找到水平方向上具有一定宽度和对比度的条纹。
  • 权重分布: 水平边缘检测卷积核的权重分布是左右对称且有正负交替,以检测边缘(左右)两侧的像素值变化;检测水平条纹的卷积核权重分布则是水平方向上有明显的正负区分,用于匹配条纹的亮暗部分。
  • 响应结果: 水平边缘检测卷积核在图像的边缘处响应值大,在平滑区域响应值小;检测水平条纹的卷积核在水平条纹区域响应值大,在非条纹区域响应值小。

 

45度条纹检测

  1. 构建用于检测45°条纹的卷积核
  • 一个简单的卷积核可以是 ( 0 1 − 1 − 1 0 1 1 − 1 0 ) \begin{pmatrix}0&1&-1\\-1&0&1\\1&-1&0\end{pmatrix} 011101110
  • 原理
    • 斜对角线为0,因为卷积核的权重分布应该对 45° 方向上的像素值变化敏感。
    • 当这个卷积核在图像上滑动时,它会对45°方向上的像素值变化进行加权求和。
    • 对于45°亮条纹(从左上角到右下角方向),当卷积核的正数权重区域与亮条纹部分重合,负数权重区域与暗条纹部分重合时,加权求和会得到较大的响应值,从而检测到45°条纹。
  • 数学过程示例
    • 假设图像中有一个简单的45°亮条纹区域,条纹部分像素值为1,背景像素值为0。当卷积核在条纹区域滑动时,根据卷积操作规则,计算加权求和。
    • 以卷积核左上角与条纹左上角重合为例,卷积计算为 ( 0 × 0 + 1 × 1 + ( − 1 ) × 0 ) + ( ( − 1 ) × 0 + 0 × 1 + 1 × 0 ) + ( 1 × 0 + ( − 1 ) × 1 + 0 × 0 ) = 0 (0\times0 + 1\times1+(-1)\times0)+((-1)\times0 + 0\times1+1\times0)+(1\times0 + (-1)\times1+0\times0)=0 (0×0+1×1+(1)×0)+((1)×0+0×1+1×0)+(1×0+(1)×1+0×0)=0,随着卷积核的滑动,在条纹区域合适位置会得到较大的响应值。
  1. 其他可能的卷积核及改进方法
  • 还可以通过旋转、组合等方式得到更复杂的卷积核来更好地检测45°条纹。
  • 例如,将水平和垂直方向的Sobel卷积核进行旋转和组合,或者使用高斯差分(DoG)方法结合旋转来构建对45°条纹更敏感的卷积核,同时可以结合图像预处理(如旋转、缩放等)来增强45°条纹检测的效果。

 

4. 图像检测

在这里插入图片描述

在图像处理问题中,最常用的神经网络是卷积神经网络,如下原因

  1. 权值共享:减少参数量

  2. 局部连接: 卷积层中的神经元只与输入图像的局部区域相连接,这符合图像的局部特性。例如,在识别图像中的物体时,局部的像素特征往往能反映出物体的局部结构,卷积神经网络能够很好地捕捉这些局部特征。

  3. 平移不变性:这意味着无论目标物体在图像中的哪个位置出现,卷积核都能以相同的方式检测到它。例如,在人脸识别任务中,人脸出现在图像的左上角或右下角,卷积神经网络都能有效识别。

  4. 专为图像处理设计:它在图像分类、目标检测、图像分割等图像处理任务中都表现出很强的能力。例如,在著名的ImageNet图像分类竞赛中,基于卷积神经网络的模型取得了非常高的准确率。

相比之下:

  • 全连接神经网络(A选项)参数过多,容易过拟合,在图像处理中效率较低。
  • 图神经网络(B选项)主要用于处理图结构数据,而非图像数据。
  • 循环神经网络(D选项)主要用于处理序列数据,如自然语言处理中的文本数据等,不适用于图像处理。

 

5. 卷积网络是特殊的全连接网络

在这里插入图片描述

 

6. 输出矩阵的三种填充方法

输出图像的三种填充方法如下:

图像填充方法、合法填充、保持图像大小填充
在这里插入图片描述

有如下问题:
在这里插入图片描述

  1. 完整填充(full padding)

    • 输出大小公式: ( H i n + H f − 1 ) × ( W i n + W f − 1 ) × K o u t (H_{in}+H_f - 1)×(W_{in}+W_f - 1)×K_{out} (Hin+Hf1)×(Win+Wf1)×Kout
    • 解释: 在完整填充中,输入矩阵的四周会填充足够多的0,使得滤波器在输入矩阵上滑动时,每个位置都能进行卷积操作。
      • 对于高度方向,滤波器可以从最上方开始滑动,滑动的步数为 H i n + H f − 1 H_{in}+H_f - 1 Hin+Hf1步。同理,对于宽度方向,滑动步数为 W i n + W f − 1 W_{in}+W_f - 1 Win+Wf1步。
      • 输出通道数为 K o u t K_{out} Kout
  2. 保持图像大小填充(same padding)

    • 输出大小公式: H i n × W i n × K o u t H_{in}×W_{in}×K_{out} Hin×Win×Kout
    • 解释:在保持图像大小填充中,通过在输入矩阵四周填充合适数量的0,使得输出矩阵的大小与输入矩阵相同。 这意味着卷积操作后,输出矩阵的高度和宽度保持不变,仍为 H i n H_{in} Hin W i n W_{in} Win,通道数变为 K o u t K_{out} Kout
  3. 合法填充(valid padding)

    • 输出大小公式: ( H i n − H f + 1 ) × ( W i n − W f + 1 ) × K o u t (H_{in}-H_f + 1)×(W_{in}-W_f + 1)×K_{out} (HinHf+1)×(WinWf+1)×Kout
    • 解释: 在合法填充中,不进行额外的填充(除了可能在边缘处有必要的少量填充以保证滤波器能完整覆盖输入矩阵的局部区域)。
      • 对于高度方向,滤波器从输入矩阵的顶部开始,能够滑动的步数为 H i n − H f + 1 H_{in}-H_f + 1 HinHf+1步。同理,对于宽度方向,滑动步数为 W i n − W f + 1 W_{in}-W_f + 1 WinWf+1步。
      • 输出通道数为 K o u t K_{out} Kout

注意:输出通道数都为 K o u t K_{out} Kout

 

7. 卷积设计

在这里插入图片描述

  1. 卷积核设计
    • 采用三个 1 × 1 × 3 1×1×3 1×1×3的线性滤波器。
      • 1x1(每次处理多少)代表是卷积核矩阵的大小,即它一次只处理一个像素点
      • 3(有能力提取这个像素点的特征)代表输入通道数,那卷积核需要三个通道能够处理输入通道,以便输出指定目标
      • 3个滤波器(要提取多少个特征):因为需要输出RGB,每个通道都需要如上一个滤波器来输出指定要求的值,所以需要三个。
    • 这三个滤波器的权重分别为: 第一个滤波器: [ 0 , 0 , 1 ] [0, 0, 1] [0,0,1]、 第二个滤波器: [ 0 , 1 , 0 ] [0, 1, 0] [0,1,0]、第三个滤波器: [ 1 , 0 , 0 ] [1, 0, 0] [1,0,0]
  2. 卷积操作过程: 对于输入图像中的每个像素,其RGB值会与这三个滤波器进行卷积操作。以输入像素的RGB值 ( R , G , B ) (R, G, B) (R,G,B)为例:
    • 第一个滤波器 [ 0 , 0 , 1 ] [0, 0, 1] [0,0,1] ( R , G , B ) (R, G, B) (R,G,B)卷积,结果为 B B B
    • 第二个滤波器 [ 0 , 1 , 0 ] [0, 1, 0] [0,1,0] ( R , G , B ) (R, G, B) (R,G,B)卷积,结果为 G G G
    • 第三个滤波器 [ 1 , 0 , 0 ] [1, 0, 0] [1,0,0] ( R , G , B ) (R, G, B) (R,G,B)卷积,结果为 R R R
  • 这样,通过这三个滤波器的卷积操作,就实现了红色通道和蓝色通道值的对调。
  1. 验证
    • 对于输入像素 ( 255 , 128 , 0 ) (255, 128, 0) (255,128,0)
      • 第一个滤波器 [ 0 , 0 , 1 ] [0, 0, 1] [0,0,1]卷积结果: 0 0 0
      • 第二个滤波器 [ 0 , 1 , 0 ] [0, 1, 0] [0,1,0]卷积结果: 128 128 128
      • 第三个滤波器 [ 1 , 0 , 0 ] [1, 0, 0] [1,0,0]卷积结果: 255 255 255
      • 输出像素为 ( 0 , 128 , 255 ) (0, 128, 255) (0,128,255),符合要求。

 

8.9 成像公式

在这里插入图片描述
 

在这里插入图片描述

 

10. 卷积的计算次数

在这里插入图片描述

  1. 每个输出位置:需要进行大小为 H f × W f × K i n H_f×W_f×K_{in} Hf×Wf×Kin的向量之间的点积。

  2. 对于一个输出通道,总共有 H i n × W i n H_{in}×W_{in} Hin×Win个输出位置。 所以,对于一个输出通道,所需的乘法操作次数为 H f × W f × K i n × H i n × W i n H_f×W_f×K_{in}×H_{in}×W_{in} Hf×Wf×Kin×Hin×Win

  3. 考虑输出通道:因为总共有 K o u t K_{out} Kout个输出通道,所以总的乘法操作次数为 H f × W f × K i n × H i n × W i n × K o u t H_f×W_f×K_{in}×H_{in}×W_{in}×K_{out} Hf×Wf×Kin×Hin×Win×Kout

 

11. 全连接层的计算

  • 全连接层的每一个输出需要和输入同样大小的乘法操作,所以一共需要输入×输出数量的乘法操作,即 H i n 2 × W i n 2 × K i n × K o u t H_{in}^2 \times W_{in}^2 \times K_{in} \times K_{out} Hin2×Win2×Kin×Kout

  • 相比于卷积操作的 H f × W f × K i n × H i n × W i n × K o u t H_f \times W_f \times K_{in} \times H_{in} \times W_{in} \times K_{out} Hf×Wf×Kin×Hin×Win×Kout次,全连接操作乘法数除以卷积操作乘法数是 H i n × W i n H f × W f > 1 \frac{H_{in} \times W_{in}}{H_f \times W_f} > 1 Hf×WfHin×Win>1也就是说全连接需要更多的乘法计算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/889410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音乐网站设计与实现

文末获取源码和万字论文,制作不易,感谢点赞支持。 音乐网站设计与实现 摘 要 本音乐网站是针对目前音乐网站管理的实际需求,从实际工作出发,对过去的音乐网站管理系统存在的问题进行分析,结合计算机系统的结构、概念、…

【机器学习】在向量的流光中,揽数理星河为衣,以线性代数为钥,轻启机器学习黎明的瑰丽诗章

文章目录 线性代数入门:机器学习零基础小白指南前言一、向量:数据的基本单元1.1 什么是向量?1.1.1 举个例子: 1.2 向量的表示与维度1.2.1 向量的维度1.2.2 向量的表示方法 1.3 向量的基本运算1.3.1 向量加法1.3.2 向量的数乘1.3.3…

SpringBoot——分层解耦、IOC、依赖注入

三层架构 如下图&#xff0c;创建Dao的接口以及该接口的实现类&#xff0c;Service也一样 Dao // Dao接口 public interface UserDao {public List<String> findAll(); }// Dao接口的实现 public class UserDaoImpl implements UserDao {// 加载用户数据Overridepublic …

【数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;编写一个程序利用栈判断左、右圆括号是否配对。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;栈对括号的处理。 栈对括号的处理 &…

企业级日志分析系统ELK之ELK概述

ELK 概述 ELK 介绍 什么是 ELK 早期IT架构中的系统和应用的日志分散在不同的主机和文件&#xff0c;如果应用出现问题&#xff0c;开发和运维人员想排 查原因&#xff0c;就要先找到相应的主机上的日志文件再进行查找和分析&#xff0c;所以非常不方便&#xff0c;而且还涉及…

pyqt+ubuntu18.04+designer+测试是否安装成功

引用&#xff1a; Ubuntu Linux安装PyQt5并配置Qt Designer 在Visual Studio Code中使用PyQt5开发python GUI应用程序 Linux环境下在Vscode中安装和设置PyQt5插件 其中&#xff0c; 测试是否安装成功 1、设置好之后在vscode编辑器的左侧文件目录栏空白位置右键&#xff0…

torchaudio.load 段错误

使用 torchaudio.load 时出现崩溃&#xff0c;如图 解决&#xff1a; 安装 ffmpeg ​conda install ffmpeg -c conda-forge 尝试但没解决问题的方法包括 重装 cuda&#xff0c;重装 pytorch&#xff0c;安装 PySoundFile、SoundFile、sox。

React 第十六节 useCallback 使用详解注意事项

useCallback 概述 1、useCallback 是在React 中多次渲染缓存函数的 Hook&#xff0c;返回一个函数的 memoized的值&#xff1b; 2、如果多次传入的依赖项不变&#xff0c;那么多次定义的时候&#xff0c;返回的值是相同的,防止频繁触发更新&#xff1b; 3、多应用在 父组件为函…

Chrome webdriver下载-避坑

WebDriver以原生的方式驱动浏览器&#xff0c;不需要调整环境变量。 一、window版 1.chrome和chromedriver下载地址&#xff1a; Chrome for Testing availability 我下载的是如下两个安装包&#xff0c;解压即可。 2.导包 pip install selenium然后用python代码引用即可…

PyQt事件机制练习

一、思维导图 二、代码 import sysfrom PyQt6.QtTextToSpeech import QTextToSpeech from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QLineEdit from PyQt6 import uic from PyQt6.QtCore import Qt, QTimerEvent, QTimeclass MyWidget(QWidget):d…

【Rive】Android与Rive交互

1 Android与Rive交互的常用接口 1.1 RiveAnimationView参数 <app.rive.runtime.kotlin.RiveAnimationViewandroid:id"id/rive_view"android:layout_width"match_parent"android:layout_height"match_parent"android:adjustViewBounds"…

Maven、mybatis框架

一、Maven介绍 1.概念&#xff1a; Maven项目对象模型(POM)&#xff0c;可以通过一小段描述信息来管理项目的构建&#xff0c;报告和文档的项目管理工具软件。 2.为啥使用maven: 之前项目中需要引入大量的jar包。这些jar从网上下载&#xff0c;可能下载地址不同意。这些jar之间…

使用 Python 爬取某网站简历模板(bs4/lxml+协程)

使用 Python 爬取站长素材简历模板 简介 在本教程中&#xff0c;我们将学习如何使用 Python 来爬取站长素材网站上的简历模板。我们将使用requests和BeautifulSoup库来发送 HTTP 请求和解析 HTML 页面。本教程将分为两个部分&#xff1a;第一部分是使用BeautifulSoup的方法&am…

HCIA-Access V2.5_2_2网络通信基础_TCP/IP协议栈报文封装

TCP/IP协议栈的封装过程 用户从应用层发出数据先会交给传输层&#xff0c;传输层会添加TCP或者UDP头部&#xff0c;然后交给网络层&#xff0c;网络层会添加IP头部&#xff0c;然后交给数据链路层&#xff0c;数据链路层会添加以太网头部和以太网尾部&#xff0c;最后变成01这样…

数据湖治理最佳实践

如果没有最佳实践&#xff0c;存储可能会变得无法维护。自动化数据质量、生命周期和隐私功能可持续清理/移动数据湖中的数据。数据湖正成为企业从大数据中提取价值的一种日益可行的解决方案&#xff0c;对于早期采用者和新用户来说都是合理的下一步。在独立的逻辑区域中随时可用…

ssd202d-badblock-坏块检测

这边文章讲述的是坏快检测功能 思路&#xff1a; 1.第一次烧录固件会实现跳坏块&#xff0c;但是后续使用会导致坏块的产生&#xff1b; 于是我在uboot环境变量添加了两个变量来控制坏快 lb_badnum //坏块个数 lb_badoff //坏块所在位置 2.第一次开机会根据lb_badnum是否…

鸿蒙ArkTS如何实现数据可视化:饼状图/柱状图/折线图

鸿蒙数据可视化系列 在我们鸿蒙APP开发中&#xff0c;经常需要使用到一些图表的开发&#xff0c;本文主要介绍使用 McCharts 框架绘制柱状图的方法 配套指导视频地址&#xff1a;鸿蒙数据可视化系列-McCharts使用介绍_哔哩哔哩_bilibili 1. 第三方库介绍 1.1. McCharts Mc…

unity打包sdk热更新笔记

Unity3D项目Plugins目录组织 https://blog.csdn.net/linxinfa/article/details/102978005 IPreprocessBuild 继承提供打包前&#xff0c;打包后接口 BuildAssetBundles UnityWebRequest’s DownloadHandlerAssetBundle / LoadFromFile / LoadFromMemoryAsync 数据完整性校…

使用秘钥登录服务器

在我们测试或生产环境中&#xff0c;为了服务器安全性&#xff0c;有时可能需要以 SSH 密钥的方式登录服务器&#xff0c;接下来&#xff0c;将演示如何通过 SSH 私钥的方式来远程服务器。 一、远程服务器生成密钥对 1、首先在目标远程服务器下生成 SSH 密钥对 ssh-keygen然…

谷粒商城—分布式基础

1. 整体介绍 1)安装vagrant 2)安装Centos7 $ vagrant init centos/7 A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on…