You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YOLOv3目标检测项目运行报IndexError: scalar变量索引无效问题求助

报错原因

output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]
IndexError: invalid index to scalar variable.

这个报错的根因是OpenCV版本迭代导致的返回值结构差异:

  • OpenCV 3.x版本中,net.getUnconnectedOutLayers()返回的是二维嵌套数组,每个元素是包裹了索引值的子数组,需要用i[0]取出索引
  • OpenCV 4.x及以上版本中,net.getUnconnectedOutLayers()返回的是一维标量数组,每个元素直接是索引值,此时对i取[0]就会触发标量索引错误
解决方案

方案1:直接适配当前版本

首先运行代码查看你的OpenCV版本:

import cv2 as cv
print(cv.__version__)

如果是4.x及以上版本,直接将报错行修改为:

output_layers = [layer_names[i - 1] for i in net.getUnconnectedOutLayers()]

如果是3.x版本,保留原有写法即可。

方案2:兼容新旧版本的通用写法

不想区分版本可以用下面的兼容代码,自动适配不同版本的返回值结构:

layer_names = net.getLayerNames()
unconnected_layers = net.getUnconnectedOutLayers()
if unconnected_layers.ndim == 2:
    # 适配3.x版本
    output_layers = [layer_names[i[0] - 1] for i in unconnected_layers]
else:
    # 适配4.x及以上版本
    output_layers = [layer_names[i - 1] for i in unconnected_layers]
额外注意点

你现有代码中还存在拼写错误:将output_layers误写为otputlayers,后续调用该变量时会触发NameError,建议同步修正拼写。

内容的提问来源于stack exchange,提问作者Farzin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:45:03