ncnn int8量化

NCNN 下FP16、FP32速度耗时一般情况下:GPU使用FP16模型<CPU使用FP32模型<GPU使用FP32模型
ncnn int8量化后的改进, 参考链接: https://baijiahao.baidu.com/s?id=1699724039745016586&wfr=spider&for=pc


量化步骤参考 nihui 大佬教程: https://github.com/Tencent/ncnn/wiki/quantized-int8-inference

20220216-ncnn版本:
(1) 合并bn层  ncnn/build/tools 目录下

./ncnnoptimize xxx.param xxx.bin xxx_opt.param xxx_opt.bin 0 (0:f32, 1/65536: fp16)


(2) 生成量化图像集

find images/ -type f > imagelist.txt   

注: images 为量化图像集, 生成的 imagelist.txt 为图像路径


(3) 生成量化表  ncnn/build/tools/quantize 目录下

./ncnn2table 1208_mbfacenet_ir_nobn.param 1208_mbfacenet_ir_nobn.bin imagelist.txt mbfacenet.table mean=[127.5, 127.5, 127.5] norm=[0.007843, 0.007843, 0.007843] shape=[112,112,3] pixel=BGR thread=4 method=kl/aciq

注: mean/norm 是使用ncnn推理时的参数((x-mean)*norm), shape 为网络的输入图像尺寸, method 为量化方式


(4) int8 量化

./ncnn2int8 1208_mbfacenet_ir_nobn.param 1208_mbfacenet_ir_nobn.bin 1208_mbfacenet_ir_int8.param 1208_mbfacenet_ir_int8.bin mbfacenet.table

注意事项:
1. 量化时, 方式有两种,kl和aciq,可以都尝试一下 (可能会导致推理结果不正确)
2. 生成量化表时,需确保.table非0非nan非inf,否则推理结果不正确
3. 量化时的图片应选择与测试集相似度较高的
4. int8量化后可能在pc端推理速度反而比float32慢,由于int8 主要是针对arm进行优化的,建议在目标平台测试速度

我最终三个模型均量化成功并推理成功啦! 过程中遇到了很多问题, 推理结果不正确, 量化表数值为0, 为NAN, 为inf 等, 大家不要放弃, 仔细检查自己的步骤是否有问题.

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NCNN int8量化是指在NCNN框架中将CNN模型从float32转换为INT8的过程。这种量化方法可以减小模型的大小、提升运行速度,而对精度的降低相对较小。在实际中,有多种方法可以实现NCNN int8量化,其中包括基于腾讯的NCNN框架、Tensorflow和Nvidia的TensorRT。其中,本回答将介绍一种基于NCNN框架的实践方法。 在这个方法中,首先需要使用Caffe-Int8-Convert-Tools工具将Caffe模型转换为int8格式,然后在NCNN框架上运行。具体过程可以参考中提供的链接。接下来,我将以自顶向下的方式叙述NCNN int8量化的kernel实现原理及过程。 首先,需要了解NCNN框架中的INT8版本和优化后INT8版本。INT8版本是NCNN的开源版本,而优化后的INT8版本是经过优化处理后的版本。在这两个版本中,都包含了INT8的kernel实现。 在INT8的kernel实现中,主要包括对权重和特征图的量化和反量化操作。量化操作将浮点数转换为INT8格式,而反量化操作则将INT8格式转换回浮点数格式。这样可以实现模型参数的压缩和运算速度的提升。 除了量化和反量化操作,还需要对卷积操作进行优化。通过对卷积操作进行INT8计算,可以降低计算复杂度,提高计算速度。优化的卷积操作还可以使用SIMD指令集来进行向量化计算,进一步提升计算效率。 总结来说,NCNN int8量化是将CNN模型从float32转换为INT8的过程,可以通过Caffe-Int8-Convert-Tools工具进行转换,并在NCNN框架中运行。量化和反量化操作以及优化的INT8卷积操作是实现这一过程的关键。你可以参考中的内容了解更多细节。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [CNN模型 INT8 量化实现方式(一)](https://blog.csdn.net/zhangjunhit/article/details/84562334)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [NCNN INT8实现](https://blog.csdn.net/weixin_41521681/article/details/115156819)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值