本人的研究方向是基于深度学习方法的作物遥感识别。经查阅目前的相关教程资料后,发现深度学习的GEE教程几乎没有,所以开始动笔写下此片文章,给后面研究这个方向的人提供一点帮助吧。
为什么要写这份教程?

一、深度学习越来越重要了

二、Google Earth Engine(GEE)是重要的遥感信息处理工具
传统的遥感影像处理工具,如ENVI、Erdas Imagine、ArcGIS等,在传统遥感数据处理领域得到广泛应用。Google Earth Engine是由Google开发的,于2010年发布。)其是一个强大的云计算平台,旨在支持大规模地理空间数据的存储、处理、分析和可视化。它提供了丰富的遥感数据集和分析工具,使用户能够在云端高效地进行地理信息处理。
Google Earth Engine (GEE) 相较于传统工具有以下几个优势:
总之,GEE是一个功能强大、易于使用的地理信息处理平台,为我们提供了丰富的数据集、分析工具和社区支持,帮助我们高效地进行地理信息处理和分析。
三、Google Earth Engine(GEE)的深度学习教程很少
GEE的官方教程中多是机器学习的教程和案例代码,有关深度学习的教程和代码较少,只有如下几个:
托管深度学习模型进行预测
Tensorflow 和 Vertex AI 示例
TFRecord数据格式
但其仅有的教程在有些细节上解释的不够清楚,给初学者带来很多麻烦。
中文互联网上教程也不多,寥寥几篇,内容也不够丰富和全面。目前检索到的教程如下:

使用GEE平台做深度学习,首先我们要明白一个基础问题,GEE云平台本身不支持深度学习模型的训练,它仅支持经典机器学习算法和提供tensorflow深度模型预测的接口,我们应该将其视为一个数据预处理工具。
GEE使用深度学习方法做研究的基础流程是:
在线模型训练
本地模型训练
本教程是使用本地GPU进行模型训练,推理也是在本地进行的。GEE支持JS和python 2种客户端,本教程是使用的JS客户端。预计分为以下几个章节来撰写:
前置条件:GEE账号、GPU、本地python开发IDE、conda虚拟环境
所需条件:
Google Cloud Storage(GCS)是谷歌云平台(GCP)一部分, 这是一个云存储平台,旨在存储大型非结构化数据集。
我们需要在云存储创建储存桶,将GEE处理好的数据导出其中暂存。使用Python程序下载储存桶中的文件,保存本地。
1、购买付费的云存储服务
首先需要有一个谷歌账号,登录云平台,开始使用,每个新用户都免费获得 $300 赠金,在未来 90 天内试用 Google Cloud。但是账号认证需要付款信息验证,即绑定一张国外银行卡(不能使用中国银行卡、支付宝和微信付费)。
解决方案有两种:
必须搞定这个账号,不然数据是无法导出保存的。
2、创建存储桶
账号注册完成之后,应该需要创建一个项目,GCP中的一切都围绕着项目展开。 每个项目可以有多个存储桶,围绕它们构建Google Cloud Storage的架构。 每个存储桶可以包含任意数量的对象,可以是文件夹和/或文件。 创建存储桶时,会为其分配存储类别和地理位置。 这些设置可以在创建存储桶时指定,但以后不能更改。
存储桶具有特定的命名约定 ,必须严格遵守这些约定 ,否则GCP将不允许您创建存储桶。 存储桶名称在全球范围内是唯一的,因此需要以防止冲突的方式进行选择。 但是,删除的存储桶使用的名称可以重复使用。此外,将名称分配给存储桶后就无法更改。 如果要更改它,唯一的解决方案是使用所需名称创建一个新存储桶,将内容从前一个存储桶移动到新存储桶,然后删除前一个存储桶。
3、 Python GCS库安装
官方教程:Python client library | Google Cloud
为了方便下载云存储的文件,我们需要安装python对应的库
pip install google-cloud-storage 使用python程序访问储存桶文件需要对python客户端进行验证(即用户登录)
Google 的身份验证方法官方教程中提供了多种方法,我采用的方案是服务账号密钥,
如需创建服务账号密钥并将其提供给 ADC,请执行以下操作:
按照创建服务账号密钥中的说明,创建一个具有您的应用所需的角色的服务账号,并为该服务账号创建密钥。
或者教程可参考【GoogleDriveApi】创建Google凭据(OAuth2和Service Account)_获其中的Service Account凭据创建,导出得到json格式的凭据。

将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为包含凭据的 JSON 文件的路径。例如下图:

4、 Python GCS库测试
from google.cloud import storage import os # 实例化 Storage 客户端 client = storage.Client() # 指定存储桶名称 bucket_name = 'yqs' # 指定文件夹名称 folder_name = 'predict' # 得到指定存储桶的引用 bucket = client.get_bucket(bucket_name) # 列出存储桶中的所有对象 for blob in bucket.list_blobs(prefix=folder_name): print(blob.name) 如果可以正常打印的话代表你把这部分搞定了。
下面附上GCS的下载代码:
from google.cloud import storage import os def download_blob(bucket_name, source_blob_name, destination_file_name): """ 下载 GCS 存储桶中指定的文件。 """ # 初始化 GCS 客户端 storage_client = storage.Client() # 获取指定的存储桶和文件 bucket = storage_client.bucket(bucket_name) blob = bucket.blob(source_blob_name) # 下载文件 blob.download_to_filename(destination_file_name) print(f"File {source_blob_name} has been downloaded to {destination_file_name}.") def download_folder(bucket_name, folder_name, destination_folder): """ 下载 GCS 存储桶中指定文件夹下的所有文件。 """ storage_client = storage.Client() bucket = storage_client.bucket(bucket_name) # 列出指定路径下的所有文件 blobs = bucket.list_blobs(prefix=folder_name) for blob in blobs: # 获取文件名 file_name = blob.name.split("/")[-1] # 设置过滤规则,例如非gz格式的不下载 if file_name[-2:] != 'gz': continue # 检查目标文件夹中是否已经存在同名的文件,如果存在,则不再下载 if os.path.isfile(f"{destination_folder}/{file_name}"): print(f"File {blob.name} already exists in {destination_folder}.") else: print(f"File {blob.name} is downloading to {destination_folder}/{file_name}.") blob.download_to_filename(f"{destination_folder}/{file_name}") print(f"File {blob.name} has been downloaded to {destination_folder}/{file_name}.") # # 下载指定路径下的文件夹到本地文件夹 download_folder("yqs", "yangfangVal", "data/yangfang") # 下载指定路径下的文件到本地 #download_blob("yqs", "yangfangVal/eval_patches_g0.tfrecord.gz", "data/yangfang/eval_patches_g0.tfrecord.gz") 通过这段代码可以批量下载存储桶中的文件,而不需要手动在浏览器一个一个下载。
首先罗列出所需下载的东西(window环境下):
提供作者的一个硬件配置及软件版本参考:
| 项目 | 内容 |
|---|---|
| 中央处理器 | Intel® Xeon® Gold 6248R CPU @ 3.00GHz |
| 内存 | 192GB |
| 显卡 | NVIDIA Quadro P4000 |
| 操作系统 | Windows 10 |
| CUDA | Cuda10.4 |
| IDE | Jupyter Lab 3.6 |
| 软件平台及框架 | Python3.9、Tensorflow2.10、Keras2.10 |
至于这些环境的安装教程,网络上已经有太多了,本文不赘述:
提供参考:
机器学习:完整配置TensorFlow开发环境 - 知乎 (zhihu.com)
Anaconda 搭建 Tensorflow 2 开发环境 - 知乎 (zhihu.com)
JupyterLab最全详解,如果你还在使用Notebook,那你就out了! - 知乎 (zhihu.com)
JupyterLab TensorBoard Pro:功能完备的 TensorBoard 插件 (high-flyer.cn)