一文总结CNN中【各类卷积】操作

news2024/11/20 7:24:07

本文详细总结CNN中各类卷积,旨在指导 domain-specific 更好的模型设计,包括标准卷积,分组卷积(Group Conv),深度可分离卷积(Depthwise Separable Conv),转置卷积(Transposed Conv),空洞卷积(Dilated Conv),可变形卷积(Deformable Conv),和 特征重标定技术(Squeeze-and-Excitation)。

关于CNN网络的总结可以去康康这篇良心博客哦:
《一文总结经典卷积神经网络CNN模型》

目录

  • 标准卷积
  • 分组卷积(Group Conv)
  • 深度可分离卷积(Depthwise Separable Conv)
    • 计算量分析
  • 转置卷积(Transposed Conv)
  • 空洞卷积(Dilated Conv)
  • 可变形卷积(Deformable Conv)
  • 特征重标定技术(Squeeze-and-Excitation)

 

标准卷积

这没什么好说的,回顾一下卷积的基本概念:

  • Kernel Size: 内核大小定义了卷积的 视域 。2D的常见选择是3,即3x3像素。
  • Stride: 定义了内核在遍历图像时的 步长 。虽然它的默认值通常是1,但我们可以使用2的步长来对图像进行采样,类似于MaxPooling。
  • Padding: 填充 定义了如何处理样本的边界。(padding=1,kernel size=3)的卷积将保持空间输出维度等于输入维度。
  • Input & Output Channels: 输入通道(I),输出通道(O,就是该层有多少个卷积核,决定着下一层的输入通道),该层所需的参数可以用IOK来计算,其中K等于单个内核中单个通道的参数个数。

记住下面这个公式就行,单个维度(例如宽度或高度):
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

 

分组卷积(Group Conv)

它将输入特征图(input feature map)分成多个组,然后在每个组内独立进行卷积操作。这种方法最初是在AlexNet中提出的,以解决当时的GPU内存限制问题,后来被发现可以增加网络的表示能力并减少计算量。

在标准卷积中,卷积核会跨越所有输入通道(input channels)进行卷积。而在分组卷积中,假设有 G 个组,则输入特征图和卷积核都会被分成 G 个组。每组卷积核只在对应的输入特征图组内进行卷积操作,因此,每个卷积核不再跨越所有输入通道,而只跨越部分通道,理论上计算量减少 G 倍。
在这里插入图片描述

不过,分组卷积也有一个潜在的问题:
虽然在理论上它可以显著降低一计算量,但是对内存的访问频繁程度并未降低,且现有的GPU加速库(如cuDNN)对其优化的程度有限,因此它在效率上的提升并不如理论上显著。

 

深度可分离卷积(Depthwise Separable Conv)

分组卷积的一种特例,其中每个输入通道分配给一个组(就是 G=C,每个通道单独一个组)。深度可分离卷积首先使用逐通道深度卷积(depthwise)提取空间特征,然后使用 1×1 逐点卷积(pointwise)合并这些特征。这种方法首次被广泛认知是通过MobileNet架构和Xception架构,以显著减少计算量和模型大小。

在这里插入图片描述

计算量分析

在这里插入图片描述

所以:
标准卷积的计算量(即乘法操作的数量)大约为:
在这里插入图片描述
深度可分离卷积的总计算量为 深度卷积 和 逐点卷积 之和:

在这里插入图片描述

深度可分离卷积的计算效率提升可以用如下的比例表示:

在这里插入图片描述
简化后得到:
在这里插入图片描述
Cout一般很大,可以忽略,而Dk一般是3,所以一般至少能 节省9倍 计算量。

 

在MobileNet V2中,网络做了一点改进:
先点卷积扩大通道数,以提取更多的特征,再应用深度可分离卷积;还有加了残差结构(图中没有展示)。
在这里插入图片描述

 

转置卷积(Transposed Conv)

转置卷积可以理解为 反卷积,可以视为标准卷积的逆过程,在 图像生成(如生成对抗网络GANs和变分自编码器VAEs)、图像分割 等领域中非常有用,因为这些应用通常需要从一个较小的特征表示恢复到较大的图像尺寸

标准卷积中,卷积核在输入特征图上滑动,对局部区域进行加权求和,从而产生更小的输出特征图(除非特别采用零填充等手段)。

相反,转置卷积通过给定的步长在输入特征图中插入零,然后应用一个卷积核,其效果是 “扩展” 了输入特征图。
具体地,它首先将输入特征图中的每个元素视为小的特征图,并在这些特征图之间插入由步长确定的零填充,然后对这个新的、被扩展的特征图应用标准卷积。这样,转置卷积实际上是通过在原始输入元素之间插入空白(通常是零)来“逆转”标准卷积的压缩效果。

在这里插入图片描述
在这里插入图片描述

普通卷积和转置卷积所处理的基本任务是不同的:

  • 前者主要用来做特征提取,倾向于压缩特征图尺寸
  • 后者主要用于对特征图进行扩张或上采样

尽管转置卷积是上采样的有效手段,但它可能引入特定的伪影,如棋盘状伪影(checkerboard artifacts)。
这是由于步长和卷积核大小不匹配时输出特征图中值的不均匀分布导致的。即当内核大小(输出窗口大小)不能被步幅(顶部点之间的间距)整除时,反卷积具有不均匀的重叠。
为了缓解这一问题,设计转置卷积层时需要仔细选择卷积核大小和步长,或考虑使用其他上采样技术(如双线性上采样后跟一个 1×1 卷积)作为替代。

在这里插入图片描述

在这里插入图片描述

 

空洞卷积(Dilated Conv)

也称为扩张卷积,旨在增加卷积层的感受野(即卷积操作覆盖的输入区域大小)而不增加额外的参数或计算量。这种方法通过在卷积核的元素之间插入空洞(即零填充),实现了在不丢失分辨率的情况下捕获更广泛的上下文信息,也用于做像素级的预测,解决pixel-wise输出模型。

在标准卷积中,卷积核的元素是紧密排列的。而在空洞卷积中,卷积核被“扩张”了,卷积核中的元素之间插入了指定数量的空间(零填充),这个数量由一个参数——空洞率(dilation rate)决定。空洞率为1表示标准卷积(没有空洞),空洞率大于1表示在卷积核元素之间插入的空洞数量。

工作原理:
假设空洞率为 d,则在卷积核的每个元素之间将插入 d−1 个零。这意味着,对于一个 3×3 的卷积核,当空洞率为2时,实际上卷积操作会在一个 5×5 的区域上进行,但只有原 3×3 卷积核对应的位置参与计算,其他位置被认为是零。这样,卷积核覆盖的实际区域更大,从而增大了感受野,而不需要增加更多的参数或计算成本。

在这里插入图片描述
在这里插入图片描述

应用:

  • 语义分割:FCN等网络就是利用空洞卷积来增加感受野,以提高分割的精确度。
  • 音频处理:在音频生成和语音识别中,如Wavenet,空洞卷积可以帮助模型捕捉到更长的序列依赖。

虽然空洞卷积有其优势,但在使用时也需要注意一些问题,如:

  • 感受野爆炸:随着空洞率的增加,感受野可能迅速扩大,可能导致模型覆盖过多的输入区域,从而捕获到过多的无关信息或噪声。
  • 棋盘效应(Gridding Effect):当连续使用高空洞率的卷积层时,可能会出现棋盘效应,即模型只能看到输入数据的一部分,导致性能下降。为避免这一点,设计网络时应仔细考虑空洞率的选择和层次结构的安排。

 

可变形卷积(Deformable Conv)

传统的卷积操作在进行特征提取时使用固定形状的卷积核,这可能限制了模型处理图像中的几何变换(如物体的形状变化、尺度变化和旋转)的能力。可变形卷积通过引入了可学习的偏移量,使得卷积核的形状和位置可以动态地调整以适应输入图像的几何变化。这种方法最初是在《Deformable Convolutional Networks》一文中提出的,目的是增强卷积神经网络对于尺度、旋转和形状变化的适应能力。

这使得卷积核能够自适应地调整其形状来更好地拟合图像的局部特征。

正常卷积规律的采样 9 个点(绿点),在正常的采样坐标上加上一个位移量(蓝色箭头),可变形卷积可以进行尺度变换,比例变换和旋转变换,即上面介绍的空洞卷积是它的一个特例
在这里插入图片描述

具体地:

  • 可变形卷积层通过额外的卷积层来预测每个采样点的偏移量,这些偏移量是相对于卷积核中每个位置的标准固定网格位置的。偏移量是可以通过反向传播算法学习和优化的,使得网络能够在训练过程中自动学习到如何变形卷积核以适应具体任务的需求。
  • 由于偏移后的位置通常不会正好落在输入特征图的像素上,可变形卷积使用双线性插值来计算偏移位置处的输入值,确保操作的可微性,允许梯度的正常反向传播。

简单来说:
首先通过一个小卷积层(绿色)的输出得到可变形卷积所需要的位移量,然后将其作用在卷积核(蓝色)上,达到可变形卷积的效果。
在这里插入图片描述
 
优势:

  • 几何变换适应性:可变形卷积能够使卷积核适应输入特征图中的局部几何变换,提高了模型处理图像形变的能力。
  • 增强的特征提取:通过动态调整卷积核,模型能够捕捉到更加丰富和精细的特征,有助于提升诸如目标检测、语义分割等视觉任务的性能。

 
在这里插入图片描述
 

同样思路也能用在池化上,搞成可变形池化:
通过标准的兴趣区域池化(绿色)获得兴趣区域对应的特征,该特征通过一个全连接层得到兴趣区域每个部位的位移量。用该位移作用在可变形兴趣区域池化(蓝色)上,以获得不局限于兴趣区域固定网格的特征。

在这里插入图片描述

 

虽然可变形卷积提供了强大的几何变换适应能力,但它也引入了额外的计算和参数,这可能会增加模型的训练难度和计算成本。因此,在实际应用中需要根据任务的具体需求和资源限制权衡其使用。

 

特征重标定技术(Squeeze-and-Excitation)

ImageNet 2017 竞赛 Image Classification 任务的冠军模型SENet(Squeeze-and-Excitation Networks)中的特征重标定策略,通过引入一个称为“Squeeze-and-Excitation”(SE)模块的结构,对卷积神经网络中的特征通道进行动态重标定。这种机制能够显著提高网络对特征重要性的适应能力,增强了模型的学习和表达能力,进而提高网络的性能。

这种卷积方法创新地对特征维度进行改进,通过自动学习评估每个特征通道的重要性,从而在千余个卷积核中区分并强化对当前任务有利的特征,同时抑制不太相关的信息。

在这里插入图片描述

Squeeze阶段:
SE模块首先通过全局平均池化(Global Average Pooling)对每个特征通道进行“压缩”,将每个通道的空间维度(即宽度和高度)压缩为一个单一的数值,生成一个长度为C的向量,这个向量中的每个值反映了相应特征在全局上的平均激活程度,这一步骤有助于模块捕捉到通道级的全局信息

Excitation阶段:
紧接着,通过一个全连接层、ReLU激活、另一个全连接层和sigmoid激活来进行“激励”操作,这两层作为网络的一部分需要额外学习其参数,这个过程生成每个通道的权重系数。这些权重系数用于动态地调整每个通道的重要性,使网络能够专注于更有用的特征。

重标定:
最后,原始特征图通过与这些学习到的通道权重相乘,进行重标定,即按通道进行加权,从而增强有用的特征并抑制不重要的特征。

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

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

相关文章

【C++ 设计模式】策略模式与简单工厂模式的结合

文章目录 前言一、为什么需要策略模式简单工厂模式二、策略模式简单工厂模式实现原理三、UML图四、示例代码总结 前言 在软件设计中,常常会遇到需要根据不同情况选择不同算法或行为的情况。策略模式和简单工厂模式是两种常见的设计模式,它们分别解决了对…

字节面试: Mysql为什么用B+树,不用跳表?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团、蚂蚁、得物的面试资格,遇到很多很重要的相关面试题: Mysql用B树,不用跳表&…

JVM垃圾收集器-serial.parNew,parallelScavnge,serialOld,parallelOld,CMS,G1

垃圾收集器 分代模型 适用于新生代: serial parNew parallel Scaavenge 适用于老年代: CMS serial Old(msc) paraller Old 分区模型 适用于超大容量: G1 分代模型 serial /serial Old收集器 1.单线程收集器 2.收集时会暂停其他线程&…

java学习之路-程序逻辑控制

目录 1.分支结构 1.1 if语句 栗子 判断奇数还是偶数 判断一个年份是否为闰年 1.2switch语句 栗子 2. 循环结构 2.1while 循环 栗子 2.2break和continue break continue 2.3for循环 基本语法 栗子 2.4 do while 循环 3.输入输出 3.1输出 3.2从键盘输入 栗子…

19 OpenCV 霍夫曼变换检测圆

文章目录 cv::HoughCircles算子参数示例 cv::HoughCircles 因为霍夫圆检测对噪声比较敏感,所以首先要对图像做中值滤波。 基于效率考虑,Opencv中实现的霍夫变换圆检测是基于图像梯度的实现,分为两步: 检测边缘,发现可能…

2024年初中生古诗文大会备考:多选题真题和独家解析(持续更新)

今天我们继续来做初中古诗文大会的一道难题:多选题,让大家了解初中生古诗文大会的考察内容和形式,并且提供了我独家的题目解析和答案,供初中的同学们学习和参考。 Tips:古诗文大会的许多题目都来自于中考、高考&#…

【Twinmotion】Twinmotion导入UE5

步骤 1. 在虚幻商城中安装“Datasmith Twinmotion导入器插件” 安装“面向虚幻引擎的Twinmotion内容” 2. 打开虚幻引擎,在插件中搜索“twinmotion”,勾选如下两个插件,然后重启虚幻引擎 3. 打开Twinmotion,随便添加一个物体 导出…

html canvas怎么在图片上面加文字

在HTML canvas中,要让文字显示在图片上方,你需要按照以下步骤操作: 首先,使用drawImage()方法将图片绘制到canvas上。 然后,使用fillText()或strokeText()方法在canvas上绘制文本。 以下是一个简单的示例代码&#…

Springboot 整合 Elasticsearch(五):使用RestHighLevelClient操作ES ②

📁 前情提要: Springboot 整合 Elasticsearch(三):使用RestHighLevelClient操作ES ① 目录 一、Springboot 整合 Elasticsearch 1、RestHighLevelClient API介绍 1.1、全查询 & 分页 & 排序 1.2、单条件查询…

C++第五弹---类与对象(二)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 类与对象 1、类对象模型 1.1、如何计算类对象的大小 1.2、类对象的存储方式猜测 1.3、结构体内存对齐规则 2、this指针 2.1、this指针的引出 2.2…

Android U pipeline-statusbar

Android U - statusbar pipeline 写在前面 Android原生从T开始对SystemUI进行MVVM改造,U上状态栏部分进行了修改;第一次出现修改不会删除原有逻辑,而是两版并行,留给其他开发者适配的时间;在下一个大版本可能会删除原…

flask库

文章目录 flask库1. 基本使用2. 路由路径和路由参数3. 请求跳转和请求参数4. 模板渲染1. 模板变量2. 过滤器3. 测试器 5. 钩子函数与响应对象 flask库 flask是python编写的轻量级框架,提供Werkzeug(WSGI工具集)和jinjia2(渲染模板…

SpringBoot+Vue.js协同过滤算法美食推荐小程序

摘 要 伴随着我国社会的发展,人民生活质量日益提高。于是对各种需求进行规范而严格是十分有必要的,所以许许多多的微信小程序应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套协同过滤算法美食推荐小程序,帮助…

【SQL Server】实验四 数据更新

1 实验目的 掌握SQL数据更新语句的基本使用方法,如UPDATE、DELETE、INSERT。掌握更新语句条件中的嵌套查询使用方法。 2 实验内容 2.1 掌握SQL更新语句的基本使用方法 INSERT基本语句。UPDATE基本语句。DELETE基本语句。 2.2 掌握SQL更新语句的高级使用方法 …

SimpleDateFormat类 --java学习笔记

SimpleDateFormat 代表简单日期格式化,可以用来把日期对象、时间毫秒值格式化成我们想要的形式 常见构造器和方法: pattern 代表需要应用的时间格式—— 时间格式的常见符号: 时间格式的应用举例: import java.text.SimpleDate…

(二)丶RabbitMQ的六大核心

一丶什么是MQ Message Queue(消息队列)简称MQ,是一种应用程序对应用程序的消息通信机制。在MQ中,消息以队列形式存储,以便于异步传输,在MQ中,发布者(生产者)将消息放入队列&#xff…

基于信号分解的几种一维时间序列降噪方法(MATLAB R2021B)

自适应信号分解算法是一种适合对非平稳信号分析的方法,它将一个信号分解为多个模态叠加的形式,进而可以准确反应信号中所包含的频率分量以及瞬时频率随时间变化的规律。自适应信号分解算法与众多“刚性”方法(如傅里叶变换,小波变换)不同&…

最后十几天!未备案小程序将会被清退

微信官方通知 2023年8月9日,微信公众平台发布了“关于开展微信小程序备案的通知”: 去年就已经在逐步推进备案了,新注册小程序必须备案才可以上架。若微信小程序已上架,须于2024年3月31日前完成备案,逾期未完成备案&a…

苹果大模型MM1强势来袭!300亿参数所向披靡

功能展示 左图问:图片中有多少个苹果? 苹果大模型答:7个 左图问:这些州中哪一个是最北的? 回答:Delaware 追问:其他的州是什么? 回答:Arizona, Oklahoma, North Caro…

Ant Design Pro complete版本的下载及运行

前言 complete 版本提供了很多基础、美观的页面和组件,对于前端不太熟练的小白十分友好,可以直接套用或者修改提供的代码完成自己的页面开发,简直不要太爽。故记录一些下载的步骤。 环境 E:\code>npm -v 9.8.1E:\code>node -v v18.1…