大家都知道,在Google Earth Engine上做分类,多数是随机森林等逐像素分类模型。性能很好,但是对于上下文信息则利用较少,而且训练的时候并不能非常好的利用样本数据,因此在上面使用深度学习模型就成为了需要完成的重要步骤。
GEE学习室的老师们最近使用GEE训练了深度学习模型用于不透水面分类,可以直接应用于不同年份和不同地区的研究,去除了繁琐的影像下载,大大提高了实用性。
以北京市为例,使用Sentinel-2影像数据,然后利用深度学习模型,可以很快就得到不透水面的分类专题图,如下所示:
放大结果图看,如下所示,可以发现细节保持的很好。而且,如果对比其他的土地利用分类产品,就会发现使用深度学习得到的结果会好很多。
最后,我们给出代码,方便有需要的同学直接调用查看。
// set study area
var roi = AOI2;
Map.addLayer(roi,{'color':'grey'},'studyarea');
Map.centerObject(roi);
// define the year and band info
var year = 2020;
var S2_bands = ["B2", "B3", "B4", "B8", "B11", "B12"];
// select sentinel-2 images
var s2Image = ee.ImageCollection('COPERNICUS/S2_SR') //S2_SR
.filter(ee.Filter.calendarRange(year,year,'year'))
.filter(ee.Filter.calendarRange(5,10,'month'))
.filterBounds(roi)
.map(rmS2cloud)
.select(S2_bands)
.mean()
.clip(roi);
var visParam = {
"Bands":["B8","B4","B3"],
"min":0.0,
"max":0.2
};
Map.addLayer(s2Image,visParam,"S2SRCol");
var imgMedian = s2Image;
// 直接调用模型
var model = require('users/nietaoyuan/aGEECommonModule:geeDLUrbanModel.js');
var imgPredict = model.urbanModel(imgMedian,roi);
Map.addLayer(imgPredict,{'palette':'red'}, 'CNN_urban');
var urbanMask_1 = CLCD_2020.eq(8).clip(roi);
Map.addLayer(urbanMask_1.selfMask(), {'palette':'red'}, 'urbanMask_1',false);
var urbanMask_2 = CAS_2020.gte(51).and(CAS_2020.lte(53)).clip(roi);
Map.addLayer(urbanMask_2.selfMask(), {'palette':'blue'}, 'urbanMask_2',false);
// remove cloud from Sentinel-2
function rmS2cloud(image) {
var qa = image.select('QA60');
// Bits 10 and 11 are clouds and cirrus, respectively.
var cloudBitMask = 1 << 10;
var cirrusBitMask = 1 << 11;
// Both flags should be set to zero, indicating clear conditions.
var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
.and(qa.bitwiseAnd(cirrusBitMask).eq(0));
var mask2 = image.select("B2").lte(2000);
return image.updateMask(mask).updateMask(mask2).divide(1e4)
.copyProperties(image)
.copyProperties(image, ["system:time_start", "system:time_end"]);
}