我基于TF2 object detection efficientdet_d2_coco17_tpu-32中预先训练的模型来训练对象对象检测模型。https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/training.htmlhttps://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2_detection_zoo.md
我根据需要对pipeline.config进行了更改(我以前在tf2对象检测动物园的eff_d1或ssd模型上做过很多次(。
我成功地在批量大小为2和10公里的步骤上训练了这个模型。但当我尝试以100K步/50K步/20K步进行训练时,我出现了00M的错误。
我不明白为什么会发生这种事。
GPU培训-Nvidia GeForce RTX 3070Ubuntu 20.04TF 2.4.1
任何想法,谢谢
我不知道你在训练时做了什么。我给出原因。如果增加批量大小,将出现oom错误。您需要检查是否有任何其他不需要的进程与您的GPU一起运行。使用以下命令并结束不需要的进程。
nvidia-smi
在少数情况下,图像大小会导致内存不足问题。更高的分辨率使用更高的内存。图像大小的计算
64×64 and batch of 32
the memory cost on GPU is:
32⋅32⋅3
(size of the image if in color)⋅32(size of batch)⋅32(bits for a float32) bits ≈3MB
您可以使用此标志来避免OOM错误
TF_FORCE_GPU_ALLOW_GROWTH=真
第一种选择:
以下代码对应于TF2.0的第一个选项。
config = tf.ConfigProto()
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)
第二种选择:
下面的代码对应于TF2.0的第二个选项,但它设置了内存分数,而不是一个确定值。
# change the memory fraction as you want...import tensorflow as tf
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.3)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
如果您看到混洗分配,您可以在pipeline.config中根据GPU定义混洗图像分配,有时这可能会导致OOM错误。