论文标题:DSConv: Efficient Convolution Operator
论文链接:https://arxiv.org/abs/1901.01928v2
论文代码:
发表时间: 2019年11月
创新点
实现更低的内存使用,并且加快计算速度
Abstract
我们引入了一种称为 DSConv(分布移位卷积)的卷积层变体,它可以很容易地替换到标准神经网络架构中,并实现更低的内存使用和更高的计算速度。 DSConv 将传统的卷积核分解为两个组件:可变量化核 (VQK) 和分布偏移。通过在 VQK 中仅存储整数值来实现更低的内存使用和更高的速度,同时通过应用基于内核和通道的分布偏移来保留与原始卷积相同的输出。我们在 ResNet50 和 ResNet34 以及 AlexNet 和 MobileNet 上测试 ImageNet 中的 DSConv。我们通过将浮点运算替换为整数运算,将卷积核中的内存使用量减少了 14 倍,并将运算速度提高了 10 倍。此外,与其他量化方法不同,我们的工作允许对新任务和数据集进行一定程度的再训练。
Method
DSConv 的总体目标是通过使用量化和分布偏移来模拟卷积层的行为。
DSConv 的设置如上图所示。为了方便和表示,让原始卷积张量的大小为 (cho, chi, k, k),其中 cho 是下一层的通道数,chi 是当前层中的通道,k是内核的宽度和高度。
DSConv 分为两个不同的组件:
可变量化内核 (VQK)
此张量将仅保存可变位长整数值,并且它具有与原始卷积张量相同的大小 (cho, chi, k, k)。参数值设置为从原始浮点模型量化,一旦设置就不能改变。这是 DSConv 的量化组件,它将允许执行更快且内存有效的乘法。
Distribution Shifts
这个组件的目的是改变 VQK 的分布以试图模仿原始卷积核的分布。我们通过使用两个张量在两个域中移动来做到这一点。 “移位”是指缩放和偏置操作。第一个张量是 Kernel Distribution Shifter (KDS),它移动 VQK 的每个 (1, BLK, 1, 1) 切片中的分布,其中 BLK 是块大小的超参数。这个想法是内核移位器的每个值都用于移位 VQK 的 BLK 深度值的值。那么这个张量的大小是 2 · (cho, CEIL( chi/BLK ), k, k),其中 CEIL(x) 是向上舍入运算符,它保存单精度值。第二个张量是 Channel Distribution Shifter (CDS),它移动每个通道中的分布。换句话说,它改变了每个 (1, chi, k, k) 切片中的分布。自然,这是一个大小为 2 · (cho) 的单精度数张量。
Experiments
实验目标:在 Resnet34 和 Resnet50 中应用的 DSConv 与其他网络
实验结果:效果有明显提高
写在最后
原论文还有,量化程序、分配转变和优化推理等步骤,但是如果个人使用,可直接使用 DSConv 来替代传统卷积,直接使用。DSConv 较于传统 Conv 的优势在于计算速度快,占用内存更少。
若想要钻研内部构造,这还是看一下原文较好。
版权归原作者 来自γ星的赛亚人 所有, 如有侵权,请联系我们删除。