使用TensorFlow的create_coco_tf_record脚本转COCO JSON至TFRecord时报错
解决create_coco_tf_record脚本“list index out of range”报错
兄弟,我之前用这个脚本的时候也踩过类似的坑,你的问题大概率是提供的COCO JSON缺少了核心必需字段,导致脚本在处理时试图访问空列表的元素,直接触发了索引越界错误。
问题根源分析
你给出的JSON只包含了info和images字段,但标准COCO格式至少还需要categories(类别定义)和annotations(标注数据)这两个字段。create_coco_tf_record脚本内部会遍历annotations列表,或者尝试读取列表中的元素,当这个字段完全缺失或者为空列表处理逻辑不严谨时,就会抛出“list index out of range”。
解决方案
1. 补充完整COCO JSON的必需字段
- 添加
categories数组:定义你的检测/分割类别,哪怕只有一个类别也要明确声明。 - 添加
annotations数组:即使没有任何标注(比如全是负样本),也必须保留这个字段(可以是一个空数组),不能直接省略。
2. 修正后的完整JSON示例
{ "info": { "year": 2018, "version": null, "description": "TransferLearningTest", "contributor": "ralph@r4robotics.com.au", "url": "labelbox.io", "date_created": "2018-03-25T08:30:27.427851+00:00" }, "images": [ { "id": "cjf6gxqjw2fho01619gre5j0y", "width": 615, "height": 409, "file_name": "https://firebasestorage.googleapis.com/v0/b/labelbox-1939..." } ], "categories": [ {"id": 1, "name": "test_object", "supercategory": "none"} ], "annotations": [] }
3. 额外注意事项
- 如果后续要添加标注,确保每个
annotation的image_id和对应image的id完全匹配; - 部分版本的脚本可能对
file_name是URL的情况处理不好,如果后续出现图片读取错误,建议把file_name替换成本地图片的绝对路径; - 要是脚本强制要求
annotations非空,可以添加一个dummy标注(比如bbox: [0,0,0,0]、area: 0)来绕过检查。
内容的提问来源于stack exchange,提问作者Oblomov
相关产品推荐
相关产品推荐

