TensorFlow Lite Model Maker加载CSV报NoneType无label_map错误如何解决
报错原因与解决方案
你遇到的AttributeError: 'NoneType' object has no attribute 'label_map'错误,核心原因是object_detector.DataLoader.from_csv()没有成功加载到有效数据集,返回了空值,后续调用train_data的属性自然失败。问题完全出在CSV标注文件的格式不符合Model Maker的要求,可按以下步骤逐一排查修复:
- 检查字段名与顺序:CSV必须严格使用
filename,width,height,class,xmin,ymin,xmax,ymax作为表头,拼写、大小写完全匹配,不能调整顺序,也不能额外增加其他字段。 - 检查图片路径配置:你所有图片存放在
/content/路径下,CSV中filename字段必须填写完整绝对路径,比如/content/photo_001.jpg,不能仅填文件名或相对路径,Model Maker不会自动补全路径前缀。 - 检查标注坐标有效性:xmin、xmax必须小于等于图像width,ymin、ymax必须小于等于图像height,且满足xmin < xmax、ymin < ymax,所有坐标不能是空值、负值,格式必须为整数或浮点数。
- 检查类别标注有效性:class字段不能有空值,类别名称不要包含特殊符号,同类别至少要有2条以上标注数据。
- 调整数据集拆分比例:默认
from_csv()会按7:2:1自动拆分训练、验证、测试集,如果你的总标注样本量过少(少于10条),会导致某一拆分数据集为空,可手动指定拆分比例,示例如下:
train_data, validation_data, test_data = object_detector.DataLoader.from_csv( '/content/test.csv', train_fraction=0.8, validation_fraction=0.15, test_fraction=0.05 )
如果样本量极小,也可临时将test_fraction设为0,避免测试集为空。
- 加载前做有效性校验:调用
from_csv()后可新增一行打印代码,确认数据集是否加载成功:
print(train_data, validation_data, test_data)
如果输出中有None,说明加载失败,回到前述步骤重新检查CSV内容。
参考CSV样例
你可以对照修改你的标注文件:
filename,width,height,class,xmin,ymin,xmax,ymax /content/photo_001.jpg,640,480,cat,120,80,340,360 /content/photo_002.jpg,640,480,dog,210,110,430,420
如果手动调整CSV容易出错,也可以先用LabelImg等标注工具将标注导出为PASCAL VOC格式的XML文件,再写简单脚本批量读取XML的对应字段生成符合要求的CSV,稳定性更高。
内容的提问来源于stack exchange,提问作者Matthew De La Rosa
相关产品推荐
相关产品推荐

