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
相关产品推荐
相关产品推荐

