RDK S100使用rdk_model_zoo_s/samples/Vision/ultralytics_yolo26/conversion/onnx_export中代码导出模型时报错


试过ultralytics官方的export是正常的,但是使用model zoo里面的export_yolo26_seg_bpu.py时自己训练的模型和官方预训练模型都报相同错误

1 个赞

除了seg以外其他都正常运行

问题分析

从错误信息 index 1 is out of bounds for dimension 0 with size 1 来看,这是在导出 segmentation 模型时,脚本尝试访问一个维度为 1 的张量的第 1 个索引(应该是第 2 个元素),导致越界。

关键线索:

  • :white_check_mark: ultralytics 官方 export 正常
  • :white_check_mark: cls/det/obb/pose 都能正常导出
  • :cross_mark: 只有 seg 模型报错
  • :cross_mark: 自己训练的 + 官方预训练模型都报相同错误

这说明问题出在 export_yolo26_seg_bpu.py 脚本对 segmentation 模型的特殊处理上,而不是模型本身的问题。


排查步骤

1️ 检查脚本版本和代码

# 查看脚本内容,定位出错位置
cd ~/rdk_model_zoo_s/samples/Vision/ultralytics_yolo26/conversion/onnx_export
cat export_yolo26_seg_bpu.py | grep -n "index"

重点检查:

  • BPU Monkey Patch 部分对 segmentation 的处理
  • 输出布局转换(NHWC)相关代码
  • 模型层遍历或索引访问的地方

2️ 添加调试信息

在脚本出错位置附近添加打印,定位具体哪一行导致越界:

# 在 export_yolo26_seg_bpu.py 中添加
import traceback
try:
    # 原有导出代码
except Exception as e:
    print(f"Error: {e}")
    traceback.print_exc()
    # 打印模型结构信息
    print(f"Model layers: {len(model.model)}")
    for i, layer in enumerate(model.model):
        print(f"Layer {i}: {type(layer)}")

:three: 对比官方 export 和 BPU export 的差异

# 官方正常导出
from ultralytics import YOLO
model = YOLO('yolo26n-seg.pt')
model.export(format='onnx')  # 这个能成功

# 对比 BPU export 脚本做了什么特殊处理
# 重点看 apply_bpu_monkey_patch_for_segmentation 函数

4️ 检查环境版本

# 确认版本信息
python -c "import ultralytics; print(ultralytics.__version__)"
python -c "import torch; print(torch.__version__)"

# 你的环境:ultralytics 8.4.36, torch 2.11.0
# 检查 model zoo 脚本要求的版本
cat requirements.txt  # 如果有

临时解决方案

方案 A:使用官方 export + 手动转换

# 1. 先用官方方式导出 ONNX
python -c "from ultralytics import YOLO; YOLO('yolo26n-seg.pt').export(format='onnx')"

# 2. 再使用 model zoo 的其他工具进行 BPU 优化(如果有)
# 或者直接使用导出的 ONNX 模型

方案 B:修改脚本跳过有问题的处理

如果定位到具体是哪段代码导致越界,可以尝试:

  • 注释掉 BPU Monkey Patch 中 segmentation 的特殊处理
  • 修改输出布局从 NHWC 改为 NCHW 试试

建议

  1. 在社区发帖时提供以下信息(你已经做得很好了):

    • :white_check_mark: 完整错误截图
    • :white_check_mark: 环境版本信息
    • :white_check_mark: 对比测试结果(其他模型正常)
    • :clipboard: 建议补充:export_yolo26_seg_bpu.py 的关键代码片段
  2. 查看是否有更新版本的 model zoo

    cd ~/rdk_model_zoo_s
    git log --oneline -10  # 查看最近更新
    git pull  # 如果有更新
    
  3. 联系地瓜技术支持:这个问题很可能是脚本本身的 bug,需要官方修复。


需要补充的信息

为了更精准定位问题,请提供:

  1. export_yolo26_seg_bpu.pyapply_bpu_monkey_patch_for_segmentation 函数的代码
  2. 完整的 traceback 错误堆栈(用上面加的 traceback.print_exc()
  3. 你使用的模型文件路径和名称

这个问题看起来是脚本层面的 bug,建议直接在社区等待官方回复,或者临时使用官方 export 方式。

感谢反馈,已修复 https://github.com/D-Robotics/rdk_model_zoo_s/commit/aeed911b157866e0e8a8efa6f134a8c93e731af0

1 个赞