加载YOLO时出现invalid index to scalar variable报错如何处理
错误根因
这个报错不是Python版本差异导致的,是OpenCV库版本不兼容触发的问题:
- OpenCV 4.5.x及更早版本中,
getUnconnectedOutLayers()返回的是二维嵌套数组,结构为[[n], [m], [k]],所以你写的i[0]可以正常取到索引值,Colab默认预装的OpenCV版本通常属于这个范围,所以代码可以运行。 - OpenCV 4.6.x及更新版本优化了这个接口的返回值,改为一维标量数组,结构为
[n, m, k],此时对标量i取i[0]就会触发IndexError: invalid index to scalar variable报错,和你Jupyter环境的报错完全吻合。
修复代码
可以用兼容新旧版本的写法替换原有yolo_layers行:
network = cv2.dnn.readNetFromDarknet('yolov3.cfg', 'yolov3.weights') layers = network.getLayerNames() unconnected_out_layers = network.getUnconnectedOutLayers() # 自动适配不同版本OpenCV if unconnected_out_layers.ndim == 1: yolo_layers = [layers[i - 1] for i in unconnected_out_layers] else: yolo_layers = [layers[i[0] - 1] for i in unconnected_out_layers]
验证方法
你可以执行以下代码确认环境差异:
- 查看OpenCV版本:
print(cv2.__version__) - 查看接口返回结构:
print(network.getUnconnectedOutLayers())
内容的提问来源于stack exchange,提问作者abe
相关产品推荐
相关产品推荐

