昇腾 amtc 工具 量化yolov5 的onnx

1 概述

量化根据是否进行重新训练分为两种量化方法
- 训练后量化 PTQ(Post-Traing Quantization)(本项目中应用此方法)
- 量化感知训练  (昇腾暂不支持)   

2 训练后量化

知名见意 所谓训练后量化 指的就是模型训练结束之后进行的量化。具体手段 就是将float32 通过某种手段映射到 低比特的int8 在通过少量的校准数据在前向推理过程中进行校准

3 具体过程

  1. 生成用于校准的数据集(bin文件)
    opencv 读取数据集后调整通道并存储为bin文件
    def preprocess(dir_path, save_path, batch_size, img_size):
    in_files = []
    output_data = []
    if not os.path.exists(save_path):
        os.makedirs(save_path)
    files= os.listdir(dir_path)
    for i, file in enumerate(files):
        file =os.path.join(dir_path,file)
        img0 = cv2.imread(file)
        resized = cv2.resize(img0, (640, 640), interpolation=cv2.INTER_LINEAR)
        input_data = cv2.cvtColor(resized, cv2.COLOR_BGR2RGB)
        input_data = np.transpose(input_data, (2, 0, 1)).astype(np.float32)
        input_data = np.expand_dims(input_data, axis=0)
        input_data /= 255.0
        print("shape:", input_data.shape)
    
        if i % batch_size == 0:
            output_data = input_data
        else:
            output_data = np.concatenate((output_data, input_data), axis=0)
    
        if (i + 1) % batch_size == 0:
            output_data.tofile("{}/img_bs{}_n{}.bin".format(save_path, batch_size,i))
    
    1. 利用amtc 工具进行转量化压缩。
    amct_onnx calibration --model xxxx.onnx  --save_path ./output/yolov5s --input_shape "images:1,3,640,640"  --data_dir  "xxx_bin__data"  --data_types  "float32"
    
    --model xxxx.onnx 要量化的模型
    --data_dir 由第一步生成的 校准数据集bin文件所在的文件夹.
posted @ 2023-02-22 11:46  北流鱼  阅读(773)  评论(4编辑  收藏  举报