1 个赞
问题分析
从错误信息 index 1 is out of bounds for dimension 0 with size 1 来看,这是在导出 segmentation 模型时,脚本尝试访问一个维度为 1 的张量的第 1 个索引(应该是第 2 个元素),导致越界。
关键线索:
ultralytics 官方 export 正常
cls/det/obb/pose 都能正常导出
只有 seg 模型报错
自己训练的 + 官方预训练模型都报相同错误
这说明问题出在 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)}")
对比官方 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 试试
建议
-
在社区发帖时提供以下信息(你已经做得很好了):
完整错误截图
环境版本信息
对比测试结果(其他模型正常)
建议补充:export_yolo26_seg_bpu.py的关键代码片段
-
查看是否有更新版本的 model zoo:
cd ~/rdk_model_zoo_s git log --oneline -10 # 查看最近更新 git pull # 如果有更新 -
联系地瓜技术支持:这个问题很可能是脚本本身的 bug,需要官方修复。
需要补充的信息
为了更精准定位问题,请提供:
export_yolo26_seg_bpu.py中apply_bpu_monkey_patch_for_segmentation函数的代码- 完整的 traceback 错误堆栈(用上面加的
traceback.print_exc()) - 你使用的模型文件路径和名称
这个问题看起来是脚本层面的 bug,建议直接在社区等待官方回复,或者临时使用官方 export 方式。

