你好!
我成功部署了官方提供的https://github.com/airockchip/rknn_model_zoo/tree/main/examples/yolov5的例子,在板子中成功推理并输出了output.jpg。
但是可以提供更多onnx量化的准备的例子吗?
我发现在部署自己的onnx模型,然后成功转换成了rknn格式。但是在使用模拟器推理的时候,模型所有都是输出同样的数值。比如说对于分类任务而言,都是预测第一个类别(所有的输出一模一样)。
此外,我也尝试了量化感知训练(QAT),并成功导出onnx。但是这样的模型的结果都是一样的。
我如何才能够准备一个https://github.com/airockchip/rknn_model_zoo/tree/main/examples/yolov5中的这样的onnx模型?
还请不吝赐教!
模型部署前的量化工作
您好,您可以参考以下https://wiki.luckfox.com/zh/Luckfox-Pic ... 1%E5%9E%8B 教程,里面有涉及如何将pytorch训练生成的pytorch模型装换为onnx模型,使用的是瑞芯微fork官方yolov5添加rknpu相关内容的仓库。ezreal wrote: ↑2024-03-16 12:14 你好!
我成功部署了官方提供的https://github.com/airockchip/rknn_model_zoo/tree/main/examples/yolov5的例子,在板子中成功推理并输出了output.jpg。
但是可以提供更多onnx量化的准备的例子吗?
我发现在部署自己的onnx模型,然后成功转换成了rknn格式。但是在使用模拟器推理的时候,模型所有都是输出同样的数值。比如说对于分类任务而言,都是预测第一个类别(所有的输出一模一样)。
此外,我也尝试了量化感知训练(QAT),并成功导出onnx。但是这样的模型的结果都是一样的。
我如何才能够准备一个https://github.com/airockchip/rknn_model_zoo/tree/main/examples/yolov5中的这样的onnx模型?
还请不吝赐教!
在 https://github.com/airockchip/yolov5/bl ... E_rkopt.md 中提及导出onnx模型时做出的调整,删除了post_process模型后处理部分和替换激活层,这些可能是影响RKNN模型成功转换的关键。
感谢您的回复!我在认真检查了目前导出的onnx模型,并基于测试集的数据,比较了基于.pt的模型权重和.onnx的模型权重,计算了他们分别的测试准确率。发现结果是一样的。Crocodile wrote: ↑2024-03-18 1:12您好,您可以参考以下https://wiki.luckfox.com/zh/Luckfox-Pic ... 1%E5%9E%8B 教程,里面有涉及如何将pytorch训练生成的pytorch模型装换为onnx模型,使用的是瑞芯微fork官方yolov5添加rknpu相关内容的仓库。ezreal wrote: ↑2024-03-16 12:14 你好!
我成功部署了官方提供的https://github.com/airockchip/rknn_model_zoo/tree/main/examples/yolov5的例子,在板子中成功推理并输出了output.jpg。
但是可以提供更多onnx量化的准备的例子吗?
我发现在部署自己的onnx模型,然后成功转换成了rknn格式。但是在使用模拟器推理的时候,模型所有都是输出同样的数值。比如说对于分类任务而言,都是预测第一个类别(所有的输出一模一样)。
此外,我也尝试了量化感知训练(QAT),并成功导出onnx。但是这样的模型的结果都是一样的。
我如何才能够准备一个https://github.com/airockchip/rknn_model_zoo/tree/main/examples/yolov5中的这样的onnx模型?
还请不吝赐教!
在 https://github.com/airockchip/yolov5/bl ... E_rkopt.md 中提及导出onnx模型时做出的调整,删除了post_process模型后处理部分和替换激活层,这些可能是影响RKNN模型成功转换的关键。
所以,在转onnx这一步应该是没有问题的。此外,我在训练前也检查了模型,里面的算子是:Conv1d、BN、ReLU、Linear等,这些算子应该是支持的,我在转换RKNN模型的时候也没有报Error。The test acc of PTH is 93.522%
The test acc of ONNX is 93.522%
我觉得问题会不会出现在模型的输入上?我的模型是使用npy数据进行训练的,而不是图片。如果是输入的问题,那么,我应该对输入做什么处理?是归一化到[0, 1]还是处理成int8整型?比如[-127, 127]或者[0, 255]?
ezreal wrote: ↑2024-03-18 2:23感谢您的回复!我在认真检查了目前导出的onnx模型,并基于测试集的数据,比较了基于.pt的模型权重和.onnx的模型权重,计算了他们分别的测试准确率。发现结果是一样的。Crocodile wrote: ↑2024-03-18 1:12您好,您可以参考以下https://wiki.luckfox.com/zh/Luckfox-Pic ... 1%E5%9E%8B 教程,里面有涉及如何将pytorch训练生成的pytorch模型装换为onnx模型,使用的是瑞芯微fork官方yolov5添加rknpu相关内容的仓库。ezreal wrote: ↑2024-03-16 12:14 你好!
我成功部署了官方提供的https://github.com/airockchip/rknn_model_zoo/tree/main/examples/yolov5的例子,在板子中成功推理并输出了output.jpg。
但是可以提供更多onnx量化的准备的例子吗?
我发现在部署自己的onnx模型,然后成功转换成了rknn格式。但是在使用模拟器推理的时候,模型所有都是输出同样的数值。比如说对于分类任务而言,都是预测第一个类别(所有的输出一模一样)。
此外,我也尝试了量化感知训练(QAT),并成功导出onnx。但是这样的模型的结果都是一样的。
我如何才能够准备一个https://github.com/airockchip/rknn_model_zoo/tree/main/examples/yolov5中的这样的onnx模型?
还请不吝赐教!
在 https://github.com/airockchip/yolov5/bl ... E_rkopt.md 中提及导出onnx模型时做出的调整,删除了post_process模型后处理部分和替换激活层,这些可能是影响RKNN模型成功转换的关键。所以,在转onnx这一步应该是没有问题的。此外,我在训练前也检查了模型,里面的算子是:Conv1d、BN、ReLU、Linear等,这些算子应该是支持的,我在转换RKNN模型的时候也没有报Error。The test acc of PTH is 93.522%
The test acc of ONNX is 93.522%
我觉得问题会不会出现在模型的输入上?我的模型是使用npy数据进行训练的,而不是图片。如果是输入的问题,那么,我应该对输入做什么处理?是归一化到[0, 1]还是处理成int8整型?比如[-127, 127]或者[0, 255]?
在pth模型训练成功后有尝试输入图片进行推理而不是直接用测试集吗?
正常情况下如果在PC端模型训练成功,输入的初始化处理(平均,标准,颜色通道转换)都在ONNX 转 RKNN 中可以设置,您可以检查一下是不是这方面出现的问题。
模型在ONNX转RKNN过程中就会进行归一化处理,我觉得在模型训练的输入上不需要。
比较可靠的方法就是在PC端输入图像,观察输出是否符合预期(排除颜色通道,输入归一化等问题)。如果成功输出就尝试在模拟器上推理,如果发现模拟器上推理异常就尝试对比输出结果(根据您的问题来看主要观察输出类别和置信度的通道,打印输出结果进行比对),以此来判断是哪个阶段出现问题。