TensorFlow对象检测API - 内存不足

时间:2018-06-07 13:39:57

标签: python tensorflow object-recognition

我正在使用Tensorflow Object Detection API来训练我自己的物体探测器。我从模型动物园(here)下载了faster_rcnn_inception_v2_coco_2018_01_28,并创建了我自己的数据集(train.record(~221Mo),test.record和标签贴图)来微调它。

但是当我运行它时:

python train.py --logtostderr --pipeline_config_path=/home/username/Documents/Object_Detection/training/faster_rcnn_inception_v2_coco_2018_01_28/pipeline.config --train_dir=/home/username/Documents/Object_Detection/training/

该过程在填充shuffle缓冲区操作期间被杀死,看起来像一个OOM问题(16Go RAM)......

2018-06-07 12:02:51.107021: I tensorflow/core/kernels/data/shuffle_dataset_op.cc:94] Filling up shuffle buffer (this may take a while): 410 of 2048
Process stopped

是否存在减少shuffle缓冲区大小的方法?它的大小有什么影响?

然后,我添加了一些交换(115Go交换+ 16Go RAM)和填充shuffle缓冲区操作完成,但我的训练占用了所有的RAM并在步骤4后交换,而我的train.record只是大约221 Mo!

我已经将这些行添加到我的pipeline.config> train_config:

batch_size: 1
batch_queue_capacity: 10
num_batch_queue_threads: 8
prefetch_queue_capacity: 9

和这些到我的pipeline.config> train_input_reader:

queue_capacity: 2
min_after_dequeue: 1
num_readers: 1

关注post

我知道我的图像非常(非常非常)大:每个25Mo,但因为我只拍了9张图像来制作我的train.record(只是为了测试我的安装是否顺利),它不应该是这样的内存消耗权?

关于它为什么使用这么多RAM的任何其他想法?

(顺便说一句,我只使用CPU)

1 个答案:

答案 0 :(得分:2)

图像数量不是问题。问题是您输入的图像分辨率(在您的设置.config文件中)。您需要在此处更改高度和宽度值(与.config文件类似):

image_resizer {
  # TODO(shlens): Only fixed_shape_resizer is currently supported for NASNet
  # featurization. The reason for this is that nasnet.py only supports
  # inputs with fully known shapes. We need to update nasnet.py to handle
  # shapes not known at compile time.
  fixed_shape_resizer {
    height: 1200
    width: 1200
  }
}

设置为较小的宽度和高度值,您将可以完美地训练。