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



我使用自定义数据集(调整大小的图像1280x1080(训练了faster_rcnn_nas模型。我的GPU是Nvidia Quadro P5000,我可以在这台电脑上测试这个型号。当我用GTX1060测试时,它会崩溃并给出内存错误。但当我测试预先训练过的faster_rcnn_nas时,效果很好。

预训练模型和自定义模型之间有什么区别?有什么方法可以用1060运行模型吗?或者是否有任何batch_size或类似的参数需要更改以进行测试?

我所做的:我限制了我的gpu,发现我需要最低8gb的gpu来测试我的模型。

完全错误:

ResourceExhaustedError:发现2个根错误。(0(资源耗尽:分配器GPU_0_bfc分配形状为[5004032.17,17]且类型为float的张量时OOM[[{node MaxPool2D/MaxPool-0-TransposeNWCToNCHW-LayoutOptimizer}]]提示:如果您想在OOM发生时查看已分配张量的列表,请将report_tensor_allocations_pon_OOM添加到RunOptions中以获取当前分配信息。

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

(1( 资源耗尽:分配器GPU_0_bfc在/job:localhost/replice:0/task:0/device:GPU:0上分配形状为[5004032.17,17]且类型为float的张量时OOM[[{node MaxPool2D/MaxPool-0-TransposeNWCToNCHW-LayoutOptimizer}]]提示:如果您想在OOM发生时查看已分配张量的列表,请将report_tensor_allocations_pon_OOM添加到RunOptions中以获取当前分配信息。

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

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

无论是训练模型,还是仅将该模型用于推理,这都是不同的
因此,当您使用模型进行推理时,与训练模型时相比,它将需要非常小的内存
但当您使用Tensorflow GPU训练模型时,与仅使用CPU的训练相比,这需要更多的内存,但执行时间更快,尤其是在处理复杂模型架构(即更快的RCNN(时,。

当模型使用计算密集层(如卷积层多内存的成本会使计算速度更快。

问题2:有什么方法可以用1060运行模型吗?或者是否有任何batch_size或类似的参数需要更改以进行测试?

在测试或推理时,data_length通常是任意,当input_shape = (None, ##,##)第一个参数是None时,您可以检查这一点。这意味着该模型将接受具有任何不同长度lowest data_length = 1的数据。

这意味着您只能在输入形状ie. (None, BATCH_SIZE, ##, ##)中显式定义时使用batch_size,或者向模型提供长度为batch_sizeie. (BATCH_SIZE, ##, ##)数据。

避免内存错误的一种方法是更改模型的batch_size参数。预测和模型。训练到一个较低的值,这也会提高模型的准确性,但训练时间会更长。

另一种方法是将您的数据集转换为数据集生成器,该生成器缓存您的数据,而不是将其直接加载到内存中。

您可以在此链接上阅读更多关于在Tensorflow中构建输入管道的信息。

最新更新