遥感图像处理笔记之【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 方法通常用于迁移学习的场景,
#其中我们希望利用预训练模型的知识来加速并提升模型在新任务上的表现。

posted @ 2024-01-24 15:20  这可就有点麻烦了  阅读(21)  评论(0编辑  收藏  举报