【手把手AI项目】十、利用量化工具caffe-int8-convert-tools实现caffemodel量化(double32->int8)

一、前言

相关网页

https://github.com/Tencent/ncnn/wiki/quantized-int8-inference
https://github.com/BUG1989/caffe-int8-convert-tools

一般都是先prune再量化。

二、下载

其实这篇早就写完了一直没发,手动狗头。
先用git下载代码

 git clone https://github.com/BUG1989/caffe-int8-convert-tools.git

三、利用工具进行量化

1.相关资料(特别详细,看了肯定能懂,真心点赞)

https://note.youdao.com/share/?id=829ba6cabfde990e2832b048a4f492b3&type=note#/
这里自己概括一下,方便自己以后看
在这里插入图片描述
大概总结一下就是上面这个图大概是说上面的float32映射到下面的int中的-127->127
都知道是映射,但是这边有个操作就是左面这些红色的叉点都映射到边界而不直接删掉,选择T值使整个映射的损失和效果最好是最后的优化问题,整个优化转换为一定的数学问题,求出最优解即可为所要的映射的T值。具体请看前人写的博客,真的好,佩服。

2.利用caffe-int8-convert-tools进行量化
①产生.table文件

首先在该文件下创一个test文件夹,如下图所示
在这里插入图片描述
文件夹下创建一个images,models
在这里插入图片描述

models里为利用caffetools产生的两个新版caffemodel和prototxt
在这里插入图片描述

python caffe-int8-convert-tool-dev.py -h
usage: caffe-int8-convert-tool-dev.py [-h] [--proto PROTO] [--model MODEL]
                                  [--mean MEAN MEAN MEAN] [--norm NORM]
                                  [--images IMAGES] [--output OUTPUT]
                                  [--group GROUP] [--gpu GPU]

find the pretrained caffemodel int8 quantize scale value

optional arguments:
  -h, --help            show this help message and exit
  --proto PROTO         path to deploy prototxt.
  --model MODEL         path to pretrained caffemodel
  --mean MEAN           value of mean
  --norm NORM           value of normalize(scale value)
  --images IMAGES       path to calibration images
  --output OUTPUT       path to output calibration table file
  --group GROUP         enable the group scale(0:disable,1:enable,default:0)
  --gpu GPU             use gpu to forward(0:disable,1:enable,default:0)
python caffe-int8-convert-tool-dev.py --proto=test/models/mobilenet_v1.prototxt --model=test/models/mobilenet_v1.caffemodel --mean 103.94 116.78 123.68 --norm=0.017 --images=test/images/ output=mobilenet_v1.table --gpu=1

执行
在这里插入图片描述过程图
在这里插入图片描述结果如图
在这里插入图片描述

②利用table文件对ncnnmodel的.bin和网络文件.param进行量化处理

在这里插入图片描述
产生两个int文件
在这里插入图片描述
看.bin文件的大小变化
在这里插入图片描述
减小成原来的四分之一
在这里插入图片描述

四、效果

客观评价对于MobileNetssd在android手机的速度来说,提升不算很明显,但是有一定提升,精度下降有点多,所以就去请教大神一波。

五、另一种量化

将conv1不量化,即在.table文件中直接把那行删掉
在这里插入图片描述
之后进行混合模式量化,256->0
在这里插入图片描述
这回产生的.bin基本大小无变化,还是22M
但是移植到android 上有明显速度加成。

我当时的情况差不多 300ms->220ms左右吧,所以想到实时还是需要剪枝请看我下一篇文章
《深度学习笔记》深度学习中模型model的剪枝笔记

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值