我正在尝试使用对象检测 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 buffer
和num_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/