5位CNN权重的算术编码与解码技术解析
立即解锁
发布时间: 2025-08-31 00:09:41 阅读量: 3 订阅数: 9 AIGC 

### 5位CNN权重的算术编码与解码技术解析
#### 1. 解码示例
为了更好地理解5位CNN权重的算术解码过程,我们来看一个具体示例。以下是解码过程的详细步骤:
| i | 起始范围 | 子范围(j = 0) | 子范围(j = 1) | 子范围(j = 2) | Z(idx) - 灰色阴影部分 | 输出 w | 缩放情况 | 更新后的 idx |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 0 | [0, 255] | [0, 102] | — | — | (0011010010000000)₂ {0} | Lower | 1 | 52 |
| 1 | [0, 204] | [0, 81] | [81, 163] | — | (0011010010000000)₂ {0,1} | Middle | 2 | 105 |
| 2 | [34, 198] | [34, 99] | — | — | (0001010010000000)₂ {0,1,0} | Lower | 3 | 82 |
| 3 | [68, 198] | [68, 120] | [120, 172] | — | (0001010010000000)₂ {0,1,0,1} | Middle | 4 | 164 |
| 4 | [112, 216] | [112, 153] | [153, 195] | [195, 216] | (0000110010000000)₂ {0,1,0,1,2} | — | — | 200 |
具体计算过程如下:
- 对于元素 “0”,其范围为 `([34 + ⌊164*0.0⌋, 34 + ⌊164*0.4⌋]=[34, 99])`,该元素将被写入 `W[2]`。然后按照较低缩放规则对该子范围进行缩放,得到新的缩放范围 `[68, 198]`(即 `[34*2, 99*2]`)。
- 在下一次迭代中,起始范围为 `[68, 198]`,`Z(3)` 为 `(10100100)₂`(即 164),它位于元素 “1” 的子范围内(`[68 + ⌊130*0.4⌋, 68 + ⌊130*0.8⌋]=[120, 172]`)。因此,将元素 “1” 写入 `W[3]`,并对 `[120, 172]` 进行中间缩放,同时将 `Z(3)` 更新为 100(即 `164 - 64(QTR)`)。之后得到新的缩放范围 `[112, 216]`(即 `[(120 - 64)*2, (172 - 64)*2]`)。
- 接着,对于 `Z(4)` 为 `(11001000)₂`(即 200),计算各权重元素的子范围后,发现它位于 “2” 的子范围内(`[112 + ⌊104*0.8⌋, 112 + ⌊104*1.0⌋]=[195, 216]`),该元素将被存储到 `W[4]`。
- 由于已经解码了五个权重元素,解码过程结束,最终解码后的权重输出为 `W = {0, 1, 0, 1, 2}`。
#### 2. 解码硬件
解码硬件采用了特定的架构,其主要组成部分包括:
- **位流缓冲区**:用于存储从主内存(或存储设备)传输过来的编码权重位流。
- **概率表**:维护每个权重值的 `F[x]`,其中 `F[0]` 和 `F[32]` 分别始终为 0 和 1,无需存储在表中。
- **解码权重缓冲区**:用于存储解码后的权重元素。
解码过程的具体操作步骤如下:
1. 从位流缓冲区中取出 `Z(idx)`(`idx` 为 N 位的起始位索引),将其发送到范围缩放单元。范围缩放单元根据三种情况(上缩放、下缩放和中间缩放)对范围进行缩放。
2. 范围缩放单元输出的缩放范围和概率值(`F[0] - F[32]`)被发送到范围计算单元。范围计算单元为每个权重值计算新的子范围,在设计中并行执行 32 次子范围计算,提高了解码器的性能。
3. 比较器并行比较 `Z(idx)` 值和每个子范围,以确定当前迭代中应写入输出的权重值。
4. 比较完成后,将相应元素存储到解码权重缓冲区。整个过程在控制逻辑的协调下迭代执行。
为了验证解码硬件的可行性,在 FPGA 板(Xilinx ZCU106)上进行了实现,使用 Xilinx Vivado 设计套件进行设计。合成设计的时钟频率为 150 MHz,采用 16 个解码单元(DU),其吞吐量是 1 个 DU 解码器实现的 16 倍。为了利用 16 个 DU,将权重元素尽可能均匀地分成 16 块,并将每块编码成单独的位流,解码时将每个位流发送到对应的 DU。
在 CNN 推理执行过程中,权重解码必须在卷积操作之前进行。为了减少解码延迟,可以将第 i 层 CNN 权重的传输和解码延迟与第 `(i - 1)` 层 CNN 的执行延迟重叠。要实现这一点,需要满足以下两个条件:
- 输入和输出特征图在 CNN 加速器的各层之间重用,无需在内存和加速器的 PLM 之间传输。
- 第 i 层 CNN 的数据传输和解码延迟完全被第 `(i - 1)` 层的执行时间隐藏(`i > 1`)。为满足第二个条件,增加解码硬件中的 DU 数量是有益的,因为更多的 DU 可以进一步降低解码延迟。
#### 3. 评估方法
采用了三个指标来评估该技术:压缩比、主内存中的能量消耗和延迟开销。使用了五个 CNN 模型进行基准测试,分别是 Network-in-Network(NiN)、SqueezeNet、GoogleNet、AlexNet 和 CaffeNet,评估中 `N` 取值为 32。
- 使用 Caffe 框架提供的训练好的 FP32 权重。
- 对于 5 位量化,采用增量网络量化(INQ)方法从 32 位全精度权重生成 5 位 2 的幂次量化权重。
- 对于 AlexNet 和 CaffeNet,还额外进行了权重剪枝操作,以研究其对压缩比的影响。
评估主要关注 CNN 卷积(CONV)层的压缩比和内存能量消耗,对于延迟开销,假设只压缩 CONV 层的权重,其他层(如全连接层)的权重不进行压缩。
#### 4. 评估结果 - 压缩比和内存能量消耗
压缩比(CR)定义为未压缩数据大小 `Su` 与压缩数据大小 `Sc` 的比值,即 `CR = Su / Sc`。以下是五个 CNN 模型的压缩比比较:
| CNN 模型 | 32 位 | 16 位 | 8 位 | 5 位 | HC - 5bit | A
0
0
复制全文
相关推荐










