You're reading an pre-release version of this documentation.
For the latest stable release version, please have a look at master.

正确率评估示例

概述

模型量化可能会导致精度损失。本示例演示了在 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的后处理,实现模型精度的快速评估,如下为下位机推理流程

  1. 模型上传与配置

    1msg_config = ModelConfig(
    2    model_path='./device/yolov5s', # 模型路径
    3    dtype=Dtype.I16, # 模型数据类型
    4)
    5web_service = WebDevice(msg_config)
    
  2. 数据量化
    将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类型的数据不需要量化和反量化
    
  3. 推理 返回推理结果

    1 rsp = web_service.infer(q_data)
    
  4. 反量化 推理结果为二进制数据,需要调用np.frombuffer转化为np数据,再反量化

    1de_result = dequantize(np.frombuffer(rsp['output_0.dat'], dtype=np.int16).flatten())
    
  5. 模型结果评估 将反量化数据尺寸变换后接入yolov5框架的后处理得到评估结果