正确率评估示例
概述
模型量化可能会导致精度损失。本示例演示了在 YOLOv5 的代码框架下,通过 Python 接口批量进行推理并评估模型的准确性。具体实现过程中,通过evaluate的接口与下位机建立连接,val_evalution.py将 val.py 中的模型推理部分替换为下位机推理,快速测试量化后的精度损失
环境搭建
下载 yolov5 到 ~/wsp,安装yolov5所需的包
1cd ~/wsp 2git clone https://github.com/ultralytics/yolov5.git 3cd ~/wsp/yolov5 4pip install -r requirements.txt
下载 evaluate 到 ~/wsp/yolov5,安装evaluate所需的包
1git clone https://gitlink.org.cn/nudt_dsp/evaluate.git 2cd ~/wsp/yolov5/evaluate 3pip install -r requirements.txt
将val_evaluate.py移动到~/wsp/yolov5目录下
1mv ~/wsp/yolov5/evaluate/val_evaluate.py ~/wsp/yolov5/
yolov5s评估验证
执行val_evaluate.py,脚本会自动下载coco128数据集并解压到'~/wsp'目录下
执行完成后结果保存在~/wsp/yolov5/val目录下
1cd ~/wsp/yolov5 2python val_evaluate.py
评估结果如下
1 Class Images Instances P R mAP50 mAP50-95: 2 all 128 929 0.678 0.651 0.709 0.474
P为精确率,R为召回率
mAP50为IoU阈值为0.5时的平均检测精度,综合衡量P和R,值越高模型整体性能越好
mAP50-95为模型在不同严格程度(IoU阈值越高,要求定位越精准)下的综合性能
精度评估流程
val_evaluate.py将val.py代码的Inference部分替换为下位机推理,将下位机推理结果接入yolov5的后处理,实现模型精度的快速评估,如下为下位机推理流程
模型上传与配置
1msg_config = ModelConfig( 2 model_path='./device/yolov5s', # 模型路径 3 dtype=Dtype.I16, # 模型数据类型 4) 5web_service = WebDevice(msg_config)
数据量化
将yolov5预处理好的数据量化1quantize_params, dequantize_params = web_service.config()# 配置成功返回量化和反量化参数 2quantize = quantize_gen(quantize_params[0]) 3dequantize = dequantize_gen(dequantize_params[0]) 4q_data = [quantize(im.numpy())] #float类型的数据不需要量化和反量化
推理 返回推理结果
1 rsp = web_service.infer(q_data)
反量化 推理结果为二进制数据,需要调用np.frombuffer转化为np数据,再反量化
1de_result = dequantize(np.frombuffer(rsp['output_0.dat'], dtype=np.int16).flatten())
模型结果评估 将反量化数据尺寸变换后接入yolov5框架的后处理得到评估结果
作者 @ogl ougaoliang@hngwg.com