ML/DL-复习笔记【十】- 分组卷积和深度可分离卷积的区别

2023-11-11

本节为ML/DL-复习笔记【十】- 分组卷积和深度可分离卷积的区别,主要内容包括:分组卷积与深度可分离卷积的参数量分析。

  最早出现分组卷积是AlexNet,由于单块GPU显存的限制,需要将网络部署在两张显卡上,分别进行训练最后再融合,Alex认为分组卷积可以增加filter之间的对角相关性,组内特征独立发挥最终预测作用,而不与其他特征组合,减少耦合增加鲁棒,并且可以减少训练参数。

1. 分组卷积-Group Convoluition

  下图代表标准卷积操作,若输入特征图尺寸为 H × W × c 1 H\times W\times c_1 H×W×c1,卷积核尺寸 h 1 × w 1 × c 1 h_1\times w_1\times c_1 h1×w1×c1,输出特征图尺寸 H × W × c 2 H\times W\times c_2 H×W×c2,标准卷积层的参数量为: ( h 1 × w 1 × c 1 ) × c 2 (h_1\times w_1\times c_1)\times c_2 (h1×w1×c1)×c2【一个滤波器再输入特征图 h 1 × w 1 × c 1 h_1\times w_1\times c_1 h1×w1×c1大小的区域内操作,输出结果为1个数值,所以需要 c 2 c_2 c2个滤波器】。
在这里插入图片描述

  下图表示分组卷积操作,将输入特征图按照通道分成 g g g组,则每组输入特征图的尺寸为 H × W × c 1 g H\times W\times \frac{c_1}{g} H×W×gc1,对应的卷积核尺寸为 h 1 × w 1 × c 1 g h_1\times w_1\times \frac{c_1}{g} h1×w1×gc1,每组输出特征图尺寸为 H × W × c 2 g H\times W\times \frac{c_2}{g} H×W×gc2。将 g g g组结果拼接,得到最终尺寸为 H × W × c 2 H\times W\times c_2 H×W×c2的输出特征图,参数量:
h 1 × w 1 × c 1 g × c 2 g × g = h 1 × w 1 × c 1 × c 2 × 1 g h_1\times w_1\times \frac{c_1}{g}\times\frac{c_2}{g}\times g=h_1\times w_1\times c_1\times c_2 \times \frac{1}{g} h1×w1×gc1×gc2×g=h1×w1×c1×c2×g1
在这里插入图片描述
  可以看到,参数量获得了很大的下降,组间信息无法沟通与传递,所以也会带来一定的问题,所以后面有了shffuleNet,通过通过混洗解决组间信息沟通的问题,与下文提到的深度可分离卷积属于两个不同的思路。

2. 深度可分离卷积

  下图a表示标准卷积,假设输入特征图尺寸为 D F × D F × M D_F \times D_F \times M DF×DF×M ,卷积核尺寸为 D K × D K × M D_K \times D_K \times M DK×DK×M,输出特征图尺寸为 D F × D F × N D_F \times D_F \times N DF×DF×N,标准卷积层的参数量为: ( D K × D K × M ) × N (D_K \times D_K \times M) \times N (DK×DK×M)×N

  下图b代表深度卷积,图c代表逐点卷积,两者合起来即深度可分离卷积。深度卷积负责滤波,尺寸为 ( D K , D K , 1 ) (D_K,D_K,1) (DK,DK,1),共 M M M个,作用在输入的每个通道上;逐点卷积负责转换通道,尺寸为 ( 1 , 1 , M ) (1,1,M) (1,1,M),共 N N N个,作用在深度卷积的输出特征映射上。

  深度卷积参数量为 ( D K × D K × 1 ) × M (D_K \times D_K \times 1) \times M (DK×DK×1)×M,逐点卷积参数量为 ( 1 × 1 × M ) × N (1×1×M)×N (1×1×M)×N ,所以深度可分离卷积参数量是标准卷积的 D K × D K × M + M × N D K × D K × M × N \frac{D_K×D_K×M+M×N}{D_K×D_K×M×N} DK×DK×M×NDK×DK×M+M×N$ = \frac{1}{N} + \frac{1}{D_K^2}$。

  为了便于理解,和分组卷积类比,假设 M = N M=N M=N。深度卷积其实就是 g = M = N g=M=N g=M=N的分组卷积,只不过没有直接将 g g g组结果拼接,所以深度卷积参数量是标准卷积的 1 / N 1/N 1/N。逐点卷积其实就是把 g g g组结果用 1 × 1 1\times 1 1×1conv 拼接起来,所以逐点卷积参数量是标准卷积的 1 / D K 2 1/D_K^2 1/DK2。(只考虑逐点卷积,之前输出的特征图上每一个点是由输入特征图 D K × D K D_K\times D_K DK×DK区域内的点计算得到的;而逐点卷积输出上每一个点是由 1 × 1 1\times 1 1×1区域内的点计算得到的)。自然,深度可分离卷积参数量是标准卷积的 1 / N + 1 / D K 2 1/N+1/D_K^2 1/N+1/DK2
在这里插入图片描述

  深度可分离卷积降低参数量的同时,必然造成精度的损失,原因可能是通道数太少导致特征图的维度太少,获取到的有效信息较少。

  但是以Xception为例,包含大量深度可分离卷积的模型训练核推理速度反而较慢,猜测可能的原因是这种卷积分组的方式虽然降低了模型的参数量,但是计算零碎且分散,导致速度下降。

参考:


欢迎扫描二维码关注微信公众号 深度学习与数学   [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ML/DL-复习笔记【十】- 分组卷积和深度可分离卷积的区别 的相关文章

  • Flutter沉浸式透明状态栏-flutter自定义凸起BottomAppBar导航

    注意 flutter项目默认是使用Kotlin语言 在Google I O 2017中 Google 宣布 Kotlin 取代 Java 成为 Android 官方开发语言 Kotlin详情见 https www kotlincn net
  • 异常处理--java.lang.reflect.MalformedParameterizedTypeException

    异常信息 org springframework beans factory BeanCreationException Error creating bean with name sqlSessionFactory defined in
  • C语言指针详解

    1 指针是什么 指针是内存中一个最小单元的编号 也就是地址 平时口语中说的指针 通常指的是指针变量 是用来存放内存地址的变量 所以 指针就是地址 口语中说的指针通常指的是指针变量 1 指针变量 我们可以通过 取地址操作符 取出变量的内存其实
  • 活动效果评估体系,该怎么搭建?

    如果让你来评估这次活动 你会怎么分析 无论是面试还是工作 做数据分写的同学都经常遇到这个问题 今天我们系统讲解一下 场景还原 某音乐类APP 对新用户进行一个新注册即送7天会员权益的活动 用户注册后 自主决定是否点击领取 为期1个月 问 如

随机推荐

  • python函数定义参数类型和返回值类型

    python中我们也可以定义函数的参数类型和返回值类型 如下代码 函数参数和返回值的类型声明 python函数类型的声明 更加有意义 更加实用一些 def add a b param a int param b int return int
  • C++ STL中map.erase(it++)用法原理解析

    之前在代码中使用map erase函数时 误搬了vector erase的用法 导致Server down掉了 好在在测试环境就及时发现了问题 在上线前进行了补救 以下总结一下map erase的正确用法 首先看一下在循环中使用vector
  • 灰灰-325-326-327-2019中南大学计算机上机-走台阶(3)

    1 n个台阶 一次走1阶或2阶 问走n阶有多少可能 1 lt n lt 1000 000 结果用1000 0000 7取模输出 输入格式 输入台阶数n 输出格式 结果用1000 0000 7取模输出 输入样例 3 输出样例 3 includ
  • 【技巧】各编辑器基础开发快捷键

    文章目录 一 IDEA 二 vim 1 各个模式的相互切换 2 正常模式 3 插入模式 4 底行模式 5 视图模式 三 Visual Studio 2017 四 PyCharm 一 IDEA psvm 回车 快速打出main函数 sout
  • docker网络自定义

    docker网络自定义 书接上回 我们认识了docker0网络以及 link参数的使用 https blog csdn net hello list article details 124815842 今天来了解下docker自定义网络 那
  • Java描述贪心算法解决背包问题

    思路 首先将物品根据性价比排好序在一个集合里 性价比 价格 重量 然后根据性价比从大到小依次依次放入背包 如果没办法放入这个物品的全部 就放入一部分 如果可以放入全量物品 就放入全量物品 Main java的代码 import java u
  • get和post区别

    get参数通过url传递 post放在post是放在请求头的包体 request body 中 因为参数直接暴露在url中 get比post更不安全 所以不能用来传递敏感信息 get请求在url中传递的参数是有长度限制的 get提交的数据最
  • 『动态规划·差分』队列

    P r o b l e m mathrm Problem Problem S o l u t i o n mathrm Solution Solution 首先考虑第一小问 问题转化为 每一行的问题互相独立 令 c j a i j a 1
  • Java之经典排序算法(一)

    一 冒泡排序 不稳定的排序算法 快希选堆 1 算法思路 比较相邻元素 如果第一个比第二个大 则交换这两个元素 从第一个元素开始依次往后比较相邻两个元素 直到最后一个比较完 这样最后一个元素就是最大的元素 再次从第一个元素开始依次往后比较相邻
  • 锁,避免虚假唤醒,注意死锁

    unique lock
  • 记录kitti数据集的坐标系转换问题

    Calib文件说明 以00000 txt文件为例 详细介绍每行含义 P0 7 070493000000e 02 0 000000000000e 00 6 040814000000e 02 0 000000000000e 00 0 00000
  • DC-DC电源模块输出先放大电容还是小电容

    最好的资料是电容厂家的设计指南 1 电容简单的等效模型是C ESL ESR 2 通常电解电容容量越大 ESR越小 ESL越大 承受纹波电流越大 3 电流流经阻抗最小路径 4 大电流 PCB走线电阻不能忽略 高频纹波电流PCB走线电感不能忽略
  • C语言之结构体内存的计算

    结构体的内存 一 提出疑问 结构体占用的是一片连续的内存空间 大小是由成员变量的类型决定的 但并不是计算所有成员变量的类型大小之和那么简单 先举一个实例 struct student int age 4个字节 int telephone 4
  • win系统使用frp端口映射实现内网穿透,配置“任务计划程序”提高稳定性

    Github下载最新版frp https github com fatedier frp releases download v0 48 0 frp 0 48 0 windows amd64 zip 解压把frpc exe和frpc ini
  • 【2】Python爬虫:分析AJAX传递的JSON获取数据-初步分析动态网页(1)

    前言 这是本人写的第二篇文章 希望能够帮助到一些和我一样的python爬虫初学者 在第一篇文章中 我总结了最近学到的利用requests和bs4第三方库共同作用 基本可以应对python获取静态网页数据的相关问题 但是如果现实中的网页往往比
  • JVM 四. 对象布局

    目录 一 对象实例化相关 创建对象的步骤 二 对象的内存布局 三 对象的访问定位 一 对象实例化相关 有哪些方式可以创建一个对象 new 方式创建一个对象 由new方式创建对象又延伸出 Builder建造者方式 Factory工厂方 等静态
  • 链表排序——选择排序法(纯C语言版)

    链表选择排序 链表的排序 功能 选择排序 由小到大 返回 指向链表表头的指针 选择排序的基本思想就是反复从还未排好序的那些节点中 选出键值 就是用它排序的字段 我们取学号num为键值 最小的节点 依次重新组合成一个链表 我认为写链表这类程序
  • 表弟高中毕业,半路学Python爬虫,现在月薪20—30k,嫉妒使人面目全非

    python近几年越来越火爆 爬虫工程师也很火 市场需求挺大 工资还算可观 很多不是计算机专业出身的人被薪资吸引 也开始转战python爬虫 那么半路学Python爬虫 学到什么程度可以面试爬虫工程师呢 首先要明确一点 python只不过是
  • Git第十四讲 Git标签管理

    Git标签是用于标记项目中的特定版本的重要工具 它们通常用于标识发布版本或里程碑 本文将介绍如何在Git中创建 查看和管理标签 创建标签 要在Git中创建一个标签 可以使用git tag命令 有两种类型的标签 轻量标签和附注标签 轻量标签
  • ML/DL-复习笔记【十】- 分组卷积和深度可分离卷积的区别

    本节为ML DL 复习笔记 十 分组卷积和深度可分离卷积的区别 主要内容包括 分组卷积与深度可分离卷积的参数量分析 最早出现分组卷积是AlexNet 由于单块GPU显存的限制 需要将网络部署在两张显卡上 分别进行训练最后再融合 Alex认为