深度学习笔记之卷积神经网络(一)卷积函数与图像卷积操作

news2024/11/17 15:48:04

深度学习笔记之卷积神经网络——卷积函数

  • 引言
    • 什么是卷积
    • 图像卷积操作

引言

从本节开始,将介绍卷积神经网络。本节将介绍卷积函数

什么是卷积

卷积,是一种通过两个函数 f ( ⋅ ) 和 f(\cdot)和 f() g ( ⋅ ) g(\cdot) g()生成第三个函数 h ( ⋅ ) h(\cdot) h()数学运算。而这个数学运算本质上是一种积分变换

这里选择两个例子:

  • 此时我们手中有 2 2 2组牌,每组牌中包含 5 5 5张牌,并且牌中的数字分别是 1 , 2 , 3 , 4 , 5 1,2,3,4,5 1,2,3,4,5
    两组牌堆
    假设各 CardPile \text{CardPile} CardPile中每张牌选择的概率是相同的,我们的任务是: CardPile1 \text{CardPile1} CardPile1中随机选择一张牌,再从 CardPile2 \text{CardPile2} CardPile2中随机选择一张牌,两张牌中数字之和等于 6 6 6概率是多少 ? ? ?
    我们可以通过概率的方式进行求解:
    每个 CardPile \text{CardPile} CardPile中,每张牌被选择的概率均是 1 5 \begin{aligned}\frac{1}{5}\end{aligned} 51,我们令变量 C 1 \mathcal C_1 C1表示 CArdPile1 \text{CArdPile1} CArdPile1中选择牌的数字;令 C 2 \mathcal C_2 C2表示 CardPile2 \text{CardPile2} CardPile2中选择牌的数字。那么上述任务的概率结果可表示为如下形式:
    P ( C 1 + C 2 = 6 ) = P ( C 1 = 1 ) ⋅ P ( C 2 = 5 ) + P ( C 1 = 2 ) ⋅ P ( C 2 = 4 ) + ⋯ + P ( C 1 = 5 ) ⋅ P ( C 2 = 1 ) ⏟ 5 项 = ∑ i = 1 5 P ( C 1 = i ) ⋅ P ( C 2 = 6 − i ) = 5 ⋅ 1 5 ⋅ 1 5 = 1 5 \begin{aligned} \mathcal P(\mathcal C_1 + \mathcal C_2 = 6) & = \underbrace{\mathcal P(\mathcal C_1 = 1) \cdot \mathcal P(\mathcal C_2 = 5) + \mathcal P(\mathcal C_1 = 2) \cdot \mathcal P(\mathcal C_2 = 4) + \cdots + \mathcal P(\mathcal C_1 = 5) \cdot \mathcal P(\mathcal C_2 = 1)}_{5项} \\ & = \sum_{i=1}^5\mathcal P(\mathcal C_1 = i) \cdot \mathcal P(\mathcal C_2 = 6-i) \\ & = 5 \cdot \frac{1}{5} \cdot \frac{1}{5} \\ & = \frac{1}{5} \end{aligned} P(C1+C2=6)=5 P(C1=1)P(C2=5)+P(C1=2)P(C2=4)++P(C1=5)P(C2=1)=i=15P(C1=i)P(C2=6i)=55151=51
    基于该示例,我们可以将任务看做是目标值的一个函数:
    P ( C 1 + C 2 = 6 ) ⇒ h ( x = 6 ) \mathcal P(\mathcal C_1 + \mathcal C_2 = 6) \Rightarrow h(x = 6) P(C1+C2=6)h(x=6)
    而对应选择各 CardPile \text{CardPile} CardPile概率结果分别对应不同的函数:
    P ( C 1 = i ) ⇒ f ( i ) P ( C 2 = 6 − i ) = g ( x − i ) ( x = 6 ) \mathcal P(\mathcal C_1 = i) \Rightarrow f(i)\quad \mathcal P(\mathcal C_2 = 6-i) = g(x -i) \quad (x=6) P(C1=i)f(i)P(C2=6i)=g(xi)(x=6)
    最终将上述任务转化为如下形式:
    h ( x = 6 ) = ∑ i = 1 5 f ( i ) ⋅ g ( x − i ) = f ( x ) ∗ g ( x ) \begin{aligned} h(x = 6) & = \sum_{i=1}^5 f(i) \cdot g(x - i) \\ & = f(x) *g(x) \end{aligned} h(x=6)=i=15f(i)g(xi)=f(x)g(x)
    而上式中的 ∗ * 就表示卷积( Convolution \text{Convolution} Convolution)。这个卷积结果函数 h ( x ) h(x) h(x)可被描述为:函数 f ( ⋅ ) f(\cdot) f() g ( ⋅ ) g(\cdot) g()经过翻转、平移重叠部分函数值乘积对重叠长度的积分。
    上述例子当 x = 6 x = 6 x=6时, f ( ⋅ ) f(\cdot) f() g ( ⋅ ) g(\cdot) g()重叠部分有哪些 ? ? ?
    x = 6 x=6 x=6任务目标下,每一个函数 f ( i ) f(i) f(i)在范围内都能找到对应的‘重叠部分’ g ( x − i ) g(x-i) g(xi).
    重叠部分
    如果是 x = 7 x=7 x=7 ? ? ?
    很明显,重叠部分小了。因为 f ( 1 ) f(1) f(1)在任务 x = 7 x=7 x=7中范围内没有与其构成的重叠部分 g ( 6 ) g(6) g(6).
    x=7重叠部分
    对应的卷积结果表示如下:
    h ( x = 7 ) = ∑ i = 1 5 f ( i ) ⋅ g ( x − i ) = f ( 1 ) ⋅ g ( 6 ) ⏟ g ( 6 ) = P ( C 2 = 6 ) = 0 + ∑ i = 2 5 f ( i ) ⋅ g ( x − i ) = 4 25 \begin{aligned} h(x = 7) & = \sum_{i=1}^5 f(i) \cdot g(x - i) \\ & = \underbrace{f(1) \cdot g(6)}_{g(6)=\mathcal P(\mathcal C_2 = 6) =0} + \sum_{i=2}^5 f(i) \cdot g(x-i) \\ & = \frac{4}{25} \end{aligned} h(x=7)=i=15f(i)g(xi)=g(6)=P(C2=6)=0 f(1)g(6)+i=25f(i)g(xi)=254

  • 假设某个人一天的进食情况表示如下。其中横坐标表示时间;纵坐标表示进食的量(这里使用摄入的能量表示,单位是 Kcal \text{Kcal} Kcal):
    图像来源见下方链接,侵删,下同。
    某人一天的进食情况
    很明显,这个人摄入的能量和时间长度 t t t之间构成了一个复杂函数 f ( t ) f(t) f(t)。其中的三个波峰可以理解为正餐(三餐所在时刻)他的能量摄入情况;其余的时间他也没闲着,也在吃一些零食来摄入能量,只不过要低于正餐时能量的摄入。

    当然,人在摄入能量的同时,也在消耗能量。这里以最简单的食物消化为例,不包含如跑步等其他消耗能量的方式,随着时间推移,他的能量消耗情况表示为如下形式:
    需要注意的是,‘能量消耗’图像中的横坐标 t t t和‘摄入能量’图像中的横坐标 t t t不是相同的参考系。一个是‘时刻’,一个是时间跨度。
    某人的能量消耗情况
    其中横坐标表示时长,纵坐标表示能量消耗的比率。例如,在刚吃完食物那一刻,还没有来得及消耗,此时的比率为 1 1 1。随着时间的推移,能量的消耗,比率值逐渐降低,能量越来越少。

    至此,具体任务描述:下午两点时,这个人剩余多少能量 ? ? ?

    • 如果只看他的摄入,对应的能量就是一个从开始到下午两点之间的能量摄入的积分
      摄入能量的积分
    • 但是他在摄入能量的时候,也在消耗之前摄入的能量。 例如中午 12 12 12,他吃了一碗米饭。到下午两点已经过去 2 2 2个小时,这个米饭的能量自然存在因消化产生的能量消耗
      吃饭时,消化产生的能量消耗
      那么具体消化了多少呢?需要从消化函数 g ( t ) g(t) g(t)中寻找 2 2 2个小时对应的消化比率
      消化比率计算
      至此,可以知道:中午 12 12 12点摄入的能量在 14 14 14点时的剩余能量 f ( 12 ) ⋅ g ( 14 − 12 ) f(12) \cdot g(14 - 12) f(12)g(1412)
      但这仅仅是一个时刻的摄入。其他时刻也在摄入能量。因而我们需要将所有时刻摄入的能量,经过消化比率对能量进行调整(加权),最终得到 14 14 14点时实际剩余的能量:
      由于时刻是一个连续变量,从而使用积分的形式描述。而 x x x则表示该示例中定积分 0 → t 0\to t 0t之间的任意一个时刻。
      ∫ 0 t = 14 f ( x ) ⋅ g ( t − x ) d x \int_0^{t=14} f(x) \cdot g(t-x) dx 0t=14f(x)g(tx)dx

根据上述两个例子,我们可以发现它们的共性根据任务的描述,基于函数 f ( x ) f(x) f(x)中的某个值 x x x,需要在 g ( ⋅ ) g(\cdot) g()中找到对应的结果对 f ( x ) f(x) f(x)进行修饰/描述,最终将这些被修饰的结果相加。

图像卷积操作

关于图像的描述,我们可以将其视作一个三维矩阵。它的维度具体表示为 ( H , W , C ) (\mathcal H,\mathcal W,\mathcal C) (H,W,C),其中 H \mathcal H H表示图片的 ( Height ) (\text{Height}) (Height),也就是矩阵的行数; W \mathcal W W表示图片的 ( Width ) (\text{Width}) (Width),表示矩阵的列数。 C \mathcal C C表示图片的通道数

  • 如果图像是黑白图像,那么图片通道数 C = 1 \mathcal C = 1 C=1,该随机变量可选取(0-255)的整数结果表示基于黑白颜色之间的颜色信息;
  • 如果图像是彩色图像,那么图片的通道数 C = 3 \mathcal C = 3 C=3,每个通道表示图片的一种颜色 ( RGB ) (\text{RGB}) (RGB),每个颜色同样选取(0-255)的整数结果表示对应颜色的信息。而三个通道确定的数值结果就是像素点的颜色信息。

图像卷积操作是使用一个点阵(这里以 H , W \mathcal H,\mathcal W H,W均为3的矩阵为例)与图像矩阵进行操作,这个点阵也被称作卷积核 ( Convolution Kernel ) (\text{Convolution Kernel}) (Convolution Kernel)

  • 将卷积核在原始图像上,卷积核上的元素与原图像所映射的元素对应位置相乘,再将所有位置的乘积结果相加。而计算结果作为一个新的像素值,作为卷积结果的输出。
    图像卷积操作
  • 很明显,这种相乘再相加的操作就是卷积计算的思想。同理,将当前卷积结果计算完成后,继续向其他位置平移,从而得到新的像素结果。最终能够得到由新的像素结果构成的新的图像。

不可否认,这个操作看起来是简单的。并且也能从中观察到卷积操作的影子,但问题在于:为什么要用卷积去处理这个事情,这种操作背后的物理意义是什么 ? ? ?

回顾上面吃饭的例子,可通过观察发现:描述食物消化的函数是稳定的,人的消化函数不会发生剧烈的变化胖子和瘦子他们的消化函数可能存在差别,但不会出现一天一种结果;相反,人摄入能量的函数相比于消化函数存在更大的波动。

因而上面的卷积函数可以理解为:从时间角度观察,某一时刻的卷积结果可看做之前时刻对该时刻结果影响的叠加,而每一个叠加的项是由当前时刻的状态 f ( x ) f(x) f(x)与描述其规律 g ( t − x ) g(t -x) g(tx)加权结果

如果从空间角度观察呢 ? ? ? 很明显图像数据就可看作摄入能量函数,各个图像某位置的像素点的差异是较大的;但是我们的卷积核是确定的,我们可以根据不同的卷积核描述不同的任务,但相同任务下对卷积核的描述是稳定的

而将卷积核与被卷积核覆盖的像素点做卷积最终生成一个像素点这个过程可以描述为这个生成的新像素点包含了该位置周围的像素点信息,也就是说,卷积核规定了周围像素点如何对该像素点产生影响的
即该位置各个方向的像素点信息通过‘某种规律加权的方式’映射在了该位置上。

一个明显的例子就是平滑操作。它的卷积核可表示为如下形式(示例):平滑操作
这个卷积核对应的卷积操作就是将被卷积核覆盖的像素点取均值。最终卷积后产生的新图像的结果会存在一种模糊的效果。

相关参考:
卷积——百度百科
从“卷积”、到“图像卷积操作”、再到“卷积神经网络”,“卷积”意义的3次改变

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

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

相关文章

备战花了2个月,春招3轮顺利拿下字节offer

PART1:个人情况简介 菜 J 一枚,本硕都是计算机(普通二本),2021 届应届硕士,软件测试方向。个人也比较喜欢看书,技术书之类的都有看,最后下面也会推荐一些经典书籍。 先说一下春招结…

Docker--harbor私有仓库管理与部署

目录 一、本地私有仓库 搭建本地私有仓库 Docker容器的重启策略 二、Harbor 1、什么是Harbor 2、Harbor特性 3、Harbor的构成 三、Harbor部署 实验步骤 1、安装Docker-Compose服务 2、部署Harbor服务 1、下载或上传Harbor安装程序 2、修改Harbor安装的配置文件 3、…

day26_mysql

今日内容 零、 复习昨日 一、MySQL 一、引言 1.1 现有的数据存储方式有哪些? Java程序存储数据(变量、对象、数组、集合),数据保存在内存中,属于瞬时状态存储。 文件(File)存储数据&#xff0c…

多款智能骑行终端齐登场,移远通信闪亮第31届中国国际自行车展览会

近年来,自行车、电动车市场火爆,随着数字化、智能化的持续深入,更具科技感的骑行工具受到了越来越多年轻一代的青睐。5月5-8日,以" 更安全、更智能、更低碳 " 为主题的第 31 届中国国际自行车展览会在上海新国际博览中心…

Java连接顺丰开放平台

今天使用Java去访问顺丰的开放平台时,JSON转换一直不成功,最终发现是 可以看到这里是 "apiResultData": "{\"success\": .........它是以 " 开头的!!!如果是对象的话,那么…

Zookeeper初识

序 Zookeeper是什么,Zookeeper有什么用?因为在研究Zookeeper源码之后,就要去研究Dubbo源码,而Dubbo必然用到了Zookeeper,而我在写这篇博客时,我也是一个Zookeeper小白,我也有7年开发经验了&…

将ROS1和ROS2安装到同一个ubuntu系统中,ROS2安装

1. 本文测试环境: ubuntu:20.04,虚拟机 ROS1:noetic ROS2:foxy 2. 先说结论 ROS1 与 ROS2 共存,需要考虑三个问题: 1) 不同Ubuntu版本,有不同版本的ROS1和ROS2推荐,尽量不要任性地乱装; 2)ROS1和ROS2安装过程中,是否会出现文件“删改”的问题?目前使用下来,并…

章节1:PHP反序列化渗透与防御

章节1:PHP反序列化渗透与防御 1.1-PHP类与对象 类Class 一个共享相同结构和行为的对象的集合。 对象Object 类的实例 1.2-PHP Magic函数 Magic Methods https://www.php.net/__sleep 函数作用 函数作用__construct当一个对象创建时被调用__destruct当一个对象…

Linux_红帽8学习笔记分享_10(SELinux管理与防火墙)

Linux_红帽8学习笔记分享_10(SELinux管理与防火墙) 文章目录 Linux_红帽8学习笔记分享_10(**SELinux管理与防火墙**)1.Linux系统的安全机制1.1 Filesystem1.2 Service1.3 Firewall1.4 SELinux 2.SElinux理论概述3.SElinux的配置文件3.1 SELINUX参数3.2 SELINUXTYPE参数 4.查看和…

网络安全行业职位解析:如何选择适合自己的职业发展路径?

前言 网络安全行业发展迅速,各种职位层出不穷,这给刚入门的小伙伴带来了很大的困惑:我应该选择哪个职位?如何才能在这个行业立足并获得高薪工作?如果你也有这些疑惑,那么恭喜你,来到了正确的地…

git push 上去的文件操作

先在git 创建一个仓库,仓库创建好后有一个快速上手的页面 注意第一个是你的登录账号和密码这个是账号和密码这个是你这个仓库的地址 接下来在你要上传的文件右键git bash here 进入 1. 先初始化进入 git init 2.再登录和输入你的密码登录好了,可以再初…

Java笔记_17(异常、File)

Java笔记_17 一、异常1.1、异常体系介绍1.2、编译时异常和运行时异常1.3、异常的作用1.4、异常的处理方式1.5、捕获异常的灵魂四问1.6、异常中的常见方法1.7、抛出处理1.8、异常-练习(键盘录入数据)1.9、自定义异常 二、File2.1、File的概述和构造2.2、F…

《Java虚拟机学习》 java代码的运行过程

1. Java文件转换 当我们保存java文件后,首先由编译器编译成class文件,然后通过Java虚拟机将class文件转换成字节码文件 2.Java虚拟机是怎么运行Java文件 首先将java文件加载到java虚拟机中,然后由虚拟机将类元信息存储在 虚拟机的方法区中。…

多态小Tips

目录 1.虚函数 2. 设置为虚函数 3.多态 4.多态类型的调用 5.抽象类和纯虚函数 6.虚表 7.练习题 1.虚函数 虚函数是被virtual修饰的类成员函数 virtual关键字只在声明时加上,在类外实现时不能加。 static和virtual不能同时使用。 2. 设置为虚函数 首先&#xff0c…

企业网盘选购攻略,如何选择最适合你的云存储服务?

在如今的企业办公中,每天都会产出各种不同类型的文件,传统纸质文件的管理方式,不仅不方便协作,而且容易丢失。于是企业将目光转向企业网盘工具,企业网盘的热门肯定了其在文件管理与协作方面的表现。那么企业网盘哪个好…

网络安全(非常详细)从零基础入门到精通,看完这一篇就够了。

学习网络安全方向会遇到哪些问题? 1.打基础的时间长 学基础花费了很长的时间,光学语言都有好几门,有的人会止步于学习linux系统及命令的路上,更多的人会停在学习语言上面; 2.知识点掌握的不够清楚 对于网络安全基础…

OpenPCDet系列 | 5.模型前向传播流程

文章目录 前向传播流程1. 模型初始化2. 模型训练前向传播前向传播流程 这里以PointPillars模型为例,在PointPillars模型中主要划分了以下4个主要的模块,以下某块首先会在build_network中进行初始化,然后在具体前向传播时通过forward函数进行。下面进行区分。 PointPillars…

TCP/IP网络编程(二)

TCP/IP网络编程读书笔记 第7章 优雅地断开套接字连接7.1 基于TCP的半关闭7.1.1 单方面断开连接带来的问题7.1.2 套接字和流(Stream)7.1.3 针对优雅断开的shutdown函数7.1.4 为何要半关闭7.1.5 基于半关闭的文件传输程序 7.2 基于Windows的实现7.3 习题 第…

揭秘|从帕丽斯·希尔顿引领其帝国进入元宇宙学到的品牌建设经验

你是否曾想过,元宇宙是如何与世界上的知名品牌和名人达成合作的?在本期的文章中,我们邀请了 11:11 媒体的 Web3 和元宇宙总监 Cynthia Miller,一起探讨帕丽斯希尔顿如何通过 Parisland 和 Cryptoween 将她的帝国带入 The Sandbox&…

嵌入式学习笔记——IIC通信

IIC通信 前言IIC概述通信特征物理拓扑结构IIC通信的流程IIC的特点: STM32的IIC通信GPIO模拟IICIIC的时序组成(主机对从机写入数据)1.起始信号2.器件地址与读写位3.从机应答信号5.传输的数据与结束信号 IIC的时序组成(主机对从从机…