论文标题 :DSConv: Efficient Convolution Operator
论文链接 :https://arxiv.org/abs/1901.01928v2
发表时间 :2019年11月
创新点
实现更低的内存使用,并且加快了计算速度
概要
引入了一种称为 DSConv(分布移位卷积)的卷积层变体
它可以很容易地替换到标准神经网络架构中,并实现更低的内存使用和更高的计算速度
DSConv 将传统的卷积核分解为两个组件:
- 可变量化核 (VQK)
- 分布偏移
通过在 VQK 中仅存储整数值来实现更低的内存使用和更高的速度
同时通过应用基于内核和通道的分布偏移来保留与原始卷积相同的输出
在 ResNet50 和 ResNet34 以及 AlexNet 和 MobileNet 上测试 ImageNet 中的 DSConv
通过将浮点运算替换为定点运算
将卷积核中的内存使用量减少了 14 倍,并将运算速度提高了 10 倍
方法
DSConv 的总体目标是通过使用量化和分布偏移来模拟卷积层的行为
DSConv 的设置如上图所示
原始卷积张量的大小为 (cho, chi, k, k),其中 cho 是下一层的通道数,chi 是当前层中的通道,k是内核的宽度和高度
DSConv 分为两个不同的组件:
- 可变量化内核 (VQK)
此张量将仅保存可变位长整数值,并且它具有与原始卷积张量相同的大小 (cho, chi, k, k)
参数值设置为从原始浮点模型量化,一旦设置就不能改变
这是 DSConv 的量化组件,它将允许执行更快且内存有效的乘法
- Distribution Shifts
这个组件的目的是改变 VQK 的分布以试图模仿原始卷积核的分布
通过使用两个张量在两个域中移动来做到这一点
“移位”是指缩放和偏置操作
第一个张量是 K e r n e l D i s t r i b u t i o n S h i f t e r ( K D S ) Kernel Distribution Shifter (KDS) KernelDistributionShifter(KDS),它移动 VQK 的每个 ( 1 , B L K , 1 , 1 ) (1, BLK, 1, 1) (1,BLK,1,1) 切片中的分布,其中 BLK 是块大小的超参数
这个想法是内核移位器的每个值都用于移位 VQK 的 BLK 深度值的值
那么这个张量的大小是 2 ∗ ( c h o , C E I L ( c h i / B L K ) , k , k ) 2* (cho, CEIL( chi/BLK ), k, k) 2∗(cho,CEIL(chi/BLK),k,k)
其中 CEIL(x) 是向上舍入运算符,它保存单精度值
第二个张量是 C h a n n e l D i s t r i b u t i o n S h i f t e r ( C D S ) Channel Distribution Shifter (CDS) ChannelDistributionShifter(CDS),它移动每个通道中的分布
换句话说,它改变了每个 ( 1 , c h i , k , k ) (1, chi, k, k) (1,chi,k,k) 切片中的分布
自然,这是一个大小为 2 ∗ ( c h o ) 2*(cho) 2∗(cho) 的单精度数张量
实验
总结
原论文中还有,量化程序、分配转变和优化推理等步骤,但是如果个人使用,可直接使用 DSConv 来替代传统卷积
DSConv 较于传统 Conv 的优势在于计算速度快,占用内存更少