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

目录

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.mzph.cn/bicheng/2749.shtml

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

相关文章

2024年最重要的AI趋势

2022年是生成式AI在公众意识中爆发的一年,2023年是它开始在商业世界扎根的一年。因此,2024年将是关乎AI未来关键的一年,因为研究人员和企业都在寻求:如何将这一技术上的进化飞跃最实际地融入我们的日常生活。 生成式AI的进化与计…

5分钟快速搭建k8s集群1.29.x

配置主机名和hosts 配置主机名 hostnamectl set-hostname node1 hostnamectl set-hostname node2 hostnamectl set-hostname node3 vim /etc/hosts 172.19.35.202 node1 172.19.35.203 node2 172.19.35.204 node3 测试 hostname ping -c 3 node2 配置时间同步 关闭防火墙 sys…

AI视频教程下载:ChatGPT个人生产力提升指南

在本课程中,您将学习如何成功地将ChatGPT融入您的工作和生活,以优化您的社交媒体内容并扩展您的业务。 您将学习如何使用ChatGPT自动创建、校对、总结和翻译文本,以及如何与机器人沟通以实现您的目标。 您还将学习如何创建jQuery代码、编程…

倪海厦是怎么去思考问题的(一)下

1《天纪》是自然法则 2自然法则是个《真理》 3《真理》不需要再证实 4《真理》没有二元对立 紧接着第三点:真理不需要再去证实。现在有很多的人呢,看书学习,自认为自己很聪明,总要去证实一些东西。证明谁的说法是错的&#xff…

麒麟龙芯loongarch64 electron 打包deb包

在麒麟龙芯(loongarch64)电脑上 使用electron 开发桌面应用。之前用electron-packager 打包出来的是文件夹 是 unpack 包。现在需要打包deb包,依据开发指南开始打包。 在项目文件夹下 打开终端 输入 npm run packager 先打包unpack包 然后…

信创测试究竟是什么?与性能测试的差别是什么?

信创测试和性能测试在多个方面存在显著的区别。 首先,信创测试是一个更为全面和系统的测试过程,它主要针对信创工程项目中的产品、系统等进行测试和验证,以确保其自主可控和满足性能要求。这包括适配测试、功能测试、性能测试、安全测试、兼…

Day40 网络编程(二) InetAddress类, Socket ,TCP编程,UDP编程

Day40 网络编程(二) InetAddress类, Socket ,TCP编程,UDP编程 文章目录 Day40 网络编程(二) InetAddress类, Socket ,TCP编程,UDP编程一、 InetAddress类二、 Socket三、TCP编程四、UDP编程 一、 InetAddre…

ATFX汇市:澳大利亚一季度CPI年率大降,澳元升值态势延续

▲ATFX图 据澳大利亚统计局数据,第一季度CPI年率最新值3.6%,相比前值4.1%大降0.5个百分点,但仍高于3.5%的预期值。历史数据看,自从2022年四季度创出7.8%阶段性高点之后,澳大利亚的季度CPI年率就保持着稳定的下降态势。…

ssm项目启动的时候 修改 配置文件 定义的值

ssm项目启动的时候 修改 配置文件 定义的值 import org.springframework.beans.factory.InitializingBean; import org.springframework.core.env.ConfigurableEnvironment;import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import …

SQLite去除.db-shm和.db-wal文件【已解决】

原因是开启了WAL 日志模式,实现日志回滚功能; 如果是多个连接访问数据库就会出现共享内存-shm文件 PRAGMA journal_modeWAL; 解决办法就是设置为默认模式 PRAGMA journal_modeDELETE; 执行成功后断开再重新连接,就不会出现这两个文件了…

翻译《The Old New Thing》 - Why are HANDLE return values so inconsistent?

Why are HANDLE return values so inconsistent? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20040302-00/?p40443 Raymond Chen 2004年01月27日 简介 在处理 Windows 编程中的句柄时,开发者需要面对的一个挑战是不同函数可…

SWCTF

easy_php 源码 <?php// flag is in flag.php highlight_file(__FILE__); ini_set(display_errors, 0); error_reporting(0);if (isset($_GET[myon1]) && isset($_GET[myon2]) && isset($_GET[myon3])) {$myon1 $_GET[myon1];$myon2 $_GET[myon2];$myon…

苍穹外卖day12 (Apache POI) 数据统计-Excel报表

文章目录 前言一、工作台1.1 今日数据1.1.1 接口设计1.1.2 代码实现 1.2 订单管理接口1.3菜品总览接口1.4 套餐总览接口1.5 订单搜索&#xff08;已完成&#xff09;1.6 各个状态的订单数量统计&#xff08;已完成&#xff09; 二、Apache POI2.1 概述2.2 效果展示 三、导出运营…

vue中web端播放rtsp视频流(摄像头监控视频)(海康威视录像机)

一、ffmpeg安装​​​​​​ ffmpeg下载 https://ffmpeg.org/download.html找ffmpeg-release-essentials.zip点击下载&#xff0c;下载完解压ffmpeg.exe 程序运行 二、配置ffmpeg环境变量 添加成功后验证是否生效任意地方打开cmd窗口输入 ffmpeg 打印如下表示成功 三、node…

谈谈对情绪周期和题材轮动的个人理解

首先讲两个概念&#xff1a; 1、情绪周期 我个人理解的情绪周期&#xff0c;就是不管在大盘跌与涨的过程中&#xff0c;短线情绪都会有几个阶段&#xff0c;低位震荡&#xff0c;主升浪&#xff0c;高位震荡&#xff0c;退潮期&#xff0c;这几个阶段。 低位震荡指的是&#xf…

未来五十年,智能科技将如何改变传统行业格局?

未来五十年内&#xff0c;随着人工智能&#xff08;AI&#xff09;和智能科技的不断发展&#xff0c;许多行业将面临被取代的风险。虽然这种趋势可能会带来一些担忧&#xff0c;但也将为人类社会带来巨大的变革。下面将详细探讨哪些行业可能会在未来被智能科技所取代。 ▶ 制造…

利用弹性云主机部署高效数据库系统

在当今云计算的时代&#xff0c;弹性云主机&#xff08;EC2&#xff09;为我们提供了前所未有的灵活性和可扩展性&#xff0c;使得在云端部署高效的数据库系统成为可能。本文将从选择适当的云服务配置、优化数据库设置、建立完备的数据备份与恢复策略&#xff0c;以及加强数据库…

ardupilot开发 --- Jetson Orin Nano 篇

多情应笑我早生华发 0. 一些概念1. 系统安装&#xff08;刷机、flash&#xff09;1.1 使用SD卡安装系统1.2 使用固态硬盘安装系统 0. 一些概念 官网&#xff1a;https://www.nvidia.com/en-us/ Developers Documentation Getting Started Jetson Developer Kits User Guid…

「C++ 内存管理篇 1」C++动态内存分配

〇、C语言的动态内存分配方式 关于C语言的动态内存分配方式&#xff0c;简单来讲就是使用四个库函数&#xff1a;malloc、calloc、 realloc、free对堆区的内存进行灵活的分配和回收。有兴趣的话可以看看这篇文章: 「C语言进阶1」动态内存分配 一、C的动态内存分配方式 1. 什么…

国产大模型各自优势如何?大家都怎么选?

近日&#xff0c;一份国产大模型排行榜在网上流传&#xff0c;显示文心一言、通义千问、Kimi位居前三名&#xff0c;其中文心一言用户数为2亿&#xff0c;与其他产品拉开明显差距&#xff1b;前三名月访问量总计超过3000万。国内大模型也开始出现分化效应。