You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CVAT导出的TFRecord是否异常?训练目标检测模型遇输入为空错误

解决CVAT导出TFRecord过小及训练报错问题

一、先排查CVAT导出环节的问题

  • 核对导出选项:
    导出时必须选择TFRecord for TensorFlow Object Detection API格式,不要选错成其他TFRecord变种(比如语义分割专用的)。同时确认勾选了正确的任务子集,确保覆盖你标注的300张训练图和25张测试图。
  • 验证TFRecord内容:
    用以下代码检查导出的TFRecord里有没有有效样本:
    import tensorflow as tf
    
    def count_samples(tfrecord_path):
        count = 0
        for _ in tf.data.TFRecordDataset(tfrecord_path):
            count += 1
        print(f"样本总数: {count}")
    
    count_samples("你的训练集TFRecord路径")
    count_samples("你的测试集TFRecord路径")
    
    如果输出为0,说明导出的TFRecord确实是空的,肯定是CVAT导出操作有误。

二、无需重新标注,转其他格式生成TFRecord

如果CVAT导出TFRecord确实有问题,导出其他格式再转换即可:

步骤1:导出PASCAL VOC格式

在CVAT中选择导出为PASCAL VOC 1.1,下载解压后会得到:

  • Annotations文件夹:对应每张图的XML标注文件
  • JPEGImages文件夹:原始图像文件
  • ImageSets/Main文件夹:包含划分训练/测试集的txt文件

步骤2:用TF Object Detection API脚本转TFRecord

TF Object Detection API自带转换脚本,路径为models/research/object_detection/dataset_tools/create_pascal_tf_record.py,修改参数后运行:

  1. 先准备标签映射文件label_map.pbtxt,格式示例:
    item {
      id: 1
      name: '你的目标类别1'
    }
    item {
      id: 2
      name: '你的目标类别2'
    }
    
  2. 运行转换命令:
    python create_pascal_tf_record.py \
      --label_map_path=./label_map.pbtxt \
      --data_dir=./解压后的VOC文件夹路径 \
      --year=VOC2007 \
      --set=train \
      --output_path=./train.tfrecord
    
    测试集只需要把--set改成val,--output_path改成测试集路径即可。

替代方案:导出COCO格式转换

如果更习惯COCO格式,CVAT导出COCO 1.0格式后,用create_coco_tf_record.py脚本转换,参数逻辑类似,指定COCO的json文件路径和图像文件夹即可。

三、验证转换结果

转换完成后,再用之前的Python代码检查样本数,确保训练集显示300、测试集显示25,之后再启动训练即可。

内容的提问来源于stack exchange,提问作者Blake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 01:05:21