| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 可分离卷积(Separable convolution)详解 -> 正文阅读 |
|
[人工智能]可分离卷积(Separable convolution)详解 |
可分离卷积可分离卷积包括空间可分离卷积(Spatially Separable Convolutions)和深度可分离卷积(depthwise separable convolution)。 假设feature的size为[channel, height , width]
空间可分离卷积具有如下特点
空间可分离卷积就是在空间维度将标准卷积运算拆分成多个小卷积核。例如我们可以将卷积核拆分成两个(或多个)向量的外积。 可分离卷积的第一个版本主要处理图像和内核的空间尺寸-高度和宽度。 它将一个内核分为两个较小的内核,其中最常见的是将一个3x3内核分为一个3x1和1x3内核。 因此,代替进行一次具有9个乘法的卷积,而是执行两次分别具有3个乘法两个卷积组合起来共需要6次乘法,以实现相同的效果 可以在空间上分离的最著名的内核之一是Sobel(用于边缘检测) 与标准卷积相比,空间可分离卷积中的矩阵乘法更少一般的,空间可分离卷积就是将nxn的卷积分成1xn和nx1两步计算
深度可分离卷积Separable Convolution在Google的Xception以及MobileNet论文中均有描述。它的核心思想是将一个完整的卷积运算分解为两步进行,分别为Depthwise Convolution与Pointwise Convolution。 常规卷积假设输入层为一个大小为64×64像素、三通道彩色图片。经过一个包含4个Filter的卷积层,最终输出4个Feature Map,且尺寸与输入层相同。整个过程可以用下图来概括。 4x3x3x3=108,参考下图: 此时,卷积层共4个Filter,每个Filter包含了3个Kernel,每个Kernel的大小为3×3。因此卷积层的参数数量可以用如下公式来计算: Depthwise Convolution(逐深度卷积(滤波))同样是上述例子,一个大小为64×64像素、三通道彩色图片首先经过第一次卷积运算,不同之处在于此次的卷积完全是在二维平面内进行,且Filter的数量与上一层的Depth相同。所以一个三通道的图像经过运算后生成了3个Feature map,如下图所示。 其中一个Filter只包含一个大小为3×3的Kernel,卷积部分的参数个数计算如下: Depthwise Convolution完成后的Feature map数量与输入层的depth相同,但是这种运算对输入层的每个channel独立进行卷积运算后就结束了,没有有效的利用不同map在相同空间位置上的信息。因此需要增加另外一步操作来将这些map进行组合生成新的Feature map,即接下来的Pointwise Convolution。 Pointwise Convolution(逐点卷积(组合))Pointwise Convolution的运算与常规卷积运算非常相似,不同之处在于卷积核的尺寸为 1×1×M,M为上一层的depth。所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的Feature map。有几个Filter就有几个Feature map。如下图所示。 由于采用的是1×1卷积的方式,此步中卷积涉及到的参数个数可以计算为: 参数对比参数量计算参考<<卷积参数量计算(标准卷积,分组卷积,深度可分类)>>
常规卷积的参数个数为:
深度可分类卷积主要是由
Separable Convolution的参数由两部分相加得到:
相同的输入,同样是得到4张Feature map,Separable Convolution的参数个数是常规卷积的约1/3。因此,在参数量相同的前提下,采用Separable Convolution的神经网络层数可以做的更深。 PyToch 实现可分离卷积输入为(N,C_in,H,W),输出为(N,C_out,H_out,W_out). dilation来控制卷积膨胀间隔; groups分组卷积来控制输入和输出的连接方式,in_channels和out_channels都要被groups整除。当groups设置不同时,可以区分出分组卷积或深度可分离卷积:
示例代码
标准卷积
逐深度卷积
逐点卷积
分组卷积
参考文档https://blog.csdn.net/qq_40406731/article/details/107398593 更多深度学习文章请关注 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 0:32:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |