卷积神经网络 - 微步卷积、空洞卷积

一、微步卷积

微步卷积(Fractionally Strided Convolution),通常也称为转置卷积(Transposed Convolution)或反卷积(Deconvolution),是深度学习(尤其是卷积神经网络,CNN)中用于上采样(Upsampling)或特征图尺寸恢复的关键操作。它的核心目的是通过卷积操作将较小的特征图(低分辨率)扩展为更大的特征图(高分辨率)。

1. 微步卷积的核心思想

在普通卷积中,步长(stride)决定了卷积核移动的间隔。例如,步长=2时,每次移动2个像素,输出特征图的尺寸会缩小。而微步卷积的步长可以视为小于1(例如步长=0.5),这实际上是一种数学上的逆向操作,目的是通过卷积核的“反向滑动”来放大特征图

  • 直观理解:如果普通卷积是“压缩”信息,微步卷积则是“恢复”或“扩展”信息。

  • 应用场景:图像分割(如U-Net)、生成对抗网络(GAN)、超分辨率重建等需要上采样的任务。

2. 微步卷积的原理

输入与输出的尺寸关系

普通卷积的输出尺寸公式为:

而微步卷积的输出尺寸公式为:

这里的“步长”实际上是一个分数(如0.5),对应转置卷积中的步长>1(如2)。

实现方式

微步卷积通过以下步骤实现上采样:

  1. 插入空白(或填充):在输入特征图的元素之间插入零(或插值)以扩大尺寸。

  2. 普通卷积操作:对扩展后的特征图执行普通卷积(步长=1)。

例如,输入尺寸为 4×4,若希望输出尺寸为 8×8,可以通过插入零将输入扩展为 7×7(步长=2),再使用卷积核完成填充。

3. 微步卷积的直观示例

假设输入是一个 2×2 的矩阵,微步卷积的步长=2(即分数步长=0.5):

  1. 插入零:在输入元素之间插入零,得到一个 3×3 的矩阵。

  2. 卷积操作:对扩展后的矩阵应用步长=1的普通卷积。

最终输出尺寸会被放大,具体取决于卷积核大小和填充方式。

4. 微步卷积的应用

  1. 图像生成(GAN):生成器网络通过微步卷积从低维潜在向量生成高分辨率图像。

  2. 语义分割(如U-Net):解码器部分通过微步卷积恢复空间分辨率,实现像素级分类。

  3. 超分辨率重建:将低分辨率图像上采样为高分辨率图像。

5. 微步卷积的注意事项

  • 棋盘效应(Checkerboard Artifacts):由于插入零的规则性,输出可能产生棋盘状伪影。解决方法包括使用可学习的上采样(如PixelShuffle)或调整卷积核大小。

  • 与反卷积的区别:数学上的反卷积是卷积的逆运算,而微步卷积(转置卷积)仅是正向卷积的转置操作,并非严格的逆运算。

  • 初始化:微步卷积的权重需要合理初始化,以避免训练不稳定。

总结

微步卷积通过反向步长和填充机制实现上采样,是深度学习模型中对空间信息恢复的核心工具。它的核心价值在于允许网络自动学习如何从低分辨率特征重建高分辨率信息,广泛应用于生成模型和密集预测任务。

二、空洞卷积

空洞卷积(Dilated Convolution),也称为膨胀卷积带孔卷积(Atrous Convolution),是卷积神经网络中一种特殊的卷积操作,旨在扩大感受野(Receptive Field)而不增加参数量降低特征图分辨率。它通过引入“膨胀率”(Dilation Rate)来控制卷积核的稀疏性,从而高效捕获多尺度上下文信息。

1. 空洞卷积的核心思想

  • 普通卷积的局限:传统卷积通过堆叠多层或增大卷积核尺寸来扩大感受野,但这会导致参数量增加或特征图分辨率下降(通过池化)。

  • 空洞卷积的改进:在卷积核的权重之间插入“空洞”(间隔),使卷积核覆盖更大的区域,同时保持参数数量不变。

    • 膨胀率(Dilation Rate):定义卷积核元素之间的间隔。例如,膨胀率=2时,3×3的卷积核实际覆盖的区域为5×5)。

2. 空洞卷积的数学原理

  • 普通卷积核的覆盖范围
    3×3卷积核的覆盖范围为3×3(膨胀率=1)。

  • 空洞卷积的覆盖范围
    膨胀率=r时,实际覆盖范围大小为:

    (k+(k−1)(r−1))×(k+(k−1)(r−1))

    其中,k为原始卷积核尺寸。
    例如,3×3卷积核膨胀率=2时,覆盖范围=3 + 2×(3−1) = 5×5。

  • 输出尺寸公式
    输入尺寸为H×W时,空洞卷积的输出尺寸为:

  • 其中,p为填充(padding),s为步长(stride)。

3. 空洞卷积的直观示例

假设输入是一个7×7的矩阵,使用3×3卷积核,膨胀率=2:

  1. 膨胀后的卷积核:原始3×3的核元素之间插入1个零(间隔为2),实际覆盖5×5区域。

  2. 计算方式:仅对非零位置的权重进行乘加运算,忽略空洞位置的零值。

  3. 输出结果:感受野显著增大,但参数量仍为3×3=9(与普通3×3卷积相同)。

4. 空洞卷积的应用场景

(1)多尺度特征融合
  • 语义分割(如DeepLab系列):通过不同膨胀率的空洞卷积并行捕获多尺度上下文信息(如ASPP模块)。

  • 示例:膨胀率=1, 6, 12, 18的卷积核并行使用,覆盖不同范围的上下文。

(2)保持高分辨率特征图
  • 实时图像处理:避免池化导致的分辨率损失,直接在高分辨率特征图上进行密集预测。

(3)序列建模
  • WaveNet:利用空洞卷积堆叠(膨胀率指数增长)捕获长距离时序依赖,用于音频生成。

5. 空洞卷积的优缺点

优点
  • 增大感受野不增加参数量:相比普通卷积或池化,更高效。

  • 保持分辨率:无需下采样,适合密集预测任务(如分割、检测)。

  • 灵活的多尺度设计:通过组合不同膨胀率捕获局部和全局特征。

缺点
  • 局部信息丢失:膨胀率过大时,卷积核覆盖的区域可能过于稀疏,导致局部细节丢失。

  • 棋盘效应:高膨胀率下,特征图可能因间隔采样产生棋盘状伪影(需合理设计膨胀率组合)。

6. 空洞卷积与普通卷积的对比

特性普通卷积空洞卷积
感受野由卷积核尺寸和层数决定由膨胀率和卷积核尺寸共同决定
分辨率保持可能通过池化降低分辨率通常保持高分辨率
参数效率参数量随卷积核尺寸增加参数量固定,仅依赖原始卷积核尺寸
适用场景通用特征提取密集预测、长距离依赖建模

7. 代码示例(PyTorch)

import torch.nn as nn# 空洞卷积定义
dilated_conv = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, dilation=2,  # 膨胀率=2padding=2    # 填充需调整以保证输出尺寸
)# 输入尺寸计算(假设输入为H×W)
H_out = (H + 2*padding - dilation*(kernel_size-1) -1 ) // stride + 1

8. 总结

空洞卷积通过引入膨胀率,在不增加参数量的前提下显著扩大感受野,解决了传统卷积在密集预测任务中感受野不足或分辨率损失的问题。其核心价值在于:

  • 高效捕获多尺度上下文:适用于语义分割、序列建模等任务。

  • 保持特征图分辨率:避免因池化导致的信息丢失。

  • 灵活的参数设计:通过调整膨胀率平衡局部细节与全局语义。

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

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

相关文章

详解java体系实用知识总结

0.java技术能力框架 基础模块应用模块综合模块技术岗位与面试流程常用工具集系统架构设计计算机基础常用框架微服务架构jvm原理缓存容器化多线程队列云计算(阿里云/aws)设计模式数据库数据结构与算法 1.常用设计模式与应用场景 工厂模式:s…

设计模式之创建型5种

设计模式 为什么设计模式是23种创建型 对象创建为什么设计模式是23种 设计模式之所以被归纳为23种,而非其他数量,源于GoF(Gang of Four)在1994年的系统性总结和分类。这一数量的确定并非偶然,而是基于以下核心原因: 他们遵循“大三律”(Rule of Three),即只有经过三个…

Oracle 23ai Vector Search 系列之2 ONNX(Open Neural Network Exchange)

文章目录 Oracle 23ai Vector Search 系列之2 ONNX(Open Neural Network Exchange)ONNX基本概念ONNX(Open Neural Network Exchange)ONNX Runtime ONNX Runtime 在Oracle数据库中的集成参考 Oracle 23ai Vector Search 系列之2 ONNX(Open Neural Network Exchange) 我们在看【…

统一语言学习范式

摘要 现有的预训练模型通常针对特定类别的问题。迄今为止,关于何种架构和预训练设置应为最佳似乎仍未达成共识。本文提出了一个统一的框架,用于预训练在多种数据集和设置中普遍有效的模型。我们首先将架构原型与预训练目标这两个常被混为一谈的概念进行…

Flutter项目升级到指定版本的详细步骤指南

一、升级前的准备工作 备份项目 使用Git提交当前所有修改:git commit -am "Pre-upgrade backup"或直接复制项目文件夹 查看当前环境信息 flutter --version flutter doctor二、升级Flutter SDK到指定版本 方法1:通过版本管理工具升级&#x…

22、web前端开发之html5(三)

六. 离线存储与缓存 在网络环境不稳定或需要优化资源加载速度的场景下,离线存储与缓存技术显得尤为重要。HTML5引入了多种离线存储和缓存机制,帮助开发者提升用户体验。本节将详细介绍Application Cache、localStorage、sessionStorage以及IndexedDB等技…

用HTML和CSS生成炫光动画卡片

这个效果结合了渐变、旋转和悬浮效果的炫酷动画示例&#xff0c;使用HTML和CSS实现。 一、效果 二、实现 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport&quo…

【嵌入式学习2】数组

目录 ## 数组概念 ## 数组使用 ## 数组初始化 ## 数组名 ## 数组长度 ## 数组相关题目 1、找最大值 2、逆置 ## 数组和指针 指针加整数的含义 ## 指针数组 ## 数组名做函数参数 ## 函数参数传递数组 1、在函数内部 2. 在函数外部 ## 多维数组 使用下标访问 #…

C++中的判断与循环

一.if判断语句 1.程序中的判断&#xff1a; if (要执行的判断&#xff0c;最后的返回值要是bool型的数据) {如果为真&#xff0c;要执行的代码段; } #include"iostream" using namespace std;int main() {int ans;cin >> ans;if (ans > 1000) {cout <…

前端开发中生成网站的favicon.ico文件的软件推荐及使用方法

日常网站开发中&#xff0c;我们经常需要生成网站的favicon.ico文件&#xff0c;今天我在这里来推荐几个编辑.ico(也可将图片格式转化为.ico)图片&#xff0c;而且免费的那软件&#xff1a; GIMP&#xff1a;一个功能强大的开源图像编辑软件&#xff0c;支持多种文件格式&#…

浅谈WebSocket-FLV

FLV是一种视频数据封装格式&#xff0c;这种封装被标准通信协议HTTP-FLV和RTMP协议应用。 而WebSocket-FLV是一种非标的FLV封装数据从后端发送到前端的一种方式。 在WebSocket的url请求中&#xff0c;包含了需要请求设备的视频相关信息&#xff0c;在视频数据到达时&#xff0c…

基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 ADMM算法 4.2 最大似然ML检测算法 4.3 最小均方误差&#xff08;MMSE&#xff09;检测算法 4.4 迫零&#xff08;ZF&#xff09;检测算法 4.5 OCD_MMSE 检测算法 4.6 LAMA检测算法 …

cocos creator 笔记-路边花草

版本&#xff1a;3.8.5 实现目标&#xff1a;给3d道路生成路边景观花草 在场景下创建一个节点&#xff0c;我这里种植两种花草模型&#xff0c;兰花和菊花&#xff0c;所以分别在节点下另创建两个节点&#xff0c;为了静态合批。 1.将花草模型分别拖入场景中&#xff0c;制作…

R语言——循环

参考资料&#xff1a;学习R 在R中有三种循环&#xff1a;repeat、while和for。虽然向量化意味着我们可能并不需要大量使用它们&#xff0c;但在需要重复执行代码时&#xff0c;它们是非常有用的。 1、重复循环 R中最容易掌握的循环是repeat。它所做的事情就是反复地执行代码&a…

springboot使用阿里限流框架-sentinel

当前项目源码 控制台下载 启动bin中的看板服务&#xff1a;账号密码:sentinel/sentinel 官方文档地址 项目引入依赖 <!-- sentinel注解支持 --> <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-annotation-aspectj<…

CSS3学习教程,从入门到精通,CSS3 元素的浮动与定位语法知识点及案例代码(17)

CSS3 元素的浮动与定位语法知识点及案例代码 一、CSS3 浮动&#xff08;float&#xff09; 知识点 1. **定义** &#xff1a;浮动使元素向左或向右移动&#xff0c;直到它的外边缘碰到包含框或另一个浮动元素的边框为止。浮动主要用于布局&#xff0c;如实现图文绕排等效果。…

数据结构:汉诺塔问题的递归求解和分析

递归方法求解该类问题&#xff0c;是一种简单的思维方法&#xff0c;通常比使用迭代方法更简单。但是&#xff0c;递归方法也有劣势。此处以典型的汉诺塔问题&#xff08;Tower of Hanoi&#xff09;为例给予说明。 汉诺塔是根据一个传说形成的数学问题&#xff0c;最早是由法国…

3.27学习总结 算法题

自己用c语言做的&#xff0c;不尽如意 后面看了题解&#xff0c;用的是c&#xff0c;其中string 变量和字符串拼接感觉比c方便好多&#xff0c;可以用更少的代码实现更好的效果&#xff0c;打算之后去学习c&#xff0c;用c写算法。 递归&#xff0c;不断输入字符&#xff0c;…

vue 图片放大到全局

背景&#xff1a; 在vue项目中&#xff0c;el-image组件图片组件用于展示图片&#xff0c;组件自带的属性preview-teleported&#xff0c;设置为true可以控制图片放大到全局 实现效果&#xff1a; 核心代码&#xff1a; //图片地址&#xff1a;BASEUrl /file/ item.file //这…

【商城实战(75)】数据分析指标体系搭建:从0到1的技术指南

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…