Matlab遇到内存不足(Out of memory)的解决办法
使用机器:
CPU (英特尔)Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz(2801 MHz)
内存 8.00 GB ( 2400 MHz)
主硬盘 1000 GB (希捷 ST1000LM035-1RK172 )
显卡 NVIDIA GeForce GTX 1050 Ti
在做图像拼接的过程中我需要把九张2160×3860×3的图像拼起来。因为采用了sift算法,产生的特征点非常非常多,难免产生很大的矩阵。在最后拼接的过程中在几个循环中经常出现Out of memory的情况。
看了几篇博客再结合自己的情况可以大致确定产生内存不足的原因:
- 变量需要的存储空间超过了可用的内存空间
- 数据需要的存储空间,超过内存中最大的可用连续存储空间
那么首先解决第一个可能的问题——内存太小
不是内存小吗,那加内存就完事了。上狗东买了一条一样的内存,回来装完后内存变成了16.00GB。同样的图像,同样的数据再试验一次。结果还是内存不足。失败
那么解决第二个可能的问题——内存太分散了
matlab在为矩阵分配的内存空间是连续的。假如前面有很多循环,很多矩阵用完被清除之后在内存里面会留下很多不连续的空间。当你再想为一个很大的矩阵分配一块很大的空间的时候就不可能了。所以我尝试着在经常出错的那几行的代码之前先给比较大的矩阵分配好空间。再来运行一次。这次虽然还是经常能看到内存占用率飙到98%但不会出现内存不足的情况了(至少做了好几次没出现)。所以!暂时能认为解决内存不足的一个silver bullet是先给矩阵预分配空间。
最后顺便附上拼接用时和九图拼起来的panorama