实时语义分割学习笔记04 HardNet:一种低内存流量网络
一、提出的问题:
ResNet,MobileNet和DenseNet等模型,残差连接的跳连接方式导致大量内存使用和繁重的DRAM流量。使用快捷方式会延长张量的使用寿命,这可能会导致DRAM和缓存之间频繁的数据交换
作者认为访问中间特征映射的内存流量可能是控制推理延迟的一个因素,特别是在高分辨率视频的实时目标检测和语义分割等任务中。提出了一种谐波密集连接网络,以实现低MAC和内存流量方面的高效率。使用的工具包括Nvidia profiler和ARM Scale-Sim来测量内存流量,并验证推理延迟确实与内存流量消耗成正比
论文目的:HarDNet 是一个尝试通过设计低DRAM流量的CNN架构来实现模型的加速。研究关注在边缘设备上执行神经网络推理时,如何通过优化模型大小、计算密度和DRAM流量来提高计算和能源效率。
采用的方法:通过平衡特征之间的输入输出和通道数之间的关系,来降低DRAM的访问次数,从而实现模型的加速。
二、引言
在边缘设备(单片机、机器人、无人车、手机等)上执行神经网络推理是不可避免的。然而,边缘计算依赖于有限的计算能力和电池容量。针对计算和能源效率的优化。以下是一些关键概念的解释:
1、模型大小(Model Size)
指神经网络模型中的参数数量或权重数量。减小模型大小有助于提高计算和能源效率。
2、MACs(Multiply-Accumulate Operations)
表示乘-累加操作的数量,通常用于衡量神经网络模型的计算复杂度。减少MACs通常意味着减少计算负担,提高计算效率。
3、DRAM Traffic
表示动态随机存取内存的数据传输量。由于DRAM带宽有限,DRAM访问还可以在推理时间方面主导系统性能。作者观察到CNN中所有中间特征图的大小总和可以比其模型大小大十到一百倍,特别是对于高分辨率任务。因此减少DRAM对特征图的访问可能带来模型的加速。
4、Deep Compression Algorithm
由Han等人提出的算法,其主要目标是通过减小模型的大小来降低功耗,从而提高模型在移动设备等资源受限环境下的运行效率。该算法主要采用了以下几种技术:
权重修剪(Weight Pruning): 通过去除网络中的冗余权重,即将权重值接近于零的部分删除,从而减小模型的大小。这一步骤有助于提高模型的稀疏性,减少存储和计算开销。
权重量化(Weight Quantization): 将模型中的浮点数权重转换为更低位宽的定点数或整数,从而减小每个权重的存储空间。这样可以显著减小模型的内存占用,降低访问DRAM的数据传输量。
Huffman编码: 使用Huffman编码对模型的权重进行编码,进一步减小存储空间。Huffman编码对于表示模型中较为频繁出现的权重值非常有效,因为它可以用较短的编码表示高频值,减小总体编码长度。
5、文中如何评估CIO
它被用来衡量神经网络模型的内存访问,特别是与DRAM(动态随机存取存储器)的数据流量相关的内存访问。CIO的定义如下:
C
I
O
=
∑
l
(
c
i
n
(
l
)
×
w
i
n
(
l
)
×
h
i
n
(
l
)
+
c
o
u
t
(
l
)
×
w
o
u
t
(
l
)
×
h
o
u
t
(
l
)
)
CIO=∑ l( c_{in}^{(l)} × w _{in}^{(l)} × h _{in}^{(l)} + c _{out}^{(l)} × w_{out}^{(l)} × h_{out}^{(l)})
CIO=∑l(cin(l)×win(l)×hin(l)+cout(l)×wout(l)×hout(l))
其中:
c
i
n
(
l
)
c_{in}^{(l)}
cin(l) 和
c
o
u
t
(
l
)
c _{out}^{(l)}
cout(l) 是卷积层 l 的输入和输出通道数。
w
i
n
(
l
)
w _{in}^{(l)}
win(l)和
h
i
n
(
l
)
h _{in}^{(l)}
hin(l)是卷积层 l 输入特征图的宽度和高度。
w
o
u
t
(
l
)
w_{out}^{(l)}
wout(l) 和
h
o
u
t
(
l
)
h_{out}^{(l)}
hout(l)是卷积层 l 输出特征图的宽度和高度。
这个公式是每个卷积层的输入和输出大小之和,表示了神经网络中所有卷积层的总内存访问量。通过测量实际的DRAM读/写字节数,作者将CIO作为DRAM流量的近似值。在这里,输入张量可能是连接的,而重用的张量可能被多次计数。因为神经网络中所有中间特征图的大小总和通常比模型大得多,减少对这些特征图的DRAM访问可能会在某些情况下加速推断。
6、MACs over CIO(MoC,计算密度)
Deep Compression Algorithm是指MACs与CIO之比,用于衡量神经网络模型中每一层的计算密度。高计算密度意味着更高的计算效率。CIO在计算密度低于某个特定比例时主导推断时间,而这个比例取决于平台。他们在设计低CIO网络模型时对每个层的MoC施加了软约束,以平衡MACs的增加和CIO的减小。这旨在在提高模型效率的同时减小DRAM访问。
7、HarDNet(Harmonic Densely Connected Network):
是作者提出的一种神经网络结构,通过约束每一层的计算密度,以减少DRAM流量,提高计算和能源效率。
8、 如何使用这几个指标,文中举例
如,在固定的CIO下,将卷积层的输入和输出之间的通道比从1:1逐步改变到1:100,会导致MAC和延迟的减少。对于延迟,它的下降速度比MAC的减少更慢,因为内存流量保持不变。MoC的某个值可能表明,低于此比率,层的延迟总是限制在固定时间内。然而,此值与平台相关,并且经验上模糊。
三、相关工作
1、捷径技术的趋势:
神经网络研究中,为了解决梯度消失的问题,Highway Networks 和 Residual Networks等引入了捷径技术(跳连接或者说残差连接),将所有前面的层级连接起来,实现了更有效的深度监督。然而,捷径会导致大量的内存使用和大量的DRAM流量。使用捷径会延长张量的生命周期,可能导致DRAM和缓存之间频繁的数据交换。
2、DenseNet的稀疏版本:
一些稀疏版本的DenseNet已经被提出。LogDenseNet[17] 和 SparseNet[36] 采用了一种策略,将第K层连接到 K的不同的偶数备 k 2 k_2 k2, k 4 k_4 k4…… k 2 n k_{2n} k2n,进行稀疏连接,使得输入通道数从 O ( L 2 ) O_{(L^2)} O(L2)减少到 O ( L l o g L ) O_{(LlogL)} O(LlogL)。(转化为了树形连接)
三、具体实现
1、 稀疏化和加权
设计新的连接策略,来降低连接成本。 增加层的通道数来平衡层之间的通道比例,以避免低的MACs over CIO(MoC)。层 l 的初始增长率为k,通道数设为k × mn,其中n是满足l被2n整除的最大数字。乘数m作为低维度压缩因子,可以将输入通道压缩为更少的输出通道。实验证明,将m设置在1.6到1.9之间可以实现良好的准确性和参数效率。
2、 过渡和瓶颈层
提出的连接模式形成了一组称为Harmonic Dense Block(HDB)的层,后面跟着一个Conv1x1层作为过渡。作者让每个HDB的深度是2的幂,使最后一层具有最大数量的通道。为了减轻退化,作者将深度为L的HDB的输出设置为层L和所有其前面的奇数层(具有k个输出通道的最不显著层)的连接。
在每个Conv3x3层之前,DenseNet采用瓶颈层来增强参数效率。由于作者已经平衡了每一层的输入和输出之间的通道比例,这种瓶颈层的效果变得微不足道。作者建议在每四个Conv3x3层中插入一个瓶颈层,以帮助减小模型尺寸。为了进一步提高推理时间,这些Conv1x1瓶颈层可以舍弃以满足MoC的约束。
在传统的Conv3x3层之前插入瓶颈层的公式如下:
B
o
t
t
l
e
n
e
c
k
O
u
t
p
u
t
C
h
a
n
n
e
l
s
=
p
×
C
o
n
c
a
t
e
n
a
t
e
d
I
n
p
u
t
C
h
a
n
n
e
l
s
Bottleneck Output Channels=p×Concatenated Input Channels
BottleneckOutputChannels=p×ConcatenatedInputChannels
其中:
p 是一个超参数,通常为4。它用于确定瓶颈层中输出通道的数量相对于输入通道的增加比例。
Concatenated Input Channels 是通过连接前面所有层的输出而形成的输入通道的总数。
通过这个瓶颈层,作者旨在提高参数效率,减小模型的尺寸。由于在HarDNet中已经平衡了每一层的输入和输出之间的通道比例,瓶颈层的效果变得微不足道。然而,仍然将瓶颈层插入每四个Conv3x3层是有益的,因为它有助于减小模型的尺寸。