Python处理车辆图像数据集时报list index out of range错误如何解决
Python车辆图像数据集处理IndexError报错排查
报错根本原因
你触发IndexError: list index out of range的核心是代码执行到mpimg.imread(cars[1])时,cars列表的长度小于2,没有索引为1的元素;如果这行执行通过后notcars[5]也报错,说明notcars列表长度小于6,没有索引为5的元素。
常见触发原因
- glob路径读取配置错误,没有成功读到/OwnCollection下的图像文件,导致
images列表为空,后续所有衍生列表都是空值
注意glob.glob默认不会递归读取子文件夹内容,你如果没有加recursive=True参数、没有写对通配符规则、没有匹配到对应后缀的图像文件,都会读不到目标数据 - 路径判断逻辑失效,比如实际文件夹名大小写和你写的
non-vehicles不一致、返回的路径不含目标关键词,导致全量样本列表all_cars/all_notcars其中一个为空,采样后的列表自然也没有足够元素 - 数据集本身样本量太小,你按1/5比例采样后剩余样本数不足,比如
all_cars总共只有5个样本,采样后cars列表只有1个元素,自然访问不到索引1
排查步骤
- 先验证glob读取结果,修正glob写法并加入打印验证:
# 示例为递归读取所有子目录下的png文件,后缀可替换为你实际的图像格式 images = glob.glob('/OwnCollection/**/*.png', recursive=True) print(f"读取到的总文件数:{len(images)}")
如果输出为0,调整glob的通配符、路径、后缀参数,直到能正常读到文件。
2. 验证路径判断逻辑,在第一次循环后加入打印代码:
print(f"全量车辆样本数:{len(all_cars)},全量非车辆样本数:{len(all_notcars)}")
如果其中一个数值为0,打印单个image变量的实际内容,调整判断关键词的大小写、拼写和实际路径匹配。
3. 验证采样后样本量,在采样逻辑后加入打印代码:
print(f"采样后车辆样本数:{len(cars)},采样后非车辆样本数:{len(notcars)}")
如果数值不满足访问索引的要求,要么降低采样比例(比如把ix %5 ==0改成ix%2==0,采1/2的样本提升数量),要么把访问的索引改成小于列表长度的值,也可以加判断避免报错:
if len(cars) >= 2: car_image = mpimg.imread(cars[1]) if len(notcars) >=6: notcar_image = mpimg.imread(notcars[5])
内容的提问来源于stack exchange,提问作者Jim Hoggey
相关产品推荐
相关产品推荐

