文章目录

前言一、占用内存多的步骤二、解决方法1. 研究区域划分区块分别计算2.主动让步:缩小数据时间范围、降低分辨率、缩小研究区3. 优化代码3. 新的问题已经出现!

前言

果然没有什么代码是一帆风顺的,本来已经写好的随机森林RF分类,在少量特征集合上运行OK,特征维数增加后到处都显示 User memory limit exceeded!头大,记录一下解决过程。

一、占用内存多的步骤

我的代码结构为: 导入Sentinel-2数据并预处理----提取S2特征----导入Sentinel-1数据并预处理----提取S1特征----导入DEM数据----提取地形特征—整合所有特征—RF分类

其中最占用内存的步骤包括:

导入原始影像集,尤其是原始数据集时间、空间范围较大时;影像提取纹理特征并做PCA,这一步在特征维数多时计算很慢甚至超出内存;影像重投影reprojectRF分类器的计算

二、解决方法

1. 研究区域划分区块分别计算

https://blog.csdn.net/weixin_41099712/article/details/130246785 但是感觉有点麻烦,之后还要合成一张图

2.主动让步:缩小数据时间范围、降低分辨率、缩小研究区

3. 优化代码

成为付费用户(bushi)及代码优化方法:GEE:GEE平台怎么提高用户内存限制Google Earth Engine(GEE)——缩放错误指南(聚合过多、超出内存、超出最大像素和超出内存限制)!GEE(Google Earth Engine)—— 避免不必要地转换为列表

我采用的就是以上帖子中的方法,最有用的是: 将每种数据的导入–处理–特征提取步骤分开成不同脚本分别运行,将提取后的特征Export.image.toDrive,然后在任务栏把它们导出到assets,最后用RF分类的时候再把所有特征导入,所有的飘红都消失了! 4. RF分类器内存超限:增大tileScale参数。见GEE随机森林法报错user memory limit exceeded!

3. 新的问题已经出现!

报错:Earth Engine memory capacity exceeded 暂时还没找到解决途径 现在的情况是: 仅运行Sentinel-2影像处理、特征提取过程,能得到最终的特征集,但是会飘红,包括但不限于:

s2_mosaic: Tile error: Output of image computation is too large (3 bands for 971100756 pixels = 11113.4 MiB > 80.0 MiB). If this is a reduction, try specifying a larger ‘tileScale’ parameter.

运行一次这条报错7次,而且是结果已经计算出来后等待好一会才报错。我尝试从后往前不断删掉一些步骤,看从哪一步开始报错,结果是一计算纹理特征就出错!

GEE你总是内存不足的样子真的很狼狈!和我的C盘一样不堪一击!不堪重负! 我的研究区大小为7000km2,已经在考,划分成县一个一个做了。。。

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: