百度点石-人工智能农作物识别比赛总结

2023-11-03

(初赛排名第8,虽然成绩较差,但觉得参与其中,收获颇丰,借此分享一下,欢迎交流)

                              

1.背景介绍

       本次竞赛目的是对某一时刻一张遥感卫星多光谱影像进行分类,需识别为4种类别:玉米、大豆、水稻和其他(背景)。提供的多光谱影像,如图1所示(1,2,3波段合成的影像),覆盖850公里*300公里,8个波段。此外影像中含有较大面积的厚云、薄云、云影的部分,其中通过阈值的方法,厚云的部分占总面积的近8%,特别是右下角尤为显著。

       数据标记提供:标注的样本点数据,给定玉米、大豆和水稻3个类别农作物对应区块的中心点像素位置(x,y)列表,以及对应中心点对应的区块半径3。

       本次竞赛要求:利用深度学习等智能算法自动识别出所给图像对应的类别,并依据识别准确度和时效性进行评价。

                                                                        图1 多光谱影像(其中1,2,3波段合成)

2.预处理

       深度学习方法处理的数据是图像块或栅格数据或数值的特点,本次竞赛提供的标记是点坐标和半径,据此,我们需要制作栅格数据作为训练样本库,以训练我们使用的深度学习模型。

2.1 数据特征

       提供的多光谱数据解压后,通过ENVI软件转为栅格影像后大小为13.3G。标记数据以坐标和半径的格式提供了2,372个点,只含大豆、水稻、玉米三种类别的数据点,如图2所示。根据深度学习算法使用数据的特点,我们将以每个点为中心,开一个窗口大小为7*7的影像块,并记录其所属类别值。以此建立基本的样本库。

                                                                                   图2 标记数据点的分布

       在训练深度学习网络时,我们一般都使用较大的数据量来训练,以充分学习每类样本的各种丰富特征。另一个值得注意的点是:本次竞赛提供的样本点不包括其他类别(背景),这里我们通过对已有样本的分析,以及对原始影像的使用,以此来生成背景样本。同时基于本竞赛提供的仅有2,732个样本点,我们采用一定的策略进行数据增强,扩充样本量到40,000个样本。

2.2 数据增强

2.2.1 生成背景点

       通过对提供的2,732个样本点生成的7*7影像块的特征进行分析,以生成背景样本。思路:已知数据的整体分布特点(原始影像),以及其中三种类别(大豆、水稻、玉米),要获取剩下的一种类别(背景)的数据特点,则只需进行一个减法即可。

                                                                                       表1 BMD分布

                                        

       具体地,针对获取的2,732个7*7的8通道的影像块,计算每个影像块8个通道的平均值,以获得每一个通道的均值分布,记为BMD(Band mean distribution,BMD)分布,如表1所示。显然,某个7*7的影像块,8个通道的均值落在该BMD分布里,则该影像块属于农作物类别(属于大豆、水稻、玉米中的一种)。若不满足要求,则为背景类。这里为更好地获取背景类的样本点,加入一个约束指标,满足至少两个通道不在该范围内,则为背景样本。同时为更好符合数据的真实性,我们从原始影像中随机生成一个7*7窗口的影像块,进行实验,生成的样本量达20,000个。

                                         

                                                                      图3 部分背景点显示(红色标记)

2.2.2 农作物样本点

       为更好地训练深度学习网络,需对农作物样本(大豆、水稻、玉米)进行数据增强。

                                             

                                                               图4 农作物样本增强部分显示(浅色调)

思路:在提供的2,732个样本点附近,随机生成一个点,并开一个7*7窗口大小的影像块,并计算该影像块的8个波段的均值是否在当前选取点(2,732个中的某一个)对应的影像块的8波段均值加减一个阈值p的范围内。这里给定三个约束;阈值p通过试验设置为50;满足至少5个波段以上的均值在该范围内;随机点在以2,732个样本点(参考样本点)的半径为21范围内,按离参考样本点的距离生成样本点的概率依次减小。如此进行数据增强,包括原始的2732个在内,共有20,000个样本点。

2.3 建立训练样本库

       根据2.2节介绍的内容,我们以此建立深度学习网络所需的训练样本库。我们设置训练集与验证集的比例为4:1,在训练的过程中,通过大样本的验证集以获取最优的训练模型。

3.网络架构

       在不断试验中,我们最终提出了一种多特征增强网络模型(Multi-feature augmentation network,MFAN),其性能稳健,基于网络传输中数据存在利用不充分的问题,以及针对本竞赛利用像素信息(几乎没有涉及样本的纹理、形状、大小等特征信息)进行分类的特点进行设计。

                                                 

                                                                                              图5 MFAN网络架构

4.训练测试

4.1 训练过程

       为了使训练的时间更快,我们在制作训练样本库时,将制作的样本数据以Numpy的数据格式、扩展名为.npy进行保存。

       实验在GTX1080Ti,以Keras作为深度学习框架进行,我们使用的损失函数为多分类交叉熵损失函数,使用Adam优化器对网络参数进行更新,学习率为1e-4,batch_size大小设为128,epoch设为300个。训练用时50分钟左右。

       在基本的设置完成后,并开始进行训练。在测试阶段,一般(以训练的经验)第220个epoch左右的训练模型进行测试完整的影像。

4.2 测试技巧

       在测试时,顾及测试的时效以及测试精度,我们将3*3大小影像区域视为同一种地物。同时我们训练的样本块大小为7*7,所以在测试时,我们使用的影像块大小同样为7*7,例如在开始对影像进行测试时,我们读取影像的第1到第7行,所有的列,再依次分为7*7的影像块,并放入训练模型中进行测试。这样涉及一定的数据重叠,以及边缘无值得情况。这里主要考虑边缘填充的情况,显然这里使用就近填充的原则,进行填充。

       在测试得到完整的影像后,根据第1章背景介绍,厚云所占的比重达8%左右,在一些较大面积的厚云区域,无法获取厚云下到底是什么的情况下,这里对厚云区域进行默认填充,默认值为60。除此之外,使用MFAN模型测试后的结果没有进行任何后处理。测试用时1.5小时左右。

4.3 可视化测试结果

                                               

                                                

5.竞赛总结

       通过本次竞赛主要有三点值得很好总结的经验:

  1. 充分利用提供的数据,进行各种数据增强,这样能很大程度上提升模型的泛化能力。
  2. 在深度学习网络设计中,要针对特定的问题进行设计,这样更好地有利于提取分割目标的特征,便于高精度的分类。
  3. 目前,深度学习的方法依然是依据概率统计的思想,如没能提供大量的训练样本时,很难达到较好结果,甚至很有可能差于传统的方法。针对本次竞赛,我们并没有用一些数字图像处理方法进行后处理,在实际应用中,结合一些后处理方法,可能有更好的表现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

百度点石-人工智能农作物识别比赛总结 的相关文章

随机推荐

  • 为mysql数据库建立索引;mysql索引总结----mysql 索引类型以及创建;mysql_建立索引的优缺点

    因为欣赏所以转载 http www cnblogs com cy163 archive 2008 10 27 1320798 html http www cnblogs com lihuiyong p 5623191 html http w
  • 修改MySQL账号的加密规则plugin和命令查看外键信息

    MySQL8之前的版本中加密规则是mysql native password 而在MySQL8之后 加密规则 是caching sha2 password 现在给大家介绍怎么修改用户的加密规则 修改成旧的加密规则 ALTER USER ro
  • Redis 一些基础知识以及数据类型

    3 启动后杂项基础知识 3 1 redis benchmark Redis 自带一个叫 redis benchmark 的工具来模拟N个客户端同时发出M个请求 启动 redis benchmark 可以通过 redis benchmark
  • CTFshow 文件上传 web156

    目录 思路 总结 思路 这次发现把shell php改成png上传的时候 提示文件类型不合规 可能对文件头进行检测 可以利用图片马来写入shell https github com huntergregal PNG IDAT Payload
  • 【element】el-autocomplete的常见用法

    前言 这段时间突然发现很少写博客了 平时都在平衡工作和休息的时间 周末也没动过笔 而且更重要的是我找不到写的内容了 在经历的初始的新知识的学习阶段后 目前的阶段更加转入对于业务的理解 很多模块在不同项目中都是可以复用的 而且工作中发现开发并
  • JS扁平化(flatten)数组

    JS扁平化分类 1 对象扁平化 深度很深的对象 经过扁平化编程深度为 1 的对象 2 数组扁平化 降维过程 多维数组经过扁平化变成一维数组 首先让我们思考一个这样的题目 假如有一个数组 var arr 1 2 3 4 我们怎么能把arr变成
  • 【python 10】python 魔术方法

    文章目录 一 getitem 获取属性 二 setitem 设置属性 三 delitem 删除属性 四 len 求长度 五 call 将类变成一个可调用的函数 python 中以 开头和结尾的成员 都被称为类的特殊成员 特殊属性和方法 一
  • Linux 中的 sysctl 命令及示例

    介绍 Linux管理员使用该命令在运行时sysctl读取或修改内核参数 无需重新启动即可实时控制和修改网络 I O 操作和内存管理设置的选项对于高可用性系统至关重要 了解如何使用该sysctl命令及其选项来动态调整系统性能
  • osgi 引用不同版本的jar_如何把公共模块做成sdk给其他项目引用

    实际开发过程中 会有这么一种需求 我们写的某些代码 不仅我们这个项目需要 其他部门 其他项目可能也需要 我们怎么把我们的项目给别人使用呢 有2种方法 第一种方法 只在本机中的其他项目中使用 不方便给他人使用 也可以发jar包给他人使用 但是
  • MyBatis使用association实现一对一级联查询的几种案例

    我们平日经常会遇到需要级联查询的场景 这里通过案例给大家展示实现过程 我们要查询的用户信息里面有个角色信息 一个用户对应一个角色 我们现在要求查出用户信息的同时 关联查出用户的角色信息 那么这个时候我们可以通过级联属性的方式 将角色中的数据
  • Mybatis拦截器

    MyBatis介绍 MyBatis本是apache的一个开源项目iBatis 2010年这个项目由apache software foundation 迁移到了google code 并且改名为MyBatis 它支持普通 SQL查询 存储过
  • uniapp、vue返回上一个页面并刷新(调用上一个页面的方法)

    在写微信小程序时有个功能有点问题 需求是 在当前页面 A页面 查看列表 在A页面点击发布跳转到表单页 B页面 B页面提交成功返回上一页A 要判断如果发布成功 返回到A页面得拿到最新数据 相当于要监听返回到A页面时得刷新数据了 方法一 使用o
  • 蓝桥杯:国二选手经验贴 附蓝桥杯历年真题

    相信能看到这篇文章的你 一定是有想过参赛了 那么恭喜你呀 看到一篇宝藏参赛指南 楼主将结合自己的参赛经历 手把手教你拿到省一进国赛嗷 文章结尾有历年真题及VIP试题链接 建议收藏 楼主是参加了2022年的蓝桥杯算法竞赛Python大学A组
  • latex教程——读书笔记整理(二)——文本排版

    文本排版 目录 文本排版 断行和分页 对齐段落 断词 内置字符串 特殊字符和符号 引号 破折号和连字号 波浪号 度的符号 省略号 连字 注音符号和特殊字符 标题 章 节 交叉引用 脚注 强调 环境 Itemize Enumerate 和 D
  • Java 详解(JVM) 垃圾回收机制原理

    一 什么是垃圾 二 如何判断垃圾 三 垃圾回收 一 什么是垃圾 首先我们要搞懂什么是垃圾 在 JVM 的眼中 垃圾就是指那些在堆中存在的 已经 死亡 的对象 而对于 死亡 的定义 我们可以简单的将其理解为 不可能再被任何途径使用的对象 通俗
  • Java - Buffered流拷贝文件

    BufferedInputStream 向另一个输入流添加功能 即缓冲输入并支持标记和重置方法的能力 创建 BufferedInputStream 时 会创建一个内部缓冲区数组 当流中的字节被读取或跳过时 内部缓冲区会根据需要从包含的输入流
  • curl错误码大全curl_errno

    CURLE UNSUPPORTED PROTOCOL 1 你的URL传递给libcurl的使用协议 这libcurl的不支持 支持可能是你没有使用一个编译时的选项 它可以是一个拼写错的协议字符串 或者只是一个协议的libcurl没有代码 C
  • Unity3D中Animation的常见属性及方法

    Unity3D中Animation的常见属性及方法如下 Animation Play播放 function Play mode PlayMode PlayMode StopSameLayer bool function Play anima
  • sudo apt-get update 命令出现没有Release文件问题解决

    在对我的linux系统更新软件源时 出现了这个问题 sudo apt get update E 仓库 http ppa launchpad net leaeasy dde ubuntu focal Release 没有 Release 文件
  • 百度点石-人工智能农作物识别比赛总结

    初赛排名第8 虽然成绩较差 但觉得参与其中 收获颇丰 借此分享一下 欢迎交流 1 背景介绍 本次竞赛目的是对某一时刻一张遥感卫星多光谱影像进行分类 需识别为4种类别 玉米 大豆 水稻和其他 背景 提供的多光谱影像 如图1所示 1 2 3波段