CNN模型 INT8 量化实现方式(一)

当前CNN模型基本都是 float32,将其转换为 INT8 可以降低模型大小,提升速度,精度降低的也不太多。那么在实际中如何实现这个量化了?在网上找到了三种实践方法, 基于腾讯的NCNN, Tensorflow ,Nvidia 的 TensorRT,这里先介绍其中的一种。

这里主要涉及两个问题:1)就是 int8量化;2)就是 int8 模型的使用

基于Caffe-Int8-Convert-Tools进行caffe模型转int8量化 在 NCNN 框架上运行
https://blog.csdn.net/u014644466/article/details/83278954

首先是基于 Caffe-Int8-Convert-Tools 这个工具进行 int8量化
https://github.com/BUG1989/caffe-int8-convert-tools

int8 模型的使用
How to use Int8 inference
https://github.com/Tencent/ncnn/pull/487
https://github.com/Tencent/ncnn/wiki/quantized-int8-inference#caffe-int8-convert-tools
In the default set, the inference using the Float32 mode,If you want switch the inference to Int8 mode,just need add 2 lines code,more details please see the examples/squeezenet-int8.cpp file.

......
ncnn::Net squeezenet;
squeezenet.set_conv_model(CONV_INT8);               //set the Int8 mode
squeezenet.load_param("squeezenet_v1.1.param");
squeezenet.load_scale("squeezenet_v1.1.table");     //parse the Int8 calibration table,also it's the quantize scale value
squeezenet.load_model("squeezenet_v1.1.bin");

NCNN 框架主要针对 android 优化的,

Q 支持哪些平台

A 跨平台,主要支持 android,次要支持 ios / linux / windows

Q 计算精度如何

A armv7 neon float 不遵照 ieee754 标准,有些采用快速实现(如exp sin等),速度快但确保精度足够高

Q pc 上的速度很慢

A pc都是x86架构的,基本没做什么优化,主要用来核对结果,毕竟up主精力是有限的(

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
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 ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值