一张训练图像上相同或不同类的多个实例的 TFRecord 格式

Iva*_*nik 5 python-3.x tensorflow tfrecord

我正在尝试使用新的对象检测 API在杂货数据集检测上训练 Faster R-CNN ,但我不太了解为此创建 TFRecord 文件的过程。我知道牛津和 VOC 数据集示例以及创建 TFRecord 文件的脚本,如果训练图像中只有一个对象,它们就可以正常工作,这是我在所有官方示例和 github 项目中看到的。我有定义了 20 多个对象的图像,并且对象具有不同的类。我不想为一张图像迭代 20+ 次并创建 20 个几乎相同的 tf_examples,其中只有 20+ 的 img_encoded 将占用我所有的空间。

  tf_example = tf.train.Example(features=tf.train.Features(feature={
      'image/height': dataset_util.int64_feature(height),
      'image/width': dataset_util.int64_feature(width),
      'image/filename': dataset_util.bytes_feature(filename),
      'image/source_id': dataset_util.bytes_feature(filename),
      'image/encoded': dataset_util.bytes_feature(encoded_image_data),
      'image/format': dataset_util.bytes_feature(image_format),
      'image/object/bbox/xmin': dataset_util.float_list_feature(xmins),
      'image/object/bbox/xmax': dataset_util.float_list_feature(xmaxs),
      'image/object/bbox/ymin': dataset_util.float_list_feature(ymins),
      'image/object/bbox/ymax': dataset_util.float_list_feature(ymaxs),
      'image/object/class/text': dataset_util.bytes_list_feature(classes_text),
      'image/object/class/label': dataset_util.int64_list_feature(classes),
  }))
  return tf_example
Run Code Online (Sandbox Code Playgroud)

我相信在创建 tf_records xmin、xmax、ymin、ymax、classes_text 和 classes期间我的问题的答案都应该是每个边界框一个值的列表,因此我可以将不同的对象和参数添加到这些列表中一张图片。

也许有人有经验,可以帮助提供建议。我所描述的方式是否可行,如果不行,是否有任何方法可以以精致和简单的方式为一个图像中的多个对象创建 tf_recrds?

我只是在这里放了一些功能(不是全部)来创建 tfrecords ,因为我认为必须以我认为必须工作的方式工作,因为我附加的链接中的评论(列表......(每盒 1 个))。希望想法从附加的 json 中是干净的。

清理某些情况:例如,xmin 有 4 个不同的归一化 xmins [0.4056372549019608, 0.47794117647058826, 0.4840686274509804, 0.487745098703921] 不要忘记使用dataset_util.float_list_feature方法将列表转换为可序列化的 json 格式。C

features {
  feature {
    key: "image/filename"
    value {
      bytes_list {
        value: "C4_P06_N1_S4_1.JPG"
      }
    }
  }
  feature {
    key: "image/format"
    value {
      bytes_list {
        value: "jpeg"
      }
    }
  }
  feature {
    key: "image/height"
    value {
      int64_list {
        value: 2112
      }
    }
  }
  feature {
    key: "image/key/sha256"
    value {
      bytes_list {
        value: "4e0b458e4537f87d72878af4201c55b0555f10a0e90decbd397fd60476e6e973"
      }
    }
  }
  feature {
    key: "image/object/bbox/xmax"
    value {
      float_list {
        value: 0.43323863636363635
        value: 0.4403409090909091
        value: 0.46448863636363635
        value: 0.5085227272727273
      }
    }
  }
  feature {
    key: "image/object/bbox/xmin"
    value {
      float_list {
        value: 0.3565340909090909
        value: 0.36363636363636365
        value: 0.39204545454545453
        value: 0.4318181818181818
      }
    }
  }
  feature {
    key: "image/object/bbox/ymax"
    value {
      float_list {
        value: 0.9943181818181818
        value: 0.7708333333333334
        value: 0.20265151515151514
        value: 0.9943181818181818
      }
    }
  }
  feature {
    key: "image/object/bbox/ymin"
    value {
      float_list {
        value: 0.8712121212121212
        value: 0.6174242424242424
        value: 0.06818181818181818
        value: 0.8712121212121212
      }
    }
  }
  feature {
    key: "image/object/class/label"
    value {
      int64_list {
        value: 1
        value: 0
        value: 3
        value: 0
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我做了一些我认为必须帮助的事情,但我在训练期间得到了这些数字,这是不正常的。

INFO:tensorflow:global step 204: loss = 1.4067 (1.177 sec/step)
INFO:tensorflow:global step 205: loss = 1.0570 (1.684 sec/step)
INFO:tensorflow:global step 206: loss = 1.0229 (0.916 sec/step)
INFO:tensorflow:global step 207: loss = 80484784668672.0000 (0.587 sec/step)
INFO:tensorflow:global step 208: loss = 981436265922560.0000 (0.560 sec/step)
INFO:tensorflow:global step 209: loss = 303916113723392.0000 (0.539 sec/step)
INFO:tensorflow:global step 210: loss = 4743170218786816.0000 (0.613 sec/step)
INFO:tensorflow:global step 211: loss = 2933532187951104.0000 (0.518 sec/step)
INFO:tensorflow:global step 212: loss = 1.8134 (1.513 sec/step)
INFO:tensorflow:global step 213: loss = 73507901414572032.0000 (0.553 sec/step)
INFO:tensorflow:global step 214: loss = 650799901688463360.0000 (0.622 sec/step)
Run Code Online (Sandbox Code Playgroud)

PS附加信息:对于普通视图,其中 1 张图像具有来自该数据集的 1 个对象类,一切正常。

小智 0

TFRecords 文件表示(二进制)字符串序列。该格式不是随机访问,因此它适合传输大量数据,但如果需要快速分片或其他非顺序访问,则不适合。

tf.python_io.TFRecordWritertf.python_io.tf_record_iteratortf.python_io.TFRecordCompressionTypetf.python_io.TFRecordOptions