python - Tensorflow 可以混洗多个分片 TFrecord 二进制文件以进行对象检测训练吗?

标签 python tensorflow object-detection

我正在尝试使用对象检测 API 训练 FasterRCNN 模型。

我有一个包含 5 个类别(卡车、汽车、货车、船和自行车)的数据集,每个类别大约有 1000 张图像。每个类都有自己的 TFrecord 文件,分为 10 个部分。这总共给了我 50 个文件,看起来像这样:

  • truck_train.record-00000-of-00010
  • car_train.record-00000-of-00010
  • van_train.record-00000-of-00010
  • boat_train.record-00000-of-00010
  • bike_train.record-00000-of-00010

我可以配置我的训练管道,以便 Tensorflow 打开并随机打乱这些文件的内容吗?

我知道我可以简单地从头开始重新生成 TFrecord 文件并以这种方式混合我的数据,但我的目的是能够通过简单地添加包含新类的 TFrecord 文件来将类添加到我的数据集中。

已阅读 this older answer关于洗牌,我想知道 Tensorflow 是否有一种内置方法可以实现洗牌队列,即使这意味着将我的 TFrecords 文件分成 100 个分片而不是 10 个。

我正在使用修改后的sample .config file对于 FasterRCNN,但我预计如果 Tensorflow 一次仅打开一个 .record 文件会出现问题,因为每个文件仅包含一个类。

我知道 tf_record_input_reader 可以接收文件列表:

train_input_reader: {
  tf_record_input_reader {
    input_path: ["Datasets\train-1.record", "Datasets\train-2.record"]
  }

通过增加输入读取器的shuffle buffernum_readers的大小,train.py是否能够实现足够的数据随机化?

最佳答案

这样的配置应该没问题:

train_input_reader: {
  tf_record_input_reader {
    input_path: "Datasets\train-1.record"
    input_path: "Datasets\train-2.record"
    ...
    input_path: "Datasets\train-10.record"
  }
  shuffle: True
}

或者简单地说:

train_input_reader: {
  tf_record_input_reader {
    input_path: "Datasets\*.record"
  }
  shuffle: True
}

但是,default value for shuffle 无论如何都是 True,所以它只是为了冗长。

num_readers 的默认值为 64,filenames_shuffle_buffer_size 的默认值为 100,因此对于 50 个文件来说,它必须足够了。

关于python - Tensorflow 可以混洗多个分片 TFrecord 二进制文件以进行对象检测训练吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54561558/

相关文章:

python - 如何在python中计算多边形的IOU?

python - AttributeError: 'module' 对象没有属性

python - 如何在 python pandas 中将两列与 if/else 组合?

python - 当 txt 文件为空时,numpy#genfromtxt 引发 IOError

python - 带有 py2app 的 OSX 10.11?

python - 无法在 Google COLAB 上将我的 Dataframe 保存/导出为 CSV

python - 如何恢复tensorflow2中的特定检查点(以实现提前停止)?

python - 查找框和裁剪图像的角点

windows - 在 Windows 上使用卷积神经网络进行物体检测

tensorflow - 将字符串张量转换为小写