Towards Accurate Post-training N

2021-06-09  本文已影响0人  X_Y

自动化所的一篇文章, 文章地址, 代码地址

文章主要有两个创新点

  1. 将量化后的weigths进行split, 然后优化每一位bit, 使得目标函数最小, 得到每一位的bit后再将所有位的bit进行stitching
  2. 在保证计算效率的前提下, 可以对Activation使用per-channel的量化, 论文中叫Error Compensated Activation Quantization(ECAQ)

下面针对这两条分别说明,

Bit-Split and Stitching

Bit-Split and Stitching

其实我不太懂, 为什么这里split后求解得出的量化值和scale精度就会更好

该论文的代码需要注意下面一些地方:

  1. 先对W进行进行ofwa(optimal fixed-point weight approximation) 解出初步最佳值
  2. 利用layer的input 和 output再进行ofwa解出W的最佳量化值和scale, 并保存为文件
  3. load量化后的W到model内, 然后使用数据对量化activation
  4. Weights bitwidth=8时时间较长
  5. 当使用ECAQ时, 对feature定点后得到β, 此后beta固定, 且此feature以定点后的数值存在
  6. 默认情况relu后的quantizer是signed
  7. First and last layer activation quantize bit-width is always 8
  8. 不会fold BN
  9. input image 没有定点
  10. 只在conv前定点
  11. 从feature map中随机选取点进行量化, 所以结果每次会有所不同

resnet 系列网络的quantization插入位置

resnet 系列网络的quantization插入位置

mobilenet系列网络的quantization插入位置

mobilenet系列网络的quantization插入位置

实验:

resnet 18和resnet50

基本复现了论文中的结果, 但是代码没有给出ECAQ的实现, 自己实现后, 结果为
A3W8:
float 69.758/89.078
Bit split & stitch: * Acc@1 64.754 Acc@5 85.926
Bit split & stitch + ECAQ: * Acc@1 66.262 Acc@5 86.750
略有提升, 但是不多.
ECAQ在实现时, 对每一个conv做完ECAQ后需是使用乘以\beta后的W作为conv的weights, 并且,与之对应的activation的Quantization的in\_scale=\beta, out\_scale=1

mobilenet v2

Bit width | accuracy | accuracy after quantize W but not quantize activation
---- | ----- |
A8W8: | * Acc@1 71.644 Acc@5 90.134 | * Acc@1 71.842 Acc@5 90.296
A8W4: | * Acc@1 67.898 Acc@5 88.028 | * Acc@1 63.652 Acc@5 85.112
A4W4: | * Acc@1 36.672 Acc@5 61.942 | * Acc@1 64.240 Acc@5 85.496

A4W4+ECAQ后:

思考

上一篇 下一篇

猜你喜欢

热点阅读