卷积变体-----分组卷积、深度可分离卷积、膨胀卷积

2024-03-28 05:20

本文主要是介绍卷积变体-----分组卷积、深度可分离卷积、膨胀卷积,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、分组卷积
    • 1.1 概述
    • 1.2 参数量变换
  • 二、深度可分离卷积
    • 2.1 概述
    • 2.2 计算
  • 三、膨胀卷积


一、分组卷积

1.1 概述

 1. 分组卷积(Group convolution )最早在AlexNet中出现,由于当时的硬件资源有限,训练AlexNet时卷积操作不能全部放在同一个GPU处理,因此把特征图分给多个GPU分别进行处理,最后把多个GPU的结果进行融合。

 2. 一般的卷积会对输入数据的整体一起做卷积操作。而组卷积则是在深度上进行划分,即某几个通道编为一组,对输入数据做组合卷积操作。

在这里插入图片描述

1.2 参数量变换

 1. 标准的 2 D 2D 2D 卷积步骤如下图所示:输入特征为: H × W × C H × W × C H×W×C,然后应用 C ′ C' C 个卷积核组(每个卷积核组的大小为 h × w × c h × w × c h×w×c),输入层被转换为大小为 H ′ × W ′ × C ′ H' × W' × C' H×W×C 的输出特征。

在这里插入图片描述

 2. 分组卷积的表示如下图所示。我们计算一下标准 2 D 2D 2D 卷积 和分组卷积的参数量:
 标准 2 D 2D 2D 卷积: w × h × C × C ′ w × h × C × C' w×h×C×C
 分组卷积: w × h × C / 2 × C ′ / 2 × 2 w × h × C/2 × C'/2 × 2 w×h×C/2×C/2×2
 我们可以发现参数量减少到原来的 1 / 2 1/2 1/2,那当Group为4的时候,参数量将会减少到原来的 1 / 4 1/4 1/4

在这里插入图片描述

二、深度可分离卷积

2.1 概述

 1. 在深度可分离卷积(depthwise separable convolution)中,通常将卷积操作拆分成多个步骤。深度可分离卷积把普通卷积拆分成 D W DW DW 卷积(Depthwise Convolution,深度卷积)和 P W PW PW 卷积(Point Convolution,点卷积)两部分。:深度可分离卷积 = 深度卷积 + 点卷积。

在这里插入图片描述

 2. 深度卷积完成后的特征图数量与输入层的通道数相同。但这种运算对输入层的每个通道独立进行卷积运算,没有有效地利用不同通道在相同空间位置上的特征信息。因此需要点卷积来将这些特征图进行组合生成新的特征图。

 3. 举例:
 (1) 在第一部分深度卷积中,我们在不改变深度的情况下,对输入图像进行了分组卷积。我们使用 3 3 3 5 × 5 × 1 5×5×1 5×5×1 形状的卷积核。每个 5 × 5 × 1 5×5×1 5×5×1 卷积核迭代图像的 1 1 1 个通道(注意: 1 1 1 个通道,而不是所有通道),得到 3 3 3 8 × 8 × 1 8×8×1 8×8×1 的图像。将这些图像叠加在一起可创建 8 × 8 × 3 8×8×3 8×8×3 的图像。

在这里插入图片描述

 (2) 点卷积的运算与常规卷积运算非常相似,它的卷积核的尺寸为 1 × 1 × M 1×1×M 1×1×M M M M 为上一层的通道数。所以这里的卷积运算会将上一步的图像在深度方向上进行加权组合,生成新的特征图。有几个卷积核就有几个输出图像。
 点向卷积之所以如此命名是因为它使用了一个 1 × 1 1×1 1×1 卷积核,我们通过 1 × 1 × 3 1×1×3 1×1×3 卷积核迭代 8 × 8 × 3 8×8×3 8×8×3 图像,得到 8 × 8 × 1 8×8×1 8×8×1 图像。我们可以创建 256 256 256 1 × 1 × 3 1×1×3 1×1×3 卷积核,每个卷积核输出一个 8 × 8 × 1 8×8×1 8×8×1 图像,全部叠加到一起得到形状为 8 × 8 × 256 8×8×256 8×8×256 的最终图像。
在这里插入图片描述

在这里插入图片描述

2.2 计算

 用上面这个例子:
 普通卷积参数量为: 3 × 256 × 5 × 5 3×256×5×5 3×256×5×5
 深度可分离卷积参数量为: 3 × 5 × 5 + 3 × 256 × 1 × 1 3×5×5+3×256×1×1 3×5×5+3×256×1×1

三、膨胀卷积

 1. 膨胀卷积与普通的卷积相比,除了卷积核的大小以外,还有一个膨胀率(dilation rate)参数,主要用来表示膨胀的大小。卷积核的膨胀率(dilate rate)属性定义为卷积核的元素间距。如 dilate rate=2 是每隔一个像素位置应用一个卷积元素,dilate rate=1 就是普通的卷积。具体含义就是在卷积核中填充 dilation rate 个 0。

 2. (a) 是普通卷积,1-dilated convolution,卷积核的感受野为 3 × 3 = 9 3×3=9 3×3=9; (b) 是膨胀卷积,2-dilated convolution,卷积核的感受野为 5 × 5 = 25 5×5=25 5×5=25;(c) 是膨胀卷积,4-dilated convolution,卷积核的感受野为 9 × 9 = 81 9×9=81 9×9=81

在这里插入图片描述

 3. 卷积核经过膨胀后实际参与运算的卷积大小计算公式:膨胀后的卷积核尺寸 = 膨胀系数 × × × (原始卷积核尺寸 − 1 -1 1 + 1 +1 +1

这篇关于卷积变体-----分组卷积、深度可分离卷积、膨胀卷积的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/854560

相关文章

MySQL中的分组和多表连接详解

《MySQL中的分组和多表连接详解》:本文主要介绍MySQL中的分组和多表连接的相关操作,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录mysql中的分组和多表连接一、MySQL的分组(group javascriptby )二、多表连接(表连接会产生大量的数据垃圾)MySQL中的

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

springboot security之前后端分离配置方式

《springbootsecurity之前后端分离配置方式》:本文主要介绍springbootsecurity之前后端分离配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录前言自定义配置认证失败自定义处理登录相关接口匿名访问前置文章总结前言spring boot secu

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、