一个for循环内存问题中的对象检测模型



我一直在尝试在一批图像上运行对象检测,但图形不断使用越来越多的内存。我认为变量没有被删除(当重新分配时),只是不断添加。我尝试重置默认图形,清除会话并手动删除+垃圾收集。

这基本上就是for循环:

for i in range(num_images)
box, m, s = detect(imgs[i])
boxes.append(box)

this is detect

def detect(img):
height, width, channels = img.shape
detector_output = detector(tf.expand_dims(img, axis=0))
classes = detector_output['detection_classes'][0]
most_likely = tf.convert_to_tensor(classes[0])
second_ = 20
box = detector_output['detection_boxes'][0][0]
box = tf.math.multiply(box, [height, width, height, width])
box = tf.cast(box, tf.int16)
del detector_output
K.clear_session()
return (box, most_likely)

我一直在跟踪内存,它随着循环线性增加,所以我认为它是detector_output,只是每个循环添加。

我该如何解决这个问题,更聪明的方法是什么?

PS我有(认为我必须)这样做的原因是因为模型不支持批处理:https://tfhub.dev/tensorflow/collections/object_detection/2

Thank you very much

imgs数组可能会占用大量内存,因为所有图像都已加载。您可以尝试逐个加载每个图像并运行detector()

所以你的代码必须变成这样:
for name in image_names:
# this function loads the image from disk and converts to a np array
image = load(name)
box, m, s = detect(image)
boxes.append(box)

如果你仍然用完内存,你可以尝试保存box作为.npy文件,而不是附加到boxes列表,但boxes列表不太可能导致内存问题。

相关内容

  • 没有找到相关文章

最新更新