| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 卷积神经网络中1*1卷积的作用 -> 正文阅读 |
|
[人工智能]卷积神经网络中1*1卷积的作用 |
?1*1卷积是大小为1*1的滤波器做卷积操作,不同于2*2、3*3等filter,没有考虑在前一特征层局部信息之间的关系。
1.来源Network In Network论文最早出现在 Network In Network的论文中 ,使用1*1卷积是想加深加宽网络结构 。 如果1×1卷积核接在普通的卷积层后面,配合激活函数,即可实现network in network的结构。 2.应用GoogleNet中的Inception、ResNet中的残差模块。 Inception举例在Inception网络(论文Going Deeper with Convolutions)中图像输入进来后,通常可以选择直接使用像素信息(1x1卷积)传递到下一层,可以选择3x3卷积,可以选择5x5卷积,还可以选择max pooling的方式downsample刚被卷积后的feature maps。 但在实际的网络设计中,究竟该如何选择需要大量的实验和经验的。 Inception就不用我们来选择,而是将4个选项给神经网络,让网络自己去选择最合适的解决方案。但是这些卷积滤波器的设计也会在计算上造成很大的消耗,由于3*3卷积或者5*5卷积在几百个filter的卷积层上做卷积操作时相当耗时,所以1*1卷积在3*3卷积或者5*5卷积计算之前先降低维度。 普通的Inception模块: ?从下往上看,本层输入的feature map 是28*28*192 。 注:卷积核的通道数与输入的feature map一致,而卷积核的个数与输出channel一致。
注: 卷积核通道数默认与所作用的feature map通道数相同,使用时也不写通道数,只写filter个数(即卷积核数量)。 图中红色部分channel个数可以理解为,是该卷积核与输入feature map作用完之后所生成的feature map 的通道数(channel个数)。或者理解为,是当前卷积核的个数(filter数)。 表格中 最后一列 输出feature map是 假设步长为1,padding=0,各卷积核作用后所生成的feature map,主要是想表现出卷积操作前后通道数的变化,无其他意义。 参数量:(1×1×192×64) + (3×3×192×128) + (5×5×192×32) = 153600 最终输出的feature map个数:64+128+32+192 = 416 (feature map尺寸是指 W、H是权值共享的sliding window,feature map的数量就是channels) 池化层不引人参数! feature map个数就是filter个数,一个滤波器在前一个feature map上进行一次卷积操作(特征抽取)会产生一个feature map或者叫通道、深度。
在3*3,5*5 卷积层前新加入的1x1的卷积核数量为96和16个的,max pooling后加入的1x1卷积核数量为32。 图中该层的参数: (1×1×192×64)+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32)+(1x1x32)=15904 (feature map尺寸是指 W、H是权值共享的sliding window,feature map的数量就是channels) 通过对比是否添加了1*1卷积核的两个inception模块,可以看到生成的feature map个数(即通道数)从416降低至256 ,参数量也大大降低。 ?所以,加入1×1的卷积后,在降低大量运算的前提下,降低了维度。 ResNet中残差模块举例假设输入的feature map是w*h*256,并且最后要输出的是256个feature map。 (为追求两者一致性,需要把左侧图的64都改成256,且中间只有一层3*3*256的卷积层) 左侧操作数:w*h*256*3*3*256 =589824*w*h 右侧操作数:w*h*256*1*1*64 + w*h*64*3*3*64 +w*h*64*1*1*256 = 69632*w*h,,左侧参数大概是右侧的8.5倍。(实现降维,减少参数) 主要是1?1卷积核可以先进行降维,降维之后需要的3?3的卷积核数目就变少了。而真正占用参数量的是3?3卷积核,1*1卷积核的参数量其实非常少,所以引入了1?1卷积核来减少训练参数。 右侧图,在输出之前也有一个卷积核,feature map被 3*3,64的卷积核作用后 channel是64,只需添加一个 1*1,256的卷积核,只用64*256个参数就能把网络channel从64扩展四倍到256。(从64通道扩展到256通道)(实现升维,且参数量少) 跨通道信息交互举例使用1*1卷积核,实现降维和升维的操作其实就是channel间信息的线性组合变化,3*3,64channels的卷积核后面添加一个1*1,28channels的卷积核,就变成了3*3,28channels的卷积核,原来的64个channels就可以理解为跨通道线性组合变成了28channels,这就是通道间的信息交互。 注意:只是在channel维度上做线性组合,W和H上是共享权值的sliding window。 3. 1*1卷积作用1*1卷积核进行降维或升维,是通过控制卷积核(通道数)实现的。
备注:1*1卷积核,可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的很deep。 一个filter对应卷积后得到一个feature map,不同的filter(不同的weight和bias),卷积以后得到不同的feature map,提取不同的特征,得到对应的specialized neuro。 注:卷积核的通道数与输入的feature map一致,而卷积核的个数与输出channel一致。 参考博客 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 4:12:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |