深度学习基础--卷积的变种

2024-09-07 13:12

本文主要是介绍深度学习基础--卷积的变种,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

随着卷积同经网络在各种问题中的广泛应用,卷积层也逐渐衍生出了许多变种,比较有代表性的有:
分组卷积( Group Convolution )、转置卷积 (Transposed Convolution) 、空洞卷积( Dilated/Atrous Convolution )、可变形卷积( Deformable Convolution ),下面分别介绍下。

1. 分组卷积

在普通的卷积操作中,一个卷积核对应输出特征图的一个通道,而每个卷积核又会作用在输入特征图的素有通道上(即卷积核的通道数等于输入特征图的通道数),因此最终输出的特征图的每个通道都与输入特征图的所有通道相连接。也就是说,在通道这个维度上,是“全连接的”。
在这里插入图片描述
所谓分组卷积,其实就是将输入通道和输出通道都划分为同样的组数,然后仅仅让处于相同组号的输入通道和输出通道进行“全连接”,如图:
在这里插入图片描述

如果记g 为输入/输出通道所分的组数,则分组卷积能够将卷积操作的参数量和计算量都降低为普通卷积的1/g。分组卷积最初是在 A lexNe t 网络中引入的。当时,为了解决单个 G P U 无法处理合高较大计算量和存储需求的卷积层这个问题,就
采用分组卷积将计算和存储分配到多个 GPU 上。 后来随着计算硬件的不断升级,这个方向上的需求已经大为减少。目前,分组卷积更多的被用来构建移动设备的小型网络模型,例如深度可分离在积(),就极为依赖分组卷积。不过,分组卷积也存在一个潜在的问题:虽然在理论上它可以显著降低计算量,但是对内存的访问频繁程度并未降低,且现有的GPU加速库(如 cuDNN) 对其优化的程度有限,因此官在效率上的提升并不如理论上显著。

2. 转置卷积

普通卷积操作可以形式化为一个矩阵乘法运算,即:
y = A x (1.1) y=Ax \tag{1.1} y=Ax(1.1)
其中, x x x, y y y, 分别是卷积的输入和输出,维度分别是 d ( i ) d^{(i)} d(i) d ( o ) d^{(o)} d(o),A是由卷积核、滑动步长决定的常对角矩阵,维度为 d ( i ) × d ( o ) d^{(i)}×d^{(o)} d(i)×d(o),其每一行对应着卷积核的一次滑动位置。以一维卷积为例,假设输入向量 x = [ a , b , c , d , e , f , g ] T x=[a,b,c,d,e,f,g]^T x=[a,b,c,d,e,f,g]T,卷积和 K = [ x , y , z ] K=[x,y,z] K=[x,y,z],卷积核的滑动步长为2, 则输出向量为:
y − x ∗ K = [ a x + b y + c z c x + d y + e z e x + f y + g z ] = [ x y z 0 0 0 0 0 0 x y z 0 0 0 0 0 0 x y z ] [ a b c d e f g ] = A x (1.2) y-x*K= \left[ \begin{matrix} ax+by+cz \\ cx+dy+ez \\ ex+fy+gz \\ \end{matrix} \right] = \left[ \begin{matrix} x & y & z & 0 & 0& 0 & 0 \\ 0 & 0 & x & y & z & 0 & 0 \\ 0 & 0& 0 & 0 & x & y & z \\ \end{matrix} \right] \left[ \begin{matrix} a \\ b \\ c\\ d\\ e\\ f\\ g\\ \end{matrix} \right]=Ax \tag{1.2} yxK= ax+by+czcx+dy+ezex+fy+gz = x00y00zx00y00zx00y00z abcdefg =Ax(1.2)
反过来,记 A T A^T AT为矩阵 A A A的转置,定义如下矩阵运算
y ^ = A T x ^ (1.3) \widehat{y}=A^T\widehat{x}\tag{1.3} y =ATx (1.3)
其所对应的操作被称为转置卷积,其中 y ^ \widehat{y} y x ^ \widehat{x} x 分别是转置卷积的输入和输出,维度分别是 d ( i ) d^{(i)} d(i) d ( o ) d^{(o)} d(o)。转置卷积也可以称为反卷积,它可以看做是普通卷积的一个对称操作,这种“对称性”体现在以下两个方面:

  • 转置卷积能将普通卷积中输入到输出的尺寸变换逆反过来,
  • 根据矩阵运算的求导知识,在式 (1.1) 所示的普通卷积中,输出 y 对于输入 x 的导数为∂y/∂x = A;而在式 (1.2) 所示的转置卷积中,输出 y 对于输入 x 的导数为∂y/∂x = A。由此可以看出,转置卷积的信息正向传播与普通卷积的误差反向传播所用的矩阵相同,反之亦然。

以式( 1.2 ) 为例 , 我们可以写出转置卷积的具体计算公式:
在这里插入图片描述
可以看到,等号的右侧实际上就是一个普通卷积对应的矩阵乘法。因此,转置卷积本质上就是一个对输入数据进行适当变换(补零/上采样)的普通卷积操作。在具体实现时,以二维卷积为例,一个卷积核尺寸为 K H × K W K_H\times K_W KH×KW、移动步长为 ( S H , S W ) (S_H,S_W) (SH,SW)、边界填充尺寸为 ( P H , P W ) (P_H,P_W) (PH,PW)的普通卷积,其对应的转置卷积可以按照如下步骤来进行。
普通卷积和转置卷积所处理的基本任务是不同的。前者主要用来进行特征提取,倾向于压缩特征图尺寸;后者主要用于对特征图进行扩张或上采样,代表性的应用场景如下:

  • 语义分割/实例分割等任务:由于需要提取输入图像的高层语义信息,网络的特征图尺寸一般会先缩小进行聚合。此外,这类任务一般需要输出与原始图像大小一致的像素级分割结果,因而需要扩张前面得到的语义信息较高的特征图,这就用到了转置卷积。
  • 一些物体检测、关键点检测任务,需要输出与源图像大小一致的结果。
  • 图像的自编码器、变分自编码器、生成式对抗网络等。

3. 空洞卷积

在语义分割(Semantic Segmentation)任务中,一般需要先缩小特征图尺寸,进行信息聚合,然后再复原到之前的尺寸,最终得到与原始图像尺寸相同的分割结果图。常见的语义分割模型,如全卷积网络(Fully Convolutional Networks,FCN),一般采用池化操作来扩大特征图的感受野,但这同时会降低特征图的分辨率,丢失一些信息(如内部数据结构、空间层级信息等),导致后续的上采样操作(如转置卷积)无法还原一些细节,从而限制最终分割精度的提升。

那么,如何不通过池化等下采样操作就能扩大感受野呢?空洞卷积应运而生。顾名思义,空洞卷积就是在标准的卷积核中注入“空洞”,以增加卷积核的感受野。空洞卷积引入了扩张率(dilation rate)这个超参数来指定相邻元素之间的间隔。扩张率为 r 的空洞卷积,其卷积核上相邻数据点之间有 r - 1 个空洞,如图 1.7 所示。
在这里插入图片描述
(图中有绿点的方格表示有效的数据点,黄色方格为空)。尺寸为 k w × k h k_w×k_h kw×kh 的标准卷积核,在扩张率为 r 的空洞卷积中,其尺寸变为 k e + ( r − 1 ) ( k − 1 ) , e ∈ [ w , h ] k_e+(r-1)(k-1),e∈[w,h] ke+(r1)(k1),e[w,h]。扩张率为 1 的空洞卷积实际上就是标准卷积(即无空洞)。

空洞卷积感受野的计算与上一节中介绍的普通卷积感受野的计算方法一致,只是其中的卷积核尺寸变为扩张后的空洞卷积核尺寸(即包括空洞在内)。以图 1.7 为例,假设依次使用图 1.7(a)、(b)、(c)中的空洞卷积构建三层神经网络:第一层是图 1.7(a)中 r=1 的空洞卷积,扩张后的卷积核尺寸为 3×3;第二层是图 1.7(b)中 r=2 的空洞卷积,扩张后的卷积核尺寸为 5×5;第三层是图 1.7(c)中 r=4 的空洞卷积,扩张后的卷积核尺寸为 9×9。根据上文中介绍的感受野计算公式,可以得到第一层、第二层、第三层的感受野依次为 3×3、7×7、15×15(如图 1.7 中深色阴影部分所示)。如果采用标准的 3×3 卷积核,则三层连接起来的感受野只有 7×7。因此,可见使用空洞卷积扩大了卷积核尺寸,不经过下采样操作即可扩大感受野,同时还能保留数据的内部结构。

4. 可变形卷积

普通的卷积操作是在固定的、规则的网格点上进行数据采样,如图 1.8(a)所示。这束缚了网络的感受野形状,限制了网络对几何形变的适应能力。为了克服这个限制,可变形卷积在卷积核的每个采样点上添加一个可学习的偏移量(offset),让采样点不再局限于规则的网格点,如图 1.8(b)所示。图 1.8(c)和图 1.8(d)是可变形卷积的两个特例:前者在水平方向上对卷积核有较大拉伸,体现了可变形卷积的尺度变换特性;后者则是对卷积核进行旋转。特别地,图 1.8(c)中的可变形卷积核形状类似于上一问中的空洞卷积,实际上,空洞卷积可以看作一种特殊的可变形卷积。
在这里插入图片描述
可变形卷积使网络具有了学习空间几何形变的能力。具体来说,可变形卷积引入了一个平行分支来端到端地学习卷积核采样点的位置偏移量。如图 1.9 所示,该平行分支先根据输入特征图计算出采样点的偏移量,然后再在输入特征图上采样对应的点进行卷积运算。这种结构让可变形卷积的采样点能根据当前图像的内容进行自适应调整。
在这里插入图片描述

我们以二维卷积为例,详细说明可变形卷积的计算过程。假设卷积核尺寸为 3×3,记 R = {(-1,-1)、(-1,0)、(-1,1)、(0,-1)、(0,0)、(0,1)、(1,-1)、(1,0)、(1,1)},它对应着卷积核的 9 个采样点。首先来看普通卷积,可以用公式形式化为:
y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n ) (1.3) y(p_0)=\sum_{p_n∈R}w(p_n)·x(p_0+p_n)\tag{1.3} y(p0)=pnRw(pn)x(p0+pn)(1.3)
其中, x ( ⋅ ) x(·) x() y ( ⋅ ) y(·) y()分别是卷积层的输入特征图和输出特征图,$p_0 是卷积窗的中心点, 是卷积窗的中心点, 是卷积窗的中心点,p_n$ 是卷积核的采样点。对于可变形卷积,它的计算公式则是:
y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n + Δ p n ) (1.4) y(p_0)=\sum_{p_n∈R}w(p_n)·x(p_0+p_n+\Delta p_n)\tag{1.4} y(p0)=pnRw(pn)x(p0+pn+Δpn)(1.4)
其中 Δ p n \Delta p_n Δpn 是采样点的位置偏移量。由于 Δ p n \Delta p_n Δpn是在网络中端到端地学习得到的,它可能不是整数,这会导致 p 0 + p n + Δ p n p_0+p_n+\Delta p_n p0+pn+Δpn不在整数网格点上,此时需要采用双线性插值:
x ( p ) = ∑ q G ( q , p ) ⋅ x ( q ) (1.5) x(p)=\sum_q G(q,p)·x(q) \tag{1.5} x(p)=qG(q,p)x(q)(1.5)
其中,p 是任意位置点(例如取 p = p 0 + p n + Δ p n p=p_0+p_n+\Delta p_n p=p0+pn+Δpn),q是整数网格点,
G ( q , p ) = m a x ( 0 , 1 − ∣ q x − p x ∣ ⋅ m a x ( 0 , 1 − ∣ q y − p y ∣ ) G(q,p)=max(0,1-|q_x-p_x|·max(0,1-|q_y-p_y|) G(q,p)=max(0,1qxpxmax(0,1qypy)
是双线性插值核。
适应物体在不同图片中出现的复杂几何形变(如尺度、形态、非刚性形变等),一直是物体识别领域的难点。可变形卷积网络给出了一个可行的解决方案,它可以端到端地学习几何形变的偏移量,不需要额外的监督信息,并且只增加了少许计算量,最终能带来性能的显著提升。图 1.10 是可变形卷积的一组效果示意图,图中结点是激活点,红点是激活点对应的三层 3×3 可变形卷积表示的采样位置(其有 9×9×9 = 729 个点)。可以看到,红色采样点基本覆盖了检测物体的全部区域,这说明可变形卷积会根据物体的尺度、形态进行自适应调整。
在这里插入图片描述

这篇关于深度学习基础--卷积的变种的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145149

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个