Skip to content

Latest commit

 

History

History
139 lines (119 loc) · 7.86 KB

README_zh.md

File metadata and controls

139 lines (119 loc) · 7.86 KB

English 中文版

Water_gee v1.0

Water_gee存储库存储了基于Python端实现的深度学习结合GEE实现的水体提取方法。Water_gee可实现的功能主要有瓦片影像、水体标签获取、水体标签噪声纠正、模型训练以及GEE水体预测等。Water_gee

主要解决问题

  • 解决大区域自动化水体提取问题
  • 解决深度学习的在线部署问题

主要功能

  • 瓦片影像获取GEE平台只支持最大512×512像元尺度的瓦片图像下载。通过遍历研究区样带影像,逐影像建立0.135°×0.135°瓦片矢量,对影像数据进行裁切,从而获取小瓦片影像存储在本地。图1展示了部分瓦片影像目录。


图1.瓦片影像目录

  • 水体标签噪声纠正:用上述方法获得遥感影像质量评估波段中的水体信息,并存储在本地。在地物光谱呈正态分布的假设下,构建Pixel-based CNN水体提取模型,实现水体的标签自学习以及噪声纠正。图2、图3分别为水体标签噪声纠正前后的水体标签信息。


图2.标签噪声纠正前

图3.标签噪声纠正后

  • 模型训练:构建并初始化Pixel-based CNN模型。利用文件名将之前的到的瓦片影像以及瓦片标签进行对应,裁切中心像元邻域7×7范围内的训练数据并匹配水体标签。为避免水体和非水体训练数据数量相差较大,非水体按一定比例生成,要求水体非水体数据体量相当。图4为Pixel-based CNN模型示意图,其右侧的为具体的模型参数。

Layer (type)                    Output Shape         Param 
===========================================================
input_1 (InputLayer)            [(None, 7, 7, 8)]    0     
conv2d (Conv2D)                 (None, 5, 5, 16)     1168  
conv2d_1 (Conv2D)               (None, 3, 3, 32)     4640  
tf_op_layer_strided_slice (Tens (None, 3, 3, 8)      0     
concatenate (Concatenate)       (None, 3, 3, 40)     0     
conv2d_2 (Conv2D)               (None, 1, 1, 64)     23104 
tf_op_layer_strided_slice_1 (Te (None, 1, 1, 8)      0     
concatenate_1 (Concatenate)     (None, 1, 1, 72)     0     
conv2d_3 (Conv2D)               (None, 1, 1, 128)    9344  
conv2d_4 (Conv2D)               (None, 1, 1, 2)      258   
===========================================================
Total params: 38,514

                      图4.Pixel-based CNN模型架构示意图                                                                                       模型参数

  • GEE水体预测Pixel-based CNN模型的结构中的inputconv2dconcatenate以及slice分别与GEE中的ee.Imageee.Kernel.convolveee.Image.cat以及ee.Image.select模块相对应。通过在Python中实现模型的转换函数,可实现将以CNN为基础深度学习架构的模型转换为GEE格式。利用该转换函数,实现了权重信息的获取以及云端部署。

Layer (type)                    Output shape             Connected to               GEE module
=====================================================================================================
input_1 (InputLayer)          [(None, 7, 7, 8)]  ee.Image
conv2d (Conv2D)                (None, 5, 5, 16)  input_1[0][0]                     ee.Kernel.convolve
conv2d_1 (Conv2D)              (None, 3, 3, 32)  conv2d[0][0]                      ee.Kernel.convolve
tf_op_layer_strided_slice      (None, 3, 3, 7)   input_1[0][0]                     ee.Image.select
concatenate (Concatenate)      (None, 3, 3, 39)  conv2d_1[0][0]                    ee.Image.cat
                                                 tf_op_layer_strided_slice[0][0]	
conv2d_2 (Conv2D)              (None, 1, 1, 64)  concatenate[0][0]                 ee.Kernel.convolve
tf_op_layer_strided_slice_1    (None, 1, 1, 7)   input_1[0][0]                     ee.Image.select
concatenate_1 (Concatenate)    (None, 1, 1, 71)  conv2d_2[0][0]                    ee.Image.cat
                                                 tf_op_layer_strided_slice_1[0][0]	
conv2d_3 (Conv2D)              (None, 1, 1, 128) concatenate_1[0][0]               ee.Kernel.convolve
conv2d_4 (Conv2D)              (None, 1, 1, 2)   conv2d_3[0][0]                    ee.Kernel.convolve
=======================================================================================================



                                            转换参数                                                                                                                  图5.水体提取结果

依赖的环境

与GEE实现数据交互

ee
geemap

影像数据处理

pandas
numpy
keras
osgeo

多线程操作

threading
concurrent

其他

os
time

使用方法

ipynb版本的代码主要由get_images.ipynbtrain_cnn.ipynb以及gee_predict.ipynb三个文件组成。各个文件的组成架构如下所示。在文件中针对需要修改的地方做出了必要的注释,其他部分用户也可以自定义。

  • get_images.ipynb:用于获取瓦片影像、QA波段生成的水体标签以及噪声纠正后的水体标签;
|---get_images.ipynb
    |---summer_img
    |---generate_grid
    |---project
        |---predict
        |---get_array_from_image
        |---write_tiff
        |---CNN
        |---write_grid_image
        |---cloud_free        
  • train_cnn.ipynb:用于训练初始化的Pixel-based CNN水体提取模型;
|---train_cnn.ipynb
    |---read_tiff
    |---features
    |---get_input
    |---CNN
    |---generate_inputs        
  • gee_predict.ipynb:用于模型权重获取以及云端权重部署,利用GEE的高算力,实现云端深度学习模型运算。水体提取结果存储在Google Earth EngineAssets中。
|---gee_predict.ipynb
    |---cloud_free
    |---summer_img_bounds
    |---features
    |---pixel_based_CNN
    |---relu       
water_gee v1.0为初始ipynb版本,可能会有疏漏,后期会持续完善(封装成Python包)。