Google Earth Engine(GEE)深度学习入门教程- GEE导出篇

这篇具有很好参考价值的文章主要介绍了Google Earth Engine(GEE)深度学习入门教程- GEE导出篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

GEE导出篇

官方教程:TFRecord 和地球引擎
Google Earth Engine(GEE)深度学习入门教程- GEE导出篇,GEE,遥感相关,深度学习,深度学习,人工智能

在GEE的JS Code Editor中,我们按照我们的需要去处理对应的遥感影像,得到处理后Image影像。为了导出后读取数据,在导出前一定清楚每个波段的名称(不然没法读取)。深度学习数据集所需数据以为patch为单位,所以需要对整个遥感影像进行裁剪,我探索出来GEE能实现的裁剪方法的有2种滑窗裁剪、随机裁剪

随机裁剪:随机选择生成多个样点,然后裁剪样点周围的邻域,导出。用作构造数据集

滑窗裁剪:设定步幅和窗口大小,裁剪完整影像,导出。用作大范围推理验证

滑窗裁剪

Google Earth Engine(GEE)深度学习入门教程- GEE导出篇,GEE,遥感相关,深度学习,深度学习,人工智能

导出有2个重要参数:patchSizekernelSize。patchSize 是指滑窗不重叠区域的大小,kernelSize是指滑窗重叠缓冲区的大小。例如:patchSize 为32,kernelSize为32,则导出的图像单个大小为64*64,中间的32*32为不重叠区域,边缘的16格像素为缓冲区大小。导出图像时,数据按通道、高度、宽度 (CHW) 排序。导出可以拆分为多个 TFRecord 文件,每个文件包含一个或多个 大小的 patches ,这是用户在导出中指定的。文件的大小(以字节为单位是用户在参数中指定的)。

代码如下:

Export.image.toCloudStorage({
    image : image.toFloat(),         //保证所有层数据类型统一,导出Image影像
    description : desc,              //任务名称
    bucket : BUCKET,                 //存储桶名称
    fileNamePrefix : FOLDER + '/' + desc,      //保存的路径及文件名
    region : ee.Feature(savePolys.get(g)).geometry(),//范围矢量
    scale : 10,                     //分辨率
    fileFormat : 'TFRecord',        //格式
    maxPixels : 1e13,                      
    formatOptions : {
      'patchDimensions': [32,32], //核心区大小
      'kernelSize': [32,32],     //缓冲区
      'compressed': true,
      'maxFileSize': 104857600*10 //400M 
      }
     });

导出结果:

Google Earth Engine(GEE)深度学习入门教程- GEE导出篇,GEE,遥感相关,深度学习,深度学习,人工智能

导出内容除了包含TFRecord格式的数据包之外,还有一个json格式文件,文件内部保存着影像的裁剪结果和地理位置信息,例如:

{
  "projection": {
    "crs": "EPSG:4326",
    "affine": {
      "doubleMatrix": [8.983152841195215E-5, 0.0, 116.04113446753695, 0.0, -8.983152841195215E-5, 33.789500591456914]
    }
  },
  "patchDimensions": [32, 32],
  "patchesPerRow": 19,
  "totalPatches": 285
}

其中:crs为投影坐标系、doubleMatrix为地理仿射变换矩阵、patchDimensions为不重叠区域大小、patchesPerRow为裁剪区域内每行得到的样本数量、totalPatches为总的patch数量。这些信息都是为了将裁剪后的普通图像恢复为遥感影像。

随机裁剪

随机生成样点,然后裁剪样点周围的邻域,导出。主要用作构造数据集,扩充数据集的样本量。

因为本文的使用的预处理过程比较复杂,数据量比较大,直接对整幅影像导出会导致GEE用户内存溢出,所以本文对研究区进行区块划分

划分训练、验证、测试区域的代码分为以下几个步骤:

  1. 确定划分区域的左下角和右上角的经纬度坐标(corner1、corner2)
  2. 设定横向纵向划分块数:sliceN = 10
  3. 生成区块
  4. 使用ee.Filter.isContained去除不被包含在研究区的区块
  5. 按照6:2:2比例划分区块为训练、验证、测试区块
  6. 导出区块矢量为geometryLayer并保存到Map.drawingTools()中

Google Earth Engine(GEE)深度学习入门教程- GEE导出篇,GEE,遥感相关,深度学习,深度学习,人工智能

//将研究区划分为多个区域,并按照6:2:2的比例划分训练、验证、测试区域,
  //!!!仅需执行一次,手动将区域格式变化为featureColection
  var roi = ee.FeatureCollection('TIGER/2018/States').filter(ee.Filter.eq('NAME', 'Illinois'));
  // 将研究区域按照 10*10 的大小进行分割,循环处理子区域
  var corner1 = [-91.70112615545109, 36.986063288694794]
  var corner2 = [-87.30659490545109, 42.60259690092805]
  var sliceN = 10;
  var slicePolysList = ee.List([])
  for (var x = corner1[0]; x < corner2[0]; x += (corner2[0]-corner1[0])/sliceN) {
  for (var y = corner1[1]; y < corner2[1]; y += (corner2[1]-corner1[1])/sliceN) {
    var x2 = x+(corner2[0]-corner1[0])/sliceN
    var y2 = y+(corner2[1]-corner1[1])/sliceN
    var area = ee.Geometry.Rectangle(x, y, x2, y2);
    slicePolysList = slicePolysList.add(ee.Feature(area))
  }
  }
  var slicePolys = ee.FeatureCollection(slicePolysList)   // 去除不被完全包含的区域
                  .filter(ee.Filter.isContained({leftField: '.geo',rightValue: roi.geometry()}))
                  .randomColumn("random", 1)
  var trainPolys = slicePolys.filter(ee.Filter.rangeContains("random",0,0.6))
  var evalPolys = slicePolys.filter(ee.Filter.rangeContains("random",0.6,0.8))
  var testPolys = slicePolys.filter(ee.Filter.rangeContains("random",0.8,1))
  var geometryLayer = ui.Map.GeometryLayer({geometries: [trainPolys.geometry().getInfo()], name: 'trainPolys',color: 'green'});
  // 将 GeometryLayer 添加到地图
  Map.drawingTools().layers().add(geometryLayer);
  var geometryLayer = ui.Map.GeometryLayer({geometries: [evalPolys.geometry().getInfo()], name: 'evalPolys',color: 'red'});
  // 将 GeometryLayer 添加到地图
  Map.drawingTools().layers().add(geometryLayer);
  var geometryLayer = ui.Map.GeometryLayer({geometries: [testPolys.geometry().getInfo()], name: 'testPolys',color: 'blue'});
  // 将 GeometryLayer 添加到地图
  Map.drawingTools().layers().add(geometryLayer);

区块划分完成后,我们使用循环逐个区块随机采样并进行导出,单个样本大小为64*64。单次采样过多也会内存溢出,所以一个区块也要采样多次,每次采样少一点。文章来源地址https://www.toymoban.com/news/detail-777015.html

//此时需要让单次处理的区域尽可能小
//https://developers.google.com/earth-engine/guides/tf_examples
var BUCKET = 'yqs'
var FOLDER = 'yangfangVal'


var TRAINING_BASE = 'training_patches'
var EVAL_BASE = 'eval_patches'
var TEST_BASE = 'test_patches'

var BANDS  = ["B2","B3","B4","B5","B6","B7","B8","B8A","B11","B12"]
var RESPONSE = 'soya'
var FEATURES = BANDS.concat([RESPONSE])
print(FEATURES)

var N = 160       //单个区域内的采样数量。
var n = 16      //单区域采样次数。增大n,可以减少单次采样的数量,防止出现Computed value is too large.错误 !但是导出速度会变慢
var KERNEL_SIZE = 64    //减小此值可以防止出现采样时出现 Computed value is too large. 128导出数据包太大了
var KERNEL_SHAPE = [KERNEL_SIZE, KERNEL_SIZE]
var list = ee.List.repeat(1, KERNEL_SIZE)
var lists = ee.List.repeat(list, KERNEL_SIZE)
var kernel = ee.Kernel.fixed(KERNEL_SIZE, KERNEL_SIZE, lists)

trainPolys = trainPolys.toList(trainPolys.size());  // 将 FeatureCollection 转换为 FeatureList
evalPolys = evalPolys.toList(evalPolys.size());  
testPolys = testPolys.toList(testPolys.size());  

var savePolys = testPolys
var BASE = TEST_BASE//TRAINING_BASE;//EVAL_BASE//TEST_BASE
//为了保证内存不溢出,在处理图片的时候尽可能处理较小块的区域
for (var g = 0; g < savePolys.size().getInfo(); g++) {
  var geomSample = ee.FeatureCollection([]); // 用于存储采样点的 FeatureCollection
  // 数据集标签的加载函数,请根据自己需求对应修改。
  var soya = CDLlib.getCDL()
  //影像预处理函数,请根据自己需求对应修改。
  var S2 = S2lib.getS2Image(BANDS,ee.Feature(savePolys.get(g)).geometry())
  
  var image = S2.addBands([soya]).rename(FEATURES)
  //给多个数据包命名
  var desc = BASE + '_g' + g.toString();
  print(image)
  var arrays = image.toFloat().neighborhoodToArray(kernel)
  for (var i = 0; i < n; i++) {
  	var sample = arrays.sample({
       region: ee.Feature(savePolys.get(g)).geometry(),
       scale: 10,
       numPixels: N / n,
       seed: i,
       tileScale: 8
     });
  	// print(sample.size())
  	geomSample = geomSample.merge(sample); // 将采样点合并到 geomSample 中
  }
  
  // Map.addLayer(image,{bands: ['soya']},desc);//调试用
  // //print(geomSample.size())//调试用
  // Map.addLayer(ee.Feature(savePolys.get(g)).geometry().buffer(640),[],desc);//调试用
   
  var task = Export.table.toCloudStorage({
     collection: geomSample,
     description: desc,
     bucket: BUCKET,
     fileNamePrefix: FOLDER + '/' + desc,
     fileFormat: 'TFRecord',
   });
}

到了这里,关于Google Earth Engine(GEE)深度学习入门教程- GEE导出篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Google Earth Engine(GEE)——LandScan人口数据集

    Google Earth Engine(GEE)——LandScan人口数据集

    LandScan人口数据 LandScan计划于1997年在橡树岭国家实验室(ORNL)启动,以满足为后果评估改进人口估计的需要。例如,全球范围内的自然和人为灾害使大量的人口处于危险之中,而且往往没有什么预先警告。开发高分辨的估计值是至关重要的,这样他们就可以对多个地理范围内

    2024年02月12日
    浏览(8)
  • Google Earth Engine(GEE)——可视化动态图

    Google Earth Engine(GEE)——可视化动态图

    代码: 这里每一次最终的影像结果:  本文所需用到的函数: getVideoThumbURL(params, callback) 为这个ImageCollection获取一个动画缩略图的URL。 返回一个缩略图的URL,如果指定了回调,则未定义。 参数。 this:imagecollection(ImageCollection)。 ImageCollection实例。 params (对象): 与ee.data.get

    2024年02月16日
    浏览(9)
  • Google Earth Engine(GEE)——python导出 GeoTIFF 文件

    处理地球引擎数据集后,您可能需要将结果导出 ee.Image 到 GeoTIFF。例如,将其用作 Earth Engine 外部数值模型的输入,或将其与您喜欢的 GIS 中的个人地理参考文件重叠。有多种方法可以做到这一点(请参阅开发人员指南的导出部分)。在这里,我们探索两种选择: ee.Image 在

    2023年04月13日
    浏览(9)
  • Google Earth Engine(GEE)——快速建立一个10km的格网

    本文的主要目的是如何快速实现区域的一个网格的建立,主要过程是获取影像的经纬度,然后分别获取经纬度乘以一个数然后转化为整型,并将长宽相乘转化为一个矢量,然后对每一个歌王进行边界的坐标的获取与,最后返回一个多边形geometry,最后还要建立一个可以画图的

    2024年02月05日
    浏览(13)
  • Google Earth Engine(GEE)下载全球土壤砂粒(Sand)含量数据

    Google Earth Engine(GEE)下载全球土壤砂粒(Sand)含量数据

    SoilGrids,是一个全球土壤属性地图,现在可以通过GEE下载。 SoilGrids是ISRIC–世界土壤信息的一个项目,旨在提供一个全球一致的、由数据驱动的系统,以预测土壤性质,并将其作为一项重要指标。该项目旨在提供一个全球一致的、由数据驱动的系统,使用全球协变量和全球拟

    2024年02月08日
    浏览(10)
  • Google Earth Engine(GEE)合成长时序的月NDVI与LST

    Google Earth Engine(GEE)合成长时序的月NDVI与LST

    今天来简单分享下如何在GEE 合成长时序的月NDVI与LST,并进行分析 目标: 利用MODIS为数据源,在GEE计算某一地区对 月NDVI与LST ,并制作统计图 以武汉市为研究区 GEE实现代码: 首先确定研究区和使用的数据集 确定起止时间和月份 合成NDVI和LST 合成月NDVI 同样的方法合成月LST

    2024年02月15日
    浏览(15)
  • GEE(Google earth engine)中的Landsat影像的选择和去云(附代码)

    GEE(Google earth engine)中的Landsat影像的选择和去云(附代码)

            在这里可以看到GEE提供的全部Landsat数据:Landsat Collections in Earth Engine  |  Earth Engine Data Catalog  |  Google Developers               随便点进去,比如Landsat8,有三个数据,一个是地表面反射率数据,一个是大气层顶部的反射率数据,一个是raw。大气层顶部的反射数据

    2024年02月03日
    浏览(15)
  • Google Earth Engine(GEE) ——AI绘图工具Midjourney能替代传统设计师吗?

    近期智能AI话题爆火,前有ChatGpt,现又出现了一个AI绘图工具Midjourney,号称没有美术基础的人也能快速上手制作出漂亮的图像。也有不少声音表示设计师都要失业了。AI绘图工具能取代设计师吗?你可以参考以下角度来谈谈你的看法。 前言 – 床长人工智能教程 1,你目前从事

    2024年02月09日
    浏览(9)
  • Google Earth Engine(GEE)——function中函数注意事项(内部变量不可在函数外调用)

    function函数是JavaScript的基本构件之一。JavaScript中的函数类似于过程--一组执行任务或计算数值的语句,但要使一个过程有资格成为一个函数,它应该接受一些输入并返回一个输出,在输入和输出之间有一些明显的关系。要使用一个函数,你必须在你想调用它的范围内定义它。

    2024年02月13日
    浏览(12)
  • Google Earth Engine(GEE)——土地分类精度分析randomColumn产生伪随机数然后进行混淆矩阵计算

    Google Earth Engine(GEE)——土地分类精度分析randomColumn产生伪随机数然后进行混淆矩阵计算

    我们在进行土地分类时,需要进行精度验证,但是之前我们要进行样本点的随机分类,也就是分出一部分作为训练样本另外一部分作为,这是我们要想产生随机种子赋值给我们所选定的训练样本,这样我们就可以随机将样本进行分成训练样本和验证样本,而我们使用的函数

    2024年02月09日
    浏览(7)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包