机器学习 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 导出数据以进行训练
- TFRecord 数据格式针对 TensorFlow 中的训练进行了优化。 机器学习示例页面包含多个 TensorFlow 工作流,这些工作流演示了如何使用 TFRecord 训练模型。
- 或者,如需查看有关如何使用 Apache Beam(托管在 Google Cloud Dataflow 中)下载数据,然后在 Vertex AI 中使用 TensorFlow 进行训练的示例,请访问土地覆盖分类教程,并按照 Colab 笔记本中的说明操作。
从地球引擎之外的模型获取预测结果
如果您在 Earth Engine 之外训练模型,则有多种方式可从该模型获取预测结果。
-
Earth Engine 的
ee.Model
软件包可使用 Earth Engine 中的数据和托管在 Google 的 Vertex AI 上的已训练模型进行预测。您可以在 Vertex AI 中托管自定义训练的模型,并使用ee.Model.fromVertexAi
直接在 Earth Engine 中执行推理。如需了解详情,请参阅图片预测指南或表格预测指南。 - 或者,土地覆盖分类教程演示了如何使用 Cloud Functions 等云服务进行预测。
在 Earth Engine 之外训练模型的其他原因
除了熟悉程度和偏好之外,如果您想使用 Earth Engine 的机器学习 API 不支持的模型架构(例如卷积神经网络)、想使用 Vertex AI 的更多功能,或者遇到 Earth Engine 的机器学习 API 的扩缩限制,您可能还需要在 Earth Engine 之外训练模型。
训练集限制
使用 ee.Classifier
或 ee.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 })