# 基于机器学习的遥感图像识别算法(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
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
<项目介绍> - 基于机器学习的遥感图像识别算法(kNN/SVM/CNN/LSTM) - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
资源推荐
资源详情
资源评论
收起资源包目录
9.基于机器学习的遥感图像识别算法.zip (33个子文件)
18-19-machine-learning-final-assignment-master
reflection_problem.png 578KB
figure
lstm.png 94KB
svm3.png 326KB
svm4.png 12KB
svm1.png 28KB
svm2.png 25KB
temp.cpp 1B
footballField_13.jpg 112KB
knn1.png 7KB
cnn4.png 27KB
cnn3.png 31KB
cnn2.png 31KB
cnn1.png 30KB
knn2.png 34KB
traintxt.png 85KB
cnn5.png 20KB
bridge_17.jpg 90KB
README.md 13KB
code
3_LSTM
LSTM说明文档.md 1KB
lstm.py 6KB
LSTM.ipynb 254KB
temp.cpp 1B
data_preprocessing
split_dataset.py 1KB
generate_txt.py 1KB
0_kNN
kNN说明文档.md 565B
kNN.ipynb 21KB
knn.py 3KB
1_SVM
svm.py 6KB
SVM说明文档.md 585B
SVM.ipynb 173KB
2_CNN
CNN.ipynb 71KB
cnn.py 7KB
CNN说明文档.md 1KB
共 33 条
- 1
资源评论
程序员无锋
- 粉丝: 3678
- 资源: 2181
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功