Tensorflow Object Detetection培训最佳实践问题

时间:2017-07-24 08:51:56

标签: python tensorflow conv-neural-network object-detection

大型图像培训:

我正在尝试在4K分辨率的图像上训练车辆探测器,每张图像约100辆小型车辆(车辆尺寸约100x100像素)。

我目前正在使用全分辨率,这会花费我很多内存。我正在训练使用32核和128 GB RAM。目前的架构是更快的RCNN。我可以训练第二阶段批量大小为12,first_stage_mini_batch_size为50.(我缩小了两个直到我的记忆力足够)。

  1. 我认为,我应该增加RPN提案的最大数量。哪个维度合适?
  2. 这种方法有意义吗?
  3. 难度,截断,标签和姿势:

    我目前只将数据集分为三类(汽车,卡车,货车)。

    1. 我假设提供其他信息,如:

      • 困难(主要是隐藏的车辆)和
      • 截断(我目前没有选择截断的对象,但我可以)
    2. 将改善培训过程。

      1. 是否会截断包含重叠的车辆?

      2. 观看/姿势和其他标签等其他信息是否也会改善培训流程,还是会使培训更难?

      3. 将新数据添加到训练集:

        1. 是否可以将新图像和对象添加到培训和验证记录文件中,并使用培训目录中的最新检查点文件自动恢复培训?或者选项“fine_tune_checkpoint”是否需要“from_detection_checkpoint”?
        2. 如果培训和验证数据的随机分离会选择不同于之前培训的不同数据集,会不会有害?

2 个答案:

答案 0 :(得分:1)

对于您的问题,由于图像和小型车的高分辨率,开箱即用的配置文件将无法正常工作。我建议:

  • 对作物进行培训 - 将你的形象切割成较小的作物,使汽车大致保持与现在大致相同的分辨率。
  • 对作物进行评估 - 在推断时,将你的图像切成一堆重叠的作物,然后对每一种作物进行推断。通常人们使用非最大抑制来组合多个作物的检测。有关此说明,请参阅此处slide 25
  • 高度建议使用GPU或更好的多GPU进行培训。
  • 避免调整batch_size参数开始 - 它们被设置为开箱即用,并且更改它们通常会使调试变得困难。
  • 目前训练期间未使用困难/截断/姿势字段,因此包含它们不会有所作为。

答案 1 :(得分:1)

  1. 我切换了评估和训练数据(在配置中),训练继续正常,完全相同的命令启动它。
    • 有关于从上一个检查点恢复参数的日志
    • 当我切换测试/火车数据时,mAP会立即射击月亮
    • 张量板中的图像标签更新
  2. 所以看起来更改数据的工作正常。我不确定它如何影响模型,基本上它是在没有这些例子的情况下预先训练并且用它们进行微调

    LOG:

    INFO:tensorflow:Restoring parameters from /home/.../train_output/model.ckpt-3190
    
    1. 这导致列车/测试污染,并且实际模型性能假设低于在污染的验证数据集上计算的性能。除非你想提出一些明确定义的结果,否则你不应该担心太多。
    2. 来自https://arxiv.org/abs/1311.2901的真实案例: ImageNet和Caltech数据集有一些共同的图像。在评估使用ImageNet进行训练的模型与Caltech的验证效果时,您应该在训练前从ImageNet中删除重复项。