遥感图像处理笔记之【FastAI Multi-label image classification】

遥感图像处理学习(4)


前言

遥感系列第4篇。遥感图像处理方向的学习者可以参考或者复刻

本文初编辑于2023年12月15日


文章标题:FastAI Multi-label image classification

文章地址:https://towardsdatascience.com/fastai-multi-label-image-classification-8034be646e95

文章所涉及的代码:https://github.com/TannerGilbert/Tutorials/blob/master/FastAI/%20Multi-label%20prediction%20with%20Planet%20Amazon%20dataset.ipynb


这篇文章将CNN(Resnet50)应用于Planet Amazon satellite dataset数据集中,演示了遥感图像多分类模型训练和图像多分类任务。

Planet Amazon satellite dataset数据集是亚马逊雨林数据集
在这里插入图片描述

首先文章作者从path路径加载数据到dataframe格式的df变量以供查看,从而知道如何处理图像数据

在这里插入图片描述

作者通过ImageItemList函数将图像数据转变成databunch object并进行归一化。注意,作者训练了两个不同的模型,分别是:分辨率128128图像数据训练得到的模型和分辨率256256图像数据训练得到的模型。

Metrics 用于彰显训练的“分数“,但是,因为使用的是多标签数据,不能仅仅使用正常的精度和F2-score方法(两个方法用于单标签问题),而是需要设置一个阈值(partial实现)来决定图像是否包含一个类。

文章剩下的一些就是关于Kaggle提交数据的部分,在这里不做记录。


顺便贴一些关于fastai中的freeze和unfreeeze的资料,方便理解模型为什么需要freeze和什么时候需要freeze

【在fastai课程中使用的是预训练模型,模型卷积层的权重已经提前在ImageNet 上训练好了,在使用的时候一般只需要在预训练模型最后一层卷积层后添加自定义的全连接层即可。
卷积层默认是freeze的,即在训练阶段进行反向传播时不会更新卷积层的权重,只会更新全连接层的权重。在训练几个epoch之后,全连接层的权重已经训练的差不多了,但accuracy还没有达到你的要求,这时你可以调用unfreeze然后再进行训练,这样在进行反向传播时便会更新卷积层的权重(一般不会对卷积层权重进行较大的更新,只会进行一点点的微调,越靠前的卷积层调整的幅度越小,所以有了differential learning rate 这一想法)】

【】中内容参考文章:https://www.zhihu.com/question/310138804/answer/581039350


对文章所涉及的代码的说明(建议分屏结合原文观看)

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.的数值表示不进行扭曲变化。
data = (src.transform(tfms, size=128)
        .databunch(bs=64).normalize(imagenet_stats)

)
#src: 原始数据集
#tfms: 数据转换方法
#size: 图片尺寸
#bs: batch size,批量大小
#normalize: 数据标准化方法
#imagenet_stats: ImageNet数据集的统计数据
acc_02 = partial(accuracy_thresh, thresh=0.2)
f_score = partial(fbeta, thresh=0.2)
#partial 函数来自于 Python 的 functools 模块,
#它的作用是创建一个新的可调用对象,其中的某些参数已经预先设置好了。
#在这个特定的例子中,partial 函数用于创建一个新的函数 f_score和acc_02,
#这个函数是 fbeta 函数和accuracy_thresh函数的一个特定版本,其中 thresh 参数被设置为 0.2。
learn.lr_find() # 找到最佳学习率
learn.recorder.plot() # 绘制学习率与误差曲线
learn.fit_one_cycle(4, lr) #训练4轮

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值