【深度学习|地学应用】使用SimCLR对遥感数据(如AID)训练+评估完整代码流程,附代码。

论文阅读——GeoChat(cvpr2024) 阅读详情

【深度学习|地学应用】使用SimCLR(a simple framework for contrastive learning of visual representations)对遥感数据(如AID)训练+评估完整代码流程,附代码。

【深度学习|地学应用】使用SimCLR(a simple framework for contrastive learning of visual representations)对遥感数据(如AID)训练+评估完整代码流程,附代码。



欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “学术会议小灵通”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/147776758


前言

  • 下面是一个使用 SimCLR 方法对 AID 数据集进行自监督预训练与下游分类微调的完整流程,包括环境配置、数据准备、模型构建、训练与评估。

该代码基于 PyTorch 编写,适用于遥感图像自监督学习实验。

✅ 一、环境准备

pip install torch torchvision scikit-learn tqdm

✅ 二、数据准备(AID 数据集)

  • 你需要先下载 AID 遥感图像分类数据集,每个类有220张图像,总共30个类别(彩色图像,600×600)。
  • 我们假设你将其解压到了 ./AID 文件夹下:
./AID/
    ├── airport/
    ├── bareland/
    ├── ...

✅ 三、数据加载与增强

from torchvision import transforms, datasets
from torch.utils.data import Dataset
import random

class SimCLRDataset(Dataset):
    def __init__(self, root, transform):
        self.dataset = datasets.ImageFolder(root=root)
        self.transform = transform

    def __getitem__(self, idx):
        img, _ = self.dataset[idx]
        xi = self.transform(img)
        xj = self.transform(img)
        return xi, xj

    def __len__(self):
        return len(self.dataset)

# SimCLR增强:随机裁剪 + 颜色扰动
simclr_transform = transforms.Compose([
    transforms.RandomResizedCrop(224),
    transforms.RandomHorizontalFlip(),
    transforms.RandomApply([transforms.ColorJitter(0.4,0.4,0.4,0.1)], p=0.8),
    transforms.RandomGrayscale(p=0.2),
    transforms.ToTensor(),
])

train_dataset = SimCLRDataset("./AID", simclr_transform)

✅ 四、SimCLR 模型构建

import torch.nn as nn
import torchvision.models as models

class SimCLR(nn.Module):
    def __init__(self, base_model='resnet18', projection_dim=128):
        super().__init__()
        self.encoder = models.__dict__[base_model](pretrained=False)
        num_ftrs = self.encoder.fc.in_features
        self.encoder.fc = nn.Identity()

        self.projector = nn.Sequential(
            nn.Linear(num_ftrs, 256),
            nn.ReLU(),
            nn.Linear(256, projection_dim)
        )

    def forward(self, x):
        h = self.encoder(x)
        z = self.projector(h)
        return z

✅ 五、NT-Xent 对比损失函数

import torch
import torch.nn.functional as F

def nt_xent_loss(z_i, z_j, temperature=0.5):
    N = z_i.shape[0]
    z = torch.cat([z_i, z_j], dim=0)
    z = F.normalize(z, dim=1)

    sim = torch.mm(z, z.T)  # [2N, 2N]
    sim /= temperature

    labels = torch.arange(N).repeat(2)
    labels = (labels.unsqueeze(0) == labels.unsqueeze(1)).float().cuda()

    mask = torch.eye(2 * N, dtype=torch.bool).cuda()
    labels = labels[~mask].view(2 * N, -1)
    sim = sim[~mask].view(2 * N, -1)

    positives = sim[labels.bool()].view(2 * N, -1)
    negatives = sim[~labels.bool()].view(2 * N, -1)

    logits = torch.cat([positives, negatives], dim=1)
    labels = torch.zeros(logits.shape[0], dtype=torch.long).cuda()

    return F.cross_entropy(logits, labels)

✅ 六、预训练 SimCLR 模型

from torch.utils.data import DataLoader
import torch.optim as optim
from tqdm import tqdm

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = SimCLR().to(device)
optimizer = optim.Adam(model.parameters(), lr=1e-3)

train_loader = DataLoader(train_dataset, batch_size=128, shuffle=True, num_workers=4)

for epoch in range(100):
    model.train()
    total_loss = 0
    for xi, xj in tqdm(train_loader):
        xi, xj = xi.to(device), xj.to(device)
        zi = model(xi)
        zj = model(xj)
        loss = nt_xent_loss(zi, zj)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        total_loss += loss.item()
    print(f"[Epoch {epoch}] Loss: {total_loss / len(train_loader):.4f}")

✅ 七、下游分类微调

  • 提取冻结后的 encoder 特征,训练一个线性分类器(linear probe):
class LinearClassifier(nn.Module):
    def __init__(self, encoder, num_classes=30):
        super().__init__()
        self.encoder = encoder
        for param in self.encoder.parameters():
            param.requires_grad = False  # 冻结
        self.fc = nn.Linear(512, num_classes)

    def forward(self, x):
        x = self.encoder(x)
        return self.fc(x)

  • 用标准 ImageFolder 加载有标签的训练数据:
supervised_transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor()
])
train_sup = datasets.ImageFolder("./AID", transform=supervised_transform)
train_loader = DataLoader(train_sup, batch_size=64, shuffle=True)

  • 训练线性分类器:
model = LinearClassifier(model.encoder).to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.fc.parameters(), lr=1e-3)

for epoch in range(20):
    model.train()
    total = 0
    correct = 0
    for imgs, labels in train_loader:
        imgs, labels = imgs.to(device), labels.to(device)
        outputs = model(imgs)
        loss = criterion(outputs, labels)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        total += labels.size(0)
        correct += (outputs.argmax(1) == labels).sum().item()
    print(f"Epoch {epoch}: Acc = {correct / total * 100:.2f}%")

✅ 八、总结

模块描述
数据增强生成双视图用于对比学习
模型架构ResNet + MLP投影头
预训练目标最大化相同图像增强视图的相似度
下游任务分类(冻结 encoder + 线性分类器)
航空遥感图像(Aerial Images)目标检测数据集汇总 常规目标检测数据集有很多,现在前沿的目标检测算法(如Faster R-CNN, Yolo, SSD, Mask R-CNN等)基本都是在这些常规数据集上实验的,但是,基于常规数据集训练的分类器,在航空遥感图像上的检测效果并不好,主要原因是航空遥感图像有其特殊性: 1,尺度多样性,航空遥感图像从几百米到近万米的拍摄高度都有,且地面目标即使是同类目标也大小不一,如港口的轮船大的有300多米,小的也只... 阅读详情

相关推荐

YOLOv5训练大规模的遥感实例分割数据集 iSAID从切图到数据集制作及训练

iSAID切图及实例分割训练

weixin_45798949的博客 7587

遥感数据集Million-AID介绍及数据预处理

遥感数据集Million-AID介绍和数据预处理

m0_53374472的博客 7106

遥感图像场景分类常用数据集

1. UC Merced Land-Use Data Set contains 21 scene classes and 100 samples of size 256x256 in each class. 图像像素大小为256*256,总包含21类场景图像,每一类有100张,共2100张。 下载地址:http://weegee.vision.ucmerced.edu/datasets/landuse.html 2.WHU-RS19 Data Set has 19 dif...

haoji007的博客 3322

展示AID数据集,并将类别名放在图像下方

【代码】展示AID数据集,并将类别名放在图像下方。

热爱分享,热爱记录 950

AID 数据集 AID 是一个新的大规模航拍图像数据集

AID 是一个新的大规模航拍图像数据集,通过从 Google Earth 图像中收集样本图像而形成。请注意,尽管 Google Earth 图像是使用原始光学航拍图像的 RGB 渲染进行后处理的,但事实证明,即使在像素级土地利用/覆盖制图方面,Google Earth 图像与真实光学航拍图像之间也没有显着差异。因此,Google Earth 图像也可以用作评估场景分类算法的航拍图像。 新的数据集由以下 30 个空中场景类型组成: 机场、裸地、棒球场、海滩、桥梁、中心、教堂、商业区、密集住宅区、沙漠、农田、森林、工业区、草地、中等住宅区、山区、公园、停车场、游乐场、池塘、港口、火车站、度假村、河流、学校、稀疏住宅区、广场、体育场、储罐和高架桥。所有图像均由遥感图像解译领域的专家标注,每个类别的一些样本如图 1 所示。AID 数据集总共有 30 个类别的 10000 幅图像。 AID 中的图像实际上是多源的,因为 Google Earth 图像来自不同的远程成像传感器。这给场景分类带来了比 UC-Merced 数据集等单源图像更大的挑战。此外,AID 中每个类别的所有样本图像都是从全球不同

从零开始掌握OBD-II:汽车诊断开发的核心技术与实战解析

本文深入解析OBD-II汽车诊断系统的核心技术,包括ECU通信协议、故障码解析及诊断工具开发实战。通过详细的协议分析和代码示例,帮助开发者快速掌握汽车诊断开发技能,实现从零到精通的进阶。特别适合从事汽车电子开发和OBD检测的技术人员参考学习。

weixin_42528780的博客 428

AID数据集的均值和方差

欢迎来到hellyou的博客 893

YOLOv8中Anchor-Based、Anchor-Free及样本分配策略

本文主要介绍yolov8中的anchor机制与样本分配策略的静态策略和动态策略

qq_52889317的博客 2204

测试:遥感图像分类【PaddleX模型训练+C#部署模型】

作为测试和记录,就随便试一个数据集,AID数据集,AID数据集是一个遥感影像数据集,其包含 30 个类别的场景图像,其中每个类别有约 220 – 420 张,整体共计 10000 张,其中每张像素大小约为 600*600。 PaddleX全流程模型训练 PaddleX是基于飞桨核心框架、开发套件和工具组件的深度学习全流程开发工具。具备 全流程打通 、融合产业实践 、易用易集成 三大特点。这里是体验的PaddleX的GUI版本,当然咔咔写几句代码也是很简单的。 Win10平台,可以先在官网下载Wi.

欧阳罢笔的博客 3655

YOLOv11 改进策略之 Conv 篇:基于 C2fC 与 RepC_SPELAN4 的性能跃迁教程

某工业质检场景中,采用本文改进模块的 YOLOv11 模型,对微小零件缺陷的检测准确率提升 22%;YOLOv10 提出的 C2fC 模块与 RepC_SPELAN4 结构,是针对特征融合与卷积效率的突破性设计,掌握它们,你就能让自己的 YOLOv11 模型在精度与速度的平衡上实现“质的飞跃”。别再让“模型精度不足”成为你的瓶颈——现在就动手修改代码,让你的 YOLOv11 模型在特征提取与检测效率上实现质的飞跃,用技术实力证明你的 AI 研发能力!中的卷积层为 RepC_SPELAN4。

m0_71589036的博客 95

真格量化-bs套利

#!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import time import numpy as np from copy import * #开始时间,用于初始化一些参数 def OnStart(context) : context.myacc = None #登录交易账号 if context.accounts["回测期权"].Login() : co.

qq_26742269的博客 1316

遥感影像-语义分割数据集:iSAID数据集详细介绍及训练样本处理流程

iSAID是第一个用于航空图像分割的基准数据集。这个大规模且注释密集的数据集包含2806张高分辨率图像中15个类别的655451个对象实例

GIS潮流 6201

092、Python在芯片验证中的应用:从脚本小子到验证架构师

Python在芯片验证中的高效应用 本文通过实际案例展示了Python在芯片验证中的关键作用。凌晨三点的调试场景揭示了传统方法的局限,Python脚本能在20分钟内分析80GB波形数据定位FIFO指针问题。文章重点介绍了两个核心工具: 智能日志分析系统:通过正则表达式和上下文分析,自动分类百万行验证日志中的错误,生成可视化报告,效率远超传统grep方法。 寄存器模型生成器:将Excel表格自动转换为UVM寄存器模型代码,将原本需要两周的手工工作缩短至两小时,同时保证零错误。 文章还展示了Python与Sys

z534437748的博客 68

【综述】Transformers in Remote Sensing: A Survey

第一次系统地审查在遥感中基于变压器的最新进展。我们的调查涵盖了60多种最新的基于变压器的方法,用于遥感领域的不同遥感问题:甚高分辨率(VHR)、高光谱(HSI)和合成孔径雷达(SAR)图像。我们通过讨论变压器在遥感方面的不同挑战和开放问题来结束调查。

m0_61899108的博客 4639

2、探索谷歌云平台(GCP):入门指南

本文全面介绍了谷歌云平台(GCP)的入门知识,涵盖其全球基础设施、核心服务和使用方法。内容包括GCP区域与可用区结构、创建免费账户、配置计算资源(如GCE虚拟机)、存储类型(PD、Filestore、GCS)、网络架构(VPC)、组织与项目管理、身份访问控制(IAM),以及计算、存储、数据库、大数据和人工智能等各类云服务。文章还提供了资源规划、安全管理和成本控制等实用建议,帮助用户快速上手并高效利用GCP构建可扩展的云解决方案。

uber9的博客 247

基于ESP32Cam摄像头+YOLOv3完成图像识别_355

本项目正是在此背景下提出,设计一个基于ESP32Cam摄像头的图像识别系统,通过WIFI热点通信实现图像数据的传输,并利用上位机(Windows与Android平台的QT APP)实时显示原始图像与识别结果,实现目标检测、识别与标注功能。

587

ResNet训练遥感影像集AID

本文介绍了基于ResNet50模型的遥感影像场景分类实现。使用AID数据集(包含30类地表场景),通过Python脚本将数据集按2:8比例划分为训练集和验证集。模型采用预训练的ResNet50架构,修改全连接层适配30分类任务。实验设置包括批量大小96、35个训练周期,并配置了数据预处理流程(调整尺寸、归一化)。日志系统记录训练过程,代码展示了数据集加载、模型构建和超参数配置等关键实现步骤,为遥感图像分类提供了一套完整的深度学习解决方案。

995

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【遥感图像】数据集合集!

根据所提供的指导,我们还提供了一个构建 RS 图像数据集的示例,即 Million-AID,这是一个新的大型基准数据集,包含用于 RS 图像场景分类的一百万个实例。新数据集由以下30种航空场景类型组成: 机场,裸地,棒球场,海滩,桥梁,中心,教堂,商业,密集住宅,沙漠,农田,森林,工业,草甸,中等住宅,山地,公园,停车场,游乐场,池塘,港口,火车站,度假村,河流,学校,稀疏住宅,广场,体育场,储罐和高架桥。武汉大学·中国科学院·慕尼黑工业大学·德国航空航天中心·特温特大学。中国科学院·中国科学院大学。

Kyzy_1919的博客 3385

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

好远好远的图像处理---综述

航空遥感图像(Aerial Images)目标检测数据集汇总 常规目标检测数据集有很多,现在前沿的目标检测算法(如Faster R-CNN, Yolo, SSD, Mask R-CNN等)基本都是在这些常规数据集上实验的,但是,基于常规数据集训练的分类器,在航空遥感图像上的检测效果并不好,主要原因是航空遥感图像有其特殊性: 1,尺度多样性,航空遥感图像从几百米到近万米的拍摄高度都有,且地面目标即使......

xys430381_1的专栏 4482

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

AID数据集示例代码中的MatConvNet的使用和配置

MatConvNet的使用,费尽时间,非常煎熬: 自带的 MatConvNet包不行,新下载的      下载的版本 及编译后的结果                   开始没有安装vs2015,安装后,重启matlab,执行: 中间提示没有cl.exe,找到vs下的cl.exe C:\Program Files (x86)\Microsoft Visual Stu...

初学者的博客 4320

AI常用数据集下载

AI常用数据集下载:<持续更新> VOC 数据集下载: 链接:https://pan.baidu.com/s/1zkqg62qKjj1rauAnvBUnXQ 提取码:s6lh CamVid数据集下载: 链接:https://pan.baidu.com/s/1W5zd1KBsiFltVd8f2ighDg 提取码:spc7 CityScape数据集下载: ...

Sean 2704

遥感资源大放送(下)| 11 个经典遥感数据集

内容提要:利用遥感影像进行土地类别分型,最常用的方法是语义分割。本文继上期土地分类模型训练教程之后,又整理了几大主流公开遥感数据集。 原创:HyperAI超神经 关键词:遥感数据集 语义分割 机器视觉 在上一期 《遥感资源大放送(上):用开源代码,训练土地分类模型 》 中,我们详细介绍了遥感影像进行土地分类的常用方法,以及具体如何使用利 deeplab-v3+ 用于土地 7 分类的具体训练过程及代码。 教程地址: https://openbayes.com/console/openbayes/cont.

HyperAI超神经 2万+

夏桂松团队AID数据集相关代码执行问题

  demo_low_level_features_aid.m, 执行相对比较顺利,按要求配置好对应的目录,准备好数据,修改部分路径即可; demo_mid_level_features_aid.m 执行时候,首先出现问题的是 GetClusteringSet_aid;执行错误,后来输出中间变量发现是因为下载的数据集解压时候缺少数据造成的,后来又重新下载解压,该问题解决;然后是vlfeat使用...

初学者的博客 3624

[论文笔记] 遥感航拍影像25篇CVPR39个数据集

本文讲解了39个数据集,关于高空卫星图和低空无人机航拍图相。本文汇总了25篇CVPR2020年和2021年的论文。本文详细介绍了这25篇论文的任务是什么,难点是什么,场景是什么。同时,本文在需要的地方解释了一些卫星图和航拍图的入门常识和前置知识,比如digital surface model的含义。目前有许多研究生毕业论文是做CV这个领域的,模型创新十分困难,于是许多同学转而寻找场景创新。阅读本文,你可以了解到目前学界在卫星图和航拍图这个领域是如何切入的,做什么任务的。

专注“目标检测”领域技术分享 2万+

【学习笔记3】用于深空探测的遥感影像分类资料调研

已知需求: 遥感影像处理的深度学习技术, ①.大规模的遥感影像样本库:开放、统一基准的影像样本库,包含多光谱影像、高光谱影像、全色影像、SAR影像、三维立体影像,是遥感智能处理的数据基础。 ②.高效、可控的遥感专用深度学习框架与模型,是遥感影像自动化处理与分析的操作系统,(已知可用tf、pytorch、paddlepaddle) ③.可靠的数据标注工具,目前公开遥感数据集越来越增多,比如 NWPU、AID 一.计算方式 并行计算 分布式计算 多方计算 二. ...

weixin_46817156的博客 1083
上一篇: 【深度学习|学习笔记】自监督学习(Self-Supervised Learning, SSL)在遥感领域中的典型应用案例及其在小样本学习中的作用,附代码。
下一篇: 【深度学习|地学应用】使用 MAE(Masked Autoencoder)进行遥感变化检测任务的自监督预训练的完整 PyTorch 代码流程
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

985在读小水博一枚呀~

您的鼓励是我创作的动力!谢谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值