1×1卷积的作用与原理详解

1×1卷积的作用与原理详解

文章目录

  • 1×1卷积的作用与原理详解
    • 引言
    • 1. 什么是1×1卷积?
    • 2. 1×1卷积的数学表达
    • 3. 1×1卷积的主要作用
      • 3.1 改变通道数(升维/降维)
        • 3.1.1 降维(Dimension Reduction)
        • 3.1.2 升维(Dimension Increase)
      • 3.2 特征融合(Feature Fusion)
      • 3.3 增加非线性
    • 4. 1×1卷积在经典网络中的应用
      • 4.1 Network in Network (NiN)
      • 4.2 GoogLeNet (Inception)
      • 4.3 ResNet的瓶颈结构
    • 5. 1×1卷积的优势总结
    • 6. 代码实现示例
    • 7. 结论
    • 参考文献

引言

在深度学习特别是卷积神经网络(CNN)的中,1×1卷积操作看似简单,却有着重要的作用。本文将详细介绍1×1卷积的工作原理及其在深度学习模型中的多种作用,特别是在通道数调整和特征融合方面的应用。

1. 什么是1×1卷积?

1×1卷积,顾名思义,是使用大小为1×1的卷积核进行的卷积操作。与传统的3×3、5×5等卷积核不同,1×1卷积核在空间维度上不进行扩展,仅在通道维度上进行操作。

假设输入特征图的尺寸为 H × W × C i n H \times W \times C_{in} H×W×Cin(高度×宽度×输入通道数),1×1卷积层包含 C o u t C_{out} Cout 个卷积核(也就是说,这个1×1卷积层的尺寸为 1 × 1 × C o u t 1 \times 1 \times C_{out} 1×1×Cout ),则输出特征图的尺寸为 H × W × C o u t H \times W \times C_{out} H×W×Cout

(敲黑板:希望读者能够真正理解上述公式,从而就能够理解3.1中所述的:1×1卷积为什么能够改变通道数。)

2. 1×1卷积的数学表达

对于输入特征图 X ∈ R H × W × C i n X \in \mathbb{R}^{H \times W \times C_{in}} XRH×W×Cin,1×1卷积的数学表达式为:

Y ( i , j , n ) = ∑ c = 1 C i n X ( i , j , c ) ⋅ W ( 1 , 1 , c , n ) + b ( n ) Y(i,j,n) = \sum_{c=1}^{C_{in}} X(i,j,c) \cdot W(1,1,c,n) + b(n) Y(i,j,n)=c=1CinX(i,j,c)W(1,1,c,n)+b(n)

其中:

  • Y ( i , j , n ) Y(i,j,n) Y(i,j,n) 是输出特征图在位置 ( i , j ) (i,j) (i,j) 处第 n n n 个通道的值
  • X ( i , j , c ) X(i,j,c) X(i,j,c) 是输入特征图在位置 ( i , j ) (i,j) (i,j) 处第 c c c 个通道的值
  • W ( 1 , 1 , c , n ) W(1,1,c,n) W(1,1,c,n) 是第 n n n 个卷积核在第 c c c 个输入通道上的权重
  • b ( n ) b(n) b(n) 是第 n n n 个卷积核的偏置项

3. 1×1卷积的主要作用

3.1 改变通道数(升维/降维)

1×1卷积最直观的作用是改变特征图的通道数,这在网络架构设计中非常有用:

1×1卷积 改变通道数(升维/降维)举例

3.1.1 降维(Dimension Reduction)

C o u t < C i n C_{out} < C_{in} Cout<Cin 时,1×1卷积起到降维的作用。这可以显著减少参数量和计算量。

例如,假设输入特征图尺寸为 56 × 56 × 256 56 \times 56 \times 256 56×56×256,使用64个1×1卷积核后,输出特征图尺寸变为 56 × 56 × 64 56 \times 56 \times 64 56×56×64,参数量为 256 × 64 + 64 = 16448 256 \times 64 + 64 = 16448 256×64+64=16448(权重+偏置)。

降维操作可以表示为:

Y r e d u c e d = f ( X ⋅ W 1 × 1 + b ) Y_{reduced} = f(X \cdot W_{1 \times 1} + b) Yreduced=f(XW1×1+b)

其中 f f f 是激活函数,通常是ReLU。

3.1.2 升维(Dimension Increase)

C o u t > C i n C_{out} > C_{in} Cout>Cin 时,1×1卷积起到升维的作用,可以增加特征的表达能力。

3.2 特征融合(Feature Fusion)

1×1卷积的另一个重要作用是进行特征融合,这实际上是对通道维度的信息进行重组和整合。

从数学角度看,1×1卷积对每个空间位置 ( i , j ) (i,j) (i,j) 执行的操作可以看作是一个全连接层:

Y ( i , j , : ) = W ⋅ X ( i , j , : ) + b Y(i,j,:) = W \cdot X(i,j,:) + b Y(i,j,:)=WX(i,j,:)+b

这里 X ( i , j , : ) X(i,j,:) X(i,j,:) 是位置 ( i , j ) (i,j) (i,j) 处所有通道的向量, W W W 是权重矩阵。

通过这种方式,1×1卷积实现了通道间的信息交互和融合,学习通道间的相关性,从而生成新的、更有表达力的特征表示。

3.3 增加非线性

每个1×1卷积后通常会跟随一个非线性激活函数(如ReLU),这为网络引入了额外的非线性,增强了模型的表达能力:

Y = f ( X ∗ W 1 × 1 + b ) Y = f(X * W_{1 \times 1} + b) Y=f(XW1×1+b)

其中 f f f 是非线性激活函数, ∗ * 表示卷积操作。

4. 1×1卷积在经典网络中的应用

4.1 Network in Network (NiN)

1×1卷积最早在Lin等人提出的Network in Network架构中被引入。NiN使用1×1卷积来增强局部模型的抽象能力。[1]

4.2 GoogLeNet (Inception)

GoogLeNetInception模块中,1×1卷积被用于在3×3和5×5卷积前进行降维,显著减少了计算复杂度。

例如,对于一个 28 × 28 × 256 28 \times 28 \times 256 28×28×256 的输入,直接应用64个5×5卷积核需要计算:
28 × 28 × 5 × 5 × 256 × 64 = 51 , 380 , 224 28 \times 28 \times 5 \times 5 \times 256 \times 64 = 51,380,224 28×28×5×5×256×64=51,380,224 次乘法操作

而先使用32个1×1卷积核降维,再应用64个5×5卷积核:

  • 1×1卷积: 28 × 28 × 1 × 1 × 256 × 32 = 6 , 422 , 528 28 \times 28 \times 1 \times 1 \times 256 \times 32 = 6,422,528 28×28×1×1×256×32=6,422,528 次乘法
  • 5×5卷积: 28 × 28 × 5 × 5 × 32 × 64 = 6 , 422 , 528 28 \times 28 \times 5 \times 5 \times 32 \times 64 = 6,422,528 28×28×5×5×32×64=6,422,528 次乘法
  • 总计: 12 , 845 , 056 12,845,056 12,845,056 次乘法,仅为原来的约1/4

4.3 ResNet的瓶颈结构

ResNet的瓶颈(Bottleneck)结构中,使用了1×1-3×3-1×1的连续卷积组合,其中第一个1×1卷积用于降维,最后一个1×1卷积用于升维,大大减少了模型的参数量和计算量。

5. 1×1卷积的优势总结

  1. 参数效率:通过降维减少参数量和计算复杂度
  2. 特征重组:在通道维度上重组特征,增强特征表达
  3. 增加网络深度:以较小的计算代价增加网络深度和非线性
  4. 跨通道信息整合:学习通道间的相关性和依赖关系

6. 代码实现示例

以PyTorch为例,1×1卷积的实现实例如下所示:

import torch.nn as nn# 定义一个1×1卷积层,将256通道降维到64通道
conv1x1 = nn.Conv2d(in_channels=256, out_channels=64, kernel_size=1)# 在瓶颈结构中的应用
class Bottleneck(nn.Module):def __init__(self, in_channels, bottleneck_channels, out_channels):super(Bottleneck, self).__init__()self.conv1 = nn.Conv2d(in_channels, bottleneck_channels, kernel_size=1)self.bn1 = nn.BatchNorm2d(bottleneck_channels)self.conv2 = nn.Conv2d(bottleneck_channels, bottleneck_channels, kernel_size=3, padding=1)self.bn2 = nn.BatchNorm2d(bottleneck_channels)self.conv3 = nn.Conv2d(bottleneck_channels, out_channels, kernel_size=1)self.bn3 = nn.BatchNorm2d(out_channels)self.relu = nn.ReLU(inplace=True)def forward(self, x):identity = xout = self.conv1(x)out = self.bn1(out)out = self.relu(out)out = self.conv2(out)out = self.bn2(out)out = self.relu(out)out = self.conv3(out)out = self.bn3(out)out += identityout = self.relu(out)return out

7. 结论

1×1卷积虽然在空间维度上看似简单,但在深度学习模型设计中扮演着至关重要的角色。它不仅能够有效地调整特征图的通道数,还能在通道维度上融合特征,增加网络的非线性,同时保持计算效率。理解和灵活运用1×1卷积,对于设计高效的深度学习模型至关重要。


参考文献

  1. Lin, M., Chen, Q., & Yan, S. (2013). Network in network. arXiv preprint arXiv:1312.4400. [👉论文PDF链接点击这里👈]
  2. Szegedy, C., et al. (2015). Going deeper with convolutions. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. [👉论文PDF链接点击这里👈]
  3. He, K., Zhang, X., Ren, S., & Sun, J. (2016). Deep residual learning for image recognition. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. [👉论文PDF链接点击这里👈]

以上是关于1×1卷积作用与原理的详细介绍,相信你已经对1×1卷积在改变通道数和特征融合方面的作用有了一定的理解😊
在实际的深度学习模型设计中,合理利用1×1卷积可以显著提高模型的效率和性能。

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

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

相关文章

网络配置的基本信息

目录 一、网络接口信息 1、关闭虚拟化服务 2、配置临时IP 3、配置静态IP 4、常见网络命令 5、安装Wireshark 一、网络接口信息 输入 ip address&#xff0c;会出现下面的内容 网卡名称及其含义&#xff1a; 网卡名称说明lo 表示本地回环地址。 ens32 有线网卡&#xff0c…

dify绑定飞书多维表格

dify 绑定飞书和绑定 notion 有差不多的过程&#xff0c;都需要套一层应用的壳子&#xff0c;而没有直接可以访问飞书文档的 API。本文记录如何在dify工具中使用新增多条记录工具。 创建飞书应用 在飞书开放平台创建一个应用&#xff0c;个人用户创建企业自建应用。 自定义应…

深入解析Crawl4AI:为AI应用量身定制的高效开源爬虫框架

引言 在当今数据驱动的时代&#xff0c;人工智能&#xff08;AI&#xff09;和大型语言模型&#xff08;LLM&#xff09;的发展对高质量数据的需求日益增长。如何高效地从互联网上获取、处理和提取有价值的数据&#xff0c;成为了研究人员和开发者面临的关键挑战。Crawl4AI作为…

nginx 动态计算拦截非法访问ip

需求&#xff1a;在Nginx上实现一个动态拦截IP的方法&#xff0c;具体是当某个IP在1分钟内访问超过60次时&#xff0c;将其加入Redis并拦截&#xff0c;拦截时间默认1天。 技术选型&#xff1a;使用NginxLuaRedis的方法。这种方案通过Lua脚本在Nginx处理请求时检查Redis中的黑…

【软件测试】论坛系统功能测试报告

文章目录 1.前言2.项目介绍3. 对项目进行测试3.1 设计测试用例3.2 执行测试用例 1.前言 这次测试是我学习阶段的练习&#xff0c;由于缺少需求规格说明等文档&#xff0c;需要我尽可能发散思维去设计更多的测试用例。但无论如何测试至关重要&#xff0c;以下是核心原因&#x…

MyBatis TypeHandler 详解与实战:FastJson 实现字符串转 List

在 MyBatis 中&#xff0c;TypeHandler 是实现 Java 类型与数据库类型双向转换 的核心组件。无论是处理基础数据类型还是复杂的 JSON、枚举或自定义对象&#xff0c;它都能通过灵活的扩展机制满足开发需求。本文将通过一个 将数据库 JSON 字符串转换为 List<User> 的案例…

《HelloGitHub》第 107 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

【每日一题 | 2025】2.24 ~ 3.2

个人主页&#xff1a;Guiat 归属专栏&#xff1a;每日一题 文章目录 1. 【2.24】P10424 [蓝桥杯 2024 省 B] 好数2. 【2.25】P8665 [蓝桥杯 2018 省 A] 航班时间3. 【2.26】P10905 [蓝桥杯 2024 省 C] 回文字符串4. 【2.27】P10425 [蓝桥杯 2024 省 B] R 格式5. 【2.28】P10426…

【03】STM32F407 HAL 库框架设计学习

【03】STM32F407 HAL 库框架设计学习 摘要 本文旨在为初学者提供一个关于STM32F407微控制器HAL&#xff08;Hardware Abstraction Layer&#xff09;库框架设计的详细学习教程。通过本文&#xff0c;读者将从零开始&#xff0c;逐步掌握STM32F407的基本知识、HAL库的配置步骤…

跟着官方文档学习UE C++ TArray容器系列 迭代 和 排序

一.首先测试下&#xff0c;官方案例 迭代器的方法&#xff0c;有点不常见。有点像个指针&#xff0c;迭代完还自带break. oid AWXTArrayActor::WXLoopArray() {FString JoinedStr1;FString JoinedStr2;TArray<FString> StrArr { "Hello","Baby",&q…

C++中的“结界”机制:作用域与变量可见性探秘

一、编程世界的“结界”概念 源自佛学的结界概念&#xff0c;在C中体现为作用域机制。程序中的每个函数都会形成独立的作用域屏障&#xff0c;如同魔法结界般保护内部变量&#xff0c;使其与外界的同名变量互不干扰。这种机制保证了代码模块的独立性和安全性&#xff0c;但当存…

3-6 WPS JS宏 工作表移动复制实例-1(工作表的拆分操作)学习笔记

************************************************************************************************************** 点击进入 -我要自学网-国内领先的专业视频教程学习网站 *******************************************************************************************…

Qt 对象树详解:从原理到运用

1. 什么是对象树&#xff1f; 对象树是一种基于父子关系的对象管理机制。在 Qt 中&#xff0c;所有继承自 QObject 的类都可以参与到对象树中。 当一个对象被设置为另一个对象的父对象时&#xff0c;子对象会被添加到父对象的内部列表中&#xff0c;形成一种树状结构。 Qt 提…

使用hutool将json集合对象转化为对象

集合之间相互转化 //List转Json&#xff0c;maps是List类型的参数 String json JSONUtil.toJsonStr(maps); System.out.println("这是json字符串: "json);//Json转List JSONArray objects JSONUtil.parseArray(json); List<Map> maps1 JSONUtil.toList(objec…

Qt关于平滑滚动的使用QScroller及QScrollerProperties类说明

一、触控时代的滚动工具&#xff1a;QScroller类设计介绍 1.1 从机械滚轮到数字惯性 在触控设备普及前&#xff0c;滚动操作如同老式打字机的滚轴&#xff0c;只能通过鼠标滚轮或滚动条进行离散式控制。QScroller的出现如同给数字界面装上了"惯性飞轮"&#xff0c;…

JavaAPI(网络编程)

网络通信协议 通信协议 ‌所谓通信协议&#xff0c;是指通信双方在进行数据交换时必须遵守的规则和约定。‌这些规则确保了双方能够有效地进行通信&#xff0c;实现信息的交换和资源共享。通信协议定义了传输时的数据格式、控制信息以及传输顺序和速度等&#xff0c;确保双方…

Java---入门基础篇(下)---方法与数组

前言 本篇文章主要讲解有关方法与数组的知识点 ,是基础篇的一部分 , 而在下一篇文章我会讲解类和对象的知识点 入门基础篇上的链接给大家放在下面啦 ! Java---入门基础篇(上)-CSDN博客 感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb; 欢迎各位大佬指点…

Python 爬虫 – BeautifulSoup

Python 爬虫&#xff08;Web Scraping&#xff09;是指通过编写 Python 程序从互联网上自动提取信息的过程。 爬虫的基本流程通常包括发送 HTTP 请求获取网页内容、解析网页并提取数据&#xff0c;然后存储数据。 Python 的丰富生态使其成为开发爬虫的热门语言&#xff0c;特…

图像分类项目1:基于卷积神经网络的动物图像分类

一、选题背景及动机 在现代社会中&#xff0c;图像分类是计算机视觉领域的一个重要任务。动物图像分类具有广泛的应用&#xff0c;例如生态学研究、动物保护、农业监测等。通过对动物图像进行自动分类&#xff0c;可以帮助人们更好地了解动物种类、数量和分布情况&#xff0c;…

物联网 智慧园区井盖管理办法和功能介绍

在园区内实现 智慧井盖 的定位、内部气体检测和红外监测等顶级功能&#xff0c;可以显著提升园区的安全管理水平和运维效率。以下是智慧井盖系统的详细设计方案和功能实现&#xff1a; 一、系统架构 智慧井盖系统可以分为以下层次&#xff1a; 1. 感知层 定位模块&#xff1…