运行Tensorflow对象检测API时发生RAM错误
在安装Tensorflow对象检测API并遵循所有说明后,我开始使用自己的数据集进行培训。很快,程序开始使用所有RAM,进程被终止。我已经阅读了所有关于这个主题的帖子,似乎没有人有答案。这是试图找出此问题原因的另一次尝试 计算机规格:运行Tensorflow对象检测API时发生RAM错误,tensorflow,object-detection,Tensorflow,Object Detection,在安装Tensorflow对象检测API并遵循所有说明后,我开始使用自己的数据集进行培训。很快,程序开始使用所有RAM,进程被终止。我已经阅读了所有关于这个主题的帖子,似乎没有人有答案。这是试图找出此问题原因的另一次尝试 计算机规格: 12GB内存 Ubuntu 14.04 LTS tensorflow gpu NVIDIA GTX 1070-8.0 GB 日志是: INFO:tensorflow:Starting Queues. INFO:tensorflow:global_step/sec:
INFO:tensorflow:Starting Queues.
INFO:tensorflow:global_step/sec: 0
Killed
从其他人写的内容来看,这肯定是内存使用问题。任何帮助都会受到欢迎。检查dmesg。如果是内存不足错误,可以通过增加交换内存来解决
大量增加交换内存分配,开始培训,看看您的具体问题实际需要多少空间。然后,您可以微调交换内存大小 检查dmesg。如果是内存不足错误,可以通过增加交换内存来解决
大量增加交换内存分配,开始培训,看看您的具体问题实际需要多少空间。然后,您可以微调交换内存大小 您可以通过调整配置文件来实现这一点 大部分RAM被输入队列占用。但由于数据是超快速tfrecord格式,因此不需要准备那么多示例 根据您使用的型号(SSD,更快的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
}
通过检查描述模型所有设置的
对象检测/protos
中的.proto
文件,可以找到这些和其他设置。您可以通过调整配置文件来实现这一点
大部分RAM被输入队列占用。但由于数据是超快速tfrecord格式,因此不需要准备那么多示例
根据您使用的型号(SSD,更快的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
}
通过检查描述模型所有设置的
对象检测/protos
中的.proto
文件,可以找到这些和其他设置。您怎么会认为这是因为内存不足?你检查过(h)top的输出了吗?所以我一直在监视cpu和内存性能,它占用了所有的资源。第二,其他各种帖子都提出了同样的问题,都提出了同样的问题,这是一个OOM问题。你能说出你的图像的分辨率吗?它们是960x1248。你怎么会认为这是因为内存不足?你检查过(h)top的输出了吗?所以我一直在监视cpu和内存性能,它占用了所有的资源。第二,有很多其他的帖子都提出了同样的问题,都提出了同样的问题,这是一个OOM问题。你能说一下你的图片的分辨率是多少吗?它们是960x1248。尽管这帮助我解决了这个问题。这有什么坏处吗。由于输入序列排队,我想这应该是一个问题。如果数字太小,并且您的驱动器和/或CPU速度较慢,那么您的GPU利用率将较低,因为它将等待下一批进行预处理。因此,请关注nvidia smi,如果您发现gpu利用率较低,请对输入管道进行基准测试(问题可能在其他地方)。尽管这有助于我解决问题。这有什么坏处吗。由于输入序列排队,我想这应该是一个问题。如果数字太小,并且您的驱动器和/或CPU速度较慢,那么您的GPU利用率将较低,因为它将等待下一批进行预处理。因此,请关注nvidia smi,如果您发现gpu利用率较低,请对输入管道进行基准测试(但问题可能出在其他地方)。