用于设计 CNN 的 7 种不同卷积

 

一 说明

        最近对CNN架构的研究包括许多不同的卷积变体,这让我在阅读这些论文时感到困惑。我认为通过一些更流行的卷积变体的精确定义,效果和用例(在计算机视觉和深度学习中)是值得的。这些变体旨在保存参数计数、增强推理并利用目标问题的某些特定特征。

        这些变体中的大多数都简单易懂,因此我专注于了解每种方法的优点和用例。这些知识有望帮助您了解最新CNN架构背后的直觉,并帮助您设计自己的网络。

二 卷 积

        让我们简要概述一下卷积的基本形式。根据PapersWithCode中的描述,

卷积是一种矩阵运算,由一个内核组成,一个小的权重矩阵,它滑过输入数据,执行逐元素乘法与它所在的输入部分,然后将结果相加到输出中。

        此类操作对于处理图像是有利的,因为:

  1. 它们的参数效率非常高,因为图像的不同位置共享相同的权重,因此参数的数量与图像大小不成比例。
  2. 卷积基本上是翻译不变的。也就是说,输出不受图像中常见的小翻译和大翻译的影响,这与 MLP 不同,MLP 通常会给出非常不同的 1 像素翻译结果。

卷积的输出形状和复杂性可以使用以下参数进行配置:

  • 内核大小:内核的维度,通常使用内核大小 (3×3)。
  • 填充:如何填充图像的边缘以保持卷积后的图像大小。例如,上面的演示使用 1 个像素的填充。描述像素数和填充这些像素的规则。
  • 步幅:扫描图像时内核的步长。通常设置为 1 以保持数据形状,设置为 2 表示对其进行缩减采样。上面的演示使用步幅为 2。

来源:伊莱·本德尔斯基

通过组合通过不同内核卷积的每个通道的结果来预测每个输出通道。因此,需要C_in形状为K×K的内核来计算一个输出通道。其中 K 表示内核大小和C_in,C_out分别表示输入和输出通道的数量。

# 参数:K×K×C_in×C_out

计算H×W×C_in×C_out×K×K(在步幅=1的情况下)

用例:这种卷积层几乎用于计算机视觉的每个子任务。其中包括监督任务,如图像和视频分类、对象检测、分割和合成任务,如图像生成、图像超分辨率、图像到图像传输。还有一些视觉之外的应用,例如用于序列建模的 1D 卷积和 3D 相关应用。

三 逐点卷积(1x1卷积)

        逐点卷积是具有 1×1 个内核的卷积层的另一个词。它们也表示为通道或投影层上的卷积。到底为什么有人会使用它?有两种主要用例:

  1. 用于更改输入的维度(即多个通道)。
  • 一些网络(如 Inception)连接从不同内核计算的特征,这会导致通道过多,因此应用逐点卷积来管理通道数。
  • 当使用逐点卷积压缩特征时,计算密集型模块(如挤压和激励)等自注意力模块更可行。
  • 当将两个内积与元素总和或乘积组合时,我们有时需要匹配通道数。

        该操作可以看作是沿输入特征图的深度计算多个加权和。它可以有效地总结它们。

        2. 它以微不足道的成本创建通道依赖关系。通过与缺乏这种依赖性的深度卷积相结合,可以特别利用这一点。

# 参数:C_in×C_out

计算高××C_in×C_out

四 转置卷积(反卷积/逆卷积)

        反卷积显式计算卷积层的数学逆。虽然它广泛用于类视觉或信号处理,但它在深度学习中并不重要,因为可以通过梯度下降来学习操作的参数。

左:步幅=1,右:步幅=2

        转置卷积是一种使用卷积对图像大小进行上采样的更简单方法。该操作与步幅为 1(左)时的经典卷积没有什么不同。对于 n>1 的步幅,输出形状将扩展 n 倍。这是通过在像素之间填充 0 以创建所需大小的扩展图像并对扩展图像执行卷积来完成的。

        虽然转置卷积不会隐式计算卷积的逆运算,但对于深度学习来说并不重要,因为所需的滤波器(可能是逆滤波器)总是可以通过梯度下降来学习。它充分实现了增加数据空间大小的功能。

        重要提示:虽然它们经常被混淆,但转置卷积不是反卷积/逆卷积。

# 参数:K×K×C_in×C_out)

        用例:转置卷积用于需要上采样的网络架构。一些示例是用于语义分割、自动编码器或图像合成和生成网络的编码器-解码器样式网络中的用法。转置卷积的一个问题是棋盘伪影,这可能会给图像生成/合成带来问题。该主题超出了本文的范围,值得拥有自己的主题。有关更多信息,请参阅谷歌大脑的这篇文章。

来源:

  • https://en.wikipedia.org/wiki/Deconvolution
  • https://medium.com/@marsxiang/convolutions-transposed-and-deconvolution-6430c358a5b6
  • https://naokishibuya.medium.com/up-sampling-with-transposed-convolution-9ae4f2df52d0

四 扩张卷积(Atrous convolution)

感受野是模型可以参考的原始图像的范围,用于对该步骤的一个像素进行推理。例如,具有一个 3×3 卷积的模型的输出可以考虑来自相对于每个像素的空间位置的 3 像素感受野的信息,而具有两个 3×3 卷积的模型具有相对于该位置的 5 像素的感受野。

增加核大小是增加感受野的一种方法,但计算量也很快增加。对图像进行下采样还具有增加感受野的效果,因为例如 3××3 特征图中的 8 卷积覆盖了更多的图像。三个 8×3 卷积足以考虑整个图像,以便在 3×8 特征空间中进行推理。

在较低空间维度上计算特征对于图像分类来说大多是可以的,但它会导致具有高分辨率输出的任务(尤其是语义分割)的大量信息丢失。

扩张卷积是一种卷积,其中内核的像素间隔(用 0 填充)。间距也被视为一个超参数,其值通常从上面演示中的 2 到大空间(如 DeepLab 模型中的 24)不等。它增加了内核大小,而不会增加计算量。这种设计能够从更大的感受野进行极其高效的计算,而不会丢失信息或增加层数。

扩张卷积

用例:显示了语义分割中最重要的用法,但在轻量级/移动 CNN 架构中也考虑了其他任务。

提议于:通过扩张卷积进行多尺度上下文聚合

五 空间可分离卷积(Separable Convolution)

 

        一些 3×3 矩阵可以表示为两个向量的矩阵乘法。由于 3×3 核也是一个常见矩阵,因此可以将其拆分为一个 3×1 和一个 1×3 核,但执行相同的操作。

Source: Chi-Feng Wang

        具体来说,空间可分卷积将原始卷积替换为上图所述的两个阶段。这样,每个内核的参数数和操作数从 9(3×3) 减少到 6。然而,众所周知,并非所有 3×3 核都可以分离,因此空间可分离卷积可能会限制模型的能力。

# 参数:(K+K)×C_in×C_out

计算: H×W×C_in×C_out×(K+K)

用例:由于参数计数要小得多,因此有时将空间可分离卷积用于模型压缩和轻量级架构。

源:

  • https://towardsdatascience.com/a-basic-introduction-to-separable-convolutions-b99ec3102728
  • [Deep Learning] 딥러닝에서 사용되는 다양한 Convolution 기법들 — Enough is not enough

六 深度卷积

 

不是卷积和组合每个通道的结果,而是在每个通道上独立执行深度卷积,并将结果堆叠。我们可以直观地看到,这只有在输入和输出通道的数量一致时才有效。

深度卷积具有很高的参数和计算效率,因为参数的数量和计算复杂度都除以输出通道的数量,输出通道的数量通常范围高达 1024。但是,速度优势与操作数量的减少不成正比,因为深度卷积不像现代硬件上的传统卷积那样优化。

# 参数:K×K×C_in

计算H×W×C_in×K×K

用例:深度卷积是构建更复杂的变体和卷积块的关键组件,这些变体和卷积块具有参数和计算效率。

七 深度可分离卷积

        深度卷积,然后是逐点卷积。由于深度卷积在通道之间没有连接,因此我们使用逐点卷积将它们连接起来。Xception的作者发现将非线性放在深度卷积之后很有用。整个过程如下图所示。

 

        空间可分卷积将经典卷积中的 x 轴和 y 轴分开。在这种情况下,深度可分离卷积可以被视为分离通道维度。

        与普通的深度卷积相比,计算复杂性略有增加,尽管仍然比传统卷积小得多。然而,与普通的深度卷积不同,它在许多经验实验中有效地模仿了常规卷积,并广泛用于现代CNN架构。

# 参数:K×K+C_out)×C_in

计算: H×W×C_in×(K×K+C_out)

用例:Xception,MobileNet V1 / V2,EfficientNet V1(MnasNet)/ V2等等...

您可以在以下第 2 部分找到深度可分卷积的复杂历史:Xception:使用深度可分卷积进行深度学习

        在这篇文章中,我们回顾了在某些情况下被提议取代传统卷积层的卷积变体列表。这些块各有优缺点,用于解决不同的问题。在后续的文章中,我们将回顾卷积设计,这些设计将进一步增强我们创建CNN架构的工具箱。

        请在评论中告诉我有关建议或问题的信息。我会尽量在最多2天内回复你们所有人。

    

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

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

相关文章

【Hash表】找出出现一次的数字-力扣 136

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

“新”心相印 | 长沙市网络代表人士培训班“破冰”联谊“湘”味十足

搜狐网湖南(文/莫谦)9月18日至9月22日,首期长沙市网络代表人士专题培训班在北京大学举行,培训班学员主要是长沙网络名人联盟成员,涵盖抖音达人、微博博主、网络作家、网络大V等。 为了加强长沙网络名人联盟组织建设&a…

6-1 汉诺塔

汉诺(Hanoi)塔问题是一个经典的递归问题。 设有A、B、C三个塔座;开始时,在塔座A上有若干个圆盘,这些圆盘自下而上,由大到小地叠在一起。要求将塔座A上的圆盘移到塔座B上,并仍按同样顺序叠放。在…

毕业设计|基于51单片机的空气质量检测PM2.5粉尘检测温度设计

基于51单片机的空气质量检测PM2.5粉尘检测温度设计 1、项目简介1.1 系统构成1.2 系统功能 2、部分电路设计2.1 LED信号指示灯电路设计2.2 LCD1602显示电路2.3 PM2.5粉尘检测电路设计 3、部分代码展示3.1 串口初始化3.1 定时器初始化3.2 LCD1602显示函数 4 演示视频及代码资料获…

【Linux基础】第29讲 Linux用户和用户组权限控制命令(一)

1 useradd 添加新用户 (注意:当前用户必须有添加用户的权限) 1)基本语法 useradd 用户名(功能描述:添加新用户) 2)案例 rootsue-virtual-machine:/usr/local# useradd hadoop 2 …

【力扣每日一题】2023.9.10 打家劫舍Ⅳ

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目翻译有些烂,我来二次翻译一下,找出数组中k个两两互不相邻的数,求出它们的最大值。要求最大值尽可…

计算机竞赛 深度学习 python opencv 火焰检测识别

文章目录 0 前言1 基于YOLO的火焰检测与识别2 课题背景3 卷积神经网络3.1 卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV54.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 数据集准备5.1 数…

初识 python 装饰器

1.什么是装饰器? 装饰器(Decorator)是Python中一种用于修改函数或类的行为的设计模式。装饰器允许您在不修改原始函数或类的情况下,给它们添加新的功能,这使得代码更具可重用性和可扩展性。简而言之,就是一…

CAN - 基础

CAN 基础 概念分类特点物理层收发器线与编码方式通信方式采样点/位 常见故障 数据链路层CAN控制器数据帧分类数据帧格式数据帧DBC解析CRC校验远程帧 总线竞争与仲裁非破坏性仲裁机制 节点状态与错误处理机制节点状态错误处理机制错误帧 概念 分类 CANCAN FD高速CAN低俗容错CA…

Spring Boot 自动注入失败的原因

问题 Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type com.sveinn.chatbotdomain.zsxq.service.ZsxqApi available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {ja…

QtCreator配置代码字体和颜色

文件路径 默认配色方案 This XML file does not appear to have any style information associated with it. The document tree is shown below. <style-scheme version"1.0" name"Default"> <style name"Text" foreground"#000…

Matlab信号处理:FFT频谱分辨率

频谱分辨率&#xff1a; 其中为采样间隔&#xff0c;为采样点数。 FFT分辨率&#xff1a; 其中为采样频率&#xff0c;为FFT点数。 有两正弦函数&#xff0c;频率分别为 f1 1Hz&#xff0c;f2 10Hz&#xff0c;f3 40Hz&#xff1b; 示例1&#xff1a; 采样频率 fs 1000H…

MySQL进阶篇3-视图和存储过程以及触发器的学习使用

视图/存储过程&#xff08;函数&#xff09;/触发器 视图&#xff1a;由表动态生成&#xff0c;虚拟的表&#xff0c;保存的是sql的逻辑。 创建视图&#xff1a; ​ create [or replace] view viewName【列名列表】 as select 语句 [with [cascaded|local] check option] 修…

国外发达国家码农是真混得好么?

来看看花旗工作十多年的码农怎么说吧! 美国最大的论坛 Reddit&#xff0c;之前有一个热帖&#xff1a; 一个程序员说自己喝醉了&#xff0c;软件工程师已经当了10年&#xff0c;心里有 好多话想说&#xff0c;“我可能会后悔今天说了这些话。”他洋洋洒洒写了 一大堆&#xff…

【Node.js】数据库配置与操作、Session实现原理、JWT实现原理:

文章目录 一、数据库配置与操作【1】 数据库的基本操作【2】 使用 mysql 模块操作 MySQL 数据库 二、Session实现原理【1】HTTP 协议的无状态性【2】Cookie【3】Session 的工作原理【3】在 Express 中使用 Session 认证 三、JWT实现原理【1】JWT 的工作原理【2】JWT 的组成部分…

Linux内核源码分析 (B.4) 深度剖析 Linux 伙伴系统的设计与实现

Linux内核源码分析 (B.4) 深度剖析 Linux 伙伴系统的设计与实现 文章目录 1\. 伙伴系统的核心数据结构2\. 到底什么是伙伴3\. 伙伴系统的内存分配原理4\. 伙伴系统的内存回收原理5\. 进入伙伴系统的前奏5.1 获取内存区域 zone 里指定的内存水位线5.2 检查 zone 中剩余内存容量…

powerDesigner 的基本使用

打开powerDesigner 新建 PDM(物理数据模型) 添加表字段 双击表&#xff0c;设置ID自增 选择导出数据库表SQL 导出成功 使用三方工具连接数据库&#xff0c;然后运行对应SQL文件即可 导入SQL文件数据到powerDesigner

如何用Postman做接口自动化测试

前言 什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试&#xff0c;模拟人去操作软件界面&#xff0c;把人从简单重复的劳动中解放出来。 本质是用代码去测试另一段代码&#xff0c;属于一种软件开发工作&#xff0c;已经开发完…

Kafka 集群与可靠性

文章目录 Kafka集群的目标Kafka集群规模如何预估Kafka集群搭建实战Kafka集群原理成员关系与控制器集群工作机制replication-factor参数auto.leader.rebalance.enable参数 集群消息生产可靠的生产者ISR&#xff08;In-sync Replicas&#xff09;使用ISR方案的原因ISR相关配置说明…

python pycharm 下载 安装 自(1)

pycharm 官网 JetBrains: 软件开发者和团队的必备工具 python 官网 Python Release Python 3.11.5 | Python.org 软件安装 因为python需要借助pycharm所以需要安装 下边截图是重要的部分 pycharm python 终端安装 然后进行全局配置 打开pycahrm 可以在扩展里边搜索中…