15.卫星图片分类

我们这次用的数据集不再是tensorflow中内置的数据集,而是自定义的数据集,我们先看一下我们的数据

所有的数据都存储在2_class这个文件夹中

15.卫星图片分类

文件夹中有airplane与lake这两个子文件夹

15.卫星图片分类

分别存放的是飞机与湖泊的卫星图像

  • airplane

15.卫星图片分类
  • lake

15.卫星图片分类

目录

1 导入库

2 数据处理

2.1 获取图像

2.2 定义标签

2.3 制作标签集

3 加载图像

4 创建数据集

4.1 创建图片路径数据集

4.2 创建图片数据集

4.3 创建标签数据集

4.4 创建图片+标签数据集(总数据集)

4.5 定义训练集与测试集

5 设置重复,随机与batch

6 创建模型

7 编译模型

8 训练模型

9 保存模型

10 读取模型

11 预测模型

1 导入库

15.卫星图片分类

我们这里首次用到了glob这个库,这个库是python自带的库,用于处理路径中的文件的

random也是Python自带的库,用于进行一些随机的操作

2 数据处理

2.1 获取图像

首先我们获取所有的图像

15.卫星图片分类

我们在2_class中有两个子文件夹,现在我们都要,所以我们用表示,后面的.jpg表示我们要所有的jpg文件

glob.glob的返回值是一个列表,我们打印出来看一下

15.卫星图片分类

15.卫星图片分类

15.卫星图片分类

15.卫星图片分类

我们可以发现all_iamge_path的前面都是飞机,后面都是湖泊,所以我们在这里要进行乱序以达到更好的训练效果,此处我们使用ramdom.shuffle()

15.卫星图片分类

15.卫星图片分类

15.卫星图片分类

15.卫星图片分类

2.2 定义标签

我们定义飞机的标签为0,湖泊的标签为1,我们先创建一个字典明确对应关系

15.卫星图片分类

为了最终预测方便我们再定义反过来(索引对标签)的字典

15.卫星图片分类

15.卫星图片分类

2.3 制作标签集

定义之后我们要为所有的图像添加标签,我们发现在路径中,中间的子文件夹名称就是该图片对应的标签,所以我们现在把这个名称取出来

这里我们要用到str的内置方法split,这个方法我在这个里面有介绍 python str基本用法_potato123232的博客-CSDN博客

15.卫星图片分类
  • 不同系统的路径分隔符可能有区别,我们当前使用的是windows,用的是双斜杠(\)

我们打印出来看一下

15.卫星图片分类

15.卫星图片分类

15.卫星图片分类

15.卫星图片分类

3 加载图像

tensorflow有内置读取文件的方法 tf.io.read_file()参数为文件路径

我们现在读取一个文件试一下这个方法

15.卫星图片分类

15.卫星图片分类

15.卫星图片分类

15.卫星图片分类

当前的类型是一堆二进制的数据,我们要将其解码,使其变为tensor,我们使用tf.image.decode_jpeg()进行解码,第一个参数为要解码的对象,第二个参数为通道格式,我们当前为彩色图像,所以为3

15.卫星图片分类

15.卫星图片分类

15.卫星图片分类

15.卫星图片分类

这个就是我们要用到的类型,我们现在先看一下它的shape

15.卫星图片分类

15.卫星图片分类

前面两个是宽高,第三个是通道(rgb三通道)

再看一下它的dtype

15.卫星图片分类

15.卫星图片分类

发现是uint8,我们训练中最好转换为float,我们使用tensorflow的cast方法进行类型转换

15.卫星图片分类

之后我们对图像进行归一化,由于当前图像的取值范围为(0-255)所以我们除255(一般的图像取值范围都是0到255)

15.卫星图片分类

15.卫星图片分类

15.卫星图片分类

我们为了今后方便将上面的过程封装成一个函数

15.卫星图片分类

我们正好梳理一下流程

首先我们需要图片的路径,然后读取该路径的文件

之后解码该文件

再之后我们需要加入一步操作,我们刚刚进行的是单张的流程,所以不涉及到图片大小不一的情况,我们在训练的过程中,将图片的大小统一会达到更好的效果,所以我们此处使用tf.image.resize改变图像的大小

此处我们将其都改为(256,256)的图像大小,之后将其类型转变为float32,再之后归一化

4 创建数据集

4.1 创建图片路径数据集

首先我们创建所有图片路径的数据集

15.卫星图片分类

我们看一下当前的路径集

15.卫星图片分类

15.卫星图片分类

我们从types可以看出来,现在里面全都是字符串

4.2 创建图片数据集

然后我们将路径集中的每个元素都执行一遍load_img(),此处我们使用的是tensorflow中的map方法,这个方法与python内置的map方法使用方式相似,我在这里有介绍 python内建方法_potato123232的博客-CSDN博客

15.卫星图片分类

现在我们再看一下现在的图片数据集

15.卫星图片分类

15.卫星图片分类

4.3 创建标签数据集

15.卫星图片分类

15.卫星图片分类

15.卫星图片分类

4.4 创建图片+标签数据集(总数据集)

在这一步中我们要把刚刚的图片数据集和标签数据集合为一个数据集,我们使用tf.data.Dataset.zip()将两个数据集合并

15.卫星图片分类
  • zip的参数是元组类型,如果不加小括号会报错

15.卫星图片分类

15.卫星图片分类

4.5 定义训练集与测试集

我们取上面创建的数据集一部分作为训练集,另一部分作为测试集,我们先看一下一共有多少张图片

15.卫星图片分类

15.卫星图片分类

我们可以使用20%的数据进行验证,其余图片进行训练,我们现在定义这两个数值,这里由于乘0.2可能会出现小数,我们的数量是不能有小数部分的,所以我们取整形部分

15.卫星图片分类

15.卫星图片分类

15.卫星图片分类

之后我们跳过总数据集的前test_count个数作为训练集,然后取前test_count作为测试集

15.卫星图片分类
  • skip() 跳过,参数为要跳过的个数

15.卫星图片分类

5 设置重复,随机与batch

首先我们定义BATCHSIZE为16,这个和cpu性能相关,如果cpu性能好可适量增大,BATCHSIZE越大训练速度越快,BATCHSIZE对训练精度无影响

15.卫星图片分类

此处由于加入了重复,所以随机是有必要的(虽然我们上面对数据集加入了初始随机),因为如果不加入随机我们每次传入的图片顺序还是一样的,对最终训练的结果有不好的影响

15.卫星图片分类
  • shuffle的参数名称为buffle_size是在多少个数据内进行随机的意思,batch的参数名称为batch_size,这两个参数没有关联

15.卫星图片分类

15.卫星图片分类

我们可以发现与上面的train_ds相比,train_ds加入了一个维度None,这个是因为我们加入了batch,我们每加入一次batch就会多出一个维度,所以我们要注意添加batch的次数

我们给测试集也加上batch,测试集不用加shuffle因为无论是否乱序都要测试,而且测试的顺序不影响最终的acc或loss,不用加shuffle就不用加repeat

15.卫星图片分类

15.卫星图片分类

15.卫星图片分类

6 创建模型

我们使用的网络为卷积神经网络,我们的网络是这样的

15.卫星图片分类

我们看一下这个模型的summary

15.卫星图片分类

15.卫星图片分类

15.卫星图片分类
  • 这个模型很像VGG模型,后面会提到

这里要注意下面几点

  • 图像大小

我们卷积到最后图像大小为(6,6),这个时候依然可以使用(3,3)的卷积核进行卷积,但如果输出的图像大小小于卷积核大小,这个时候就不能继续卷积了,如果继续卷积会报错

15.卫星图片分类
  • 最后一层的神经元个数

二分类我们最终输出一个结果就可以了,我们可以设置一个阈值(一般为0.5),大于或等于阈值我们判定为飞机,小于阈值我们判定为湖泊

15.卫星图片分类

7 编译模型

15.卫星图片分类
  • 优化器

我们这里没有直接使用’adam’这个字符串,而是使用了tf.keras.optimizers.Adam(),我们使用后面的这种方法可以对优化器添加参数,如果使用前面的方式使用的就是默认参数,这里我们修改了学习速率,我们把学习速率搞小一点

  • 损失

我们的所有loss存放在tf.keras.losses中,上面我们用的是大写的BinaryCrossentropy,这个和咱们之前直接输入字符串的效果相同,还有一种小写的,这个需要添加参数,我们现在暂时不用这个

15.卫星图片分类

如果我们进行多分类任务的话损失就要改成CategoricalCrossentropy

15.卫星图片分类

CategoricalCrossentropy有个参数是from_logits,如果我们在构建神经网络时最后一层没有激活函数,则from_logits就置为True,如果我们有激活函数就置为False

15.卫星图片分类

8 训练模型

首先我们定义训练集与测试集的每一个epoch所进行的批次数

15.卫星图片分类

之后我们使用fit()对神经网络进行训练

15.卫星图片分类

训练之后我们将结果绘制成曲线看一下情况

  • acc

15.卫星图片分类

15.卫星图片分类
  • loss

15.卫星图片分类

15.卫星图片分类

发现准确率已经超过了0.95,这个在实际生活中的某些场合中已经达到了可以使用的程度

9 保存模型

像这种CNN的模型训练的时间比较漫长,所以我们此处先简单介绍一下如何保存模型,训练后我们对训练好的模型进行保存,之后我们再次要使用到这个模型的时候就不需要再训练了

15.卫星图片分类

运行结束后会出现这样一个文件夹

15.卫星图片分类

里面有这些文件,这个就不在这里多介绍了,后面会具体的提到如何保存模型

15.卫星图片分类

10 读取模型

这个时候我们就再另一个新开的py文件中读取模型了

15.卫星图片分类

11 预测模型

我们先从百度上找一张飞机的图片与湖泊的卫星图片,当然我们也可以直接使用数据集中的图片,但是如果找原来的图片意义不大,因为从训练数据中找的图不能验证模型的成果

15.卫星图片分类

我们训练的数据怎么处理的原数据,在预测的时候也要对被预测图片进行一遍相同的处理,所以我们要再次使用一次上面定义的load_img()

首先定义load_img()

15.卫星图片分类

然后使用load_img()

15.卫星图片分类

我们看一下它的shape

15.卫星图片分类

15.卫星图片分类

发现shape是三维的,而我们训练时的图像是四维的,我们需要再提升一个维度

15.卫星图片分类

15.卫星图片分类

15.卫星图片分类

现在我们就可以进行预测了

15.卫星图片分类

15.卫星图片分类

我们发现得到了一个概率值,这个值越靠近1就是越像湖泊,越靠近0就越像飞机,那我们现在就可以直接进行判断了

15.卫星图片分类

15.卫星图片分类

为了方便我们现在把预测的过程也封装成一个函数

15.卫星图片分类

现在我们用这个函数预测一样刚刚湖泊的图片

15.卫星图片分类

15.卫星图片分类

如果想把图片展示出来,然后加上预测的文字,那么我们可以使用opencv,方法在这里可以找到 1.图像基本操作_potato123232的博客-CSDN博客_图像基本操作

Original: https://blog.csdn.net/potato123232/article/details/120716548
Author: Suyuoa
Title: 15.卫星图片分类

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/666888/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Impossible Triangle: What’s Next for Pre-trained Language Models? 论文翻译

    Impossible Triangle: What’s Next for Pre-trained Language Models? 不可能的三角:预训练语言模型的下一步…

    人工智能 2023年5月28日
    0111
  • sklearn聚类算法之Kmeans

    基本思想 K-Means聚类是最常见的一种聚类算法。在K-Means聚类中,算法试图把观察值分到k个组中,每个组的方差都差不多。分组的数量k是用户设置的一个超参数。具体来讲,K-M…

    人工智能 2023年5月31日
    0107
  • Tensorflow Lite使用介绍

    接着前面的博客系列讲,这里来介绍下Tensorflow LIte。 TensorFlow Lite https://tensorflow.google.cn/lite/guide?…

    人工智能 2023年5月24日
    086
  • 如何使用PyTorch进行目标检测任务

    如何使用PyTorch进行目标检测任务 在本文中,我们将详细介绍如何使用PyTorch进行目标检测任务。我们将依次介绍目标检测算法的原理、公式推导、计算步骤以及给出复杂的Pytho…

    人工智能 2024年1月2日
    067
  • Python | Pandas数据清洗与画图

    准备数据 2016年北京PM2.5数据集数据源说明:美国驻华使馆的空气质量检测数据 数据清洗 1. 导入包 import numpy as np import matplotlib…

    人工智能 2023年7月8日
    0110
  • 在PyTorch中如何使用GPU进行加速计算

    问题:如何在PyTorch中使用GPU进行加速计算? 在深度学习中,使用GPU进行计算能够大大提升模型的训练速度。PyTorch提供了简单易用的接口,方便用户将计算任务分配到GPU…

    人工智能 2024年1月3日
    046
  • neo4j下载和安装

    官网下载neo4j安装文件 https://neo4j.com/download-center/#releases 安装Java JDK 最新版本4.3.X要求jdk11,因此安装…

    人工智能 2023年6月5日
    098
  • tensorboard可视化

    tensorboard可视化 Tensorboard导入与可视化图片 模型网络结构的可视化 标量数据的可视化 Tensorboard导入与可视化图片 以手写数字分类mnist数据集…

    人工智能 2023年6月19日
    098
  • 内推 | 【信盟科技-贷后策略分析师 】重庆 12-21K·14薪

    岗位信息 岗位:贷后策略分析师 薪资:12-21K·14薪 工作地点:重庆 岗位职责 1、负责每日更新投诉管理的相关报表,撰写数据分析报告; 2、深入剖析每日投诉案件,将分析报告及…

    人工智能 2023年6月11日
    0128
  • Transformer中的encoder和decoder在训练和推理过程中究竟是如何工作的

    Transformer中的encoder和decoder在训练和推理过程中究竟是如何工作的 苦苦冲浪,找不到答案 Transformer结构(随便冲浪均可查到) Transform…

    人工智能 2023年6月17日
    0144
  • 【学习笔记】图像标注

    图像标注(Image Captioning)将一张图片翻译为一段描述性文字,需要机器用模型去理解图片的内容,还要用自然语言去表达这些内容并生成人类可读的句子。 评价指标 由于现实中…

    人工智能 2023年5月31日
    0107
  • 非监督分类

    非监督分类是以不同影像地物在特征空间中类别特征的差别为依据的一种无先验类别标准的图像分类,是以集群为理论基础,通过计算机对图像进行集聚统计分析的方法。根据待分类样本特征参数的统计特…

    人工智能 2023年7月3日
    083
  • Google Earth Engine(GEE)批量下载夜光遥感数据

    今天来简单分享下如何在GEE中批量下载夜光遥感数据 数据介绍: 夜光遥感数据主要分为两种, 一种是 DMSP/OLS ,由美国军事气象卫星(DMSP)搭载的线性扫描业务系统(OLS…

    人工智能 2023年7月28日
    0103
  • 论文阅读|MAFormer

    MAFormer: A Transformer Network with Multi-scale Attention Fusion for Visual Recognition A…

    人工智能 2023年7月28日
    092
  • 92 推荐算法——相似性推荐和协同过滤

    1 基于相似性的推荐流程 ; 用户偏好如何收集 用户偏好如何整合 大多数情况我们提取的用户行为都多于一种,如何组合这些不同的用户行为,基本上有以下两种方式: 不同的行为分组一般可以…

    人工智能 2023年7月16日
    0113
  • 跑前端vue项目流程

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

    人工智能 2023年6月28日
    088
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球