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图像,很多同学没有梯子,下载慢,可以用下这个链接:
图片内容包括:
进入到目录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量化使用方式的主要内容,如果未能解决你的问题,请参考以下文章