百面算法工程师 | 卷积基础知识——Convolution

news2025/1/12 0:58:07

目录

8.1 图像卷积过程

8.2 卷积层基本参数

8.3 卷积后图像的长和宽大小的计算方式

8.4 卷积神经网络中的权重共享

8.5 上采样中的反卷积

8.6 空洞卷积

8.7 深度可分离卷积

8.8 为什么可分离卷积中Depthwise卷积后还要进行pointwise卷积

8.9 分组卷积 Group Conv

8.10 1x1卷积作用

8.11 卷积的底层实现/加速技巧

8.12 卷积神经网络的特点

8.13 卷积的memory,params,GFLOPs计算方法


 欢迎大家订阅我的专栏一起学习共同进步,主要针对25届应届毕业生

祝大家早日拿到offer! let's go

🚀🚀🚀http://t.csdnimg.cn/dfcH3🚀🚀🚀

卷积(Convolution)是一种数学运算,常见于信号处理、图像处理和机器学习等领域。在深度学习中,卷积神经网络(Convolutional Neural Network,CNN)是一种常用的模型结构,其中的卷积操作是其核心组成部分之一。

卷积操作的基本思想是通过滑动一个滤波器(也称为卷积核或者特征检测器)在输入数据上进行局部加权求和。这个滤波器可以捕捉到输入数据的局部特征,例如在图像中可以捕捉到边缘、纹理等。在二维图像处理中,卷积操作通常是对图像的二维矩阵进行处理,而在文本处理中,可以是对文本序列的一维向量进行处理。

通过不同的滤波器和多个卷积层的组合,卷积神经网络能够逐层提取输入数据的抽象特征,从而实现对复杂数据的高效建模和处理。

8.1 图像卷积过程

8.2 卷积层基本参数

参数名

作用

常见设置

卷积核大小 (Kernel Size)

卷积核大小定义了卷积的感受野

在过去常设为5,如LeNet-5;现在多设为3,通过堆叠3 × 3 3\times33×3的卷积核来达到更大的感受域【两个3*3的卷积核相当于1个5 *5的卷积核】

卷积核步长 (Stride)

定义了卷积核在卷积过程中的每一步长度

常见设置为1,表示滑窗距离为1,可以覆盖所有相邻位置特征的组合;当设置为更大值时相当于对特征组合降采样

填充方式 (Padding)

在卷积核尺寸不能完美匹配输入的图像矩阵时需要进行一定的填充策略

设置为’SAME’表示对不足卷积核大小的边界位置进行某种填充(通常零填充)以保证卷积输出维度与与输入维度一致;当设置为’VALID’时则对不足卷积尺寸的部分进行舍弃,输出维度就无法保证与输入维度一致

输入通道数 (In Channels)

指定卷积操作时卷积核的深度

默认与输入的特征矩阵通道数(深度)一致;在某些压缩模型中会采用通道分离的卷积方式

输出通道数 (Out Channels)

指定卷积核的个数

若设置为与输入通道数一样的大小,可以保持输入输出维度的一致性;若采用比输入通道数更小的值,则可以减少整体网络的参数量

8.3 卷积后图像的长和宽大小的计算方式

Output = ((Input - k + 2p) / s) + 1 【向下取整】

8.4 卷积神经网络中的权重共享

权重共享即输入一张图片,这张图片用一个卷积核进行卷积操作的时候,图片中的每一个位置都被同一个卷积核进行卷积,所以权重是一样的,也就是共享

8.5 上采样中的反卷积

扩大图像尺寸,实现图像由小分辨率到大分辨率的映射的操作,叫做上采样(Upsample)。常见的方法:双线性插值(bilinear),反卷积(Transposed Convolution),反池化(Unpooling)。

反卷积(Deconvolution)通常是用于图像的上采样和特征图的反卷积操作,而不是简单的卷积核的转置。在深度学习中,通常使用转置卷积(Transpose Convolution)来实现反卷积操作,而不是直接将卷积核进行转置。转置卷积是一种通过卷积核的扩展和补零来实现上采样的操作。

反卷积的实现过程通常涉及以下步骤:

1. 输入图像的尺寸扩大:首先,通过在输入图像的周围补零的方式来扩大图像的尺寸。这样可以使得图像的尺寸变大,从而实现上采样操作。

2. 卷积核的转置:将原始的卷积核进行转置操作。转置操作将卷积核的行和列进行交换,使得卷积核从一个大小为 \(m \times n\) 的核变为一个大小为 \(n \times m\) 的核。

3. 进行转置卷积:使用转置后的卷积核对扩大后的图像进行卷积操作。这个操作会使得输出的特征图的尺寸变为原始图像的尺寸。

4. 可能的激活函数处理:根据需要,可能会对输出进行激活函数处理,如ReLU等。

转置卷积操作不仅仅是简单地对卷积核进行转置,还包括对输入进行补零扩大和通过卷积操作实现的上采样过程。因此,转置卷积能够更好地恢复原始图像的信息,而不仅仅是尺寸大小。

8.6 空洞卷积

Dilated/Atrous Convolution(空洞卷积或者膨胀卷积) 或者是 Convolution with holes。即在标准的卷积核里注入空洞,以此来增加感受野。相比原来的常规卷积,Dilated convolution 多了一个超参数称之为 Dilation rate(空洞率) 指的是kernel的间隔数量(e.g. 标准卷积的空洞率是1)。下图为空洞卷积示意图。

与标准卷积相比,在保持同等计算量的情况下,可以扩大感受野。对于检测与分割任务,扩大感受野可以提升精度; 缺点是会出现网格效应(gridding effect),丢失局部像素信息。

8.7 深度可分离卷积

Depthwise卷积与Pointwise卷积,合起来被称作 Depthwise Separable Convolution(深度可分离卷积), 相比于常规卷积,其参数量和运算成本比较低,在一些轻量级网络中时常出现。

1.首先看看分组卷积,对于一张5x5像素,三通道RGB输入图片,经过3x3x4卷积核的卷积层,最终会输出4个feature map。卷积层共4个Filter,每个Filter包含了3个Kernel,每个Kernel的大小为3×3。

图源水印,侵删

2.深度可分离卷积,深度可分离卷积是将一个完整的卷积运算分解为两步运行,即Depthwise卷积 与 Pointwise卷积。

Depthwise convolution的一个卷积核只负责一个通道,即一个通道只被一个卷积核卷积。同样是对一张5x5像素,3通道彩色输入图片,Depthwise卷积的一个卷积核只负责一个通道,即一个通道只被一个卷积核卷积,卷积核的数量与上一层的通道数相同。所以一个三通道的图像经过运算后生成了3个Feature map。这里其实最终的维数应该是3x3,因为每一个卷积都会作用一次,所以最终是3x3维度。

Depthwise Convolution完成后的Feature map数量与输入层的depth相同,但是这种运算对输入层的每个通道独立进行卷积运算后就结束了,没有有效利用不同map在相同空间位置上的信息。因此需要增加另外一步操作来将这些map进行组合生成新的Feature map,即接下来的Pointwise Convolution。

Pointwise 卷积运算则是常规的运算,它的卷积核的尺寸为1x1xM,M为需要得到的最终feature map数量,所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的feature map,总共为M维度,操作方法就是Concate,然后再用1x1的卷积。经过Pointwise Convolution之后,同样输出了4张Feature map,与常规卷积的输出维度相同。

深度可分离卷积计算量

图源水印,侵删

 同样以一张5x5像素,三通道RGB输入图片为例:
 普通卷积:3x3x3x4=108
 3x3是卷积核尺寸,3是输入图片通道数目,4是输出卷积核的个数。
 深度可分离卷积:
 DW:3x3x3x1=27
 卷积核个数仅会设置1,也是DW的性质,最终形成3张feature map
 PW:1x1x3x4=12
 1x1为卷积核的尺寸,3为上一层feature map的数量,4为最终需要的维度。其实这里我们也得到了4维的feature map。
 total: 27+12=39
 明显深度可分离卷积计算量比普通卷积小很多,只有其近三分之一的计算量。

8.8 为什么可分离卷积中Depthwise卷积后还要进行pointwise卷积

Depthwise Convolution完成后的Feature map数量与输入层的depth相同,但这种运算对输入层的每个channel独立进行卷积运算后就结束了,没有利用不同map在相同空间位置上的信息。因此需要增加另外一步操作来将这些map进行组合生成新的Feature map,即接下来的Pointwise Convolution。

8.9 分组卷积 Group Conv

Group convolution 分组卷积,由于当时的硬件资源有限,训练模型时卷积操作不能全部放在同一个GPU处理,因此把feature maps分给多个GPU分别进行处理,最后把多个GPU的结果进行融合。下图就是将特征图分成两半,卷积后再组合。

8.10 1x1卷积作用

1.实现跨通道的交互和信息整合

2.进行卷积核通道数的降维和升维

3.对于单通道feature map 用单核卷积即为乘以一个参数,而一般情况都是多核卷积多通道,实现多个feature map的线性组合

4.可以实现与全连接层等价的效果。如用1x1xm的卷积核卷积n(如512)个特征图的每一个位置(像素点),其实对于每一个位置的1x1卷积本质上都是对该位置上n个通道组成的n维vector的全连接操作。

8.11 卷积的底层实现/加速技巧

卷积在图像处理中,可通过矩阵相乘来实现。所以可以从矩阵运算入手来加速。主要方式是低秩近似算法。
 
 (1)使用结构化矩阵近似重构原矩阵。
 
 (2)使用SVD矩阵分解方法来重构矩阵。

8.12 卷积神经网络的特点

局部连接(稀疏连接)。提取局部特征
 
权值共享。减少参数量,降低训练难度,避免过拟合,提升模型“平移不变性”
 
降维。通过池化或卷积实现
 
多层次结构。将低层次的局部特征组合成较高层次的特征,不同层级的特征可以对应不同任务

8.13 卷积的memory,params,GFLOPs计算方法
  • memory

  • params

  • FLOPs 10^9 FLOPS = 1 GFLOPS

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

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

相关文章

【A-024】基于SSH的房屋租赁管理系统(含论文)

【A-024】基于SSH的房屋租赁管理系统(含论文) 开发环境: Jdk7(8)Tomcat7(8)MySQLIntelliJ IDEA(Eclipse) 数据库: MySQL 技术: SpringStruts2HiberanteBootstrapJquery 适用于: 课程设计,毕…

账号安全及应用

一、账号安全控制 1.1系统账号清理 将用户设置为无法登陆 锁定账户 删除账户 设定账户密码,本质锁定 锁定配置文件-chattr: -a 让文件或目录仅供附加用途。只能追加 -i 不得任意更动文件或目录。 1.2密码安全控制 chage 1.3历史命令 history&am…

SSL证书安装失败怎么办?

在互联网时代,SSL(Secure Sockets Layer)证书已成为保障网站数据传输安全、提升用户信任度的重要工具。然而,在实际操作过程中,SSL证书的安装并非总能一帆风顺,有时会遇到各种导致安装失败的问题。本文将详…

轻松上手Python Schedule模块,实现高效定时任务

🍀 前言 博客地址: CSDN:https://blog.csdn.net/powerbiubiu 👋 简介 Schedule是Python中的一个轻量级进程调度程序库,用于安排任务以指定的时间间隔定期运行 📖 正文 1 Schedule的介绍 1.1 安装 pip…

详解MySQL C API 相关接口(大白话就是:MySQL的c语言怎么写)

文章目录 1、C API 官方文档2、初始化 MYSQL3、连接 MySQL设置连接字符集(使得客户端编码方式匹配) 4、下发 mysql 指令5、获取 mysql 查询结果(保存起来)获取行与列遍历存储结果 6、释放 MYSQL\_RES 对象7、关闭 MySQL 连接8、总结 1、C API 官方文档 …

CSS中的 5 类常见伪元素详解!

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合…

【运维自动化-配置平台】如何通过模板创建集群和模块

通过【每天掌握一个功能点】配置平台如何创建业务机拓扑(集群-模块)我们知道了直接创建集群和模块的操作方法,直接创建的方式适合各集群模块都相对独立的场景,那大量的、标准规范的集群模块如何快速创建呢,这里就引入了…

企业实施定制鞋厂ERP软件需要注意哪些问题?

企业实施定制鞋厂ERP软件是个复杂的管理系统工程,为了成功地为企业定制实施ERP软件,需要注意和解决几个关键的问题: . 确立ERP系统实施和定制的决策者;. 做好前期咨询与调研工作;. 做好系统产品或项目迭代规划&#x…

Linux安装Docker的多版本PHP和多版本MySQL共存

1: 先安装docker 安装完后执行,权限设置 sudo usermod -aG docker $USER或者sudo usermod -aG docker kentrl#添加当前用户到Docker用户组中 sudo newgrp docker#更新用户组数据,必须执行否则无效 sudo systemctl restart docker 先看目录结构: 2:按照目录结构挂载磁盘,…

ZDOCK linux 下载(无需安装)、配置、使用

ZDOCK 下载 使用 1. 下载1)教育邮箱提交申请,会收到下载密码2)选择相应的版本3)解压 2. 使用方法Step 1:将pdb文件处理为ZDOCK可接受格式Step 2:DockingStep 3:创建所有预测结构 1. 下载 1&…

Java | Leetcode Java题解之第43题字符串相乘

题目: 题解: class Solution {public String multiply(String num1, String num2) {if (num1.equals("0") || num2.equals("0")) {return "0";}int m num1.length(), n num2.length();int[] ansArr new int[m n];for…

python爬虫学习------scrapy第二部分(第三十天)

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

C# GetField 方法应用实例

目录 关于 C# Type 类 GetField 方法应用 应用举例 心理CT设计题 类设计 DPCT类实现代码 小结 关于 C# Type 类 Type表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型。调用 t…

制造企业看重的OEE,到底是怎么回事?

OEE(Overall Equipment Effectiveness,全局设备效率)是一个用于评估生产设备性能和效率的指标,它通过综合考虑设备的可用率、性能率和良品率等因素,来评估设备的整体表现和生产效果。 其计算公式为: OEE …

好用的在线客服系统PHP源码(开源代码+终身使用+安装教程) 制作第一步

创建一个在线客服系统是一个涉及多个步骤的过程,包括前端界面设计、后端逻辑处理、数据库设计、用户认证、实时通信等多个方面。以下是使用PHP制作在线客服系统的第一步:需求分析和系统设计。演示:ym.fzapp.top 第一步:需求分析 确…

Oceanbase体验之(二)Oceanbase集群的搭建(社区版4.2.2)

资源规划 3台observer CPU:4C及以上 内存:32G及以上 硬盘操作系统500G 存储盘1T及以上 虚拟机可以直接划分,物理机需要提前规划好资源 一、上传oceanbase安装包 登录ocp选择软件包管理 上传Oceanbase软件包(软件包获取路径 官网免费下载社…

双向链表介绍

带头链表⾥的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这⾥“放哨的”。哨兵位存在的意义:避免链表出现死循环。 双向链表的结构:数据指向下一个节点的指针指向前一个节点的指针 typedef in…

Postman - 设置变量

场景: 比如你接口都有权限,访问需要每调一个接口都手动放token的值,这个时候就可以搞个全局的变量,只设置一次就可以了 1、设置变量 Environments -> Globals - > 设置key 、value 2、使用变量 {{你得变量名-key}} 3…

[Linux][多线程][四][线程同步][POSIX信号量][环形队列生产者消费者模型][线程池]

目录 1.POSIX信号量1.基本概念2.为什么要有信号量? --> 提高效率3.信号量的PV操作4.PV操作必须是原子操作5.申请信号量失败被挂起等待6.理解信号量大致结构 2.信号量函数1.初始化2.销毁3.等待信号量 -- 申请信号量 --> P()4.发布信号量 -- 释放信号量 --> V() 3.基于…

LeetCode 2739. 总行驶距离

题目链接https://leetcode.cn/problems/total-distance-traveled/?envTypedaily-question&envId2024-04-25 简单题,看代码思考一下即可理解 class Solution {public int distanceTraveled(int mainTank, int additionalTank) {int res 0;while (mainTank >…