Earth Engine 中的机器学习

机器学习 API

机器学习 (ML) 是一种强大的分析地球观测数据的技术。Earth Engine 具有内置功能,可让用户通过易用的 API 针对常见场景构建和使用机器学习模型。

一个常见的机器学习任务是将卫星图像中的像素分类到两个或更多类别。此方法适用于土地利用/土地覆盖图绘制和其他热门应用。

  • 监督式分类:用于对土地进行分类的一种机器学习技术是使用标准答案示例来教会模型区分类别。Earth Engine 的内置监督式分类器支持此过程。
  • 非监督式分类:在非监督式分类中,系统不会向训练算法提供标准答案示例。相反,该算法会根据固有差异将可用数据划分为多个聚类。当不存在地面真相数据、您不知道最终类别数量或想要快速进行实验时,Earth Engine 的无监督分类器特别有用。
  • 回归:分类模型会尝试将每个输入划分到一个离散类别,而回归模型会尝试为每个输入预测一个连续变量。例如,回归模型可以预测水质、森林覆盖率、云量或农作物产量。如需了解详情,请参阅 ee.Reducers 的“线性回归”部分

在 Earth Engine 之外进行训练和预测

深度学习和神经网络是机器学习技术,适用于卫星图像等复杂数据。Earth Engine 的机器学习 API 不支持深度学习或神经网络。 不过,若要利用这些功能,您需要使用 TensorFlow 或 PyTorch 等框架,并在 Earth Engine 之外训练模型。

如果您已经熟悉某个框架(例如用于传统机器学习的 scikit-learn 或用于梯度提升决策树的 XGBoost),则可能还希望在 Earth Engine 之外进行训练。

最后,如果您的数据集非常大,超出了下文所述的限制,您可能需要在 Earth Engine 之外训练模型。

从 Earth Engine 导出数据以进行训练

在 Earth Engine 之外从模型获取预测结果

如果您在 Earth Engine 之外训练模型,则可以通过多种方式从该模型获取预测结果。

  • Earth Engine 的 ee.Model 软件包允许使用 Earth Engine 中的数据和托管在 Google Vertex AI 上的训练模型进行预测。 您可以在 Vertex AI 中托管自定义训练的模型,并使用 ee.Model.fromVertexAi 直接在 Earth Engine 中执行推理。 如需了解详情,请参阅连接到托管在 Vertex AI 上的模型
  • 或者,您也可以参阅“土地覆盖分类”教程,了解如何使用 Cloud Functions 等云服务进行预测。

在 Earth Engine 之外训练模型的其他原因

除了熟悉度和偏好之外,如果您想使用 Earth Engine 的机器学习 API 不支持的模型架构(例如卷积神经网络),想使用 Vertex AI 的更多功能,或者在使用 Earth Engine 的机器学习 API 时遇到扩缩限制,则可能需要在 Earth Engine 之外训练模型。

训练集限制

使用 ee.Classifieree.Clusterer 进行训练通常适用于大小不超过 100 MB 的数据集。作为一个非常粗略的准则,假设精度为 32 位(即浮点),则可以容纳满足以下条件的训练数据集(其中 n 是示例数量,b 是波段数量):

nb ≤ (100 * 2 20) / 4

例如,如果您使用 100 个频段进行训练,则用于训练的示例数量应少于 20 万个。

推理限制

由于 Earth Engine 处理的是 256x256 像素图块,因此针对图像的推理请求必须少于 400 个波段(再次假设图像的 32 位精度)。

您可以多次重新训练分类器,以使每次训练运行的数据集保持在限制范围内。

      var trainings = ee.List.sequence(0, 3).map(function(cover) {
          return image.addBands(landcover.eq(cover).stratifiedSample()
      })

      var classifier = ee.Classifier.smileCart()
          .train(trainings.get(0), "cover")
          .train(trainings.get(1), "cover")
          .train(trainings.get(2), "cover")
          .train(trainings.get(3), "cover")
    

模型大小限制

此外,模型本身必须小于 100 MB。我们的许多分类器都可以配置,以限制其复杂性,从而限制其大小。例如:

      var classifier = ee.Classifier.smileRandomForest({
          numberOfTrees: 10,
          minLeafPopulation: 10,
          maxNodes: 10000
      })