理解深度可分离卷积

news2024/11/29 8:40:44

1、常规卷积

  常规卷积中,连接的上一层一般具有多个通道(这里假设为n个通道),因此在做卷积时,一个滤波器(filter)必须具有n个卷积核(kernel)来与之对应。一个滤波器完成一次卷积,实际上是多个卷积核与上一层对应通道的特征图进行卷积后,再进行相加,从而输出下一层的一个通道特征图。在下一层中,若需要得到多个通道的特征图(这里假设为m个通道),那么对应的滤波器就需要m个。
  用通俗的话来概括卷积,他起到的作用就是两个:一个是对上一层的特征图进行尺寸调整,另一个是则是对上一层的特征图数量进行调整,也就是通道数的调整。

  对于一张5×5像素、三通道(shape为5×5×3),经过3×3卷积核的卷积层(假设输出通道数为4,则卷积核shape为3×3×3×4,最终输出4个Feature Map,如果有same padding则尺寸与输入层相同(5×5),如果没有则为尺寸变为3×3
请添加图片描述

普通卷积

  卷积层共4个Filter,每个Filter包含了3个Kernel,每个Kernel的大小为3×3。因此卷积层的参数数量可以用如下公式来计算:
N s t d = 4 × 3 × 3 × 3 = 108 N_std = 4 × 3 × 3 × 3 = 108 Nstd=4×3×3×3=108

2、深度可分离卷积

  深度可分离卷积其实只对常规卷积做了一个很小的改动,但是带来的确实参数量的下降,这无疑为网络的轻量化带来了好处。
  深度可分离卷积分为两步,第一,对于来自上一层的多通道特征图,将其全部拆分为单个通道的特征图,分别对他们进行单通道卷积,然后重新堆叠到一起。这被称之为逐通道卷积(Depthwise Convolution)。这个拆分的动作十分关键,在这一步里,它只对来自上一层的特征图做了尺寸的调整,而通道数没有发生变化。第二,将前面得到的特征图进行第二次卷积,这是采取的卷积核都是1×1大小的,滤波器包含了与上一层通道数一样数量的卷积核。一个滤波器输出一张特征图,因此多个通道,则需要多个滤波器。这又被称之为逐点卷积(Pointwise Convolution)

2.1 逐通道卷积

Depthwise Convolution的一个卷积核负责一个通道,一个通道只被一个卷积核卷积。
  一张5×5像素、三通道彩色输入图片(shape为5×5×3),Depthwise Convolution首先经过第一次卷积运算,DW完全是在二维平面内进行。卷积核的数量与上一层的通道数相同(通道和卷积核一一对应)。所以一个三通道的图像经过运算后生成了3个Feature map(如果有same padding则尺寸与输入层相同为5×5),如下图所示。
请添加图片描述

逐通道卷积(Depthwise Convolution)

其中一个Filter只包含一个大小为3×3的Kernel,卷积部分的参数个数计算如下:
N d e p t h w i s e = 3 × 3 × 3 = 27 N_depthwise = 3 × 3 × 3 = 27 Ndepthwise=3×3×3=27
  Depthwise Convolution完成后的Feature map数量与输入层的通道数相同,无法扩展Feature map。而且这种运算对输入层的每个通道独立进行卷积运算,没有有效的利用不同通道在相同空间位置上的feature信息。因此需要Pointwise Convolution来将这些Feature map进行组合生成新的Feature map

2.2 逐点卷积

  Pointwise Convolution的运算与常规卷积运算非常相似,它的卷积核的尺寸为 1×1×M,M为上一层的通道数。所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的Feature map。有几个卷积核就有几个输出Feature map
请添加图片描述

逐点卷积(Pointwise Convolution)

  由于采用的是1×1卷积的方式,此步中卷积涉及到的参数个数可以计算为:
N p o i n t w i s e = 1 × 1 × 3 × 4 = 12 N_pointwise = 1 × 1 × 3 × 4 = 12 Npointwise=1×1×3×4=12
  经过Pointwise Convolution之后,同样输出了4张Feature map,与常规卷积的输出维度相同

3、参数对比

  回顾一下,常规卷积的参数个数为:
N s t d = 4 × 3 × 3 × 3 = 108 N_std = 4 × 3 × 3 × 3 = 108 Nstd=4×3×3×3=108
  Separable Convolution的参数由两部分相加得到:
N d e p t h w i s e = 3 × 3 × 3 = 27 N p o i n t w i s e = 1 × 1 × 3 × 4 = 12 N s e p a r a b l e = N d e p t h w i s e + N p o i n t w i s e = 39 \begin{align} N_{depthwise}= 3 × 3 × 3 = 27\notag\\ N_{pointwise}= 1 × 1 × 3 × 4 = 12\notag\\ N_{separable}= N_{depthwise}+N_{pointwise}= 39\notag\\ \end{align} Ndepthwise=3×3×3=27Npointwise=1×1×3×4=12Nseparable=Ndepthwise+Npointwise=39

  相同的输入,同样是得到4张Feature map,Separable Convolution的参数个数是常规卷积的约1/3。因此,在参数量相同的前提下,采用Separable Convolution的神经网络层数可以做的更深。

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

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

相关文章

Android自定义键盘(KeyboardView)

目录 1.场景:2.想法:3.开始实现:《一》 在res包下创建xml目录,Keyboard标签来定义键盘布局:《二》创建IKeyboardView类并继承KeyboardView类,设置键盘布局(数字和字母)《三》 处理自定义键盘按键的点击事件…

C++11:列表初始化、新增关键字和新增的默认成员函数

目录 一. 列表初始化 1.1 {}列表初始化的方法 1.2 列表初始化实现的原理 二. C11新增关键字 2.1 decltype -- 自动类型推断 2.2 nullptr -- 空指针 2.3 default -- 强制生成默认成员函数 2.4 delete -- 禁止生成默认成员函数 2.5 final -- 禁止类被继承/禁止虚函数被重…

自动化测试之PageObject设计模式

译文如下: PageObject 当您针对网页编写测试时,您需要参考该网页中的元素以单击链接并确定显示的内容。但是,如果您编写直接操作 HTML 元素的测试用例,则您的测试将无法应对 UI 中的频繁修改。PageObject对应于一个HTML网页、页…

5月26号软件资讯更新合集......

Windows Terminal 1.18 新功能预览:标签拖拽、上下文菜单... Windows Terminal 预览版已更新到 1.18 版本,带来多项实用内容,一起来看看这个版本的新东西: 标签撕裂(拖拽功能) Windows Terminal 已支持对…

安装Redis6

安装Redis 安装redis依赖 redis是基于C语言编写的,因此首选需要安装redis所需的gcc依赖 yum install -y gcc tcl 上传安装包并解压 我安装的是redis-6.2.6版本,并且放到了/usr/local/src目录下 - 进入/usr/local/src目录shellcd /usr/local/src解压 tar …

全球最受欢迎低代码平台排行榜出炉

低代码平台正在成为寻求快速有效地构建应用程序的企业的首选解决方案。这些平台减少了编码要求,使企业能够在降低成本的同时更快地完成应用程序开发项目。在本文中,将探索全球受欢迎的低代码平台排行榜。 该排名使用的标准包括易用性、成本效益、集成性、…

很后悔,才发现这个API管理神器

想必大家都注意到了,近半年国产API管理工具火了起来。这说明两个问题,第一,API管理的重要性被越来越多的开发者认识到了,研发团队对API管理的需求也越来越强了。第二,说明国产软件真是越来越厉害了,大家确实…

《微服务实战》 第十八章 Redis查看配置文件和数据类型

前言 本章节讲解如何查看、修改Redis配置,介绍Redis类型。 1、查看配置 config get 配置名称 2、修改配置项 config set 配置项名称 配置项值 2.1、配置项说明 配置项参数说明daemonizeno/yes默认为 no,表示 Redis 不是以守护进程的方式运行&#xff…

论C站如何获得铁粉?过来人给出几点建议

哈喽,我是bug菌,一名想走👣出大山改变命运的程序猿。周五啦,刚肝完需求的我,闲暇之时逛C站热榜,偶然刷到一条看到官方抛出的话题:"在C站如何获得铁粉?",我寻思…

操作系统第五章——输入输出管理(上)

提示:初入红尘,不知人间疾苦,蓦然回首,已是苦中之人,这杯中酒三分,这酒中悲七分。关关难过关关过,夜夜难熬夜夜熬,愿这人世间所有爱恨情仇皆溶于酒,且将这红尘做酒&#…

MP4如何让去水印?python带你实现~

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 开发环境: 解释器版本: python 3.8 代码编辑器: pycharm 2021.2 模块使用: 内置模块(无需安装) os —> python系统编程的操作模块,提供了非常丰富的功能去处理文件和目录 sys —> 是与…

我是00后,我卷一点怎么了?

前段时间去面试了一个公司,成功拿到了offer,薪资也从12k涨到了18k,对于工作都还没两年的我来说,还是比较满意的,毕竟一些工作3、4年的可能还没我高。 我可能就是大家说的卷王,感觉自己年轻,所以…

手动创建django项目和python虚拟环境

在使用pycharm创建django项目的时候,报错如下: C:\Users\12051\AppData\Local\Temp\tmplkz609ucpycharm-management\setuptools-40.8.0\setup.py install Traceback (most recent call last):File "C:\Users\12051\AppData\Local\Temp\tmpqphl…

合并两个有序链表(java)

leetcode 21题:合并两个有序链表 题目描述解题思路:链表的其它题型。 题目描述 leetcode21题:合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入&…

IO多路转接

目录 一、select 1.1 select初识 1.2 select函数 1.3 scoket就绪条件 1.4 select基本工作流程 1.5 select服务器 1.6 select的优点 1.7 select的缺点 1.8 select的适用场景 二、poll 2.1 poll函数 2.2 poll服务器 2.3 poll的优点 && 缺点 三、epoll 3.1…

设备快线客户端软件V1.0用户手册

1.前言欢迎使用设备快线客户端软件产品。设备快线客户端软件简称DYClient,DYClient客户端是东用科技有限公司推出的一款用于远程维护的控制软件,主要为客户远程访问现场终端设备提供便捷的接入服务,并且通过DYClient客户端软件用户可以非常方便快捷的访问…

ChatGPT和软件测试实践与思考

前言 关于最近大火的ChatGPT相信各位也听过不同渠道听说过他的厉害,目前发展趋势比较火热,科技公司都有在考虑怎么使用ChatGPT进行提高研发效率以及办公效率,最近我所在的公司也有在要求大家使用ChatGPT进行改善工作效率,所以引发…

支持导入 Eolink 插件,别小看这个开源 API 管理工具了

Postcat 有多达 30 款支持数据迁移、主题、API 安全等方面的插件。 导入 Eolink 插件。 使用 导入功能有多个入口,你可以在 API 分组处点击加号导入 API: 也可以换种方式,在首页里导入Eolink 如果你日常会用到 api 管理工具的话&#xff0c…

【九章斩题录】C/C++:二维数组中的查找(JZ4)

精品题解 👉 《九章刷题录》 📜 目录: 「 法一 」暴力美学 「 法二 」十字分割法 「 法三 」逐行二分 JZ4 - 二维数组中的查找 📚 题目描述:在一个二维数组 array 中(每个一维数组的长度相同&#xff…

[时间同步] vscode chatGPT提供的程序打包封装成api解决方案怎么样

背景 在完成gnss时间同步程序大部分需求串口配置、串口数据中找出推荐定位信息RMC解析UTC时间以及UTC时间更新系统时间等功能后,有个需求比较特别,需要客户来操作。当车辆在地库场景待时间过久后重新回到地面,一直在自走的系统时间与又定位好…