【问题标题】:RAM Error running the Tensorflow Object Detection API运行 TensorFlow 对象检测 API 时出现 RAM 错误
【发布时间】:2017-07-21 22:00:33
【问题描述】:

安装 Tensorflow 对象检测 API 并按照所有说明操作后,我开始使用自己的数据集进行训练。很快,程序开始使用所有 RAM,进程被杀死。我已阅读有关此主题的所有可用帖子,但似乎没有人有答案。这是试图找出导致此问题的原因的另一种尝试。

电脑规格:

  1. 12 GB 内存
  2. Ubuntu 14.04 LTS
  3. 张量流GPU
  4. NVIDIA GTX 1070 - 8.0 GB

日志是:

INFO:tensorflow:Starting Queues.
INFO:tensorflow:global_step/sec: 0
Killed

从其他人的写作来看,这绝对是内存使用问题。任何帮助都会受到好评。

【问题讨论】:

  • 是什么让您认为这是因为您的内存不足?你检查过 (h)top 的输出吗?
  • 所以我一直在监控cpu和内存的性能,它占用了所有的资源。其次,还有许多其他帖子提出了同样的问题,并且都提出了同样的问题,这是一个 OOM 问题。
  • 你能说出你的图片是什么分辨率吗?
  • 它们是 960x1248。

标签: tensorflow object-detection


【解决方案1】:

您可以通过调整配置文件来做到这一点。

It turns out 大部分 RAM 被输入队列消耗。但是由于数据是超快的 tfrecord 格式,所以不需要准备那么多的例子。

根据您使用的模型(SSD、Faster R-CNN),这些设置会有所不同,因为 SSD 可以使用比 FRCNN 更高的批次(基本上使用 1 个批次)。

在您的配置文件中识别或添加以下内容并使用队列的数字。

train_config: {
  # ... other settings  
  batch_size: 1 # this is for FRCNN
  batch_queue_capacity: 10
  num_batch_queue_threads: 4
  prefetch_queue_capacity: 5
}

train_input_reader: {
  tf_record_input_reader {
    input_path: "/path/to/train.tfrecord"
  }
  label_map_path: "/path/to/label/map.pbtxt"
  queue_capacity: 400
  min_after_dequeue: 200
}

eval_input_reader: {
  tf_record_input_reader {
    input_path: "/path/to/eval.tfrecord"
  }
  label_map_path: "/path/to/label/map.pbtxt"
  shuffle: true
  queue_capacity: 20
  min_after_dequeue: 10
  num_readers: 1
}

这些和其他设置是通过检查object_detection/protos 中描述模型所有设置的.proto 文件发现的。

【讨论】:

  • 虽然这帮助我解决了问题。这有什么缺点吗。由于输入序列已排队,我猜这应该是一个问题。
  • 如果数字太小并且您的驱动器和/或 CPU 速度较慢,那么您的 GPU 利用率会较低,因为它将等待下一批进行预处理。所以请注意nvidia-smi,如果您发现 gpu 利用率低,请对输入管道进行基准测试(不过问题可能出在其他地方)。
【解决方案2】:

检查 dmesg。如果是内存不足错误,您可以通过增加交换内存来解决此问题。

大量增加您的交换内存分配,开始您的训练,看看您实际需要多少区域来解决您的特定问题。然后,您可以微调交换内存大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-16
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多