遥感图像处理笔记之【Multi-label Land Cover Classification with Deep Learning】
遥感图像处理学习(3)
前言
遥感图像处理方向的学习者可以参考或者复刻
本文初编辑于2023年12月14日
2024年1月24日搬运至本人博客园平台
文章标题:Multi-label Land Cover Classification with Deep Learning
文章地址:https://readmedium.com/multi-label-land-cover-classification-with-deep-learning-d39ce2944a3d
文章所涉及的代码:https://github.com/shakasom/multilabel-landcover-deeplearning
这篇文章将CNN(Resnet34)应用于UCMerced Data数据集中,演示了遥感图像多分类模型的训练和遥感图像识别。
下图表示UCMerced Data中的数据其实是不平衡的

作者通过Fastai library来使用UCMerced Data,使开发者更容易用Pytorch来实现代码。
下图可以看见模型训练效果不错

对文章所涉及的代码的说明(建议分屏结合原文观看)
class_count汇总了UCMerced Data,是一个两列的DataFrame,一列是种类名称class,一列是相应的种类数量count。
data_src = (ImageList.from_df(df=df, path=path,
folder=’images’,suffix=”.tif”)
.split_by_rand_pct(0.2)
.label_from_df(cols=list(class_count[‘class’]),
label_cls=MultiCategoryList, one_hot=True))
#df=df: 表示使用名为df的数据框作为数据源。
#path=path: 表示数据存储的路径。
#folder=’images’: 表示数据存储在名为'images'的文件夹中。
#suffix=”.tif”: 表示数据文件的后缀为.tif。
#split_by_rand_pct(0.2): 表示将数据随机分为训练集和验证集,
#其中验证集占总数据的20%。
#label_from_df(cols=list(class_count[‘class’]):
#表示从数据框中提取标签信息,其中标签的列名为class。
#label_cls=MultiCategoryList:
#表示使用MultiCategoryList类来处理多标签分类问题。
#one_hot=True: 表示使用one-hot编码来表示多标签分类的标签。
tfms = get_transforms(flip_vert=True, max_lighting=0.1,
max_zoom=1.05, max_warp=0.)
#get_transforms函数创建了一组用于图像数据增强的变换。
#每个在函数参数中指定的变换将会在训练过程中随机应用在图像上
#flip_vert=True:表示允许在数据增强过程中对图像进行垂直翻转。
#max_lighting=0.1:表示允许对图像进行的最大光照变化。
#0.1的数值表示进行轻微的光照变化。
#max_zoom=1.05:表示允许对图像进行的最大缩放变化。
#1.05的数值表示进行轻微的放大效果。
#max_warp=0.:表示允许对图像进行的最大扭曲变化。
#0.的数值表示不进行扭曲变化。
f_score = partial(fbeta, thresh=0.45)
#partial 函数来自于 Python 的 functools 模块,
#它的作用是创建一个新的可调用对象,其中的某些参数已经预先设置好了。
#在这个特定的例子中,partial 函数用于创建一个新的函数 f_score,
#这个函数是 fbeta 函数的一个特定版本,其中 thresh 参数被设置为 0.45。
learn = cnn_learner(data, models.resnet34,
metrics=[accuracy_thresh, f_score],
callback_fns=[CSVLogger,ShowGraph, SaveModelCallback])
#callback_fns 参数指定了三个回调函数:
#CSVLogger:用于记录训练过程中的指标,并将其保存到CSV文件中,以便后续分析和可视化。
#ShowGraph:用于在训练过程中实时显示训练指标的可视化图表,例如损失函数和准确率随时间的变化。
#SaveModelCallback:用于在训练过程中保存模型的回调函数。
#它可以根据特定的条件(例如验证集准确率的提升)来保存模型的参数,以便在训练过程中得到最佳的模型。
learn.fit_one_cycle(5, 1e-2)
#括号中的参数5表示进行微调的阶段数,
#即在解冻整个模型之前,先训练最后几层的参数5个周期。
#fit_one_cycle 方法使用了One Cycle Policy 训练策略.
#One Cycle Policy 会在训练的前期使用较小的学习率,然后逐渐增加学习率到一个较大的值,再逐渐减小学习率。
#这种策略有助于加快模型的收敛速度,同时减少过拟合的风险。
#fit_one_cycle 方法通常用于模型的初始训练阶段,以快速训练模型并找到一个合适的学习率。
#fine_tune 方法用于微调预训练模型。
#在微调过程中,预训练模型的参数会在新的数据集上进行进一步的训练,以适应新数据集的特征和标签。
#具体来说,fine_tune 方法会先冻结预训练模型的一部分层(通常是除了最后几层之外的层),然后在新数据集上进行训练。
#接着会解冻整个模型,继续在新数据集上进行训练,以微调模型的参数。
#fine_tune 方法通常用于迁移学习的场景,
#其中我们希望利用预训练模型的知识来加速并提升模型在新任务上的表现。
遥感图像处理笔记之【Multi-label Land Cover Classification with Deep Learning】的更多相关文章
- 【DeepLearning学习笔记】Coursera课程《Neural Networks and Deep Learning》——Week2 Neural Networks Basics课堂笔记
Coursera课程<Neural Networks and Deep Learning> deeplearning.ai Week2 Neural Networks Basics 2.1 ...
- 【DeepLearning学习笔记】Coursera课程《Neural Networks and Deep Learning》——Week1 Introduction to deep learning课堂笔记
Coursera课程<Neural Networks and Deep Learning> deeplearning.ai Week1 Introduction to deep learn ...
- 【图像处理笔记】SIFT算法原理与源码分析
[图像处理笔记]总目录 0 引言 特征提取就是从图像中提取显著并且具有可区分性和可匹配性的点结构.常见的点结构一般为图像内容中的角点.交叉点.闭合区域中心点等具有一定物理结构的点,而提取点结构的一般思 ...
- Deep learning with Python 学习笔记(8)
Keras 函数式编程 利用 Keras 函数式 API,你可以构建类图(graph-like)模型.在不同的输入之间共享某一层,并且还可以像使用 Python 函数一样使用 Keras 模型.Ker ...
- Deep Learning(深度学习)学习笔记整理
申明:本文非笔者原创,原文转载自:http://www.sigvc.org/bbs/thread-2187-1-3.html 4.2.初级(浅层)特征表示 既然像素级的特征表示方法没有作用,那怎样的表 ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- 【转载】Deep Learning(深度学习)学习笔记整理
http://blog.csdn.net/zouxy09/article/details/8775360 一.概述 Artificial Intelligence,也就是人工智能,就像长生不老和星际漫 ...
- Deep Learning(深度学习)学习笔记整理系列之(七)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(六)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(四)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
随机推荐
- 【JAVA基础】错误捕获try-catch
错误捕获try-catch 使用BaseController统一管理 项目结构 UserController package com.cy.store.controller; import com.c ...
- Java ZIP文件解压
Java ZIP文件解压 备忘笔记 代码: private byte[] unZip(byte[] data) { byte[] bArr = null; try { ByteArrayInputSt ...
- 【驱动】以太网扫盲(四)phy驱动link up流程分析
1. 简介 在调试网口驱动的过程中发现phy芯片的驱动框架结构还有点复杂,不仔细研究的话还不好搞懂,另外百度到的资料也不够全面,这篇就总结梳理一下这方面的知识. 我们知道一个 phy 驱动的原理是非常 ...
- NodeJS开发服务端实现文件上传下载和数据增删改查
本文主要讲解已NodeJS作为服务器完成文件的上传下载和数据增删改查,前端框架为Vue3,UI框架为element-plus,Node版本为V16.14.2. 项目场景模拟是开发一个项目管理的系统,支 ...
- python之HtmlTestRunner(三)中文字体乱码的情况
使用HtmlTestRunner测试报告时,遇到中文字体无法识别的情况: 解决方案修改 \Lib\site-packages\HtmlTestRunner\result.py:def generat ...
- 《OnJava》——11内部类
内部类 利用内部类,可以将逻辑上存在关联的类组织在一起,而且可以控制一个类在另一个类中的可见性. 内部类和组合不同,内部类是一种代码隐藏机制:将代码放在其他类的内部. 11.1 创建内部类 创建内部类 ...
- K8S增加限制后的启动时间验证
K8S增加限制后的启动时间验证 背景 前段时间看了下JVM载linux上面的启动时间, 进行过一些验证. 最近想着能够验证一下K8S上面的启动相关的信息 所以就整理了一下. 虽然没有特别好的结论, 但 ...
- [转帖]InfluxDB 修改数据存储路径
1.创建数据存储目录 mkdir -p /home/data/influxdb 说明:目录可以根据实际情况进行修改. 2.设置目录访问权限 sudo chown influxdb.influxdb / ...
- [转帖]Pepper-Box - Kafka Load Generator
https://github.com/GSLabDev/pepper-box Pepper-Box is kafka load generator plugin for jmeter. It allo ...
- [转帖]解决jmeter请求响应结果乱码的问题
如下图所示,请求百度接口的时候,发现返回的信息里面中文是乱码 这个时候我们只需要改一下jmeter里的配置文件,设置响应结果的字符编码为UTF-8就行了. 进入jmeter安装目录/bin中,找到jm ...