5. auto-cali量化

对于常见以图片作为输入的CV类推理网络,推荐使用auto_cali一键量化工具。这个工具是分步量化的整合,操作更加简单,可以减少分步量化过程中手工输入引起的错误等,其功能如下:

  • 一键完成从原始框架(TensorFlow/PyTorch/Caffe/Darknet/MxNet/PaddlePaddle/ONNX)到BM1684芯片bmodel的转换

  • 可根据预设的优化参数组合根据int8模型精度结果自动进行量化策略搜索,找到满足精度要求的最佳量化策略

使用sophonsdk3发布包启动docker环境后,进入模型以及量化数据集存放目录。

以YOLOv5s模型为例,详细的操作步骤可以参考 使用auto-cali一键量化工具量化

5.1. 量化数据集准备

auto-cali可使用lmdb数据集和原始图片作为量化数据集。

5.1.1. 准备lmdb数据集

以lmdb作为量化数据集需要先将原始图片使用ufwio转换为lmdb数据集,具体介绍见 准备lmdb数据集

5.1.2. 准备图片数据集

auto-cali也可使用--cali_image_path参数指定图片数据集,并使用--cali_image_preprocess参数可对数据集进行预处理,在此过程中,auto-cali会自动将处理好的图片保存为lmdb数据集,供后续调用。

5.2. 一键量化参数说明

ufw.cali.cali_model模块可一键完成从原始框架到1684芯片的bmodel的量化转换

$ cd /workspace/examples/calibration/yolov5s_demo/auto_cali_demo
$ python3 -m ufw.cali.cali_model \
    --net_name 'yolov5s' \
    --model ./yolov5s_jit.pt \
    --input_shapes '[1,3,640,640]' \
    --cali_image_path ../../create_lmdb_demo/coco128/images/train2017/  \ #先执行create_lmdb_demo/download_coco128.sh下载图片数据
    --cali_image_preprocess 'resize_h=640,resize_w=640;scale=0.003921569,bgr2rgb=True' \
    --try_cali_accuracy_opt='-fpfwd_outputs=< 24 >14,< 24 >51,< 24 >82'
  • 可选参数说明

    ../_images/ch4-param1-1.png
    ../_images/ch4-param1-2.png
  • 自动量化参数说明

    开启以下参数,可以在一定程度上尝试用不同的量化选项测试量化效果,选优提高量化精度。量化效果目前是以浮点网络的输出和定点网络的输出的余弦距离作为判断依据(因为网络形式多种多样,这个标准并非绝对准确,量化选优还是以实际部署后的真实环境测试结果为准)。 Auto-cali自动量化会自动进行一些尝试,所以会循环进行量化和测试精度的过程,叠加每次进行多次iteration的推理,可能会进行很长时间,用户也可根据经验自行分步量化。

    ../_images/ch4-param1-3.png

5.3. auto_cali一键量化结果

Auto-cali一键量化作为一套合并多个步骤的量化接口,如果用户想在其基础上进一步调优或者一键量化不能满足要求,用户可以在每个步骤中进行定制和尝试,具体参考 分步量化