计算机视觉的应用19-基于pytorch框架搭建卷积神经网络CNN的卫星地图分类问题实战应用
大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用19-基于pytorch框架搭建卷积神经网络CNN的卫星地图分类问题实战应用。随着遥感技术和卫星图像获取能力的快速发展,卫星图像分类任务成为了计算机视觉研究中一个重要的挑战。为了促进这一领域的研究进展,卫星图像分类问题数应运而生。本文将详细介绍遥感卫星图片分类项目,包括其背景、卫星图像分类数据集构建流程、数据集特点以及在卫星图像分类任务中的应用。

一、项目说明
随着城市化和环境监测需求的增加,卫星图像分类成为了很多应用场景中的核心任务。然而,由于数据集的有限性和复杂性,导致该任务的挑战性提高。为了解决这个问题,EuroSAT项目被启动,旨在创建一个大规模、多类别的卫星图像数据集,以推动卫星图像分类算法的发展。
二、数据集构建流程
EuroSAT数据集的构建过程主要分为以下几个步骤:
(1)数据采集:从欧洲空间局(ESA)的Sentinel-2卫星获取高分辨率的多光谱卫星图像。
(2)数据预处理:对采集到的原始图像进行预处理,包括遥感图像纠正、边缘对齐和亮度调整等。
(3)样本选择:根据地理标签和类别信息,选择合适的区域作为样本,并手动标注每个样本的类别标签。
(4)数据增强:通过旋转、平移、缩放等变换方式,对每个样本进行数据增强,扩充数据集规模和多样性。
(5)数据集划分:将数据集划分为训练集、验证集和测试集,保证数据集的随机性和可比性。
三、数据集特点
EuroSAT数据集具有以下显著特点:
(1)多类别:EuroSAT包含13个不同的土地覆盖类别,例如城市、森林、河流、田地等。
(2)高分辨率:所有图像都经过高分辨率处理,有助于提取更多细节和特征。
(3)多样性:数据集中包含了不同季节、不同天气条件下的卫星图像,增加了数据集的多样性。
(4)大规模:EuroSAT数据集共包含27,000张卫星图像,使得算法可以进行更全面的训练和评估。

四、卫星图像分类任务中的应用
EuroSAT数据集在卫星图像分类任务中具有广泛的应用,包括但不限于以下几个领域:
(1)土地覆盖变化监测:通过对卫星图像进行分类和分析,可以实时监测土地覆盖的变化情况,为城市规划、环境保护等提供支持。
(2)灾害监测与评估:通过对不同地区的卫星图像进行分类,可以及时发现并评估灾害事件,为救援工作提供有效指导。
(3)农业管理和产量预测:通过对农田卫星图像进行分类,可以监测农作物的生长情况,预测产量,优化农业管理策略。
五、遥感卫星地图数据加载
下面我将加载EuroSAT数据集(卫星图像分类数据集),EuroSAT数据集下载地址:https://madm.dfki.de/files/sentinel/EuroSAT.zip
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy as np
from torch.utils.data import DataLoader
from torchvision.datasets import ImageFolder
import random
from torch.utils.data import Subset# 图片展示函数
def imshow(img):img = img / 2 + 0.5 # 反归一化npimg = img.numpy()plt.imshow(np.transpose(npimg, (1, 2, 0)))plt.show()# 定义图像转换操作
trans = transforms.Compose([transforms.Resize((64, 64)),transforms.ToTensor(), # 转换为张量transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) # 归一化
])# 加载数据集
dataset = ImageFolder(root='./data/EuroSAT/2750', transform=trans)# 类别标签
classes = dataset.classes
print(len(classes))# 设置随机种子,确保每次划分结果一致
random.seed(42)# 计算划分的样本数量
dataset_len = len(dataset)
train_len = int(0.7 * dataset_len)
val_len = int(0.2 * dataset_len)
test_len = dataset_len - train_len - val_len# 创建索引列表
indices = list(range(dataset_len))
random.shuffle(indices)# 划分数据集
train_indices = indices[:train_len]
val_indices = indices[train_len:train_len+val_len]
test_indices = indices[train_len+val_len:]# 创建子集
train_dataset = Subset(dataset, train_indices)
val_dataset = Subset(dataset, val_indices)
test_dataset = Subset(dataset, test_indices)# 创建数据加载器
train_dataloader = DataLoader(train_dataset, batch_size=64, shuffle=True)
val_dataloader = DataLoader(val_dataset, batch_size=64, shuffle=False)
test_dataloader = DataLoader(test_dataset, batch_size=64, shuffle=False)
六、基于pytorch框架的遥感卫星地图分类模型构建
class CNNnet(nn.Module):def __init__(self):super(CNNnet, self).__init__()self.conv1 = nn.Conv2d(3,32,3,1)self.conv2 = nn.Conv2d(32,32,3,1)self.pool = nn.MaxPool2d(2,2)self.relu = nn.ReLU()self.dropout = nn.Dropout(0.25)self.fc =nn.Linear(6272,len(classes))def forward(self,x):x =self.conv1(x)x =self.pool(x)x =self.conv2(x)x = self.pool(x)x = self.relu(x)x = self.dropout(x)x =x.view(x.size(0),-1)x=self.fc(x)return x
七、模型训练
models =CNNnet()
optimizer = torch.optim.Adam(models.parameters(),lr=0.001)
criterion = nn.CrossEntropyLoss()for epoch in range(10):train_total = 0train_correct = 0train_loss_total = 0.0val_total = 0val_correct = 0val_loss_total = 0.0# 训练集for datas, label in train_dataloader:optimizer.zero_grad()outs = models(datas)loss = criterion(outs, label)loss.backward()optimizer.step()_, pred = torch.max(outs, 1)train_total += label.size(0)train_correct += (pred == label).sum().item()train_loss_total += loss.item()train_loss_avg = train_loss_total / len(train_dataloader)train_acc = train_correct / train_total# 验证集models.eval() # 设置为评估模式,不进行反向传播with torch.no_grad():for datas, label in val_dataloader:outs = models(datas)loss = criterion(outs, label)_, pred = torch.max(outs, 1)val_total += label.size(0)val_correct += (pred == label).sum().item()val_loss_total += loss.item()val_loss_avg = val_loss_total / len(val_dataloader)val_acc = val_correct / val_totalprint(f"Epoch: {epoch+1}")print(f"Train Loss: {train_loss_avg}, Train Accuracy: {train_acc}")print(f"Validation Loss: {val_loss_avg}, Validation Accuracy: {val_acc}")
八、模型保存与加载
这里我们采用torch.jit方式进行存储,直接保存Torch Script 格式
torch.jit.save(torch.jit.script(models), 'model.pt')
loaded_model = torch.jit.load('model.pt')
以上torch.jit.save 是 PyTorch 中用于将模型保存为 Torch Script 格式的函数。Torch Script 是一种中间表示法,它可以将 PyTorch 模型序列化并保存到磁盘上,以便后续在不需要原始模型定义的情况下加载和执行模型。
models 是已经训练好的模型实,torch.jit.script 用于将模型转换为 Torch Script 形式,这样它就可以被保存到磁盘并加载回来进行预测。
‘model.pt’ 是要保存模型的文件路径和名称。你可以根据需要更改文件名和路径。
采用torch.jit.save(torch.jit.script(models), ‘model.pt’) 的作用是将经过转换为 Torch Script 的模型保存到名为 ‘model.pt’ 的文件中。
运行结果:
Epoch: 1
Train Loss: 1.0448811401587885, Train Accuracy: 0.6264550264550265
Validation Loss: 0.7070850253105163, Validation Accuracy: 0.7627777777777778
Epoch: 2
Train Loss: 0.692695257228774, Train Accuracy: 0.7563492063492063
Validation Loss: 0.6866358742994421, Validation Accuracy: 0.7483333333333333
Epoch: 3
Train Loss: 0.5860184832803301, Train Accuracy: 0.7971428571428572
Validation Loss: 0.5635017317884109, Validation Accuracy: 0.8048148148148148
Epoch: 4
Train Loss: 0.537103551213403, Train Accuracy: 0.8129100529100529
Validation Loss: 0.5531797622933107, Validation Accuracy: 0.8101851851851852
Epoch: 5
Train Loss: 0.4707282580233909, Train Accuracy: 0.8357671957671957
Validation Loss: 0.5103719413280488, Validation Accuracy: 0.8185185185185185
Epoch: 6
Train Loss: 0.4517604966421385, Train Accuracy: 0.8439682539682539
Validation Loss: 0.5074160200708052, Validation Accuracy: 0.8285185185185185
Epoch: 7
Train Loss: 0.4016518093444206, Train Accuracy: 0.8625925925925926
Validation Loss: 0.5236595521954929, Validation Accuracy: 0.8137037037037037
Epoch: 8
Train Loss: 0.37693205440567956, Train Accuracy: 0.8712698412698413
Validation Loss: 0.5407256515587078, Validation Accuracy: 0.8312962962962963
Epoch: 9
Train Loss: 0.33328121374487074, Train Accuracy: 0.8876190476190476
Validation Loss: 0.5358928382396698, Validation Accuracy: 0.8262962962962963
Epoch: 10
Train Loss: 0.31978219168613087, Train Accuracy: 0.8924867724867724
Validation Loss: 0.525197943168528, Validation Accuracy: 0.8322222222222222
结论:
396698, Validation Accuracy: 0.8262962962962963
Epoch: 10
Train Loss: 0.31978219168613087, Train Accuracy: 0.8924867724867724
Validation Loss: 0.525197943168528, Validation Accuracy: 0.8322222222222222
# 九、结论:
本项目是基于遥感卫星地图分类数据集做的卫星图像分类任务,为卫星图像分类任务提供了一个重要的基准,推动了该领域的研究进展。其多样性、多类别和大规模的特点使得EuroSAT成为了一个广受关注的数据集。未来,我们可以期待更多基于EuroSAT数据集的算法和应用的涌现,进一步推动卫星图像分类技术的发展。
相关文章:
计算机视觉的应用19-基于pytorch框架搭建卷积神经网络CNN的卫星地图分类问题实战应用
大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用19-基于pytorch框架搭建卷积神经网络CNN的卫星地图分类问题实战应用。随着遥感技术和卫星图像获取能力的快速发展,卫星图像分类任务成为了计算机视觉研究中一个重要的挑战。为了促进这一…...
Java 获取本地ip网卡信息
工具类 public static Optional<Inet4Address> getLocalIp4Address() throws SocketException {final List<Inet4Address> inet4Addresses getLocalIp4AddressFromNetworkInterface();if (inet4Addresses.size() ! 1) {final Optional<Inet4Address> ipBySo…...
将kali系统放在U盘中插入电脑直接进入kali系统
首先准备一个空白的 U 盘。 Kali Linux | Penetration Testing and Ethical Hacking Linux Distribution 在 Windows 上制作 Kali 可启动 USB 驱动器 Making a Kali Bootable USB Drive on Windows | Kali Linux Documentation 1. 首先下载 .iso 镜像 Index of /kali-images…...
二十四、RestClient操作文档
目录 一、新增文档 1、编写测试代码 二、查询文档 1、编写测试代码 三、删除文档 1、编写测试代码 四、修改文档 1、编写测试代码 五、批量导入文档 批量查询 一、新增文档 1、编写测试代码 SpringBootTest public class HotelDocumentTest {private RestHighLevelC…...
【Docker】从零开始:9.Docker命令:Push推送仓库(Docker Hub,阿里云)
【Docker】从零开始:9.Docker命令:Push推送仓库 知识点1.Docker Push有什么作用?2.Docker仓库有哪几种2.1 公有仓库2.2 第三方仓库2.3 私有仓库2.4 搭建私有仓库的方法有哪几种 3.Docker公有仓库与私有仓库的优缺点对比 Docker Push 命令标准语法操作参数…...
Centos部署GitLab-备份恢复
1. 下载rpm包 wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.8.4-ce.0.el7.x86_64.rpm2. 安装依赖 yum -y install policycoreutils openssh-server openssh-clients postfix policycoreutils-python3. rpm安装 rpm -ivh gitlab-ce-10.8.4-ce.…...
CSV用EXCEL打开后为科学计数法(后几位丢失)解决方法
当在Excel中打开含有长数字(如订单号)的CSV文件时,Excel可能会默认将这些长数字格式化为科学计数法。 而当您尝试将它们转换为文本格式时,如果数字非常长,Excel可能无法正确处理其精度,导致数字的后几位变…...
flink sqlClient提交hiveIceberg
flink sqlClient提交hiveIceberg 环境准备sqlclient启动前准备启动sqlclientinit.sqlinsert.sql 环境准备 组件名版本flink客户端1.14.4-2.12hadoop集群3.1.4hive客户端3.1.2icebergiceberg-flink-runtime-1.14-0.13.2.jariceberg-hive依赖iceberg-hive-runtime-0.13.2.jar s…...
SpringBoot 导入其他配置文件
默认情况下,springboot 初始的项目中都有一个 application.yml 或者 application.properties 文件,如果我们希望再定义一个独立的配置文件用来配置特定业务数据,而不希望把这些配置内容都堆积在 application 配置文件中,实现这个需…...
景区智慧旅游智能化系统方案:PPT全文58页,附下载
关键词:智慧景区解决方案,智慧文旅解决方案,智慧旅游解决方案,智慧文旅综合运营平台 一、景区智慧旅游智能化系统建设背景 近年来,随着信息技术的快速发展和普及,以及旅游市场的不断扩大和升级࿰…...
Java特殊文件读取案例Properties
代码 package com.itheima.d1;import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.util.Properties;public class Test3 {public static void main(String[] args) throws Exception {//目标:读取属性文件…...
搜维尔科技:Faceware面部捕捉最佳实践!
视频源和分辨率: 我们的软件针对 RGB 彩色素材进行了优化,不支持使用红外摄像机。 我们建议视频分辨率为 720p 和 1080p。低于 720p 的分辨率可能会对跟踪质量产生负面影响,而高于 1080p 的分辨率会导致存储要求和传输时间增加,而…...
如何使用ArcGIS Pro进行坐标转换
不同来源的数据坐标系可能是不同的,为了统一使用这些数据就需要进行坐标转换,ArcGIS Pro作为专业的GIS软件,坐标转换功能肯定也是包含的,这里为大家介绍一下ArcGIS Pro如何进行坐标转换,希望能对你有所帮助。 数据来源…...
Python----类对象和实例对象
目录 一.类和类的实例 二.类属性和实例属性 三.私有属性和公有属性 四.静态方法和类方法 五.__init__方法,__new__方法和__del__方法: 六.私有方法和公有方法 七.方法的重载 八.方法的继承 九.方法的重写 十.对象的特殊方法 十一.对象的引用&a…...
[23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
paper | proj | code 提出一种基于K-Planes的4D point cloud Representation;提出一种Hybrid appearance model,包含image blending model和SH model。其中,image blending model将3D点映射回原图中求得,SH model通过模型预测求得…...
MySQL错误之ONLY_FULL_GROUP_BY
报错信息: 翻译: 对该报错的解释 所以,实际上该报错是由于在SQL查询语句中有group by,而这个包含group by的SQL查询写的并不规范导致的,这个ONLY_FULL_GROUP_BY模式开启之后检查就会很严格,如果select列表…...
牛客 HJ106 字符逆序 golang实现
牛客题目算法连接 题目 golang 实现 package mainimport ("fmt""bufio""os" )func main() {str, _ : bufio.NewReader(os.Stdin).ReadString(\n)if len(str) 0 {return } else {newstr:""strLen:len(str)-1for i:strLen;i>0;i-…...
浏览器没收到返回,后端也没报错,php的json_encode问题bug
今天网站遇到个问题,后端返回异常,但是浏览器状态码200,但是看不到结果。经过排查发现,我们在返回结果的时候使用了json_encode返回给前端,结果里面的字符编码异常,导致json_encode异常,但是php…...
C#中的迭代器和分部类
目录 一、迭代器 1.示例源码 2.生成效果: 二、分部类 1.示例源码 2.生成效果 迭代器在集合类中经常使用,而分部类则提供了一种将一个类分成多个类的方法,这对于有大量代码的类非常实用。 一、迭代器 迭代器是可以返回相同类型的值的有…...
Java项目如何打包成Jar(最简单)
最简单的办法,使用Maven插件(idea自带) 1.选择需要打包的mudule,点击idea右侧的maven插件 2.clean操作 3.选择需要的其他mudule,进行install操作(如果有) 4.再次选择需要打包的module&#…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
