专栏算法工具链yolov5, ptq得到的模型,hbruntime推理.bc模型,指标为0

yolov5, ptq得到的模型,hbruntime推理.bc模型,指标为0

已解决
無為2024-12-18
128
13
  1. J6M, OE3.0.22

  2. yolov5   v5.0, 激活函数全部是sigmoid

  3. 公司数据集训练检测模型

  4. ptq之后,cos相似度大都是0.98以上。将nv12 to rgb, nhwc to nchw, nomarlize 三个操作插入到模型里面。

  5. 推理阶段,opencv读取图像,做letter_box, 转rgb。这三个操作和onnx推理一致。然后使用OE包里面的 rgb2nv12_opencv 和 nv12_split_yuv, 将rgb转换成nv12,用bc模型推理,使用HBruntime库。计算的指标为0

  6. 配置文件和模型百度网盘, 链接: https://pan.baidu.com/s/1oUSobn9DwmQlVpg4owq-zQ 提取码: 2aty --来自百度网盘超级会员v2的分享

算法工具链
征程6
评论6
0/1000
  • Huanghui
    Lv.5

    收到!

    2024-12-18
    0
    0
  • 無為
    Lv.1
    float_model.onnxoptimized_model.onnx 不掉点
    calibrated_model.onnx ptq_model.onnx 掉点严重
    校准数据集来自公司数据集的随机采样,250帧。
    校准算法选择的是default, 校准是一遍通过,cos相似度基本在0.98以上。
    2024-12-19
    0
    0
  • 無為
    Lv.1

    激活函数选择的是silu, export onnx 编译成 sigmoid 和 mul, hb_compile 编译成HzSwish

    2024-12-19
    0
    0
  • 無為
    Lv.1
    将silu换成relu,重新训练模型,导出的结果和下面一致
    float_model.onnxoptimized_model.onnx 不掉点
    calibrated_model.onnxptq_model.onnx 掉点严重
    2024-12-19
    0
    0
  • 無為
    Lv.1
    校准数据集作为测试集,结果和下面一致
    float_model.onnxoptimized_model.onnx 不掉点
    calibrated_model.onnxptq_model.onnx 掉点严重
    2024-12-19
    0
    0
  • Huanghui
    Lv.5

    你好,有几个问题哈:

    1.ptq之后, 将nv12 to rgb, nhwc to nchw, nomarlize 三个操作插入到模型里面 。这个是你手动做的?应该是模型自动做的才做呀,你只需要保证yaml中的配置是正确的就OK了。

    2.推理阶段,opencv读取图像,做letter_box, 转rgb .letter_box是啥,图像缩放?推理onxx的话前处理在转rgb之后应该还有一步是归一化吧?!不然推理的结果应该有问题。

    3.“ OE包里面的 rgb2nv12_opencv 和 nv12_split_yuv, 将rgb转换成nv12”OE包里面的哪个文件?

    4. 推理BC模型,你指的是*_quantized_model.bc对吧?

    5.“ 计算的指标为0”这个咋理解,指标是怎么计算出来的?

    6. 你上传的文件中没有发现校准数据,需要补充一下。

    7. 如果只是在服务器上进行的模型转化和验证,以上信息就OK了,如果有部署的代码,你还需要CHECK一下部署的前处理逻辑。

    2024-12-19
    0
    7
    • 無為回复Huanghui:
      1.yaml配置之后,自动插入的三个操作
      2.letter_box 就是padding。onnx推理有归一化的,*_quantized_model.bc里面包含了归一化所以输入数据没有做归一化。origin_float_model.onnx 的前处理 resize pad bgr2rgb nhwc2nchw img/255。 *_quantized_model.bc的前处理: resize, pad, bgr2rgb, rgb2nv12.
      3. horizon_j6_open_explorer_v3.0.22-py310_20240924/package/host/ai_toolchain/horizon_tc_ui-3.3.4-cp310-cp310-linux_x86_64/horizon_tc_ui/data、transformers.py
      4.是的
      5.在相同的测试集上,相同的指标计算方式,使用origin_float_model.onnx 计算出一个指标,使用 calibrated_model.onnx 和 ptq_model.onnx 计算的指标接近0(预测结果是错误的)。使用 *_quantized_model.bc计算的指标也是接近0.
      6. 好的
      7. 目前这个模型还处于转换和验证,还没有在板端跑模型。之前已经有另一个模型部署板端成功。
      资料更新百度网盘: 链接: https://pan.baidu.com/s/1QlxJDJGzQY9OZZrO80SnVA 提取码: wj6j --来自百度网盘超级会员v2的分享

      额外补充: 今天将silu转换成leakyrelu,训了一版模型, 导出的模型也是指标接近0
      2024-12-19
      0
    • 無為回复Huanghui:
      跑 origin_float_model.onnxoptimized_model.onnxcalibrated_model.onnx ptq_model.onnx 指标, 使用的校准数据集,直接读取npy, 推理结果送到相同的函数计算指标。
      结果如下:float_model.onnxoptimized_model.onnx 计算的mAP不掉点,calibrated_model.onnxptq_model.onnx 计算的mAP几乎为0
      2024-12-20
      0
    • 無為回复Huanghui:

      你好,请问你们有结果吗?

      2024-12-24
      0
    • Huanghui回复無為:
      还在排查中,有结果会及时同步的哈,感谢理解!zhongguozan_org.svg
      2024-12-24
      0
    • 無為回复Huanghui:
      我对比了一下你们提供的horizon_j6_open_explorer_v3.0.22-py310_20240924/samples/ai_toolchain/model_zoo/mapper/detection/yolov5_onnx_optimized里面的yolov5模型。有三个区别:1. 开头的split,2. 模型主体的激活函数全部是leakyrelu 3. 模型输出不包括decoder部分(不包含sigmoid)。

      如果将我们的模型,激活函数改成leakyrelu,sigmoid放在后处理里面,是不是这样才可行?
      2024-12-24
      0
    • Huanghui回复無為:

      1. 作为尝试,激活函数改成leakyrelu,但是不建议。你可以看一下你的模型在relu的前置算子是否为 conv bn add 这些,使用relu或relu6工具链在优化时可以将“ conv bn relu ”这样的组合融合到一个module中,使算子间的数据传递保留高精度的状态,提高模型整体的数值精度 。

      2.sigmoid可以放到后处理中,实际上通常我们建议用户将 sigmoid 从模型移除,通过C++在后处理中实现。内部处理 sigmoid 时通过查表实现对精度是有一定影响的。

      2024-12-24
      0
    • 無為回复Huanghui:
      1.1激活函数改成leakyrelu是参考oe包里面的yolov5x,这个模型我验证是不掉点的。1.2激活函数前面只有一个conv, horizon_plugin_pytorch.utils.onnx_helper.export_to_onnx已经将conv bn 进行融合。
      2. 所以yolov5框的decoder(含sigmoid)部分实际上是需要移动到后处理,不然会产生掉点问题?
      2024-12-26
      0