自定义MSCOCO2017数据集加载器报错:ArrowTypeError排查
自定义COCO数据集加载脚本触发ArrowTypeError排查
问题场景
我编写了自定义Python数据集加载文件coco.py,用于加载带标注文本的MSCOCO2017数据集。执行以下加载代码时触发ArrowTypeError:
from datasets import load_dataset squad_it_dataset = load_dataset('coco.py', data_files="data/coco.json", data_dir='~/coco2017/')
错误信息
ArrowTypeError: Could not convert 255 with type int: was not a sequence or recognized null for conversion to list type
错误原因分析
这个错误的核心逻辑是:你在coco.py中把某个字段定义为列表(list)类型,但实际JSON数据里该字段出现了单个整数255,无法完成类型转换。比如可能是分割掩码、关联类别ID这类字段,在特征定义里被声明为序列类型,但数据中存在单个值而非数组格式的样本。
排查与修复步骤
- 检查
coco.py中的features字典,定位被定义为列表/序列类型的字段(比如Sequence(feature=Value("int32"))或Value("list")这类写法) - 打开
data/coco.json,搜索值为255的字段,确认该字段的实际格式是否为单个整数而非数组 - 根据实际需求调整:
- 如果该字段本就应该是单个整数,直接把特征定义改为
Value("int32")对应类型 - 如果该字段必须是数组,在数据处理逻辑中加入格式转换,示例代码:
def process_example(example): # 把单个int值包装成列表 target_field = "your_target_field_name" if isinstance(example[target_field], int): example[target_field] = [example[target_field]] return example
- 如果该字段本就应该是单个整数,直接把特征定义改为
需要补充的信息
为了精准定位问题,还需要提供:
- 完整的
coco.py代码 - 完整的报错栈信息
内容的提问来源于stack exchange,提问作者exercise-3949
相关产品推荐
相关产品推荐

