遥感图像处理学习(4)


前言

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

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

2024年1月24日搬运至本人博客园平台


文章标题: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轮

遥感图像处理笔记之【FastAI Multi-label image classification】的更多相关文章

  1. 【图像处理笔记】SIFT算法原理与源码分析

    [图像处理笔记]总目录 0 引言 特征提取就是从图像中提取显著并且具有可区分性和可匹配性的点结构.常见的点结构一般为图像内容中的角点.交叉点.闭合区域中心点等具有一定物理结构的点,而提取点结构的一般思 ...

  2. GDAL 遥感图像处理后的数据保存为图像文件的实现方法

    在遥感图像处理中,GDAL库不仅能读取和处理大部分的遥感图像数据,而且还能够实现图像处理后将数据保存为图像的功能. 本文就详细介绍如何将内存中的图像数据保存为.tif格式. 首先,遥感数据处理完,保存 ...

  3. 数字图像处理笔记与体会(一)——matlab编程基础

    最近开始学习数字图像处理,使用matlab实现,下面我就来记录笔记和体会,一方面是给大家提供参考,另一方面是防止我忘记了. 复习一下: 1.数字图像是用一个数字矩阵来表示的,数字阵列中的每个数字,表示 ...

  4. 图像处理笔记(二十一):halcon在图像处理中的运用

    概要: 分水岭算法做图像分割 二维码识别 稍后将其他几篇笔记全都补充上概要方便查询. 分水岭算法做图像分割 使用距离变换结合分水岭算法实现图像分割,可以用来分割仅通过阈值分割还是有边缘连接在一起的情况 ...

  5. C#图像处理笔记

    1.灰度拉伸 灰度拉伸又叫对比度拉伸,它是最基本的一种灰度变换,使用的是最简单的分段线性变换函数,它的主要思想是提高图像处理时灰度级的动态范围.

  6. Multi label 多标签分类问题(Pytorch,TensorFlow,Caffe)

    适用场景:一个输入对应多个label,或输入类别间不互斥 调用函数: 1. Pytorch使用torch.nn.BCEloss 2. Tensorflow使用tf.losses.sigmoid_cro ...

  7. laravel 的 intervention-image 图像处理笔记

    安装: https://blog.csdn.net/beyond__devil/article/details/62230610 需求: PHP >= 5.4 Fileinfo 扩展 GD库 & ...

  8. 【代码笔记】iOS-长条label

    一,效果图. 二,代码. ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup ...

  9. 论文笔记之:Dynamic Label Propagation for Semi-supervised Multi-class Multi-label Classification ICCV 2013

    Dynamic Label Propagation for Semi-supervised Multi-class Multi-label Classification ICCV 2013 在基于Gr ...

  10. Cocos2d-x学习笔记(六)Label字体控制

    BMFont使用链接--->>  http://blog.csdn.net/qiurisuixiang/article/details/8984288 这里要注意.fnt文件可通过BMFo ...

随机推荐

  1. POJ:Arbitrage (搜索,汇率换算是否赚?)

    POJ 2240 http://poj.org/problem?id=2240 题意:判断是否存在使得汇率增多的环 [任意一个点的汇率增多都可以] Floyd 简单变形 \(w[i][j] = max ...

  2. nextTick使用

  3. C++跨DLL内存所有权问题探幽(一)DLL提供的全局单例模式

    最近在开发的时候,特别是遇到关于跨DLL申请对象.指针.内存等问题的时候遇到了这么一个问题. 问题 跨DLL能不能调用到DLL中提供的单例? 问题比较简单,就是我现在有一个进程A,有DLL B DLL ...

  4. C#从字符创中分离文件路径、文件名及扩展名

    效果图 代码如下 private void btn_Openfile_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialo ...

  5. Vue第三篇 Vue组件

    01-组件的全局注册 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  6. 玩转 Helm 之 upgrade

    0. 前言 在 玩转 Helm 一文中,简略提到了 Helm upgrade 的策略. 在实际项目开发上,upgrade 多是调研的重点.基于此,这里对 upgrade 继续展开. 1. basic ...

  7. zookeeper 集群环境搭建及集群选举及数据同步机制

    本文为博主原创,未经允许不得转载: 目录: 1. 分别创建3个data目录用于存储各节点数据 2. 编写myid文件 3. 编写配置文件     4.分别启动 5.分别查看状态 6. 检查集群复制情况 ...

  8. spring启动流程 (1) 流程概览

    本文将通过阅读AnnotationConfigApplicationContext源码,分析Spring启动流程. 创建AnnotationConfigApplicationContext Annot ...

  9. QT启动问题--找不到python36.dll-cnblog

    1.报错:找不到python36.dll 2.解决 通过该查询CSDN下载相应的python36.dll放到C:\Windows\System32目录下即可 https://blog.csdn.net ...

  10. java - classpath 的配置

    classpath C:\Program Files\Java\jdk\jre\lib\rt.jar