You're reading the documentation for a development version.
For the latest stable release version, please have a look at master.

评估示例

概述

本项目展示yolov5s和yolov8s通过netrans量化后的性能评估实现方案:

  • 在 yolo 的代码框架内实现批量推理和评估性能

  • 通过 client 接口与板卡建立通信,将yolo源码中的模型推理替换为板卡的推理

  • 快速测试量化后的精度损失,确保结果可重复性

  • 详情参考 (https://gitlink.org.cn/nudt_dsp/evaluation.git)

评估指标

  • mAP50为IoU阈值为0.5时的平均检测精度,综合衡量P和R,值越高模型整体性能越好

  • 基准参考:PC 端运行 yolov5s 的 mAP50 为 0.71(COCO128 数据集,128 张图片)

  • 基准参考:PC 端运行 yolov8s 的 mAP50 为 0.773(COCO128 数据集,128 张图片)

项目结构


├── src/                                # 测试验证代码
│   ├── val_pnna.py                     # yolov5s相关板卡的推理代码
│   ├── validator.py                    # yolov8s相关板卡的推理代码
│   ├── client.py                       # jsonrpc_server相关代码
├── docs/ 
│   ├── yolov5s_evaluation.md           # yolov5s性能批量评估示例
│   ├── yolov8s_evaluation.md           # yolov8s性能批量评估示例
├── resource/                           # 测试验证代码
│   ├── yolov5s                         # yolov5s权重文件和量化后文件
│   ├── yolov8s                         # yolov8s权重文件和量化后文件
├── README.md                           # 项目说明文档

环境要求及配置

硬件要求

  • NPU 板卡 :FT78E_DSKC_202311V0 板卡

  • 连接与通信准备(自备):网线

  • 板卡上已开启 jsonrpc_server 服务

yolov5s评估示例

python环境搭建

  • 下载 yolov5 到 ~/wsp,安装yolov5所需的包

    1cd ~/wsp
    2git clone https://github.com/ultralytics/yolov5.git
    3cd ~/wsp/yolov5
    4mamba activate netrans
    5pip install -r requirements.txt
    
  • 下载 evaluation 到 ~/wsp/yolov5,安装依赖包

    1git clone https://gitlink.org.cn/nudt_dsp/evaluation.git
    2pip install websockets jsonrpcclient
    
  • 将val_pnna.py移动到~/wsp/yolov5目录下

    1mv ~/wsp/yolov5/evaluation/src/val_pnna.py ~/wsp/yolov5/
    

yolov5s评估验证

  • 执行val_pnna.py,脚本会自动下载coco128数据集并解压到'~/wsp'目录下

  • 执行完成后结果保存在~/wsp/yolov5/val目录下

    1cd ~/wsp/yolov5 
    2python val_pnna.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_pnna.py将val.py代码的推理部分替换为下位机推理,将下位机推理结果接入yolov5的后处理,实现模型精度的快速评估,如下为下位机推理流程

  • yolov5s的推理源码

    1# Inference
    2with dt[1]:
    3    preds, train_out = model(im) if compute_loss else (model(im, augment=augment), None)
    
  • 源码替换为板卡推理的代码如下

     1 # 初始化client
     2 method_model = "detection"
     3 pnna_device = Client("ws://192.168.23.100:8000/websocket")
     4 
     5 # 添加新模型到板卡
     6 ret_add = pnna_device.add_model('./evaluation/resource/yolov5s/wksp/dynamic_fixed_point-16/network_binary.nb', method_model)
     7
     8 # pnna 推理
     9 yolov5s_image_rgb = im.numpy().transpose(0, 2, 3, 1).astype(np.uint8)
    10 infer_data, infer_time = pnna_device.infer(method_model, yolov5s_image_rgb)
    11
    12 # 结果转化为tensor
    13 preds = torch.frombuffer(infer_data[0], dtype=torch.float32).reshape(1, 25200, 85)
    14
    15 pnna_device.close()
    

yolov8s评估示例

环境搭建

  • 下载 yolov8 到 ~/wsp,安装yolov8所需的包

    1cd ~/wsp
    2mamba activate netrans
    3git clone https://github.com/ultralytics/ultralytics.git
    4pip install ultralytics
    
  • 下载 evaluation 到 ~/wsp/ultralytics,安装依赖包

    1cd ~/wsp/ultralytics/ultralytics
    2git clone https://gitlink.org.cn/nudt_dsp/evaluation.git
    3pip install websockets jsonrpcclient
    
  • 将validator.py移动到~/wsp/ultralytics/ultralytics/engine目录下

    1mv ~/wsp/ultralytics/ultralytics/evaluation/src/validator.py ~/wsp/ultralytics/ultralytics/engine/
    

yolov8s评估验证

  • 执行 pip install . ,将修改后的源码安装到Ultralytics包中

    1pip install .
    
  • 执行如下,脚本会自动下载coco128数据集并解压到'~/wsp'目录下

    1cd ~/wsp/ultralytics 
    2yolo val detect data=ultralytics/cfg/datasets/coco128.yaml model=ultralytics/evaluation/resource/yolov8s/yolov8s.onnx
    
  • 执行完成后结果保存在~/wsp/ultralytics/runs/detect目录下

  • 评估结果如下

    1   Class     Images  Instances      P          R      mAP50    mAP50-95
    2   all        128        929      0.718       0.51    0.651     0.477
    
    • P为精确率,R为召回率

    • mAP50为IoU阈值为0.5时的平均检测精度,综合衡量P和R,值越高模型整体性能越好

    • mAP50-95为模型在不同严格程度(IoU阈值越高,要求定位越精准)下的综合性能

精度评估流程

validator.py将源码中validator.py代码的推理部分替换为下位机推理,将下位机推理结果接入yolov8的后处理,实现模型精度的快速评估,如下为下位机推理流程

  • yolov8s的推理源码

    1# inference
    2with dt[1]:
    3    preds = model(batch["img"])
    4
    
  • 源码替换为板卡推理的代码如下

     1 # 初始化client
     2 method_model = "yolov8s_detection"
     3 pnna_device = Client("ws://192.168.23.100:8000/websocket")
     4 
     5 # 添加新模型到板卡
     6 ret_add = pnna_device.add_model('ultralytics/evaluation/yolov8s/wksp/dynamic_fixed_point-16/network_binary.nb', method_model)
     7
     8 # pnna 推理
     9 yolov8s_image_rgb = batch["img"].numpy().transpose(0, 2, 3, 1).astype(np.uint8)
    10 infer_data, infer_time = pnna_device.infer(method_model, yolov8s_image_rgb)
    11
    12 # 结果转化为tensor
    13 preds = torch.frombuffer(infer_data[0], dtype=torch.float32).reshape(1, 84, 8400)
    14
    15 pnna_device.close()