2d 蓝图_“蓝图”卷积--对深度可分离卷积的再思考

8da805e82431f46530075fae82715b53.png

论文:Rethinking Depthwise Separable Convolutions: How Intra-Kernel Correlations Lead to Improved MobileNets

https://arxiv.org/pdf/2003.13549.pdf​arxiv.org

代码地址:

zeiss-microscopy/BSConv​github.com
035f02f999a7055e2165ab759faf3290.png

一、背景

一些轻量级的网络,如MobileNet中,会有深度可分离卷积Depthwise Separable Convolution(DSCs),由depthwise(DW)和pointwise(PW)两个部分结合起来,用来提取特feature map,相比常规的卷积操作,其参数数量和运算成本比较低。

Joe.Zhao:深度可分离卷积​zhuanlan.zhihu.com

作者对其进一步的研究,发现基于深度可分离卷积的体系结构,例如MobileNets隐式地依赖于跨内核的相关性。作者经过定性和定量的研究发现基于核内部的相关性可以更有效地分离标准卷积。

二、启发来源

定性分析:作者可视化了三个基础网络VGG-19、Inception V2、ResNet-50的卷积核,将128*3*3的卷积核沿深度轴划分成128张小图片,每张都是3*3(如图)。图中可以看出,很多卷积核呈现相同的“视觉结构”。就好比这些卷积核是照着一个模子,然后加点线性变换产生的。然后作者就将这个模子称为“蓝图”(高大上的名字)。

f4daec5af88c4f8e9585204538e60025.png

定量研究:

为了进一步说明沿深度轴卷积核的相关性,作者用以下方式分析了几个训练过的CNNs:

  1. 把M*K*K的卷积核划分成M个K*K的样本;
  2. 对这M个样本进行PCA分析
  3. 确定由第一个主成分(PC1)解释的过滤器的方差

366cb989cadc3212c278aa99bdc387c5.png

可以看到,平均每个过滤器内核的方差的50%左右可以用这个简单的模型来解释,这表明使用“蓝图”改进的潜力很大。

三、“蓝图”卷积

“蓝图”即一个卷积核的模板,那么一个普通的卷积核就可以从一个蓝图卷积的各种线性变换而来。

3f54a44335a9d4cb1f98cd33b693c380.png

如图第一行,是一个标准卷积,卷积核大小是K*K*M;

第二行是蓝图卷积,卷积核由蓝图(一个K*K的卷积核)和一个M*1的权重向量组成。

四、“蓝图”卷积的两种变形和实现

作者是对深度可分离卷积的一个再思考,那么到底与深度可分离卷积有什么不同呢?

2e75eed1cdabbb7aeac00ce9dedd00eb.png

Unconstrained BSConv (BSConv-U):无限制蓝图卷积

从上图的第二列和第三列可以看出,

深度可分离卷积是先逐通道卷积,再对深度方向上加权组合。

无限制蓝图卷积是先对深度方向上加权组合,再卷积。

简单说,就是交换了depthwise(DW)和pointwise(PW)的顺序。

那么这个简单的交换有什么作用?

如下图,DSCs隐式地假设一个用于所有内核的3d蓝图,而BSConv则是依赖于每个内核的单独2d蓝图。

所以,深度可分卷积实际上执行的是跨内核的相关性,而不是内核内部的相关性。而研究发现内核内部的相关性占主导地位,因此有更大的潜力进行有效分离。

91f51068ca927c8c64ba69a6ac1eec13.png

Subspace BSConv (BSConv-S) :子空间蓝图卷积

作者进一步研究发现,在BSConv-U中1*1卷积层所使用的参数矩阵W=(Wn,M)行与行之间存在高度关联。(注:每一行有M个参数,对应一个输出通道)。

所以作者进一步将这个卷积核矩阵分解,即因式分解来实现W的低秩近似,然后通过添加正交约束来减少参数之间的相互关联。

上述的结果就是,1个1*1卷积被分解成两个1*1卷积。

c5ed60b2a6e7d6895abdd56c743abb69.png

五、实验

1、作者在CIFAR10、CIFAR100、StanforDogs、StanforCars等多个数据集上,使用MobileNetV1-V3网络,进行了实验,发现使用蓝图卷积代替标准卷积后,分类准确率都有所提升。

3af0dda533b13e8dc8b00d4933f80902.png

2、作者在CIFAR10、CIFAR100等数据集上,使用ResNet作为基础网络,发现参数量明显减少,性能也有所提升。

3982110cdc1fcd0b54dc1e743032c6a5.png

1ffb42b88992bb7503888759cf217cf0.png

在大规模和细粒度分类数据集上的大量实验表明,BSConvs可以很好地改进MobileNets等网络结构,而不会引入任何复杂性。

六、总结

本论文提出了一种新的卷积核的分离方法BSConv,该方法是基于核内部的相关性,因此可以更有效地分离标准卷积。大量实验表明,该方法在减少参数量,提升模型性能方面有明显效果。

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

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

相关文章

原来你也在写公众号

现在凌晨1点,我睡不着,因为今天打球了,每次打球回来我总是睡得很奇怪,奇怪有时候打球回来一躺下就睡着了,有时候打球回来就会习惯性失眠。脑海里总是浮现各种打球的进球动作,然后各种幻想,再加上…

中的数组怎么转成结构体_PLC知识,什么是数组和结构体?

今天给大家介绍一下什么是数组,什么是结构体,关于数组我们会介绍数组的定义、它的使用方法,关于结构体我们会介绍结构体的使用、怎么去建立一个结构体等知识,之前也是有部分学员有问过这些问题的,那么都一块儿给大家讲…

MMU那些事儿

最近在重新看这部分知识点,内存管理和进程调度应该是Linux下最核心的两个东西,不管你做得多牛逼了,这两点拿出来讨论,总是会让人眼前一亮,或者是可以讨论很久很久,这篇文章,读完后可能也可以让大…

C语言、嵌入式中几个非常实用的宏技巧

宏打印函数 在我们的嵌入式开发中,使用printf打印一些信息是一种常用的调试手段。但是,在打印的信息量比较多的时候,就比较难知道哪些信息在哪个函数里进行打印。特别是对于异常情况的打印,我们需要快速定位到异常情况的位置。这时…

canvas 多次画图效果_canvas练习之终极的奔跑小人

这次做一个终极的练习,先看一下最后的效果。一个不停奔跑的小人,点击鼠标后会让他跑到目的地,并且呈现不同的角度。下面来看一下如何一步步来实现它的。准备网上下载了一张图片,其中包含了小人面向不同角度奔跑的各个分解动作。新…

C语言的爱你永不悔

#前言今天是520节,昨天晚上睡觉的时候,我家地瓜一直说520,520,我不知道要干啥,我就说,要睡就睡,不睡就起来。今天我看了朋友圈,我才知道原来520就是「我爱你」的意思。今天在朋友圈看到的一个小…

服务网关zuul之二:过滤器--请求过滤执行过程(源码分析)

Zuul的核心是一系列的过滤器,这些过滤器可以完成以下功能: 身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求。审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生成视图…

攻防比赛_2020年度泉州市大学生网络安全攻防比赛在黎明职业大学圆满落幕

10月16日下午,作为2020年国家网络安全宣传周泉州市系列活动之一,“泉州市大学生网络安全攻防比赛”在黎明职业大学智慧教学中心成功举办并圆满落幕。此次比赛由泉州市互联网信息办公室、泉州市教育局主办,黎明职业大学和泉州市网络与信息安全…

gitlab 如何关闭force push

把不允许force push的分支设置成保护分支,Push的时候就会提示不能force psuh。

camera中文版软件 ip_ip camera网络摄像机

IP Camera Viewer是一个方便可靠能够通过IP地址监控多台摄像头的软件。 需要的朋友们赶紧下载试试吧!你可以在几分钟之内设置一个免费的IP摄像监控系统, 保持在家里,办公室,停车场或任何地方,你都可以监控。同时查看多…

Ubuntu16.04通过GPT挂载硬盘

一般而言,服务器上挂载的硬盘都是比较大的,传统的对硬盘进行分区需要在终端敲sudo fdisk进行操作,但是, 当挂载的硬盘的容量大于2T的时候,是无法通过sudo fdisk进行挂载的,这个时候必须要进行GPT进行挂载&a…

Mplayer后台播放没有声音

昨天的文章,我觉得虽然不是很复杂,但是我自认为很多人应该是不懂的,不过好像阅读量不是很好,今天转发我师弟的一篇文章,我觉得这个也是大家没有注意到的。Linux 下的0 1 2特殊文件描述符~一、平台Ubuntu16.04(64位)二、…

python输出程序运行时间_叨叨 Python 性能优化工具

虽然Python是一个”慢慢的“语言,但是不代表我们对性能没有任何的追求,在程序运行过程中,如果发现程序运行时间太长或者内存占用过大,免不了需要对程序的执行过程进行一些监测,找到有问题的地方,进行优化。…

链接学习之obj文件探索

Windows的gcc环境,往官网http://sourceforge.net/project/showfiles.php?group_id2435 下载MinGW,安装,安装完毕后按照包 配置环境变量 a.在PATH的值中加入"C:\Program Files\MinGWStudio\MinGW\bin"。这是寻找gcc编译器的路径。…

http 请求默认时间_JMeter接口测试之HTTP请求默认值

不管是在UI级别的自动化测试还是在接口级别的自动化测试中,对公共数据数据的分离都是一种趋势,或者某种程度来说,这是自动化测试中必须要掌握的一种能力,是基本技能。这些公共数据就包含了测试地址,以及登录的账号密码…

有意思的select~

前言最近在写一个小程序,也就是简单的系统调用,但是神奇的是,我用的这个系统调用刚好就阻塞了。如果你也写过应用程序,肯定也会遇到过这样的问题。后来,发现了select这个好东西,可以用来监听文件描述。sele…

cesium 页面截图_Cesium开发入门篇 | 02开发环境搭建及第一个示例

开发环境准备利用Cesium API进行二次开发属于Web前端开发范畴,目前比较火的Web三剑客包括React、Vue、AngularJS,每个js库的详细介绍可转至官网查看,在此不做详细介绍。本次开发环境是基于Vue搭建的,需要安装(部署)的软件主要包括…

一个单片机ADC的挖坑填坑之旅

[导读] 本文来解析一个盆友在使用STM32采集电池电压踩过的坑。以STM32F4 的ADC属于逐次逼近SAR 型ADC为例进行分析,参考STM32F405xx Datasheet,对于如何编写ADC程序就不做描述了。先描述一下坑 采集电池电压,利用两个电阻将电池电压分压&…

of_property_read_string 剖析~

前言今天在一个群里面看到的一个朋友提交,说of_property_read_string 这个函数有两个定义,到底是用了哪个呢?所以这篇文章就说下这个函数。函数引用的头文件引用的头文件位置在\kernel-4.4\include\linux\of.h其中一个是extern int of_proper…

CPU频率和核心

设置CPU的核心数在/sys/devices/system/cpu目录下可以看到你的CPU有几个核心,如果是四核,就是cpu0,cpu1,cpu2,cpu3 4个文件夹。cpu0 常开。进一个其他文件夹,比如cpu1,里面有个online文件用cat命令查看该文…