2017-07-05 72 views
0

我正在使用带有Tensorflow对象检测API的Faster-RCNN模型进行标识检测算法。 我的数据集是按字母顺序排列的(所以有一百个阿迪达斯标志,然后百个苹果标志等)。而且我希望在训练时将其洗牌。使用Tensorflow对象检测api改写训练数据集

我已经把一些值在配置文件中:

train_input_reader:{ 
      shuffle: true 
      queue_capacity: some value 
      min_after_dequeue : some other value} 

然而无论是价值观,我把在,算法是在所有A公司的徽标(阿迪达斯,苹果的第一次训练等等),只有一段时间后,开始看b的标志(bmw等)和c的一个等

当然,我可以直接洗牌我的输入数据集,但我想了解逻辑在它后面。

PS:我已经看到这个post关于洗牌和min_after_dequeue,但我仍然没有得到它。我的批量大小是1,所以它不应该使用tf.train.shuffle_batch(),但只能使用tf.RandomShuffleQueue

我的训练数据集大小是5000,如果我写min_after_dequeue: 4000 or 5000它仍然没有洗牌正确。为什么?


更新: @AllenLavoie这是一个有点难受;因为有很多依赖关系,而我是Tensorflow的新手。 但最终队列由

tf.contrib.slim.parallel_reader.parallel_read( _, string_tensor = parallel_reader.parallel_read(
     config.input_path, 
     reader_class=tf.TFRecordReader, 
     num_epochs=(input_reader_config.num_epochs 
        if input_reader_config.num_epochs else None), 
     num_readers=input_reader_config.num_readers, 
     shuffle=input_reader_config.shuffle, 
     dtypes=[tf.string, tf.string], 
     capacity=input_reader_config.queue_capacity, 
     min_after_dequeue=input_reader_config.min_after_dequeue) 

构建看来,当我把num_readers = 1在配置文件中的数据集最后的重排,我想,(至少在初期),但是当有在开始的时候更多的是按照字母顺序排列的标志。

+0

你可以发布一个最小限度的复制(即一个自包含的命令+代码具有相同的问题位)?我怀疑配置参数并没有传播到TensorFlow,但是有很多方法可能发生。 –

+0

@AllenLavoie在帖子中增加了更多信息 –

+0

您可以通过将'parallel_read'参数设置为文字值(例如'shuffle = True,min_after_dequeue = 4000,capacity = 10000')来重现吗? –

回答

0

我建议在训练之前洗牌数据集。当前发生的洗牌方​​式并不完美,我对发生的事情的猜测是,开始的时候,队列开始处于空白状态,只能得到以'A'开头的例子 - 一段时间后可能会有更多洗牌,但是没有当队列还没有被填满时绕过开始部分。

+1

但'min_after_dequeue'不应该允许吗? 关于洗牌数据集,是的,我会这样做;只是想了解这些原则。 –

相关问题