NCNN的INT8量化使用方式

Posted papaofdoudou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NCNN的INT8量化使用方式相关的知识,希望对你有一定的参考价值。

本文以NCNN框架为例,实践量化在推理中的巨大作用,加深对神经网络量化的理解。NCNN当前版本只支对称量化,下面以INT8精度为例介绍NCNN的量化使用方式:

编译NCNN

mkdir build && cd build && cmake ../

进入到build/tools/darknet目录,将来源于darknet的模型文件和权重文件拷贝一份到这里:

转换过程如下:

优化:

./ncnnoptimize /home/czl/ncnn/ncnn/build/tools/darknet/ncnn.param /home/czl/ncnn/ncnn/build/tools/darknet/ncnn.bin yolov4-tiny-opt.param yolov4-tiny-opt.bin 0

生成的优化过的模型如下:

检测实战,未优化的模型推理结果:

优化后的模型推理结果:

下载量化校准表图片

下载官方给出的1000张ImageNet图像,很多同学没有梯子,下载慢,可以用下这个链接:

imagenet-sample-images-master.zip_yolov4ncnn-深度学习文档类资源-CSDN下载ncnn量化int所需的校准图像yolov4ncnn更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/weixin_45829462/18704213

图片内容包括:

进入到目录build/tools/quantize,创建images文件夹,之后将imagenet图片全部拷贝到此目录

之后,执行命令 find images/ -type f >imagelist.txt,创建图像文件列表。

之后执行命令:

./ncnn2table yolov4-tiny-opt.param yolov4-tiny-opt.bin imagelist.txt yolov4-tiny.table mean=[104,117,123] norm=[0.017,0.017,0.017] shape=[224,224,3] pixel=BGR thread=8 method=kl

量化模型:

./ncnn2int8 yolov4-tiny-opt.param yolov4-tiny-opt.bin yolov4-tiny-int8.param yolov4-tiny-int8.bin yolov4-tiny.table

生成的yolov4-tiny-int8.bin即为量化后的权重文件,可以看到它的大小是量化前的 四分之一,这就是量化的一个优势,可以减小内存使用量。

验证量化效果:

修改examples/yolov4.cpp代码,使用上新创建的量化模型,同时调整推理参数,使用量化推理:

验证检测效果,主观上能够感受到检测精度方面还是有所损失的,不知道是否和我的操作有关。

总结:

NCNN目前没有实现非对称量化,只实现了对陈量化一种形式,此信息经过NCNN原作者NIHUI大佬确认如此。


结束!

以上是关于NCNN的INT8量化使用方式的主要内容,如果未能解决你的问题,请参考以下文章

模型推理ncnn 模型转换及量化流程

TensorRT--INT8量化

YOLOV5 INT8 量化对比

利用TensorRT实现INT8量化感知训练QAT

int8量化和tvm实现

sh TVM INT8量化