测试Tensorflow对象检测API时出现内存错误(OOM)

问题描述 投票:1回答:1

我使用自定义数据集训练了fast_rcnn_nas模型(尺寸调整为1280x1080的图像)。我的GPU是Nvidia Quadro P5000,我可以在这台计算机上测试模型。当我使用GTX 1060进行测试时,它会崩溃并给出内存错误。但是,当我测试预训练的faster_rcnn_nas时,它可以正常工作。

预训练模型和自定义模型有什么区别?有什么办法可以在1060上运行模型吗?还是有任何batch_size或类似参数需要更改以进行测试?

我所做的:我限制了我的GPU,发现我至少需要8GB的GPU来测试我的模型。

完整错误:

ResourceExhaustedError:找到2个根本错误。(0)资源耗尽:分配具有shape [500,4032,17,17]的张量并在/ job:localhost / replica:0 / task:0 / device:GPU:0上通过分配器GPU_0_bfc键​​入float[[{{node MaxPool2D / MaxPool-0-TransposeNHWCToNCHW-LayoutOptimizer}}]]提示:如果要在发生OOM时查看分配的张量的列表,请将report_tensor_allocations_upon_oom添加到RunOptions中以获取当前分配信息。

[[[SecondStagePostprocessor / BatchMultiClassNonMaxSuppression / map / while / MultiClassNonMaxSuppression / Sum / _275]]提示:如果要在发生OOM时查看分配的张量的列表,请将report_tensor_allocations_upon_oom添加到RunOptions中以获取当前分配信息。

((1)资源耗尽:分配带有形状[500,4032,17,17]的张量并在/ job:localhost / replica:0 / task:0 / device:GPU:0上通过分配器GPU_0_bfc输入float[[{{node MaxPool2D / MaxPool-0-TransposeNHWCToNCHW-LayoutOptimizer}}]]提示:如果要在发生OOM时查看分配的张量的列表,请将report_tensor_allocations_upon_oom添加到RunOptions中以获取当前分配信息。

0个成功的操作。忽略0个派生错误。

python tensorflow object-detection object-detection-api faster-rcnn
1个回答
0
投票

对于您的[[问题1]:预训练模型和自定义模型之间有什么区别?

这与您将模型[[train还是仅将模型用于

inference有所不同。因此,当您使用模型进行推理时,将需要与训练模型时相比非常小的内存。但是,当您使用Tensorflow GPU train模型时,这需要更多内存 与仅CPU训练相比,但和[[更快的执行时间),特别是在处理复杂的模型体系结构(即Faster RCNN),。

当模型使用卷积层之类的计算重层时,这也是很明显的,因为出于

更多的内存]的代价,计算的速度将更快。

问题2:是否可以用1060运行模型?还是有任何batch_size或类似参数需要更改以进行测试?测试或推论时,数据长度通常为

任意

,您可以在input_shape = (None, ##,##)第一个参数为None时进行检查。这意味着模型将接受具有任何不同长度lowest data_length = 1的数据。
意思是除非使用输入形状ie. (None, BATCH_SIZE, ##, ##)明确定义或使用

具有batch_size长度的数据

ie. (BATCH_SIZE, ##, ##)来提供模型,否则使用Keras时只能使用batch_size”。 >

避免内存错误的一种方法是将model.predictmodel.train

batch_size parameter更改为较低的值,这也会增加您的模型

准确性]

,但会训练更长的时间
另一种是将数据集转换为数据集生成器,该数据缓存您的数据,而不是将其<]]您可以在此link上阅读有关

在Tensorflow中构建输入管道]的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.