卷积基础知识总结

news2024/11/26 1:34:57

卷积是卷积神经网络中的核心模块,卷积的目的是提取输入图像的特征,如下图所示,卷积可以提取图像中的边缘特征信息。卷积也称为过滤器,即Filter
在这里插入图片描述

1 卷积的计算方法

在这里插入图片描述
在这里插入图片描述
卷积运算本质上就是在滤波器和输入数据的局部区域间做点积
在这里插入图片描述

注意:

  • 卷积核中的数字的来源跟前文中的权重w相同,刚开始初始化一个值(初始化方法跟权重的初始化方法相同),然后再通过不断的学习和反向传播进行更新。
  • 卷积核/过滤器大小,一般会选择为奇数(因为尺寸为奇数的卷积核可以找到中心点),比如有1 * 1, 3 * 3, 5 * 5 ,一般选用尺寸较小的卷积核,比如3 * 3的核使用的最多,因为核越大所包含的参数就越多。

左上角的点计算方法:
在这里插入图片描述
同理可以计算其他各点,得到最终的卷积结果,
在这里插入图片描述
最后一点的计算方法是:
在这里插入图片描述

注意:因为每个卷积核都会带一个偏置,这里计算的时候默认为偏置值为0,如果偏置不为0,还需要加上偏置值

2 padding

在上述卷积过程中,特征图比原始图减小了很多,我们可以在原图像的周围进行padding,来保证在卷积过程中特征图大小不变。
在这里插入图片描述

3 stride

按照步长为1来移动卷积核,计算特征图如下所示:
在这里插入图片描述
如果我们把stride增大,比如设为2,也是可以提取特征图的,如下图所示:
在这里插入图片描述
步长越大,特征图会变得越小

4 多通道卷积

实际中的图像都是多个通道组成的,我们怎么计算卷积呢?
在这里插入图片描述
计算方法如下:当输入有多个通道(channel)时(例如图片可以有 RGB 三个通道),卷积核需要拥有相同的通道数(channel),每个卷积核 channel 与输入层的对应 channel 进行卷积,将每个 channel 的卷积结果按位相加得到最终的 特征图(Feature Map)。注意,因为每个卷积核都会带一个偏置,这里计算的时候默认为偏置值为0,如果偏置不为0,还需要加上偏置值

在这里插入图片描述

5 多卷积核卷积

如果有多个卷积核( filter)时怎么计算呢?当有多个卷积核时,每个卷积核学习到不同的特征,对应产生包含多个 特征图,也就是说最终产生的特征图有多个通道,(比如为了识别数字“八”,因为它由两个特征:一撇和一捺,那么就用两个卷积核分别来识别这两个特征)

例如下图所示,输入图像有3个通道,同时有2个卷积核。对于每个卷积核,先在输入3个通道分别作卷积,再将3个通道结果加起来得到卷积输出。所以最后的输出特征图 ( Feature Map)有两个 通道(channel)。
所以对于某个卷积层,无论输入图像有多少个通道,输出图像通道数总是等于卷积核数量!

在这里插入图片描述

6 特征图大小

输出特征图的大小与以下参数息息相关:

  • size:卷积核/过滤器大小,一般会选择为奇数(因为尺寸为奇数的卷积核可以找到中心点),比如有1 * 1, 3 * 3, 5 * 5 ,一般选用尺寸较小的卷积核,比如3 * 3的核使用的最多,因为核越大所包含的参数就越多。
  • padding:零填充的大小 (这里的大小指的是原始图像单侧外围厚度,比如下例中padding大小为1)
  • stride:步长

那计算方法如下图所示:

在这里插入图片描述

注意:

  • 上面的D1是输入特征图的通道数;D2是输出特征图的通道数,它等于卷积核(Filter)的数量
  • 上面公式最终的计算结果是向下取整

例如:输入特征图为5x5,卷积核为3x3,外加padding 为1,步长为1,则其输出特征图尺寸为:
在这里插入图片描述
如果想让卷积前后的特征图的尺寸不发生变化,那么可以设置 padding=( F-1 )/2,并且步长stride=1

7 pytorch中对应的API

nn.Conv2d(in_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1,bias=True,padding_mode='zeros')

功能:对多个二维信息(图像)进行二维卷积

  • in_channels: 输入通道数
  • out_channels: 输出通道数,等价于卷积核个数
  • kernel_size: 卷积核尺寸
  • stride: 步长
  • padding: 填充个数,加入padding的主要作用是保持输入输出图像的尺寸不变
  • dilation: 空洞卷积大小
  • groups: 分组卷积设置,它常用于模型的轻量化
  • bias: 偏置

8 3D卷积

上面所讲的内容都是常规的2D卷积,本节着重讲解一下3D卷积。
在讲解3D卷积之前,我们先了解一下3D图像,3D图像比2D图像多了个一个维度,除了宽和高之外还有深度。这里的深度其实就是将相同尺寸的多张图片堆叠在一起,如果堆叠n张图片,那么深度就是n

3D图像通常是由多帧(单/多通道)的frame-like数据(视频帧),所以它的深度其实代表的就是帧数

所以2d图像的输入或输出shape=[B,C,H,W],3d图像的输入或输出shape=[B,C,D,H,W],其中D就是depth(深度),这里的depth就是要堆叠出多少张图片。

如下图所示,将3张单通道的图片堆叠在一起(D=3),处理这样的数据就需要一个3D卷积核,3D卷积核也有对应的深度,比如下图中的3D卷积核深度是2,也就是说它每次要扫描2张图片
在这里插入图片描述
再如下图所示,将5张单通道的图片堆叠在一起(D=5),处理这样的数据就需要一个3D卷积核,3D卷积核也有对应的深度,比如下图中的3D卷积核深度是2,也就是说它每次要扫描2张图片
在这里插入图片描述
3D卷积计算过程:

3D convolution的使用场景一般是多帧(单/多通道)的frame-like数据(视频帧),且输出也是多帧,依次对连续k帧的整个通道同时执行卷积操作;3D卷积在执行时不仅在各自的通道中共享卷积核,而且在各帧(连续k帧)之间也共享卷积核(2D卷积在执行时是在各自的通道中共享卷积核)

假设现在有一个3帧的画面,且每一帧有2个通道,卷积核的shape=[D,H,W]=[2,3,3],步长为1,padding=0,它的计算过程如下:
在这里插入图片描述
在这里插入图片描述
pytorch中对应的API:

torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)

Conv3d和Conv3d的参数含义是完全相同的,如下所示:

  • in_channels: 输入通道数
  • out_channels: 输出通道数,等价于卷积核个数
  • kernel_size: 卷积核尺寸
  • stride: 步长
  • padding: 填充个数,加入padding的主要作用是保持输入输出图像的尺寸不变
  • dilation: 空洞卷积大小
  • groups: 分组卷积设置,它常用于模型的轻量化
  • bias: 偏置

代码演示:

  • 示例1
#3D卷积的用法
import torch
import torch.nn as nn

# 随机输入,它的shapo=[B,C,D,H,W]=[32,3,6,224,224]
net_input = torch.randn(32, 3, 6, 224, 224)

#卷积层输入通道数是3,输出通道数是64
# 3D卷积核的shape=(D,H,W)=(3,3,3),由于D=3,所以卷积核每次会同时处理三张图片。D,H,W三个维度的步长都是1
conv = nn.Conv3d(3, 64, kernel_size=3, stride=1, padding=1)
net_output = conv(net_input)
print(net_output.shape) 
 

#输出结果如下,shape=[B,C,D,H,W]=[32, 64, 5, 112, 112],相当于每一个维度上的卷积核大小都是3,步长都是1,pad都是1
torch.Size([32, 64, 6, 224, 224])
  • 示例2
# 3D卷积核的shape=(D,H,W)=(2,3,3),由于D=3,所以卷积核每次会同时处理2张图片。D,H,W三个维度的步长分别是2,3,3
conv = nn.Conv3d(3, 64, (2, 3, 3), stride=(1, 2, 2), padding=(0, 1, 1))
net_output = conv(net_input)
print(net_output.shape) 
#输出结果
torch.Size([32, 64, 5, 112, 112])

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

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

相关文章

MyBatis介绍与安装下载

目录 MyBatis 介绍 MyBatis 主要特点 MyBatis 下载 创建 Maven 工程 IDEA 连接数据库 导入JAR文件到项目 MyBatis 介绍 MyBatis是一种开源的Java持久化框架,用于将SQL数据库访问和映射任务与Java对象之间的映射分离。它提供了一种简单的方式来对数据库进行操…

消息中间件的首选之一:探索RocketMQ的优势和特性

​​​​​​​ 1、简介 RocketMQ 是一款开源的分布式消息队列系统,由阿里巴巴集团开发并开源。它是为了满足大规模分布式系统中的消息通信和异步解耦需求而设计的,具有高吞吐量、低延迟、可靠性强等特点。下面将详细介绍 RocketMQ 的架构、组件和关键特…

【网络进阶】Posix API与网络协议栈(三)

文章目录 1. 网络攻击和POSIX API与网络协议栈的关系1.1 网络攻击的基本概念和它们对协议栈的影响1.2 分布式拒绝服务(DDoS)攻击和网络协议栈1.3 地址解析协议(ARP)欺骗和POSIX API 2. 网络协议栈的理解和划分2.1 OSI七层模型2.2 …

AI 边缘计算控制器GEAC91

1 产品概览 产品概览 GEAC91 AI边缘计算控制器是一款基于 NVIDIA Jetson AGX Xavier处理 器、面向智能边缘计算应用场景的解决方案。 GEAC91控制器具有 控制器具有 GMSL2、 千兆网口CAN总线、 RS232、RS422、 USB3.0、USB2.0、SD卡等丰富的外设接口 ,支持常见激光雷…

记录--不定高度展开收起动画 css/js 实现

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 不定高度展开收起动画 最近在做需求的时候,遇见了元素高度展开收起的动画需求,一开始是想到了使用 transition: all .3s; 来做动画效果,在固定高度的情况下&#xf…

霍尔闭环电流传感器在电动观光旅游车上的应用

摘要:本文介绍了基于霍尔闭环原理,即磁平衡式原理的电流传感器在电动观光旅游车上的使用方法,替代传统的霍尔器件,较好的解决了电动车行业现有霍尔传感器的基本问题,在稳定性上更加优越。 关键词:霍尔闭环…

2022 年首届“钉钉杯”大学生大数据挑战赛B题:航班数据分析与预测——国奖论文代码分享

2023年的钉钉杯挑战赛马上要来了~这里给大家分享一下去年的国奖论文思路与代码 摘要: 随着民航事业的迅速发展 , 飞机出行已成为未来发展的一种必然趋势,然而近年来, 航班延误现象频频发生,成为困扰机场和航空公司的难题。对航班…

Idea项目application.properties配置文件默认GBK,如何设置默认为UTF-8编码

简述:java程序在项目中一般设置都是UTF-8编码格式,但是项目application.properties 文件默认是GBK,需要手工修改默认编码格式 步骤: file->setting->editor->file encodings下,勾选transparent native-to-ascll conver…

AR远程协助平台运用到建筑领域能带来哪些帮助?

随着科技的不断发展,远程协同培训已经成为了一种越来越受欢迎的学习方式。在建筑施工领域中,这种学习方式同样具有很大的应用价值。本文将探讨AR远程协助平台在建筑施工中的应用。 首先,AR远程协助平台可以提高建筑施工的效率和质量。传统的…

Java学习之Varargs机制

概述 Varargs,即variable number of arguments,variable arguments。中文一般译为,可变长度参数,或简称可变参数,参数具体来说是形参。 自JDK5引入,借助这一机制,可以定义能和多个实参相匹配的…

基于Java+SpringBoot+Vue的流浪动物救助平台设计与实现

博主介绍:✌擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案…

【前端|CSS系列第2篇】CSS零基础入门之常用样式属性

欢迎来到CSS零基础入门系列的第二篇博客!作为前端开发的关键技术之一,CSS(层叠样式表)能够为网页添加各种样式和布局效果。对于前端零基础的小白来说,了解和掌握CSS的常用样式属性是入门的关键。本篇博客将带你深入了解…

基本的组合门电路、以及二极管、三极管(详细讲解)

基本门电路、二极管、三极管 1.基本的组合门电路1.1 与门(AND Gate):2.2 或门(OR Gate):1.3 非门(NOT Gate):1.4 异或门(XOR Gate): 2…

chatgpt赋能python:Python面向对象和面向过程编程

Python面向对象和面向过程编程 Python是一种高级编程语言,可以使用不同的编程风格进行开发。本篇文章将讨论Python面向对象和面向过程编程风格的概念、差异和优缺点。 什么是面向对象编程? 面向对象编程是一种编程范式,它将现实世界的概念…

TP6在composer包里写控制器

前提:首先要了解下如何自建composer包。 1.先建一个空包,加一个文件:composer.json {"name": "test/ctrs","type": "library","license": "MIT","autoload": {&quo…

Python一行命令搭建HTTP服务器并外网访问+-+内网穿透

文章目录 1.前言2.本地http服务器搭建2.1.Python的安装和设置2.2.Python服务器设置和测试 3.cpolar的安装和注册3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 转载自远程内网穿透的文章:【Python】快速简单搭建HTTP服务器并公网访问「cpolar内网穿透…

PS扣签名

打开Photoshop CS6,依次点击“文件”-“打开”,把签名照导入进来。 在“选择”菜单下点击“色彩范围”。 此时鼠标形状变成了一支笔,点击签名上黑色的地方,适当调整颜色容差,点击“确定”完成选择。 按住CtrlJ组…

基于Java园区停车管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

【SWAT水文模型】率定参数选择及校准技巧

SWAT模型率定参数选择及校准技巧 水量平衡与径流(Water Balance And Stream Flow)1 基本水量平衡和总径流校准(Basic Water Balance & Total Flow Calibration)1.1 校准地表径流:1.2 校准地下径流: 2 流…

如何查看 Facebook 公共主页的广告数量上限?

作为Facebook的资深人员,了解如何查看公共主页的广告数量上限对于有效管理和优化广告策略至关重要。本文将详细介绍如何轻松查看Facebook公共主页的广告数量上限,以帮助您更好地掌握广告投放策略。 一、什么是Facebook公共主页的广告数量上限&#xff1f…