Alex Blog

[DFC]yolov5模型转化为hailo量化模型精度下降分析

Hailo模型转换/量化一般会有少量的精度下降,正常mAP下降在2个点以内,如果下降太多,或者是主观查看精度差别比较大;大部分情况下就是转模型的时候遗漏了一些东西;

主要可能是如下几个方面:

  1. 归一化是在hailo做还是前处理做,请注意不要重复做归一化例如:转化脚本中加入了:normalization1 = normalization([0.0, 0.0, 0.0],[255.0, 255.0, 255.0]) 则表明归一化是在hailo中做的,那么在量化的calibration datasets的时候就不要做归一化:
    [python]
    calib_dataset[idx,:,:,:] = preproc(img)
    #calib_dataset[idx,:,:,:] = preproc(img)/255.0
  2. 对于yolo模型,前处理是resize还是letter_box(官方的github使用的是letterbox)? 模型量化的时候则需要与模型一致,同理在c++做inference也需要一致
    [python]
    def preproc(image, output_height=640, output_width=640):
        #resized_image = tf.image.resize(image, (output_height, output_width), method=’bicubic’)
        resized_image, x, y = letterbox_image(image.copy(), (output_height,output_width))
        return resized_image
    [c++]
    #ifdef LETTER_BOX
    tmp = Letterbox(oriFrame, _model_height, ratio, 144);
    #else
    cv::resize( oriFrame, tmp, cv::Size(_model_width, _model_height));
    #endif
  3. 模型量化以及做inference的时候,处理图像的格式是RGB还是BGR? 同样也要保持正确以及一致。模型一般默认使用RGB格式,但是c++使用opencv处理时,默认格式是BGR,需要进行转化下cv::cvtColor(tmp, outFrame, cv::COLOR_BGR2RGB);
  4. 模型转换的时候,是否有将最后输出sigmoid放入到hailo中进行处理

    change_output_activation(sigmoid)
    将sigmoid放入hailo中处理并且一起进行量化的话,可以有效的提高整个量化后的模型精度,特别是当我们只使用optimization level 0进行最基础的量化的时候。

已发布

分类

, ,

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注