PaddlePaddle / FastDeploy

⚡️An Easy-to-use and Fast Deep Learning Model Deployment Toolkit for ☁️Cloud 📱Mobile and 📹Edge. Including Image, Video, Text and Audio 20+ main stream scenarios and 150+ SOTA models with end-to-end optimization, multi-platform and multi-framework support.
https://www.paddlepaddle.org.cn/fastdeploy
Apache License 2.0
2.89k stars 451 forks source link

RK3568部署自训练YOLO模型中遇到的segmentation fault问题(rkyolo部署)! #1315

Closed MrMzl closed 1 year ago

MrMzl commented 1 year ago

环境

问题日志及出现问题的操作流程

jiangjiajun commented 1 year ago

可按如下流程排查

Zheng-Bicheng commented 1 year ago

部署RKNN官方的模型能够正确部署,说明FastDeploy代码没有问题。我猜过去大概率是你ONNX模型导出到RKNN模型这一步出错了。我看了一下你的C++日志,按照正常的转换代码,模型应该是三个输出,你这里只有1个。

image
Zheng-Bicheng commented 1 year ago

能够成功解决问题吗?

MrMzl commented 1 year ago

部署RKNN官方的模型能够正确部署,说明FastDeploy代码没有问题。我猜过去大概率是你ONNX模型导出到RKNN模型这一步出错了。我看了一下你的C++日志,按照正常的转换代码,模型应该是三个输出,你这里只有1个。

image

郑工您好,我这边对比了一下(Netron)我自己转的rknn格式YOLOv5模型和RK官方提供的rknn格式YOLOv5模型,确实存在您提到的输出结果问题,我这边显示的的确只有一个输出结果,应该就是格式转换过程中出现的问题,但我这边按照模型转换文档里面的操作(https://github.com/airockchip/rknn_model_zoo/tree/main/models/CV/object_detection/yolo/RKNN_model_convert) 将我导出的onnx格式模型转换为rknn格式模型的过程中并没有提示错误,下面是我转换过程中的配置文件yolo_ppyolo.yml中的内容 image

模型转换运行日志.附上链接: https://pan.baidu.com/s/1EyqLLNu0w3wWkQ7TEI1ohQ 提取码: csu6

Zheng-Bicheng commented 1 year ago

你是用官方修改过的yolov5仓库进行训练吗?如果没有的话,可能输出节点会对不上哦

MrMzl commented 1 year ago

你是用官方修改过的yolov5仓库进行训练吗?如果没有的话,可能输出节点会对不上哦

我用的是YOLO官方github提供的代码和自己的数据训练的模型https://github.com/ultralytics/yolov5/tree/v7.0 您说的官方修改的yolov5模型是rk官方修改的模型嘛https://github.com/airockchip/yolov5/tree/v4.0

Zheng-Bicheng commented 1 year ago

你是用官方修改过的yolov5仓库进行训练吗?如果没有的话,可能输出节点会对不上哦

我用的是YOLO官方github提供的代码和自己的数据训练的模型https://github.com/ultralytics/yolov5/tree/v7.0 您说的官方修改的yolov5模型是rk官方修改的模型嘛https://github.com/airockchip/yolov5/tree/v4.0

对,他们对模型是进行了优化的,所以对应的导出节点也不一致。如果你要用YOLO官方的模型,需要对比一下两个模型,看看RK官方的导出节点对应的是你模型的哪个节点。替换一下节点名称应该就可以运行了。

MrMzl commented 1 year ago

你是用官方修改过的yolov5仓库进行训练吗?如果没有的话,可能输出节点会对不上哦

我用的是YOLO官方github提供的代码和自己的数据训练的模型https://github.com/ultralytics/yolov5/tree/v7.0 您说的官方修改的yolov5模型是rk官方修改的模型嘛https://github.com/airockchip/yolov5/tree/v4.0

对,他们对模型是进行了优化的,所以对应的导出节点也不一致。如果你要用YOLO官方的模型,需要对比一下两个模型,看看RK官方的导出节点对应的是你模型的哪个节点。替换一下节点名称应该就可以运行了。

好的,谢谢郑工,那我这边目前的解决方案就是两种,一种是用rk官方的YOLOv5代码进行模型训练,导出,转换;另一种就是对比rk官方提供的yolov5s_tk2.pt和我自己训练的pt格式模型进行对比,按您说的替换节点名称后再转换。

MrMzl commented 1 year ago

@Zheng-Bicheng 郑工您好,我这边用rk官方的YOLOv5重新训练了模型,然后转换成了rknn格式,通过netron查看,转换后的模型是三个输出,但是在板端推理的时候仍然会出现segmentation fault的错误,我调试推理代码,发现模型读取、数据读取都正常,就是在执行推理model.predict(im)的时候会报错,这个可能是什么原因呢? Run_log: firefly@firefly:~/FastDeploy-release-1.0.3/examples/vision/detection/rkyolo/python$ bash run_me_yolov5s_sar.sh [INFO] fastdeploy/backends/rknpu/rknpu2/rknpu2_backend.cc(56)::GetSDKAndDeviceVersion rknn_api/rknnrt version: 1.4.0 (a10f100eb@2022-09-09T09:07:14), driver version: 0.7.2 E RKNN: [09:32:33.253] rknn_set_core_mask: No implementation found for current platform! index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922, pass_through=0 index=0, name=output, n_dims=4, dims=[1, 18, 80, 80], n_elems=115200, size=115200, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922, pass_through=0 index=1, name=272, n_dims=4, dims=[1, 18, 40, 40], n_elems=28800, size=28800, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922, pass_through=0 index=2, name=274, n_dims=4, dims=[1, 18, 20, 20], n_elems=7200, size=7200, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922, pass_through=0 [INFO] fastdeploy/runtime.cc(624)::Init Runtime initialized with Backend::RKNPU2 in Device::RKNPU. Run to model input step! Run to image read step! [WARNING] fastdeploy/backends/rknpu/rknpu2/rknpu2_backend.cc(312)::Infer The input tensor type != model's inputs type.The input_type need INT8,but inputs[0].type is UINT8 run_me_yolov5s_sar.sh: line 1: 1628 Segmentation fault python3 infer.py --model_file ./model_sar/yolov5s_rk_sar_RK356X_i8.rknn --image Gao_ship_hh_02017010717010304.jpg

Zheng-Bicheng commented 1 year ago

解决了吗?没解决的话模型和图片上传一下。涉及商业内容的话,可以发送模型和图片至zheng_bicheng@outlook.com

Zheng-Bicheng commented 1 year ago
image

按如下步骤解决:

Zheng-Bicheng commented 1 year ago

@MrMzl 您好,我您自己训练的模型label和官方不一致,因此导致了推理过程中产生了段错误。解决办法为调用SetClassNum接口,再进行Predict

auto option = fastdeploy::RuntimeOption();
  option.UseRKNPU2();

  auto format = fastdeploy::ModelFormat::RKNN;

  auto model = fastdeploy::vision::detection::RKYOLOV5(
      model_file, option,format);

  model.GetPostprocessor().SetClassNum(3);
Zheng-Bicheng commented 1 year ago

@MrMzl 没问题的话,issues回复下哈.

MrMzl commented 1 year ago

@MrMzl 没问题的话,issues回复下哈.

郑工,您好,我这边按照您的建议加了调用代码model.GetPostprocessor().SetClassNum(3); ,但是在重新编译(make -j8)的时候会提示没有成员变量‘SetClassNum’ 代码: image build log: firefly@firefly:~/FastDeploy-release-1.0.3/examples/vision/detection/rkyolo/cpp/build$ make -j8 Scanning dependencies of target infer_rkyolo [ 50%] Building CXX object CMakeFiles/infer_rkyolo.dir/infer_rkyolo.cc.o /home/firefly/mazeliang/FastDeploy-release-1.0.3/examples/vision/detection/rkyolo/cpp/infer_rkyolo.cc: In function ‘void RKNPU2Infer(const string&, const string&)’: /home/firefly/FastDeploy-release-1.0.3/examples/vision/detection/rkyolo/cpp/infer_rkyolo.cc:25:27: error: ‘class fastdeploy::vision::detection::RKYOLOPostprocessor’ has no member named ‘SetClassNum’ model.GetPostprocessor().SetClassNum(3); ^~~ make[2]: [CMakeFiles/infer_rkyolo.dir/build.make:63: CMakeFiles/infer_rkyolo.dir/infer_rkyolo.cc.o] Error 1 make[1]: [CMakeFiles/Makefile2:73: CMakeFiles/infer_rkyolo.dir/all] Error 2 make: *** [Makefile:130: all] Error 2

Zheng-Bicheng commented 1 year ago

你更新到最新版本了吗?我看你之前的log压根不是最新版本啊。

2023年2月17日 10:28,MrMzl @.***> 写道:

@MrMzlhttps://github.com/MrMzl 没问题的话,issues回复下哈.

郑工,您好,我这边按照您的建议加了调用代码model.GetPostprocessor().SetClassNum(3); ,但是在重新编译(make -j8)的时候会提示没有成员变量‘SetClassNum’ 代码: [image]https://user-images.githubusercontent.com/85120075/219533808-c85f8a2b-6f39-46ba-a487-8ca2103b3d49.png build log: @.:~/FastDeploy-release-1.0.3/examples/vision/detection/rkyolo/cpp/build$ make -j8 Scanning dependencies of target infer_rkyolo [ 50%] Building CXX object CMakeFiles/infer_rkyolo.dir/infer_rkyolo.cc.o /home/firefly/mazeliang/FastDeploy-release-1.0.3/examples/vision/detection/rkyolo/cpp/infer_rkyolo.cc: In function ‘void RKNPU2Infer(const string&, const string&)’: /home/firefly/FastDeploy-release-1.0.3/examples/vision/detection/rkyolo/cpp/infer_rkyolo.cc:25:27: error: ‘class fastdeploy::vision::detection::RKYOLOPostprocessor’ has no member named ‘SetClassNum’ model.GetPostprocessor().SetClassNum(3); ^~~ make[2]: [CMakeFiles/infer_rkyolo.dir/build.make:63: CMakeFiles/infer_rkyolo.dir/infer_rkyolo.cc.o] Error 1 make[1]: [CMakeFiles/Makefile2:73: CMakeFiles/infer_rkyolo.dir/all] Error 2 make: [Makefile:130: all] Error 2

— Reply to this email directly, view it on GitHubhttps://github.com/PaddlePaddle/FastDeploy/issues/1315#issuecomment-1434008869, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AN5I5QTBYEZ6DQKFBZRUMWTWX3O5LANCNFSM6AAAAAAU3APKIE. You are receiving this because you were mentioned.Message ID: @.***>

MrMzl commented 1 year ago

@Zheng-Bicheng 好的,我更新到develop重新编译测试一下,我一直用的1.0.3版本,那个log是我自己加了一些打印信息。

Zheng-Bicheng commented 1 year ago

可以用了吗?

MrMzl commented 1 year ago

可以用了吗? 郑工,您好,我这边更新到最新版本,可以正常推理了。非常感谢您的指导!