遥感图像处理学习(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. 解读IDC《中国视频云市场跟踪》最新报告,视频云将趋向何方?

    国际权威咨询公司IDC发布<中国视频云市场跟踪(2021 H2)>报告,阿里云连续四年稳居中国视频云整体市场份额第一,整体市场份额占比达26.9%. 时至2021,中国视频云的数字背后 近 ...

  2. Java ElasticSearch 操作

    pom 文件中添加: <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId ...

  3. SSL 证书过期巡检脚本

    哈喽大家好,我是咸鱼 我们知道 SSL 证书是会过期的,一旦过期之后需要重新申请.如果没有及时更换证书的话,就有可能导致网站出问题,给公司业务带来一定的影响 所以说我们要每隔一定时间去检查网站上的 S ...

  4. 【第三方库】从编译到运行,轻松学会gflags库

    gflags是Google开源的一个库,可以很方便地定义一些全局变量,并且可以从命令行设置他们的值,广泛应用于各个项目中以及自己平时的开发中.本期参考gflags的官方文档,简单直接介绍下怎么使用这个 ...

  5. Codeforce Problem 711A - Bus to Udayland (正则表达式)

    https://codeforces.com/problemset/problem/711/A 正则表达式基本应用 #include<bits/stdc++.h> using namesp ...

  6. AtCoder Regular Contest 121 (AB题解)

    补题链接:Here A - 2nd Greatest Distance 二维坐标图中有 \(n\) 个房子,现在规定两房子距离定义为: \(max(|x_i−x_j|,|y_i−y_j|)\) 求第二 ...

  7. idea侧边栏commit消失

    1.问题 在使用Clion中想要查看提交的相关信息,发现侧边栏commit消失 2.解决方法 打开设置,选择会用非模式提交界面即可

  8. CSS 3D - rotate旋转90度看不到的原理 和 解决方法

    原理: 旋转元素的坐标有三个 :X(向右),   Y(向左) ,   Z(向电脑屏幕的你) 当没有位移旋转元素时,元素 Z 坐标也会同着一起旋转 ,当一个物品旋转到90度时,我们只能看到它的厚度,而d ...

  9. MyBatis06——动态SQL

    动态SQL if choose (when, otherwise) trim (where, set) foreach 搭建环境 1.搭建数据库 CREATE TABLE `blog` ( `id` ...

  10. 【深入解读Redis系列】(五)Redis中String的认知误区,详解String数据类型

    有时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,请认准https://blog.zysicyj.top 首发博客地址 系列文章地址 需求描述 现在假设有这样一个需求,我们要开发一个 ...