Hailo模型转换/量化一般会有少量的精度下降,正常mAP下降在2个点以内,如果下降太多,或者是主观查看精度差别比较大;大部分情况下就是转模型的时候遗漏了一些东西;
主要可能是如下几个方面:
- 归一化是在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 - 对于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 - 模型量化以及做inference的时候,处理图像的格式是RGB还是BGR? 同样也要保持正确以及一致。模型一般默认使用RGB格式,但是c++使用opencv处理时,默认格式是BGR,需要进行转化下cv::cvtColor(tmp, outFrame, cv::COLOR_BGR2RGB);
- 模型转换的时候,是否有将最后输出sigmoid放入到hailo中进行处理

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