深度学习遥感图像语义分割&目标检测

【ArcGISPro】Arcpy遥感影像语义分割数据集预处理(含代码) 利用Arcpy快速拼接大量tif 阅读详情

深度学习遥感图像语义分割&目标检测

代码见github:
WangZhenqing-RS/2021Tianchi_RSgithub.com
图标

  1. 赛题描述
    本赛题基于不同地形地貌的高分辨率遥感影像资料,希望参赛者能够利用遥感影像智能解译技术识别提取土地覆盖和利用类型,实现生态资产盘点、土地利用动态监测、水环境监测与评估、耕地数量与监测等应用。结合现有的地物分类实际需求,参照地理国情监测、“三调”等既有地物分类标准,设计陆域土地覆盖与利用类目体系,包括:林地、草地、耕地、水域、道路、城镇建设用地、农村建设用地,工业用地、构筑物、裸地。
    训练数据(2.83GB)

测试A榜数据(530.17MB)

测试B榜数据(766.87MB)

测试B榜密码需要输入两次:第一次:MZwwrF4R第二次:opr9o9QPH

  1. 解决方案
    我们采用Unet++进行实验。需要的软件版本如下。

库 版本
GDAL 3.1.4
segmentation-models-pytorch 0.1.3
torch 1.7.0+cu110
pytorch-toolbelt 0.4.1
2.1. 数据预处理
2.1.1. 统计各类的像素百分比
我们需要了解一下我们的数据中每个类的像素占比情况,对我们后续处理和分析有一定的帮助,运行程序为"code\count_classes.py"。 我们可以发现,各类别非常不均衡,所以我们需要进行少类别上采样以及选择合适的损失函数。

2.1.2. 分隔训练集和验证集
最初为了更加充分利用数据,采用五折交叉验证方式对模型进行训练。在分隔训练集和验证集时,我们在连续五个数据中取其中四份做训练数据,其中一份做验证数据。我们使用dataProcess.py文件中的split_train_val_old函数进行分隔。实验发现线上分数和线下分数差别很大,推测应该是测试集和训练集不同域,光谱差异较大。

为了模拟不同域,我们使用全部数据作为训练集,全部数据作为验证集,只不过训练集和验证集的增强方式不同。

2.1.3. 少类别上采样
我们对类别像素占比很少的类别进行上采样处理,抵抗不均衡现象。若图像包含类别5、6、7则上采样2份,类别3、8、10因为得分太低,采取放弃策略,类别4几乎每张影像都有,亦采取放弃策略。

upsample_num = 2
if ((5 in label) or
    (6 in label) or
    (7 in label)):
    for up in range(upsample_num):
        train_label_paths_upsample.append(train_label_path)
        train_image_paths_upsample.append(train_image_paths[i])

2.1.4. 波段选取
我们使用了比赛提供的R/G/B/Nir波段。我们实验过增加归一化植被指数NDVI作为image的第5通道输入到网络中,但是效果不佳,故舍弃这一策略。因为选取了多波段,所以使用了gdal读取图像。

def imgread(fileName, addNDVI=False):
    dataset = gdal.Open(fileName)
    width = dataset.RasterXSize
    height = dataset.RasterYSize
    data = dataset.ReadAsArray(0, 0, width, height)
    # 如果是image的话,因为label是单通道
    if(len(data.shape) == 3):
        # 添加归一化植被指数NDVI特征
        if(addNDVI):
            nir, r = data[3], data[0]
            ndvi = (nir - r) / (nir + r + 0.00001) * 1.0
            # 和其他波段保持统一,归到0-255,后面的totensor会/255统一归一化
            # 统计了所有训练集ndvi的值,最小值为0,最大值很大但是数目很少,所以我们取了98%处的25
            ndvi = (ndvi - 0) / (25 - 0) * 255
            ndvi = np.clip(ndvi, 0, 255)
            data_add_ndvi = np.zeros((5, 256, 256), np.uint8)
            data_add_ndvi[0:4] = data
            data_add_ndvi[4] = np.uint8(ndvi)
            data = data_add_ndvi
        # (C,H,W)->(H,W,C)
        data = data.swapaxes(1, 0).swapaxes(1, 2)
    return data

2.1.5. 数据增强
为增强模型泛化性,我们对训练数据增强策略采用了随机水平翻转、垂直翻转、对角翻转以及0.5%百分比线性拉伸。为模拟变域,我们对验证集数据进行了随机0.8%、1%、2%线性拉伸。

线性拉伸

def truncated_linear_stretch(image, truncated_value, max_out = 255, min_out = 0):
    def gray_process(gray):
        truncated_down = np.percentile(gray, truncated_value)
        truncated_up = np.percentile(gray, 100 - truncated_value)
        gray = (gray - truncated_down) / (truncated_up - truncated_down) * (max_out - min_out) + min_out 
        gray = np.clip(gray, min_out, max_out)
        gray = np.uint8(gray)
        return gray

    image_stretch = []
    for i in range(image.shape[2]):
        # 只拉伸RGB
        if(i<3):
            gray = gray_process(image[:,:,i])
        else:
            gray = image[:,:,i]
        image_stretch.append(gray)
    image_stretch = np.array(image_stretch)
    image_stretch = image_stretch.swapaxes(1, 0).swapaxes(1, 2)
    return image_stretch

随机数据增强

image 图像

label 标签

def DataAugmentation(image, label, mode):
    if(mode == "train"):
        hor = random.choice([True, False])
        if(hor):
            #  图像水平翻转
            image = np.flip(image, axis = 1)
            label = np.flip(label, axis = 1)
        ver = random.choice([True, False])
        if(ver):
            #  图像垂直翻转
            image = np.flip(image, axis = 0)
            label = np.flip(label, axis = 0)
        stretch = random.choice([True, False])
        if(stretch):
            image = truncated_linear_stretch(image, 0.5)
    if(mode == "val"):
        stretch = random.choice([0.8, 1, 2])
    # if(stretch == 'yes'):
        # 0.5%线性拉伸
        image = truncated_linear_stretch(image, stretch)
    return image, label

2.2. 训练
2.2.1. 优化器
我们选择Adamw优化器,初始学习率lr=1e-4,权重衰减weight_decay=1e-3。

optimizer = torch.optim.AdamW(model.parameters(),
                              lr=1e-4, weight_decay=1e-3)

2.2.2. 学习率调整
在训练时梯度下降算法可能陷入局部最小值,此时可以通过突然提高学习率,来“跳出”局部最小值并找到通向全局最小值的路径。所以我们采用余弦退火策略调整学习率。T_0=2,T_mult=2,eta_min=1e-5。

在这里插入图片描述

余弦退火调整学习率

scheduler = torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(
        optimizer, 
        T_0=2, # T_0就是初始restart的epoch数目
        T_mult=2, # T_mult就是重启之后因子,即每个restart后,T_0 = T_0 * T_mult
        eta_min=1e-5 # 最低学习率
        )

2.2.3. 损失函数
软交叉熵函数是对标签值进行标签平滑之后再与预测值做交叉熵计算,可以在一定程度上提高泛化性。diceloss在一定程度上可以缓解类别不平衡,但是训练容易不稳定。我们采用软交叉熵函数和diceloss的联合函数作为实验的损失函数。

损失函数采用SoftCrossEntropyLoss+DiceLoss

diceloss在一定程度上可以缓解类别不平衡,但是训练容易不稳定

DiceLoss_fn=DiceLoss(mode='multiclass')

软交叉熵,即使用了标签平滑的交叉熵,会增加泛化性

SoftCrossEntropy_fn=SoftCrossEntropyLoss(smooth_factor=0.1)
loss_fn = L.JointLoss(first=DiceLoss_fn, second=SoftCrossEntropy_fn,
                      first_weight=0.5, second_weight=0.5).cuda()

我们测试了用LovaszLoss进行fine tune,但是最终结果变差了,故放弃。

2.2.4. SWA随机权重平均
我们测试了SWA随机权重平均策略来增强模型泛化性,pytorch官方的SWA学习率调整策略会导致模型精度不升反降,改为余弦退火策略,会使精度略微上升。

2.2.5. attention模块scSE
scSE是综合了通道维度和空间维度的注意力模块,可以增强有意义的特征,抑制无用特征,从而导致精度提升。

2.3. 预测
2.3.1. TTA测试增强
测试时对原图像、水平翻转图像、垂直翻转图像以及百分比截断增强图像的预测结果进行平均,得到TTA结果。

2.3.2. 模型融合
我们训练了不同backbone的unet++,对预测结果取平均,得到最终结果。

2.3.3. 后处理
我们试验了孔洞填充和小物体剔除,结果没有提升,故放弃。 我们NDVI修正结果,结果没有提升,故放弃。

  1. 参考
    阿水233

引自https://zhuanlan.zhihu.com/p/354193558

基于SegNet和UNet的遥感图像分割代码解读 基于SegNet和UNet的遥感图像分割代码解读 目录基于SegNet和UNet的遥感图像分割代码解读前言概述代码框架代码细节分析划分数据集gen_dataset.pyUNet模型训练unet_train.py模型融合combind.pyUNet模型预测unet_predict.py分类结果集成ensemble.pySegNet模型训练segnet_train.py 前言 上了一学期的课,趁着寒假有时间,看了往年论文和部分比赛的代码,现在整理出来。整理的这部分内容以实际操作为主,主要讲解代码部分的分析。 概 阅读详情

相关推荐

深度学习遥感图像分类常用数据集简介以及下载地址

UC Merced Land-Use Data Set 图像像素大小为256*256,总包含21类场景图像,每一类有100张,共2100张。 下载地址:http://weegee.vision.ucmerced.edu/datasets/landuse.html WHU-RS19 Data Set 图像像素大小为600*600,总包含19类场景图像,每一类大概50张,共1005张。 下载地址:http://dsp.whu.edu.cn/cn/staff/yw/HRSscene.html SIRI-.

java_pythons的博客 1万+

基于Pytorch普通遥感图像语义分割(像素级分类)

利用Pytorch进行遥感图像语义分割,也就是像素级分类。

weixin_45836715的博客 1910

深度学习在遥感图像处理中的应用

深度学习在遥感图像处理中的应用已经取得了显著的进展。

2301_81975613的博客 2106

基于超大尺寸图像的语义分割论文和代码汇总

文章目录2021Progressive Semantic Segmentation(CVPR)High Quality Segmentation for Ultra High-resolution Images 2021 Progressive Semantic Segmentation(CVPR) code : https://github.com/VinAIResearch/MagNet 摘要: 这项工作的目的是分割高分辨率的图像,而不超载GPU内存的使用或丢失输出分割地图中的细节。内存约束意味着我们要

如果想成为中心,那么就到中心去吧。 1万+

【遥感图像】目标检测系列.1

遥感领域的几篇目标检测论文。

m0_61899108的博客 2992

基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类

深度卷积网络采用“端对端”的特征学习,通过多层处理机制揭示隐藏于数据中的非线性特征,能够从大量训练集中自动学习全局特征(这种特征被称为“学习特征”),是其在遥感影像自动目标识别取得成功的重要原因,也标志特征模型从手工特征向学习特征转变。但卷积神经网络涉及到的数学模型和计算机算法都十分复杂、运行及处理难度很大,PyTorch平台的掌握也并不容易。为使广大学者能理解卷积神经网络背后的数学模型和计算机算法,掌握利用PyTorch为基础的遥感影像和无人机影像的分类,目标检测,以及语义分割等应用,特开此课程。

CCfz566的博客 1046

【Python深度学习】目标检测和语义分割的区别

在计算机视觉领域,语义分割和目标检测是两个关键的任务,它们都是对图像和视频进行分析,但它们之间存在着明显的区别。本文将通过图像示例,详细阐述语义分割和目标检测之间的差异。

Remote Sensing迷途小书童 7035

遥感影像语义分割:D-LinkNet精度提升Trick(更新中)

修改backbone resnet50 resnext50

zhaoguanhua的博客 1596

机器学习_深度学习毕设题目汇总——遥感

下面是该类的一些题目: 题目 光学遥感图像典型目标检测方法研究 内蒙古草地生产力时空分析及产草量遥感估算和预测 双支路深度神经网络下的遥感图像配准及多分辨率融合分类 可见光遥感图像海面目标自动检测关键技术研究 可见光遥感图像海面舰船目标检测技术研究 基于区域卷积神经网络的光学遥感图像部分遮挡目标检测识别技术研究 基于卷积神经网络的光学遥感影像船只目标检测技术研究 基于多层次语义信息的遥感影像检索 基于多源遥感信息综合的湿地土地覆被分类研究 基于多源遥感影像

MetaGrad的博客 7228

遥感语义分割代码

基于深度学习对影像进行语义分割的算法具体实现,包含常见的Unet,SEGNET等深度学习语义分割模型,实现框架为Keras

GD32单片机开发环境搭建(Keil5安装)

1.安装MDK5 由于GD32 Keil 版本例程的工程是基于Keil MDK-ARM 5.25 uVision5 创建的,所以我在此也安装MDK5.25版本。 下载链接:https://pan.baidu.com/s/1E4tcDQvsVl0xezU3pEyJTA 提取码:s1fr 其他版本下载链接:https://cloud.tencent.com/developer/article/1605195 选择安装路径(不要装到中文路径下,避免不必要的麻烦): 用户信息随便...

fangye945a的博客 3万+

航空航天遥感图像目标检测数据集汇总

下载地址:https://pan.baidu.com/s/1NdOUW43fiVo-AUubYCWUGg 1.DOTA:A Large-scale Dataset for Object Detection in Aerial Images。这是武大遥感国重实验室夏桂松和华科电信学院白翔联合做的一个数据集,2806张遥感图像(大小约4000*4000),188,282个instances,分为15...

weixin_36670529的博客 1万+

美团外卖 mtgsig 1.2 逆向工程与补环境实战指南

本文深入解析了美团外卖核心风控参数mtgsig 1.2的生成机制与逆向实战。通过拆解其复杂的JSON结构,揭示了设备指纹、环境信息加密等关键字段。重点阐述了在Node.js中模拟浏览器环境(补环境)的核心方法,包括DOM/BOM对象、本地存储及Canvas/WebGL等高级指纹的模拟技巧,为安全研究和合规自动化测试提供了一套完整的技术指南。

uber9的博客 410

基于PyTorch深度学习无人机遥感影像目标检测、地物分类及语义分割

随着无人机自动化能力的逐步升级,它被广泛的应用于多种领域,如航拍、农业、植保、灾难评估、救援、测绘、电力巡检等。但同时由于无人机飞行高度低、获取目标类型多、以及环境复杂等因素使得对无人机获取的数据处理越来越复杂。...

WangYan2022的博客 9143

IAR链接器配置文件(.icf)实战指南:从内存映射到代码布局

本文深入解析了IAR链接器配置文件(.icf)的核心作用与实战配置方法。作为嵌入式开发的“内存地图”,.icf文件精确控制代码与数据在Flash和RAM中的布局。文章从定义存储空间、划分区域、预留栈堆,到精确放置中断向量表、代码段及初始化控制,提供了完整的配置指南与避坑技巧,帮助开发者优化内存使用,解决链接错误,是掌握嵌入式系统底层内存管理的关键。

fun88的博客 918

图像处理(12)--图像各种噪声及消除方法

文章目录结构1.什么是图像噪声2. 图像噪声来源3. 噪声分类及其消除方法3.1 高斯噪声及其消除方式3.1.1 如何确定一种噪声是高斯噪声3.1.2 高斯滤波消除高斯噪声3.1.3 高斯函数的重要性质3.2 瑞利噪声及其消除方式3.3 伽马(爱尔兰)噪声及其消除方式3.4 指数分布噪声及其消除方式3.5 均匀噪声及其消除方式3.6 脉冲(椒盐)噪声及其消除方式 1.什么是图像噪声 图像噪声是指...

ShaneHolmes 11万+

遥感图像深度学习数据集完全指南:2024-2025最新汇总

随着深度学习技术的飞速发展,遥感图像分析已成为计算机视觉领域的重要研究方向。从城市规划到环境监测,从农业管理到灾害评估,遥感AI正在改变我们观察和理解地球的方式。然而,高质量的数据集是训练优秀模型的基础。本文基于 satellite-image-deep-learning 开源项目,系统整理了500+个遥感深度学习数据集,涵盖分类、检测、分割、变化检测等多个任务类型,为研究人员和工程师提供一站式的数据集查询指南。数据特点:核心数据集:Sentinel-2专题数据集精选: 2. Sentinel-1(S

weixin_51241407的博客 4424

Xilinx FPGA MultiBoot实战:7Series与UltraScale的SPI Fallback配置详解

本文深入解析了Xilinx FPGA的MultiBoot(多启动)与Fallback(回退)功能,针对7系列与UltraScale/UltraScale+系列,提供了从约束文件编写、看门狗集成到镜像烧录的完整实战配置指南。文章重点对比了两个系列在SPI Fallback配置上的关键差异与注意事项,旨在帮助工程师构建高可靠、永不宕机的FPGA系统。

weixin_29197051的博客 547

关于深度学习中的语义分割

一、语义分割的概念与重要性语义分割是深度学习在图像处理中的一个重要应用,其目标是对图像中的每个像素进行分类,以确定其所属的物体或区域。具体来说,语义分割将图像中的每个像素分配给特定的类别,从而实现对图像的精细分割。这个过程可以提供对图像的深入理解,对于许多应用场景如自动驾驶、医疗图像分析、遥感图像解析等具有重要意义。在深度学习中,语义分割使用卷积神经网络(CNN)对输入图像进行特征提取,并通过全连接层进行分类。

Laoyan_123的博客 3517

深交所 vs 上交所:Level-2实时数据推送规则详解与策略适配指南

本文深度解析沪深Level-2实时数据推送规则的关键差异,包括逐笔成交、逐笔委托和10档行情接口的处理逻辑。针对高频交易策略,详细对比上交所与深交所在数据推送机制、时间戳处理及委托队列解析等方面的差异,并提供具体的策略适配方案和性能优化建议,帮助量化投资者提升跨市场交易稳定性。

weixin_27310417的博客 1166

狗都能看懂的MAML原理讲解和代码实现

meta-leaning指的是元学习,元学习是深度学习的一个分支,一个好的元模型(meta-learner)应该具备对新的、少量的数据做出快速而准确的学习。通俗的来讲, 对于人来说,给几张橘猫的图片让看一下,再给你几张没见过的英短猫图片,你一定能很快识别出来都是猫。但是对于神经网络来说,并非如此。如果让一个小汽车分类网络去识别不同的大货车,那效果肯定很差。而传统的CNN网络都是输入大量的数据,然后进行分类的学习。但是这样做的问题就是,神经网络的通用性太差了,根本达不到“智能”的标准。而人类的认知系统,可以通

个人学习笔记 6万+

深度学习图像语义分割

一、基本介绍 1. 什么是语义分割 语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支,其目标是精确理解图像场景与内容。语义分割是在像素级别上的分类,属于同一类的像素都要被归为一类,因此语义分割是从像素级别来理解图像的。如下如所示的照片,属于人的像素部分划分成一类,属于摩托车的像素划分成一类,背景像素划分为一类。 语义分割 图像分割级别可以分为语义级分割、...

白拾的博客 1万+

手把手教你学Simulink——机器人力控场景实例:基于Simulink的永磁同步电机重力补偿力矩控制仿真

本文介绍了基于Simulink的机器人重力补偿力矩控制仿真方法。针对机器人悬停时电机发热、抖动等问题,提出通过前馈补偿重力转矩的解决方案。文章详细阐述了从机器人动力学建模、重力补偿计算、PMSM转矩控制到系统集成的完整实现流程,并以2-DOF机械臂为例验证了补偿效果。结果表明,重力补偿能显著降低电机电流和拖拽力,提高系统柔顺性。文中还提供了高级功能扩展方向,如参数辨识、摩擦补偿等,为实际工程应用提供了参考框架。

MHD0815的博客 154

tensorflow 目标分割_梧桐会直播报告 | 高分辨率遥感图像目标检测和场景分类研究进展...

深度学习技术驱动的高分辨率遥感图像目标检测和场景分类的研究还面临哪些挑战和难点问题?领域内有哪些常用的公开数据集?该领域的典型应用与最新研究进展有哪些?未来的发展趋势如何?2020年6月7日,西北工业大学程塨研究员用90分钟的时间为遥粉们奉上了一场精彩的前沿进展报告以及互动问答。应遥粉们的要求现奉上当日直播的大礼包~~~温馨提示:1. 错过直播不要紧,请看完整视频回放,文末附回放链接;2...

weixin_39557576的博客 1169

Camera2Demo

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

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【论文速看】DL最新进展20240924-增量语义分割、多任务分割检测、遥感目标检测

【论文速看】DL最新进展20240924-增量语义分割、多任务分割检测、目标检测

qq_40734883的博客 1842

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

目标检测,语义分割,实例分割

任务类型核心目标输出结果(以 “1 猫 + 2 狗” 图像为例)通俗理解目标检测1. 识别图像中所有目标的类别;2. 用矩形框(Bounding Box)定位目标位置。3 个矩形框 + 类别标签(如 “猫 (框 1)”、“狗 (框 2)”、“狗 (框 3)”)“图中有什么?在哪里?语义分割对图像中每一个像素标注类别(不区分同一类别的不同个体)。逐像素标签(如 “猫像素”、“狗像素”、“背景像素”)“每个像素属于哪一类?实例分割对图像中每一个像素标注类别,且区分同一类别的不同个体(实例)。

2403_89241132的博客 1347

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: Pycharm中使用github时出现Invali authentication data.404 Not found-Not Found
下一篇: RuntimeError: Error(s) in loading state_dict for UnetPlusPlus:
YL_python_C++_java
博客等级 码龄7年 1392粉丝 142原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值