Py学习  »  机器学习算法

Google Earth Engine平台中使用深度学习和传统模型进行水产养殖区识别对比研究

走天涯徐小洋地理数据科学 • 1 周前 • 116 次点击  

水产养殖区是我们国家海洋经济的一个体现,近些年就发生了很大的变化,其中最直接的变化就是水产养殖区域明显变大变多。今天,我们就用gee来进行一下水产养殖区域的识别,本次我们会用到两种模型:一种是传统的分类模型,一种是深度学习模型,都是在Google Earth Engine平台上实现。

首先,我们使用随机森林random forest模型来实现区域的识别,这个相对来说很简单,主体代码如下所示。不难发现,RF算法虽然效果还不错,但是很容易受到椒盐噪声的影响,这个也是gee平台上传统分类模型的通病。

  

  

var S2_bands = ["B2", "B3", "B4", "B8", "B11", "B12"];// select sentinel-2 imagesvar s2Image = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED") //S2_SR                .filter(ee.Filter.calendarRange(year,year,'year'))                .filter(ee.Filter.calendarRange(month_start,month_end,'month'))                .filterBounds(roi)                .map(rmS2cloud)                .select(S2_bands)                .median()                .clip(roi);var visParam = {  "bands":["B4","B3","B2"],  "min":0,  "max":0.3};              Map.addLayer(s2Image,visParam,"S2SRCol");
/*********************************************************************** * 使用随机森林分类***********************************************************************/// generate the featureCollection for training and validationvar sampledSet = s2Image.select(S2_bands).sampleRegions({ collection: sampleSet, properties: ['landcover'], scale: 10, // tileScale:16, geometries: true});var randomSet = sampledSet.randomColumn({ columnName:'random', seed: 8});
//把生成随机数大于0.7的分成测试数据,否则为训练数据var split = 0.7; var trainSet = randomSet.filter(ee.Filter.lt('random', split));var testSet = randomSet.filter(ee.Filter.gte('random', split));print("trainSet info:",trainSet.first());
// train the RF classification modelvar RFModel = ee.Classifier.smileRandomForest(100) .train({ features: trainSet, classProperty: 'landcover', inputProperties: S2_bands });
// Classify the input imagery.var ImClassified = s2Image.classify(RFModel);ImClassified = ImClassified.updateMask(ImClassified.gt(0)).clip(roi);Map.addLayer(ImClassified,{'palette':'red'}, 'rf_Raft');

// remove cloud from Sentinel-2function 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"]);}

接下来,我们使用CNN深度学习模型来识别raft区域,得到如下的结果图。通过和随机森林模型识别结果对比,可以发现深度学习模型得到的结果会规则很多,受到椒盐噪声的影响也很小。此外。模型运行速度非常快,与传统模型的运行效率不相上下甚至更快,但性能的提升确实肉眼可见。

  

  

由于CNN模型的使用比较复杂,想了解的同学可以联系小编。

交流合作&科研搭子

团队简介:geeAI前沿哨是一群具有摄影测量与遥感和计算机等专业背景的高校博士生(含在读和已毕业)创办的用于分享科学前沿动态、专注智能计算和数据的平台。该平台主要结合Google Earth Engine(GEE)云平台和人工智能(AI)技术,实现对地理空间数据的高效处理和智能分析。截至目前,已经有好几千人参加了本平台的学习课程等,其中报名的会员人数已经超过400+,协助学员发表SCI一区/二区高级别论文20篇以上。
科研搭子: geeAI前沿哨创建了多个学习交流群,交流群成员来自各地高校和研究所,涵盖本科、硕士、博士和老师群体,可以在交流群交流讨论、积极碰撞、找到共同研究兴趣的“科研搭子”以及下载各种学术论文等

想加入交流群的同学可加小编微信让其邀请进群(扫描下方二维码咨询报名或菜单栏“联系我们”选项框都可以找到小编哟)。注意,咨询加群验证信息请备注为“学位-研究方向-学校-加群”格式否则不予通过。例如,假如你是武汉大学土地利用分类方向的博士研究生,则可以备注“博士-LULC-武大-加群”;假如你是北京大学生态学方向的硕士研究生,则可以备注“硕士-生态学-北大-加群”。

如果有帮助,点赞、关注、转发一下呗

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/174615
 
116 次点击