# 基于机器学习的遥感图像识别算法(kNN/SVM/CNN/LSTM)
随着遥感卫星成像技术的提升和机器学习的蓬勃发展,越来越多的研究人员利用机器学习的方法来进行遥感图像识别,取得了很好的效果。在本次作业中,我将利用四种机器学习算法在WHU-RS19数据集上进行遥感图像识别的尝试,这其中既包括传统的kNN和SVM,也包括近年来得到青睐的CNN和LSTM算法。本文的基本结构如下:
* 数据集
* WHU-RS19的简单介绍
* 数据集的预处理与索引文档的生成
* kNN
* kNN的测试效果
* 分析参数k对kNN的测试效果的影响
* SVM
* SVM的测试效果
* 分析学习率和正则化参数对SVM的测试效果的影响
* SVM权值矩阵的可视化
* CNN
* CNN的测试效果
* 不同网络结构对CNN的测试结果的影响
* LSTM
* LSTM的测试效果
* 分析学习率和dropout值对LSTM的测试效果的影响
* 总结
## 数据集
### WHU-RS19的简单介绍
本次遥感图像识别算法采用的数据集是武汉大学提供的WHU-RS19数据集,该数据集包含了机场,海滩,桥,商业区,沙漠,农田,足球场,森林,工业区,草地,山,公园,停车场, 池塘, 港口, 火车站, 住宅区, 河流和高架桥总共19类遥感图像。图像的分辨率大都为600×600,每一个种类大约有50张图像。
<div align=center><img width="260" height="260" src="https://github.com/DICKIEZhu/Machine_learning_remote_sensing/raw/master/figure/bridge_17.jpg"/></div>
<div align=center> 图1 bridge_17 </div>
<div align=center><img width="260" height="260" src="https://github.com/DICKIEZhu/Machine_learning_remote_sensing/raw/master/figure/footballField_13.jpg"/></div>
<div align=center>图2 footballField_13</div>
### 数据集的预处理与索引文档的生成
在原始的数据集中,有4张分辨率不是600×600的图像已被去除。
利用 split_dataset.py 将数据集按照 0.8: 0.2 的比例分为训练集和测试集,分别置于train文件夹和test文件夹中。
利用 generate_txt.py 分别生成训练集和测试集的索引文件,索引文件中包括了图片的路径和图片的标签(0~19)。由于后面的实验在Google Colab上进行,因此我手动统一修改了图片的路径。最后得到的索引文件分别为train.txt和test.txt,其内容如下图所示:
<div align=center><img width="320" height="320" src="https://github.com/DICKIEZhu/Machine_learning_remote_sensing/raw/master/figure/traintxt.png"/></div>
<div align=center>图3 train.txt</div>
在本次作业中,我采用了4种不同的机器学习方法进行遥感图像识别的尝试,分别是kNN、SVM、CNN和LSTM。以上所有的实验均在Google Colab平台上进行。
## kNN
kNN(k-邻近算法)是最为简单的机器学习算法。在kNN算法中,一个对象的分类是由其邻居的“多数表决”确定的,k个最近邻居(k为正整数,通常较小)中最常见的分类决定了赋予该对象的类别。若k = 1,则该对象的类别直接由最近的一个节点赋予。
### kNN的测试效果
kNN作为一种最简单的机器学习算法,我并未对其的测试效果报以太大的期望。在本次测试中,我先将k取为1,测试这种最简单的模式下的效果,最终其测试的准确率为16%。
### 分析参数k对kNN的测试效果的影响
采用kNN算法需要重点关注的是k值的选取。一般情况下,在分类时较大的K值能够减小噪声的影响,但会使类别之间的界限变得模糊。因此本实验分别尝试了k = 1,3,5,10,15下kNN算法的测试精度。实验的结果如下所示:
<div align=center><img width="420" src="https://github.com/DICKIEZhu/Machine_learning_remote_sensing/raw/master/figure/knn1.png"/></div>
<div align=center>图4 kNN在不同k参数下的测试效果</div>
<div align=center><img width="420" src="https://github.com/DICKIEZhu/Machine_learning_remote_sensing/raw/master/figure/knn2.png"/></div>
<div align=center>图5 kNN在不同k参数下的测试效果</div>
由实验结果可知,和预期的相同,kNN算法在WHU-RS19数据集上的表现效果非常的一般。当k = 1时,算法取得了最高的分类精度仅为16%,随着k取值的进一步增大,分类器的效果不断下降,当k = 10时,该分类器基本稳定在10%左右。本人推测,造成k值增大导致分类效果明显下降的现象的原因在于数据集中不同类别之间的界限本来就比较模糊,增大k值进一步加剧了这种现象。
## SVM
在机器学习中,SVM是一种常用的监督学习算法,其目的在于寻找一个超平面,能够以最大间隔将各类数据分开。作为传统的机器学习算法中表现非常优秀的一种算法,SVM在许多场景中都得到了应用。
### SVM的测试效果
本实验的目的在于观察SVM在WHU-RS19数据集上的表现。
首先采用了1e-7的学习率和2.5e4的正则化因子进行3500次训练,最后获得了21%的测试精度,训练过程如下所示:
<div align=center><img width="420" src="https://github.com/DICKIEZhu/Machine_learning_remote_sensing/raw/master/figure/svm1.png"/></div>
<div align=center>图6 SVM训练过程中的损失值变化与测试精度</div>
<div align=center><img width="420" src="https://github.com/DICKIEZhu/Machine_learning_remote_sensing/raw/master/figure/svm2.png"/></div>
<div align=center>图7 SVM训练过程中的损失值变化</div>
### 分析学习率和正则化参数对SVM的测试效果的影响
由于不同的学习率和正则化参数的取值会对SVM的训练结果造成明显的影响,本实验采用了[1e-08, 1e-07, 1e-06]三种学习率以及[1e04, 2.5e04, 5.0e04]三种正则化参数共9种参数组合进行测试,经过训练之后的测试精度分别如下所示:
<div align=center><img width="420" src="https://github.com/DICKIEZhu/Machine_learning_remote_sensing/raw/master/figure/svm4.png"/></div>
<div align=center>图8 9组学习率和正则化参数组合下的测试精度</div>
测试结果显示,1e-08的学习率和2.5e04正则化参数组合下的效果最好,SVM在训练后的测试精度达到了28%。
但是在后续的测试中,我也发现1e-08的学习率似乎有些过于小了,因为在训练过程中其损失值的下降往往非常缓慢,有几次也陷入了局部最小值中。因此我认为在本数据集中,1e-07的学习率是更为可取的。
### SVM权值矩阵的可视化
在SVM这部分的最后,我将SVM训练后学习到的权值矩阵进行了可视化,其效果如下所示:
<div align=center><img width="420" src="https://github.com/DICKIEZhu/Machine_learning_remote_sensing/raw/master/figure/svm3.png"/></div>
<div align=center>图9 SVM权值矩阵的可视化效果</div>
可以看出,各个权值矩阵的可视化图像反映出了该类遥感图像的一些特征。例如,森林类(Forest)的权值矩阵的可视化图像呈现出深绿色,而草地类(Meadow)则为草绿色;在足球场(Football Field)这类图像中,我们可以看出足球场的鸟瞰图的基本轮廓。
# CNN
卷积神经网络是目前图像识别中最为流行的机器学习算法,本实验的目的在于了解CNN在WHU-RS19数据集上的表现效果,并观察网络结构的变化对训练结果的影响。
## CNN的测试效果
本实验先构建了一个有两层卷积层的神经网络,各层的参数如下所示:
- conv1:卷积层1,输入通道3,输出通道10,卷积核5*5
- pool1: 池化层
- conv2:卷积层2,输入通道10,输出通道20,卷积核5*5
- pool2:池化层
- fc1:全连接层16820->1000
- fc2:全连接层1000->19
该CNN网络的训练过程如下所示:
<div align=center
程序员无锋
- 粉丝: 3708
- 资源: 2573
最新资源
- 负载转矩观测 永磁同步电机FOC 1.采用一种简单新颖的负载转矩观测器,相比传统的龙伯格等方法观测器设计巧妙,参数调节容易,观测负载转矩快速准确;赠送龙伯格负载转矩观测器用于对比分析 2.将观测到的
- 三相电机容错控制,采用电流预测算法
- 光伏微网储能,实现电池充放电双向流动 双闭环控制策略,电压外环滑膜控制,可以替为pi控制,以及模糊pi控制策略
- FPGA设计的代码 对周期信号进行处理 两个版本的现成代码
- 基于西门子s7-200,基于西门子200的智能停车场监控系统,程序带有计时收费功能,仿真采用MCGS制作,基于plc智能停车场车位控制仿真 功能介绍: ①假设某停车场共有20个车位 ②在停车场入口处
- 欧姆龙PLC项目程序NJ系列模切机程序 1、12轴EtherCAT总线伺服运动控制,包含回零、点动、定位、速度控制 2、张力控制PID算法,收放卷径计算, 3、隔膜自动纠偏控制,模拟量数据平均
- 分布式电源优化配置 33节点 编程方法:采用matlab+yalmip编程,cplex或gurobi作为求解器 主要内容:以33节点为例,考虑配电网二阶锥模型,运行主体包括光伏、微燃机以及负荷,创新
- 适用于Matlab2019a和b版本 速度环模块儿分别用PI和MTPA控制策略 基于MRAS(模型参考自适应法)的无位置传感器控制系统设计
- Matlab simulink 风电调频,四机两区系统 突增负荷扰动,风电采用超速减载控制,惯性控制 下垂控制 仿真速度快,只需要20秒 比其他链接的仿真速度都要快 其他链接一般为离散模型
- BLDC转速控制仿真,BLDC双环控制,无刷直流电机速度控制仿真 外环转速PI控制,内环电流滞环控制或bang-bang控制,带霍尔传感器,采用六步相法驱动 只有仿真,没有代码
- 粒子群算法模版,有一维信号和2维信号的Matlab代码模板
- 基于空间矢量控制的永磁同步电机状态反馈控制转速系统设计及仿真,仿真平台基于MATLAB Simulink搭建 联系默认发仿真系统文件
- 元胞自动机模拟动态再结晶,CA法模拟动态再结晶程序,材料参数可调主 模型适用于金属材料,链接展示的是再结晶形核和晶粒长大,程序模型可改动,如位错模型,形核模型包括形核机制等 程序matlab编写
- 永磁同步风力发电机的matlab仿真模型 风力机控制采用最优叶尖速比控制 机侧为基于pi控制的双闭环控制(转速外环、电流内环) 网侧为基于pi控制的双闭环控制(电压外环、电流内环)
- 1.小波图像分解重构代码matlab 2.nlm算法图像去噪Matlab代码 3.中值滤波图像去噪Matlab代码 4.DNCNN图像去噪Matlab代码 5.BM3D图像去噪Matlab代码 6.均
- 双馈永磁风电机组并网仿真短路故障模型,kw级别永磁同步机PMSG并网仿真模型,机端由6台1.5MW双馈风机构成9MW风电场,风电场容量可调,出口电压690v,经升压变压器及线路阻抗连接至120kv交流
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈