本地运行YOLO模型触发IndexError索引越界,求修复方案
修复YOLOv3运行时的IndexError问题
错误根源
你碰到的IndexError: index 57 is out of bounds for axis 0 with size 1,核心问题是颜色数组COLORS的长度只有1,但模型输出的类别ID是57(属于COCO的80类范围),导致用57去索引长度为1的数组时越界。
具体修复步骤
检查类别名称文件的加载
先确认coco.names的加载代码是否正确,路径是否指向正确的文件:classes = [] with open("你的coco.names路径", "r") as f: classes = [line.strip() for line in f.readlines()]打开
coco.names文件数一下行数,正常COCO数据集是80个类别,所以len(classes)应该等于80。如果这里长度不对,要么是路径错了(加载了空文件或错误文件),要么是文件本身内容缺失。修正颜色数组
COLORS的生成逻辑COLORS需要和类别数量一一对应,原代码里应该是基于classes的长度生成,检查你的代码是否写成了这样:import numpy as np COLORS = np.random.uniform(0, 255, size=(len(classes), 3))如果之前写死了
size=(1,3)或者用了错误的长度,就改成上面的代码,让它自动匹配类别数量。验证模型文件的配套性
确保你用的yolov3.cfg、权重文件(比如yolov3.weights)和coco.names是一套的:- 不要混用YOLOv3-tiny的cfg和标准YOLOv3的权重,反之亦然
- 所有文件都对应COCO 80类的版本,不要用自定义训练的类别文件配官方权重
检查classIDs的取值范围
可以在报错行之前加一行调试代码,看看classIDs的数值:print("classIDs:", classIDs)正常情况下数值应该在0到79之间,如果出现大于等于80的数,说明模型和类别文件不匹配,需要重新核对文件。
内容的提问来源于stack exchange,提问作者Nandatto
相关产品推荐
相关产品推荐

