1x1卷积核如何降低参数量

el/2024/6/13 22:54:28

本文介绍1*1的卷积核与googlenet里面的Inception。正式介绍之前,首先回顾卷积网络的基本概念。 
1. 卷积核:可以看作对某个局部的加权求和;它是对应局部感知,它的原理是在观察某个物体时我们既不能观察每个像素也不能一次观察整体,而是先从局部开始认识,这就对应了卷积。卷积核的大小一般有1x1,3x3和5x5的尺寸。卷积核的个数就对应输出的通道数,这里需要说明的是对于输入的每个通道,输出每个通道上的卷积核是不一样的。比如输入是28x28x192(WxDxK,K代表通道数),然后在3x3的卷积核,卷积通道数为128,那么卷积的参数有3x3x192x128,其中前两个对应的每个卷积里面的参数,后两个对应的卷积总的个数。 
2. 池化(pooling):卷积特征往往对应某个局部的特征。要得到globa的特征需要将全局的特征就行一个aggregation。池化就是这样一个操作,对于每个卷积通道,将更大尺寸(甚至是globa)上的卷积特征进行pooling就可以得到更有全局性的特征。这里的pooling当然就对应了cross region。与1x1的卷积相对应,后者可以看作一个cross channel的pooling操作。pooling的另外一个作用就是升维或者降维,后面我们可以看到1x1的卷积也有相似的作用。

下面从一般卷积过程介绍1x1的卷积,借用[1]中的图来表示卷积的过程: 
convolution 
对于nxn(n>1)的卷积核,我们通常还要考虑pad(边缘补0的个数),stride(每次卷积移动的步长)。但是当尺寸是1x1时,对于single channel而言就相当于对原特征的Scala操作;但是我们一般遇到的都是multi-channel的情况,此时我们便可以根据自己的需要定义卷积核的个数,从而进行降(升)维。如上面所说,如果将它看作cross channel的pooling 操作,它还能帮我们得到在同一位置不同通道之间进行特征的aggregation。 
总结一下,1x1的卷积核可以进行降维或者升维,也就是通过控制卷积核(通道数)实现,这个可以帮助减少模型参数,也可以对不同特征进行尺寸的归一化;同时也可以用于不同channel上特征的融合。一个trick就是在降维的时候考虑结合传统的降维方式,如PCA的特征向量实现,这样效果也可以得到保证。 
以googlenet[3]中的inception模块为例,来说明1x1的卷积如何来减少模型参数。 
inception
左边是naive的inception模块,右边是加入1x1 convolution进行降维的inception。按照上面的说法,我们的这层的模型参数与输入的特征维数(28x28x192),卷积核大小以及卷积通道数(包括三种卷积核,分别是1x1x64,3x3x128,5x5x32),右图中在3x3,5x5 convolution前新加入的1x1的卷积核为96和16通道的,在max pooling后加入的1x1卷积为32通道。那么图a该层的参数为(1x1x192x64)+(3x3x192x128)+(5x5x192x32) 
图b该层的参数为(1x1x192x64)+(1x1x192x96)+(1x1x192x16)+(3x3x96x128)+(5x5x16x32)+(1x1x192x32). 
比较可知,模型参数减少了。 
reference 
[1]http://blog.csdn.net/stdcoutzyx/article/details/41596663 
[2]http://www.caffecn.cn/?/question/136 
[3]going deeper with convolutions

 

来源:http://blog.csdn.net/Touch_Dream/article/details/77072893


http://www.ngui.cc/el/5179146.html

相关文章

Hadoop-集群网络配置(转)

转自&#xff1a; 虚拟机中Centos设置静态IP地址方法 (一)虚拟机设置 首先要修改一下虚拟机,<选择虚拟网络编辑器> 对照着上面的图一个一个解释吧. 首先要选择NAT模式,这里我选择的是VMnet8,也可以点击添加网络再添加一个; 然后就是下面的两个对勾✔一定要选上(DHCP…

centos中的防火墙问题

centos从7开始默认用的是firewalld&#xff0c;这个是基于iptables的&#xff0c;虽然有iptables的核心&#xff0c;但是iptables的服务是没安装的。所以你只要停止firewalld服务即可&#xff1a; sudo systemctl stop firewalld.service && sudo systemctl disable fi…

hadoop中运行map-reduce程序时,java.net.connectionException

about云开发 标题: mapreduce报错 java.net.ConnectException: Connection refused [打印本页] 作者: Wyy_Ck 时间: 2016-10-31 15:13标题: mapreduce报错 java.net.ConnectException: Connection refused弄了半天&#xff0c;系统是centos 7&#xff0c;本想执行一个测试下…

负数的二进制

负数的二进制转换&#xff0c; 其实&#xff0c; 容易&#xff0c; 容易理解。 https://jingyan.baidu.com/article/29697b9106eb52ab21de3c7a.html 方法/步骤 首先&#xff0c;来个-5&#xff0c; 实践出真知嘛。 把5转化为二进制字节形式。 得到101&#xff0c; 然后补零…

中序遍历查找下一个节点

给定一个二叉树和其中的一个结点&#xff0c;请找出中序遍历顺序的下一个结点并且返回。注意&#xff0c;树中的结点不仅包含左右子结点&#xff0c;同时包含指向父结点的指针。 思路&#xff1a;就是只考虑当前节点的右边&#xff0c;父亲部分。 public class TreeLinkNode {…

打印从 1 到最大的 n 位数

题目描述 输入数字 n&#xff0c;按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3&#xff0c;则打印出 1、2、3 一直到最大的 3 位数即 999。 解题思路 由于 n 可能会非常大&#xff0c;因此不能直接用 int 表示数字&#xff0c;而是用 char 数组进行存储。 使用回溯…

在 O(1) 时间内删除链表节点

解题思路 ① 如果该节点不是尾节点&#xff0c;那么可以直接将下一个节点的值赋给该节点&#xff0c;然后令该节点指向下下个节点&#xff0c;再删除下一个节点&#xff0c;时间复杂度为 O(1)。② 如果链表只有一个节点&#xff0c;那么直接② 否则&#xff0c;就需要先遍历链表…

题目描述 一个链表中包含环,请找出该链表的环的入口结点。要求不能使用额外的空间。

题目描述 一个链表中包含环&#xff0c;请找出该链表的环的入口结点。要求不能使用额外的空间。可以参见剑指offer上的原题。代码如下&#xff1a; package cn.cqu.edu;public class NodeOfLoop {class ListNode {int val;ListNode next null;ListNode(int val) {this.val v…

目标检测中mAP的定义

作者&#xff1a;nowgood 链接&#xff1a;https://www.zhihu.com/question/53405779/answer/506000532 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 目标检测中衡量识别精度的指标是mAP&#xff08;mean averag…

java jdk中的动态代理和Cglib中的动态代理的解析

为什么要用动态代理&#xff1f; 因为静态代理需要额外编写代理类&#xff0c;对于每一个要代理的对象&#xff0c;都要书写一个额外的代理类。 使用代理的原因&#xff1f; 有些类是不能够直接访问的或者有些访问要经过特殊处理。 1. Java JDK中的动态代理 java jdk中的动态…