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

本文详细总结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激活来进行“激励”操作,这两层作为网络的一部分需要额外学习其参数,这个过程生成每个通道的权重系数。这些权重系数用于动态地调整每个通道的重要性,使网络能够专注于更有用的特征。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pytorch之诗词生成--2

先上代码: # -*- coding: utf-8 -*- # File : dataset.py # Author : AaronJny # Time : 2019/12/30 # Desc : 构建数据集 from collections import Counter import math import numpy as np import tensorflow as tf import settingsclass Tokenizer:""&…

【敬伟ps教程】视频动画

文章目录 视频文档视频时间轴帧动画视频文档 工作区需由[基本功能]切换为[动感] 可以看到我们需从时间的维度来编辑动态视觉图像 时间轴:从时间的维度来编辑动态视觉图像 PS提供的时间轴有两种:1、视频时间轴;2、动画时间轴 新建视频文档,点击新建或Ctrl+N,预设选择“胶…

NCV1117ST50T3G线性稳压器芯片中文资料规格书PDF数据手册引脚图图片价格参数

产品概述: NCP1117系列为低压差(LDO)正向线性电压稳压器,能够提供超过1.0A的输出电流,800mA时温度范围内最大压差为1.2V。这一系列包括八个固定输出电压:1.5V、1.8V、2.0V、2.5V、2.85V、3.3V、5.0V 和 12…

LeetCode刷题小记 八、【回溯算法】

1.回溯算法 文章目录 1.回溯算法写在前面1.1回溯算法基本知识1.2组合问题1.3组合问题的剪枝操作1.4组合总和III1.5电话号码的字母组合1.6组合总和1.7组合总和II1.8分割回文串1.9复原IP地址1.10子集问题1.11子集II1.12非递减子序列1.13全排列1.14全排列II1.15N皇后1.16解数独 写…

代码贴--动态顺序表--数据结构

本博客将记录操作系统中的动态顺序表的相关代码 头文件&#xff08;SeList.h&#xff09; #pragma once #include<stdio.h> #include<string.h> #include<stdlib.h> #include<assert.h> typedef int SQDataType; //动态顺序表typedef struct SeqList…

可视化展示与交互编辑:探索3D Web轻量化平台HOOPS WEB Platform在BIM中的新可能性

随着数字技术的飞速发展&#xff0c;建筑行业也在不断迈向数字化转型的道路。在这个过程中&#xff0c;BIM&#xff08;Building Information Modeling&#xff0c;建筑信息模型&#xff09;技术已经成为建筑设计、施工和管理领域中的一项重要工具。 而在BIM的应用中&#xff…

Javascript抓取京东、淘宝商品数据(商品采集商品详情图片抓取)

之前用的方法&#xff1a; let temp []var lists $(#J_goodsList li.gl-item)$.each(lists,function(idx,item){ temp.push({ id:$(item).data(sku), goods_img:$(item).find(img).attr(src), goods_name:$(item).find(.p-name em).text(), market_price:$(item).fi…

C++:函数传参到函数执行结束发生了什么

首先要明确两个概念 函数实参的入栈从右向左栈区从高地址向低地址偏移 接下来看下面一段代码 void fun(int a,int b,int c){std::cout<<&a<<" "<<&b<<" "<<&c<<std::endl; } int main(){fun(1,2,3); }…

中国首个基于区块链的分布式算力网络上线

随着美国人工智能公司OpenAI近期发布的Sora视频模型&#xff0c;全球对高性能算力的需求突破了历史新高。Sora的创新在于它能够以超长生成时间、多角度镜头捕捉&#xff0c;理解物理世界的能力&#xff0c;这不仅是技术的一大突破&#xff0c;更是对算力需求的一大挑战。在这样…

Qt教程 — 3.3 深入了解Qt 控件:Input Widgets部件(2)

目录 1 Input Widgets简介 2 如何使用Input Widgets部件 2.1 QSpinBox组件-窗口背景不透明调节器 2.2 DoubleSpinBox 组件-来调节程序窗口的整体大小 2.3 QTimeEdit、QDateEdit、QDateTimeEdit组件-编辑日期和时间的小部件 Input Widgets部件部件较多&#xff0c;将分为三…

基于Python django的人脸识别门禁系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、Python技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&…

报Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String错误

在springboot中使用Mybatis出现Invalid value type for attribute factoryBeanObjectType: java.lang.String 1、没有使用mybatis 检查pom文件里面的mybatis 可能是缺少这个依赖&#xff0c;或者版本过低 重新导入依赖 <dependency><groupId>org.mybatis.spri…

ubuntu(20.04)-安装JAVA环境-IDEA

1.下载IDEA 2.解压文件 sudo tar -zxvf idealC-2022.2.3.tar.gz -C /opt 3.添加环境变量&#xff1a; .vim ~/.bashrc export IDEA_HOME/opt/ideaIC-2022.2.3/ export PATH${IDEA_HOME}/bin:$PATH source ~/.bashrc 4.启动&#xff1a; cd /opt/ideaIC-2…

数据结构 第3章:栈与队列

文章目录 1. 栈1.1 栈的基本概念1.2 栈的基本操作1.3 栈的顺序存储实现1.4 栈的链式存储实现 2. 队列2.1 队列的基本概念2.2 队列的基本操作2.3. 队列的顺序存储实现2.4 队列的链式存储实现2.5 双端队列 3. 栈与队列的应用3.1 栈在括号匹配中的应用3.2 栈在表达式求值中的应用3…

聚观早报 | 微博2023年Q4营收;宝马集团2023财年营收

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 3月16日消息 微博2023年Q4营收 宝马集团2023财年营收 海信发布中文大模型 岚图梦想家新增两款车型 vivo X Fold…

Transformer中注意力层和位置感知前馈层的分工与合作

1. 注意力层和位置感知前馈层的分工与合作 在Transformer模型中&#xff0c;注意力层&#xff08;自注意力机制&#xff09;和位置感知前馈层&#xff08;Position-wise Feed-Forward Networks, FFNs&#xff09;分别承担着不同的任务&#xff1a; 注意力层&#xff08;自注意…

【Godot4自学手册】第二十四节利用DirectionalLight2D节点实现夜幕降临

根据我们的游戏情节&#xff0c;今天我们将要实现夜晚的来临&#xff0c;主要是用DirectionalLight2D节点来实现&#xff0c;当与NPC对完话后&#xff0c;整改场景逐渐变得黑暗。 一、添加DirectionalLight2D节点 切换到主场景main&#xff0c;选择根目录&#xff0c;单击添加…

Linux下的多线程编程:原理、工具及应用(2)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;Flower of Life—陽花 0:34━━━━━━️&#x1f49f;──────── 4:46 &#x1f504; ◀️ ⏸ ▶️ ☰ …

Acwing.1262 鱼塘钓鱼(多路归并)

题目 有 N个鱼塘排成一排&#xff0c;每个鱼塘中有一定数量的鱼&#xff0c;例如&#xff1a;N5时&#xff0c;如下表&#xff1a; 即&#xff1a;在第 1个鱼塘中钓鱼第 1分钟内可钓到 10条鱼&#xff0c;第 2分钟内只能钓到 8条鱼&#xff0c;……&#xff0c;第 5分钟以后再…

Vite为什么比Webpack快

一、引言 主流的前端构建工具包括以下几种&#xff1a; Webpack&#xff1a;当下最热门的前端资源模块化管理和打包工具。它能够将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。同时&#xff0c;Webpack还支持代码分割&#xff0c;可以按需加载模块&#…