当前位置: 首页 > news >正文

【卷积基础】CNN中一些常见卷积(1*1卷积、膨胀卷积、组卷积、深度可分离卷积)

文章目录

  • 逐通道卷积(Pointwise Convolution,1x1 卷积)
    • 主要作用
    • 逐通道卷积的操作过程
    • 优势
    • 代码示例
    • 典型应用
  • 膨胀卷积(Dilated Convolution)
    • 主要作用
    • 工作原理
    • 膨胀率 (dilation rate) 的定义
    • 代码实例
    • 膨胀卷积的优点
  • 组卷积(Group Convolution)
    • 主要作用
    • 工作原理
      • 普通卷积
      • 分组卷积
    • 代码实例
  • 深度可分离卷积(Depthwise Separable Convolution)
    • 主要作用
    • 深度卷积(Depthwise Convolution)
      • 原理
      • 实现方法
    • 1*1卷积
      • 原理
      • 实现方法
    • 代码

参考: CNN 理解神经网络中卷积(大小,通道数,深度)

逐通道卷积(Pointwise Convolution,1x1 卷积)

逐通道卷积(Pointwise Convolution),也称为 1x1 卷积,是一种特殊的卷积操作,其中卷积核的大小为 1x1。

这种卷积操作不会覆盖空间维度(height 和 width),而是只作用于每个位置上的所有通道,这使得逐通道卷积主要用于调整通道数量或整合通道信息

主要作用

  • 降维( dimension reductionality ): 比如,一张500 * 500且厚度depth为100 的图片在20个filter上做1*1的卷积,那么结果的大小为500×500×20。就是改变了输入和输出的通道数,可以减少参数。

  • 增加非线性:卷积层之后经过激励层,1*1的卷积在前一层的学习表示上添加了非线性激励( non-linear activation ),提升网络的表达能力;很明显,增加了非线性,因为相当于又进行了一次运算。

在这里插入图片描述

逐通道卷积的操作过程

逐通道卷积对输入特征图的每个空间位置都使用一个 1x1 的卷积核来进行计算,因此该操作不改变特征图的空间分辨率(height 和 width),而是针对通道进行操作。

例如,假设输入特征图的大小为 [height, width, channels_in],逐通道卷积会:

  • 仅在每个空间位置的通道维度上进行加权求和,输出为 [height, width, channels_out]

  • 通过多个 1x1 卷积核堆叠,实现对所有通道的线性组合,从而调整通道数量。

优势

  • 降维或升维:可以调整通道数,例如从较高的通道数降维为较低的通道数,或从较低的通道数升维为较高的通道数。

  • 减少计算量:在深层网络中,先通过 1x1 卷积减少通道数,再应用较大卷积核,可以降低计算复杂度。

  • 融合通道信息:通过对不同通道进行线性组合,逐通道卷积可以聚合通道之间的信息,从而提取到更丰富的特征。

代码示例

在这个例子中,1x1 卷积调整了通道数,从 64 转换为 128,但空间分辨率(height 和 width)保持不变(即32x32)。

import torch
import torch.nn as nn# 定义1x1逐通道卷积
conv1x1 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=1)# 输入一个大小为 (batch_size, 64, height, width) 的特征图
input_tensor = torch.randn(1, 64, 32, 32)
output_tensor = conv1x1(input_tensor)print("输出特征图形状:", output_tensor.shape)  # (1, 128, 32, 32)

典型应用

  1. 通道整合:用于将特征进行通道混合,常用于 MobileNet 和 ResNet 等网络结构。

  2. 深度可分离卷积:在深度可分离卷积中,逐通道卷积和深度卷积结合,形成一种高效的特征提取方式,显著减少参数和计算量。

  3. 调整特征图维度:在网络的不同层之间,通过 1x1 卷积来匹配不同层的通道数。

膨胀卷积(Dilated Convolution)

参考:空洞卷积(膨胀卷积)的相关知识以及使用建议(HDC原则)

膨胀卷积(Dilated Convolution),又称为扩张卷积或空洞卷积,是一种特殊的卷积操作,它通过在卷积核的元素之间插入间隔(称为膨胀率或扩张率)来扩大感受野。这样一来,膨胀卷积在不增加参数数量和计算量的前提下可以获取更大的上下文信息。

在nn.conv2d中由dilation参数决定。
在这里插入图片描述

主要作用

  1. 增大感受野

  2. 保持原输入特征图的高度和宽度

工作原理

在标准卷积中,每个卷积核会直接作用于相邻的输入像素。而在膨胀卷积中,通过在卷积核元素之间引入空隙,使得卷积核可以“跳跃”着查看更远的像素,感受野因此被扩大。

例如,假设一个 3x3 的标准卷积核作用在输入特征图上。对于膨胀率为 2 的膨胀卷积,卷积核会在每个元素之间留出 1 个空位,相当于“跳”过一个像素。这种操作使得卷积核感知更大区域的特征,而无需增加参数

在这里插入图片描述

膨胀率 (dilation rate) 的定义

膨胀卷积的核心参数是膨胀率 d,它决定了卷积核的“跳跃”距离:

  • 当 d=1 时,膨胀卷积退化为标准卷积。
  • 当 d=2 时,卷积核的每个元素之间有 1 个空隙,即相隔 2 个像素。
  • 当 d=3 时,卷积核的每个元素之间有 2 个空隙,即相隔 3 个像素。

计算公式:

输出尺寸 = 输入尺寸 − 膨胀卷积核尺寸 步幅 + 1 输出尺寸 = \frac{输入尺寸-膨胀卷积核尺寸}{步幅}+1 输出尺寸=步幅输入尺寸膨胀卷积核尺寸+1

在这里插入图片描述

代码实例

import torch
import torch.nn as nn# 使用膨胀率为2的3x3卷积核
dilated_conv = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=3, dilation=2)# 创建一个输入特征图
input_tensor = torch.randn(1, 1, 7, 7)
output_tensor = dilated_conv(input_tensor)
# (1, 1, 3, 3)
print("输出特征图形状:", output_tensor.shape)
  • 膨胀卷积核大小:3+(3-1)*(2-1)=5
  • 输出尺寸:(7-5)/1+1=3

因此输出是 (1, 1, 3, 3)

膨胀卷积的优点

  1. 扩大感受野:无需增加计算量就可以获取更大的感受野。
  2. 减少信息丢失:相比使用较大的步幅或池化层,膨胀卷积不会丢失输入特征图的空间分辨率。
  3. 提高网络性能:在图像分割和目标检测中常用,可以更好地捕捉多尺度的上下文信息。

组卷积(Group Convolution)

参考:卷积 - 3. 分组卷积 详解

组卷积(Group Convolution)是一种将通道分组的卷积方法,主要用于减少计算量,提升模型效率。

在nn.conv2d中由groups参数决定。
在这里插入图片描述

主要作用

通过将输入特征图的通道分成多个独立的组,每个组内进行单独的卷积运算,从而降低计算复杂度

工作原理

普通卷积

在这里插入图片描述
输入特征为 (H × W × C) ,然后应用 C’ 个filters(每个filter的大小为 (h × w × c),输入层被转换为大小为 (H' × W' × C') 的输出特征

分组卷积

在这里插入图片描述

  1. 分组操作:假设输入有 C 个通道,组卷积会将这些通道分成 G 组。每个组包含 C G \frac{C}{G} GC个通道。

  2. 独立卷积:每一组通道都会用各自的卷积核进行卷积。每组的计算是独立的,不会和其他组互相影响。

  3. 输出拼接:对每组通道的卷积操作完成后,组卷积将各组输出拼接在一起,形成最终的输出。

代码实例

import torch
import torch.nn as nn# 创建一个组卷积层,输入和输出通道数都为64,卷积核大小为3x3,分组数为4
group_conv = nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3, padding=1, groups=4)# 输入特征图,形状为[批次大小, 通道数, 高度, 宽度]
input_tensor = torch.randn(1, 64, 32, 32)# 进行组卷积操作
output_tensor = group_conv(input_tensor)
# 输出特征图形状: torch.Size([1, 64, 32, 32])
print("输出特征图形状:", output_tensor.shape)

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

深度可分离卷积(Depthwise Separable Convolution) 是一种将标准卷积操作拆分为两个独立操作的卷积方式,目的是降低计算复杂度和提高效率。

深度可分离卷积将标准卷积操作分解成两个更简单的卷积步骤:

  • 深度卷积(Depthwise Convolution)
  • 逐点卷积(Pointwise Convolution)

在这里插入图片描述

主要作用

通过将传统卷积操作拆分成两步,显著减少了计算量和参数量,是一种高效的卷积方式,特别适合在移动设备等资源有限的环境中应用。

深度卷积(Depthwise Convolution)

传统卷积中,一个卷积核会与输入图像的所有通道进行卷积。

一个大小为64×64像素、3通道彩色图片,经过4个Filters,输出为4张32x32的特征图

在这里插入图片描述

原理

而在深度卷积中,每个输入通道都使用一个单独的卷积核进行卷积。如果输入特征图有 C 个通道,就会用 C 个卷积核来进行卷积,每个卷积核只对单个通道进行卷积操作。

一个大小为64×64像素、3通道彩色图片,3个单通道卷积核分别进行卷积计算,输出3个单通道的特征图。所以,一个3通道的图像经过运算后生成了3个Feature map,如下图所示。

在这里插入图片描述

深度卷积: 输入特征图通道数=卷积核个数=输出特征图个数

实现方法

 # 深度卷积:每个通道使用独立的卷积核
self.depthwise = nn.Conv2d(in_channels, in_channels, kernel_size=kernel_size, padding=padding, groups=in_channels)

可以看到:

  • in_channels和out_channels都是相同的,输入特征图通道数=卷积核个数=输出特征图个数;

  • 卷积的设置参数中groups=in_channels,有几个通道数就分成几个组,即就安排几个卷积进行分通道操作。

1*1卷积

在深度卷积之后,通常会使用一个 1x1 卷积(即逐点卷积),它的作用是将深度卷积的输出进行通道间的混合。

在这里插入图片描述
根据深度卷积可知,输入特征图通道数=卷积核个数=输出特征图个数,这样会导致输出的特征图个数过少(或者说输出特征图的通道数过少,可看成是输出特征图个数为1,通道数为3),从而可能影响信息的有效性。此时,就需要进行逐点卷积。

原理

逐点卷积(Pointwise Convolution,PWConv) 实质上是用1x1的卷积核进行升维。在GoogleNet中大量使用1x1的卷积核,那里主要是用来降维。1x1的卷积核主要作用是对特征图进行升维和降维。

从深度卷积得到的3个单通道特征图,经过4个大小为1x1x3卷积核的卷积计算,输出4个特征图,而输出特征图的个数取决于Filter的个数。

实现方法

# 逐点卷积:1x1卷积对通道进行组合self.pointwise = nn.Conv2d(in_channels, out_channels, kernel_size=1)

代码

import torch
import torch.nn as nnclass DepthwiseSeparableConv(nn.Module):def __init__(self, in_channels, out_channels, kernel_size=3, padding=1):super(DepthwiseSeparableConv, self).__init__()# 深度卷积:每个通道使用独立的卷积核self.depthwise = nn.Conv2d(in_channels, in_channels, kernel_size=kernel_size, padding=padding, groups=in_channels)# 逐点卷积:1x1卷积对通道进行组合self.pointwise = nn.Conv2d(in_channels, out_channels, kernel_size=1)def forward(self, x):x = self.depthwise(x)   # 深度卷积x = self.pointwise(x)   # 逐点卷积return x# 创建一个输入张量
input_tensor = torch.randn(1, 64, 32, 32)  # [batch_size, channels, height, width]# 创建一个深度可分离卷积层,输入通道为64,输出通道为128
model = DepthwiseSeparableConv(64, 128)# 进行前向传播
output_tensor = model(input_tensor)
print("输出特征图形状:", output_tensor.shape)

相关文章:

【卷积基础】CNN中一些常见卷积(1*1卷积、膨胀卷积、组卷积、深度可分离卷积)

文章目录 逐通道卷积(Pointwise Convolution,1x1 卷积)主要作用逐通道卷积的操作过程优势代码示例典型应用 膨胀卷积(Dilated Convolution)主要作用工作原理膨胀率 (dilation rate) 的定义代码实例膨胀卷积的优点 组卷…...

组合(DFS)

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2: 输入:n 1, k 1…...

linux盘扩容缩容

这里写目录标题 文件格式介绍问题:当根盘满了过后怎么办?解决方式: Xfs文件格式缩容扩容1. 备份2. 卸载home3. 缩容home(home盘为xfs文件格式)4. 扩容 /5. 恢复home备份 Ext4文件格式缩容扩容1. 备份(可选&…...

mysql中REPLACE语句使用说明

在 MySQL 中,REPLACE语句用于插入或更新数据。当插入的数据与表中的唯一索引或主键冲突时,它会先删除冲突的行,然后再插入新的数据。这是一种很方便的操作方式,可以简化在需要更新或插入数据时的代码逻辑。 它的语法结构与INSERT语…...

分享:文本转换工具:PDF转图片,WORD转PDF,WORD转图片

前言 鉴于网上大多数在线转换工具要么需要收费,要么免费后但转换质量极差的情况,本人开发并提供了PDF转图片,WORD转PDF,WORD转图片等的文本转换工具。 地址 http://8.134.236.93/entry/login 账号 账号:STAR001&a…...

mac crontab 不能使用问题简记

需要 crontab 有权限,如下截图设置 在访达上方【前往】-》【前往文件夹】输入/ 然后按 Command Shift . 显示隐藏文件,然后将 usr 放到左边栏 然后如下操作 系统设置中找到 隐私安全->完全访问磁盘 点击小锁头 点击号,将/usr/bin/c…...

Python 自动化测试应用

Python 自动化测试应用 目录 🧪 自动化测试基础与重要性📝 使用 pytest、unittest 进行运维脚本和工具的自动化测试🔧 自动化测试与 CI/CD 集成🛠 测试驱动开发(TDD)在运维脚本中的应用🐳 模拟…...

Python-安装与PyCharm的安装配置(1)

目录 安装 打开运行 PyCharm的安装 新建项目 安装 找到官网下载对应的电脑对应的版本 Welcome to Python.org -- 官网 下载稳定版的 安装记得勾选配置环境,这样自己就不需要再配置环境了 安装成功 至此python的运行环境就安装好了 打开运行 在开始菜单中可以…...

操作系统概念(一)——IOMMU学习

系列文章目录 提示:本系列主要记录工作过程中遇到的操作系统基础概念以及工作原理 第一章 操作系统之IOMMU 文章目录 系列文章目录1. 设备访问内存的几种主要方式1.1 传统的 I/O 访问(程序控制 I/O)1.2 直接内存访问(DMA&#xf…...

通过 Windows IIS 服务访问腾讯云 CFS 文件系统

互联网信息服务(IIS)可以像访问本地数据一样访问文件存储(Cloud File Storage,CFS)系统上的数据,并提供 Web 服务,实现网站存储与计算分离。本文介绍如何配置 IIS 访问 CFS 文件系统。 背景信息…...

如何电脑连接电视,实现大屏自由!

在追求很高视听享受的今天,将电脑连接到电视上已经成为了一种趋势。无论是追剧、办公演示还是享受游戏,大屏幕带来的沉浸感是笔记本电脑无法比拟的。今天就为大家详细介绍四种不同的电脑连接电视的方法,助你轻松实现大屏自由! 方…...

闭包的概念及使用场景介绍

概念:在JavaScript中,闭包(Closure)是指一个函数有权利访问定义在它外部作用域的任何变量。 function outerFn(outerVal) {return function innerFn(innerVal) {console.log(outerVal, outerVal)console.log(innerVal, innerVal)…...

qt5将程序打包并使用

一、封装程序 (1)、点击创建项目->库->clibrary (2)、填写自己想要封装成库的名称,这里我填写的名称为mydll1 (3)、如果没有特殊的要求,则一路下一步,最终会出现如下文件列表。 (4)、删…...

软件设计师-上午题-15 计算机网络(5分)

计算机网络题号一般为66-70题,分值一般为5分。 目录 1 网络设备 1.1 真题 2 协议簇 2.1 真题 3 TCP和UDP 3.1 真题 4 SMTP和POP3 4.1 真题 5 ARP 5.1 真题 6 DHCP 6.1 真题 7 URL 7.1 真题 8 浏览器 8.1 真题 9 IP地址和子网掩码 9.1 真题 10 I…...

uniapp上拉刷新下拉加载

方法一: z-paging 的组件库: show-loading-more-no-more-view"false" 该属性控制是否显示 "加载更多" 或 "没有更多" 的提示。如果设为 false,则不会显示这些提示。如果设为 true,当数据加载完毕…...

【C++】【算法基础】快速排序

快速排序 题目 用快速排序排序长度为 n n n的整数数列。 题解 快速排序的核心思想是分而治之:选定一个基准值,将数组分为两半,一边比其小,一边比其大,然后再次分别选定一个基准值,再次操作。 #include…...

数仓工具—Hive语法之窗口函数中的order by

窗口函数中的order by 其实工作这么多年了,再加上写了这么多的文章,我觉得我还是很理解窗口函数这个东西了,毕竟在工作中用了这么多,各种row_number 排序求分组前几,各种lead/lag 代替自关联实现感觉已经得心应手了。 但是最近遇到窗口函数中的order by 的问题,然后我发…...

以旅游产品为例改写一篇系统架构风格的论文

概念: 系统架构风格是描述某一特定应用领域中系统组织方式的惯用模式,架构风格定义了一个词汇表和一组约束,词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的,软件系统架构风格反应了领域中众多软件系统所共有的结构和语义特性,…...

【Linux】linux编辑器-vim的命令及配置

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…...

解决vite项目tailwindcss不生效!!(Vue3、tailwindcss失效)

安装tailwindcss vite自带安装了postcss,只需要安装tailwindcss npm install -D tailwindcss自动创建tailwind.config.js npx tailwindcss init -p/** type {import(tailwindcss).Config} */ module.exports {// 配置需要使用tailwindcss的文件content: [./src/vi…...

ubuntu 20.04 NVIDIA驱动、cuda、cuDNN安装

1. NVIDIA驱动 系统设置->软件和更新->附加驱动->选择NVIDIA驱动->应用更改。该界面会自动根据电脑上的GPU显示推荐的NVIDIA显卡驱动。 运行nvidia-smi: NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver. Make sure that the lat…...

Python世界:力扣题704二分查找

Python世界:力扣题704二分查找 任务背景思路分析代码实现测试套件本文小结 任务背景 问题来自力扣题目704:Binary Search,大意如下: Given an array of integers nums which is sorted in ascending order, and an integer target…...

W55RP20-EVB-Pico评估板介绍

目录 1 简介 2 硬件资源 2.1 硬件规格 2.2 引脚定义 2.3 工作条件 3 参考资料 3.1 RP2040 数据手册 3.2 原理图 ​编辑 原理图 & 物料清单 & Gerber 文件 3.3 尺寸图(单位:mm) ​编辑 3.4 认证 3.5 参考例程 4 硬件协…...

Flink安装和Flink CDC实现数据同步

一,Flink 和Flink CDC 1, Flink Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。 中文文档 Apache Flink Documentation | Apache Flink 官方文档 :https://flink.apache.org Flink 中文社区…...

数字化转型助手 快鲸SCRM系统为企业营销赋能

内容概要 在当今这个快速变化的商业环境中,数字化转型已经成为企业生存与发展的关键要素。无论是零售、制造还是服务行业,企业都深刻意识到传统工作模式的局限性,必须借助先进的技术来优化运营和提升客户体验。快鲸SCRM系统就是这样一款数字…...

浅谈Agent

目录 什么是大模型 Agent ? 大模型Agent 有哪些部分组成? 规划(Planning) Planning类型 不依赖反馈的计划 基于反馈的计划 拆解子目标和任务分解方法 COT TOT GOT LLMP 反思和完善 ReAct(融合推理与执行的能力) Reflexion(动态…...

绿色能源发展关键:优化风电运维体系

根据QYResearch调研团队最新发布的《全球风电运维市场报告2023-2029》显示,预计到2029年,全球风电运维市场的规模将攀升至307.8亿美元,并且在接下来的几年里,其年复合增长率(CAGR)将达到12.5%。 上述图表及…...

Sparrow系列拓展篇:对调度层进行抽象并引入IPC机制信号量

前言 在笔者更新完Sparrow手把手教学系列后,原本是不打算继续更新的。但关于Sparrow系列的读者又渐渐增多,作为作者,总感觉这个系列的文章还是稍微有些不圆满,恐怕多少会让读者有些意兴阑珊。 最近又恰好有一点空闲时间&#xf…...

天塌了!!!SQL竟也可以做预测分析?| 商品零售额的预测

目录 0 问题背景 1 数据准备 2 问题解决 2.1 模型构建 (1)符号规定 (2)基本假设 (3)模型的分析与建立 2.2 模型求解 3 小结 0 问题背景 1960年—1985年全国社会商品零售额如图1 所示 表1全国社…...

VSCode本地C/C++环境配置

基本环境下载 1.我的系统是windows,自己先下载安装VSCode,网上视频实在太多,我建议跟着B站视频操作。 2.下载安装好后你需要明白:VSCode只是一个编辑工具,我们要写C/C代码得编译运行,所以我们要配置它在w…...