Deeplearning中1X1卷积核到底有什么作用呢?
来源:互联网 发布:导入isp数据库 编辑:程序博客网 时间:2024/05/01 00:20
声明转自知乎
ruirui_ICT - 听大大们说,要“左手代码,右手公式”,喵~
赞同来自: caffe、孙琳钧、海之蓝、月光里的阳光ysu、OutLaws更多 »
我来说说我的理解,我认为1×1的卷积大概有两个方面的作用吧:
1. 实现跨通道的交互和信息整合
2. 进行卷积核通道数的降维和升维
下面详细解释一下:
1. 这一点孙琳钧童鞋讲的很清楚。1×1的卷积层(可能)引起人们的重视是在NIN的结构中,论文中林敏师兄的想法是利用MLP代替传统的线性卷积核,从而提高网络的表达能力。文中同时利用了跨通道pooling的角度解释,认为文中提出的MLP其实等价于在传统卷积核后面接cccp层,从而实现多个feature map的线性组合,实现跨通道的信息整合。而cccp层是等价于1×1卷积的,因此细看NIN的caffe实现,就是在每个传统卷积层后面接了两个cccp层(其实就是接了两个1×1的卷积层)。
2. 进行降维和升维引起人们重视的(可能)是在GoogLeNet里。对于每一个Inception模块(如下图),原始模块是左图,右图中是加入了1×1卷积进行降维的。虽然左图的卷积核都比较小,但是当输入和输出的通道数很大时,乘起来也会使得卷积核参数变的很大,而右图加入1×1卷积后可以降低输入的通道数,卷积核参数、运算复杂度也就跟着降下来了。以GoogLeNet的3a模块为例,输入的feature map是28×28×192,3a模块中1×1卷积通道为64,3×3卷积通道为128,5×5卷积通道为32,如果是左图结构,那么卷积核参数为1×1×192×64+3×3×192×128+5×5×192×32,而右图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层,这样卷积核参数就变成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),参数大约减少到原来的三分之一。同时在并行pooling层后面加入1×1卷积层后也可以降低输出的feature map数量,左图pooling后feature map是不变的,再加卷积层得到的feature map,会使输出的feature map扩大到416,如果每个模块都这样,网络的输出会越来越大。而右图在pooling后面加了通道为32的1×1卷积,使得输出的feature map数降到了256。GoogLeNet利用1×1的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22层,但是参数数量却只是8层的AlexNet的十二分之一(当然也有很大一部分原因是去掉了全连接层)。
最近大热的MSRA的ResNet同样也利用了1×1卷积,并且是在3×3卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都减小,参数数量进一步减少,如下图的结构。(不然真不敢想象152层的网络要怎么跑起来TAT)
(针对最近大大们头疼的侵权问题,在这里弱弱的加一句:本内容为本人原创,仅授权给CaffeCN社区(caffecn.cn)使用,如需转载须注明转载来源。(⊙v⊙))
1. 实现跨通道的交互和信息整合
2. 进行卷积核通道数的降维和升维
下面详细解释一下:
1. 这一点孙琳钧童鞋讲的很清楚。1×1的卷积层(可能)引起人们的重视是在NIN的结构中,论文中林敏师兄的想法是利用MLP代替传统的线性卷积核,从而提高网络的表达能力。文中同时利用了跨通道pooling的角度解释,认为文中提出的MLP其实等价于在传统卷积核后面接cccp层,从而实现多个feature map的线性组合,实现跨通道的信息整合。而cccp层是等价于1×1卷积的,因此细看NIN的caffe实现,就是在每个传统卷积层后面接了两个cccp层(其实就是接了两个1×1的卷积层)。
2. 进行降维和升维引起人们重视的(可能)是在GoogLeNet里。对于每一个Inception模块(如下图),原始模块是左图,右图中是加入了1×1卷积进行降维的。虽然左图的卷积核都比较小,但是当输入和输出的通道数很大时,乘起来也会使得卷积核参数变的很大,而右图加入1×1卷积后可以降低输入的通道数,卷积核参数、运算复杂度也就跟着降下来了。以GoogLeNet的3a模块为例,输入的feature map是28×28×192,3a模块中1×1卷积通道为64,3×3卷积通道为128,5×5卷积通道为32,如果是左图结构,那么卷积核参数为1×1×192×64+3×3×192×128+5×5×192×32,而右图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层,这样卷积核参数就变成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),参数大约减少到原来的三分之一。同时在并行pooling层后面加入1×1卷积层后也可以降低输出的feature map数量,左图pooling后feature map是不变的,再加卷积层得到的feature map,会使输出的feature map扩大到416,如果每个模块都这样,网络的输出会越来越大。而右图在pooling后面加了通道为32的1×1卷积,使得输出的feature map数降到了256。GoogLeNet利用1×1的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22层,但是参数数量却只是8层的AlexNet的十二分之一(当然也有很大一部分原因是去掉了全连接层)。
最近大热的MSRA的ResNet同样也利用了1×1卷积,并且是在3×3卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都减小,参数数量进一步减少,如下图的结构。(不然真不敢想象152层的网络要怎么跑起来TAT)
(针对最近大大们头疼的侵权问题,在这里弱弱的加一句:本内容为本人原创,仅授权给CaffeCN社区(caffecn.cn)使用,如需转载须注明转载来源。(⊙v⊙))
孙琳钧
赞同来自: 辛淼、ruirui_ICT、月光里的阳光ysu、bonerkiller
对于单通道的feature map和单个卷积核之间的卷积来说,题主的理解是对的,CNN里的卷积大都是多通道的feature map和多通道的卷积核之间的操作(输入的多通道的feature map和一组卷积核做卷积求和得到一个输出的feature map),如果使用1x1的卷积核,这个操作实现的就是多个feature map的线性组合,可以实现feature map在通道个数上的变化。接在普通的卷积层的后面,配合激活函数,就可以实现network in network的结构了(本内容作者仅授权给CaffeCN社区(caffecn.cn)使用,如需转载请附上内容来源说明。)
shiorioxy
赞同来自: 月光里的阳光ysu、bonerkiller
还有一个重要的功能,就是可以在保持feature map 尺寸不变(即不损失分辨率)的前提下大幅增加非线性特性,把网络做得很deep。
0 0
- Deeplearning中1X1卷积核到底有什么作用呢?
- CNN 中, 1X1卷积核到底有什么作用呢?
- CNN 中, 1X1卷积核到底有什么作用呢?
- CNN 中, 1X1卷积核到底有什么作用呢?
- CNN 中, 1X1卷积核到底有什么作用呢?
- CNN 中, 1X1卷积核到底有什么作用呢
- CNN中,1X1卷积核到底有什么作用呢?
- 1X1卷积核到底有什么作用
- 1X1中卷积核的作用
- 1x1卷积核作用
- 1x1卷积核作用
- CNN 中1X1卷积核的作用
- 卷积神经网络中用1*1 卷积有什么作用或者好处呢?
- GNU awk的$1=$1到底有什么作用?$0=$0呢?
- GNU awk的$1=$1到底有什么作用?$0=$0呢?
- 以V1中Inception Module为例说明1x1卷积核的作用
- java中|与||,&与&&到底有什么区别呢?
- IsPostBack有什么作用呢?
- Mysql中DATE_SUB 使用方法结合查询一天内,一周内,一月内的信息实例讲解
- ZooKeeper服务命令
- 希尔排序
- ORACLE ORA-00600之[kkoipt:incorrect pwj], [0], [0], [0], [2], [1], [1]
- mysql sql语句大全
- Deeplearning中1X1卷积核到底有什么作用呢?
- jsp中的相对路径和绝对路径
- CentOS6.6 yum搭建dns服务器
- Caffe中的反向传播代码理解
- unity 实现pageView翻页效果
- UDP传输小实验
- C序列化或反序列化库tpl
- sql语句- 查询 本月 本周 等相关数据
- Mysql 常用SQL语句集锦