GEE Pytorch | 利用深度学习实现土地利用分类(上)

 大伙们,我又回来了,经历过一段时间的停更之后,不知道大伙们有没有想我

上次说的监督学习之后就是深度学习,其实说的就是这篇文章,由于篇幅过长,咱们分为上下两篇,本篇为上篇。

深度学习技术路线 -> 样本处理 -> 影像导出

01

深度学习技术路线

GEE由于是Google背书,所以关于深度学习的框架,Pytorch与TensorFlow比,那当然是TensorFlow的兼容性高一点。但是,TensorFlow,我不会

,暂时也没有学的打算,所以我就研究了下GEE上面的案例。就是下面这个:

我发现,用到TensorFlow的地方大概有下面几个:样本导出成tfrecord格式,模型训练与推理,推理结果打包成tfrecord格式上传到GEE。啊这,这流程除了一个样本导出成tf的格式,需要解析之外,其余的好像都可以使用Pytorch替换掉嘛

。反正训练推理跟GEE也没啥交互,推理完成之后上传结果倒不是非得说用tf的格式(而且也不一定非得上传嘛

)。

那整体的思路就很明了了:
那整体思路就是这个样子的,其实这篇文章实现的事情跟上篇文章监督分类实现的事情是同一件事情,都是实现土地利用分类。但是实现的方法不一样,一种是机器学习(监督分类),另外一种是用深度学习(本文方法)。最终都会得到下面的结果:

就是我们会通过一系列操作简单的将土地利用分为三类:0、城市用地,1、植被,2、水体。如果还没看过上篇文章的话,传送门在此:GEE.2.3 监督分类

好,那我们接下来就开干吧。

02

样本处理

好了,既然深度学习就会有样本模型训练模型推理三个步骤。模型训练与推理我们下篇文章说,本文我们先来看一下样本。(样本截图我就直接搬运上篇文章的吧)
我们需要将这些点与影像融合在一起,制作成我们的样本数据:
    # 导包import eeimport geemap# gee认证ee.Initialize()# 样本点,就是我们上面看到的那些点points = ee.FeatureCollection('GOOGLE/EE/DEMOS/demo_landcover_labels')# 加载landsat影像数据,并且进行去云处理l8 = ee.ImageCollection('LANDSAT/LC08/C01/T1')image = ee.Algorithms.Landsat.simpleComposite(**{ 'collection': l8.filterDate('2018-01-01', '2018-12-31'), 'asFloat': True})# 制作样本label = 'landcover'bands = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B10', 'B11'training = image.select(bands).sampleRegions(**{ 'collection': points, 'properties': [label], 'scale': 30})

    那其实,在上一部分最后我们得到的training就是我们需要的样本数据,具体是啥样的呢,我们看一下上篇文章拿来的截图:

    那红框部分就是我们执行完之后的结果了,主要是把标注的土地利用分类与影像里面各个波段的值整合在一起。在官方给的Demo中,下一步就是要导出成tf格式的样本数据了。但是我想了下,没必要了,这里直接使用吴秋生老师的geemap将样本制作成pandas中的DataFrame格式就可以了:

      df = geemap.ee_to_pandas(training)

      哦对了,顺带着提一下,本来是准备在Colab中实现全流程的,但是你懂得,Colab连接网总是断掉

      。所以就全流程都在本机跑了,不过代码都是一样的。

      样本制作完成会后,导出到本地成csv进行保存:

        df.to_csv(r'E:\gee\data\DL\samples.csv',index=False)

        ok,到此样本的准备就完事了。

        03

        影像导出

        样本导出完成之后,接下来可以顺带着将需要推理的影像导出出来。我们首先要将影像导出到Google Drive上,然后下载到本地,首先选定我们需要的区域:

          # 导出区域设置EXPORT_REGION = ee.Geometry.Rectangle([-122.7, 37.3, -121.8, 38.00])

          黑色框框内的就是咱们需要导出影像的区域了,接下来直接进行导出:

            image_export_options = { 'patchDimensions': [256, 256], 'maxFileSize': 104857600, 'compressed': True}
            # Setup the task.image_task = ee.batch.Export.image.toDrive( image=image, description='Image Export', fileNamePrefix='Image_pixel_demo_', folder='DLdata', scale=30, fileFormat='GeoTIFF', region=EXPORT_REGION.toGeoJSON()['coordinates'],# formatOptions=image_export_options,)

            执行完上面的代码之后,其实还没有真正进行导出,只是新建了一个导出任务而已,执行导出任务的话,还需要一行代码:

              image_task.start()

              执行完之后,会在GEE的CodeEditor界面看到类似截图中的场景:

              这说明任务在执行,接下来需要做的事情就是慢慢等就好了。最后你会在Google Drive中看到下面的文件:

              心细的同学可能看到,5月20号的时候我就已经搞定了。但是为啥现在才写嘞

              ,你猜。

              然后,把影像下载下来,查看一下是什么样子:

              那到这一步的时候,我们就已经全部做好准备工作了,下篇文章就可以开心的码代码了。希望你能坚持看到下篇文章哦~

              哦对了,今晚上看到同样都是90后,有的姑娘都已经是副教授(着实优秀),而我

              最后,从别的号主那看到的鸡汤共勉:贵有恒何必三更眠五更起,最无益只怕一日曝十日寒。

              (0)

              相关推荐