精确的再现命令:
python train.py --logtostderr --train_dir =。/ models / train --pipeline_config_path = mask_rcnn_inception_v2_coco.config
我正在尝试在我自己的数据集上训练Mask-RCNN模型(从在COCO上训练的模型中进行微调),但是一旦填充了洗牌缓冲区,该过程就会被终止。
在此之前,nvidia-smi的内存使用量约为10669MB / 11175MB,但GPU利用率仅为1%。
我尝试调整以下train_config设置:
batch_size: 1
batch_queue_capacity: 10
num_batch_queue_threads: 4
prefetch_queue_capacity: 5
对于train_input_reader:
num_readers: 1
queue_capacity: 10
min_after_dequeue: 5
我相信我的问题类似于TensorFlow Object Detection API - Out of Memory,但我使用的是GPU,而不是仅使用CPU。
我正在训练的图像相对较大(2048 * 2048),但是我要避免缩小尺寸,因为要检测的对象很小。我的训练集包括400张图像(在.tfrecord文件中)。
有没有一种方法可以减小随机缓冲区的大小,以查看是否减少了内存需求?
INFO:tensorflow:Restoring parameters from ./models/train/model.ckpt-0
INFO:tensorflow:Restoring parameters from ./models/train/model.ckpt-0
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Starting Session.
INFO:tensorflow:Starting Session.
INFO:tensorflow:Saving checkpoint to path ./models/train/model.ckpt
INFO:tensorflow:Saving checkpoint to path ./models/train/model.ckpt
INFO:tensorflow:Starting Queues.
INFO:tensorflow:Starting Queues.
INFO:tensorflow:global_step/sec: 0
INFO:tensorflow:global_step/sec: 0
2018-06-19 12:21:33.487840: I tensorflow/core/kernels/data/shuffle_dataset_op.cc:94] Filling up shuffle buffer (this may take a while): 97 of 2048
2018-06-19 12:21:43.547326: I tensorflow/core/kernels/data/shuffle_dataset_op.cc:94] Filling up shuffle buffer (this may take a while): 231 of 2048
2018-06-19 12:21:53.470634: I tensorflow/core/kernels/data/shuffle_dataset_op.cc:94] Filling up shuffle buffer (this may take a while): 381 of 2048
2018-06-19 12:21:57.030494: I tensorflow/core/kernels/data/shuffle_dataset_op.cc:129] Shuffle buffer filled.
Killed
答案 0 :(得分:1)
在您的 pipeline.config 中,添加
<块引用>shuffle_buffer_size: 200
或根据您的系统。
train_input_reader {
shuffle_buffer_size: 200
label_map_path: "tfrecords/label_map.pbtxt"
tf_record_input_reader {
input_path: "tfrecords/train.record"
}
}
它对我有用,也在 tf1 和 tf2 上进行了测试。
答案 1 :(得分:0)
您可以尝试以下步骤:
1。设置batch_size=1
(或尝试自己设置)
2。更改"default value": optional uint32 shuffle_buffer_size = 11 [default = 256]
(或尝试自己动手)
代码在这里
models/research/object_detection/protos/input_reader.proto
Line 40 in ce03903
optional uint32 shuffle_buffer_size = 11 [default = 2048];
原始设置为:
optional uint32 shuffle_buffer_size = 11 [default = 2048]
默认值为2048,对于batch_size=1
而言太大,应进行相应的修改,我认为它会占用大量RAM。
3。重新编译Protobuf库
来自tensorflow / models / research /
protoc object_detection/protos/*.proto --python_out=.
答案 2 :(得分:0)
我将 flow_from_directory 更改为 flow_from_dataframe 功能。因为它不会将所有图像的矩阵值上传到内存。