为什么我遇到“内存溢出”错误使用更快R-CNN方法?

16个视图(30天)
我试图使用fasterRCNNobjectDetector,但它越来越“内存溢出”错误,即使降低miniBatchSize 4(这是该算法的最小)即使在CPU而不是GPU的:
选择= trainingOptions (“个”,
“MiniBatchSize”4
“InitialLearnRate”1 e-6
“MaxEpochs”10
“ExecutionEnvironment”,“cpu”,
“CheckpointPath”,tempdir);
应该注意的是,这种情况发生后重新启动MATLAB。简单RCNNobjectDetector(不是更快的版本)的作品,但我怎么能跑得更快的版本吗?

接受的答案

MathWorks支金宝app持团队
编辑:MathWorks支金宝app持团队 2021年6月25日
这个问题可能是由于以下原因造成:
1)大图像的输入维度(大图片)
2)在GPU卡内存有限的可用性。
3)网络体系结构的规模和复杂性(大网络像VGG-16)
4)(1)和(3)的组合。
此外,越快R-CNN方法处理整个输入图像没有调整。这与“RCNNObjectDetector”方法执行固有的裁剪和调整的区域与输入网络的维度。
此外,越快R-CNN方法列车的地区建议网络架构来源于网络传递到函数。更准确地说,去年卷积后的层次层被删除,取而代之的是两个小回旋的层,从而增加算法的复杂性。这两个条件也许可以解释为什么“trainRCNNObjectDetector”方法是能够成功地在同一网络训练。
两个工作区继续使用“trainFasterRCNNObjectDetector”下面提到的方法:
1)设置“trainFasterRCNNObjectDetector”的“SmallestImageDimension”参数值为400。然而,这个参数可能需要调整占GPU规范。设置这个参数将调整图像在训练和帮助避免“内存溢出”错误。
2)使用一个更小的网络除了设置“SmallestImageDimension”参数如本例所示:
我们建议设置“SmallestImageDimension”参数设置为< = 600。这将自动调整图像在训练。或者,用户可以手动调整图像本身的边界框之前地面实况数据调用训练功能。
3)更新GPU卡。训练一个网络像VGG-16使用R-CNN更快的方法,可能需要更多的内存的GPU。
4)版本的R2019b和上图:将大型图像转换成“bigimage”对象,然后使用这个“bigimage”对象在使用“检测”功能(而不是原始图像):
大图像对象休息大图和成块。函数是在MATLAB应用于图像然后进行每一个块,而不是整个图像,以节省内存。“应用”功能是用于执行一个函数在一个大的图像。“bigimage”和“应用”的文档如下所示:
bigimage:
应用:
在使用“检测”功能和“bigImage”对象,一个使用“应用”函数执行“检测”功能对象的每一块。假设图像数据被命名为“imageVariable”MATLAB工作区,代码看起来如下:
> > bgIMG = bigimage (imageVariable,“BlockSize”1500年[1500]);%这创建一个bigimage对象不小于1500 x 1500块
> > bblocks =应用(img 1 @ (x)检测(探测器,x,“ExecutionEnvironment”,“cpu”))%这将调用检测bigimage对象的函数
你可以考虑改变的参数传递到“bigimage”和“应用”功能,试图减少这个运行时。
返回的值,“bblocks”,将是一个n x 2单元阵列,其中n是块“bigimage”对象的数量。这个单元格数组的每一行有两个细胞,第一个将包含检测边界框为给定的块,而另一个包含块的大图的起源。
这个输出格式是“输出”一节中所描述的“应用”文档:

更多的答案(0)

下载188bet金宝搏


释放

R2017a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!