Towards Accurate Post-training Network Quantization via Bit-Split and Stitching

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

文章主要有两个创新点

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

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

Bit-Split and Stitching

Bit-Split and Stitching
  • 常规的二进制, 第一位是符号位, 后面的是绝对值, 每一位只能取0或1. split的作用就是把符号位分配给每个bit, 经过split处理, 总位数会少1, 每一位可取值变为-1, 0, 1. 可表示的范围其实没变都是最小位-111, 最大111.
    经过这样处理后, 就可以利用论文中的公式进行优化, 优化这块不太懂. 大致思想还是迭代, 每次迭代时, 固定其他值, 然后求解其中某一位的值.

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

  • conv/fc的计算过程可以表示位 Y = W^{T}X(假设Wshape为[M, N] Xshape为[N, C], 则Y的shape为[M, C]), 经过per_tensor量化后变为Y = \alpha \hat{W}\hat{X}\beta其中\alpha\beta均为标量, 经过这样处理后, 计算量较大的WX变成了\hat{W}\hat{X} 由原来的float计算变为了int型的计算.
    W变为per_channel量化后, 上述过程仍适用. 当变为per_channel量化后, \alpha又标量变为向量, \pmb{\alpha} 且其维度为M. 但是若对X使用per_channel的量化方法, 则\beta的维度为N, 这样的话, 无法继续将原有的浮点计算转为定点计算, 否则数学上无法等价.
    ECAQ的主要思想如图, 即对X进行per_channel量化, 但是将量化的scale乘到W中.
    ECAQ

    这里在代码实现层面使用了in_scaleout_scale, 所以原本的计算过程变为
    \tilde{X} = \beta_{out}\frac{X}{\beta_{in}}
    这里的\beta_{out}会乘到对应的W中, 当把\beta_{out}乘到后续的W中以后, X的fake quantize将变成
    \hat{X} = \frac{X}{\beta_{in}}
    在代码中这里会设置out_scale=1, 也就是X经过Quantization op后的输出为int, 而非平时的Quantization那样, 输出的是近似与float X的值.

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

  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后:

  • Acc@1 46.160 Acc@5 71.004 (只对第一层使用ECAQ)
    这里很奇怪, 如果对所有层使用ECAQ, 最终结果不理想,
    但如果只对第一层使用ECAQ, 绝对精度虽然还不行, 但是相对于原始的量化, 提升很多
    只对第一层量化: * Acc@1 46.160 Acc@5 71.004

思考

  • 由于量化条件比较宽松( , per_channel, float scale, unsigned), 所以在8bit时精度几乎没有掉. 这篇论文主要在说自己在低比特时效果更好, 但是实验模型都属于比较好量化的, 在mobilenet v2上的效果似乎不是特别好.
  • 而且他们在量化时没有fold bn也挺奇怪.
  • 从实验来看, per_channel和per_tensor的量化方式, 对于activation来说貌似影响不大, 即使将per_tensor替换为per_channel精度提升似乎并不高
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容