segformer多分类语义分割

alt

前言

本期将分享「Segformer」,论文地址https://arxiv.org/abs/2105.15203。

Segformer简介

  • 全局上下文信息: 由于Transformer的自注意力机制,Segformer可以在整个图像范围内捕获上下文信息,而不受局部感受野的限制,这有助于提高分割的准确性。
  • 可扩展性: Transformer架构的并行计算能力使得Segformer在处理大尺度图像时表现更好,因为它可以更轻松地处理长距离的依赖关系。
  • 位置编码机制: Segformer使用了一种新的位置编码机制,有助于模型更好地理解像素之间的空间关系,从而提高分割的精度。 alt

数据集介绍

ISPRS提供了城市分类和三维建筑重建测试项目的两个最先进的机载图像数据集。该数据集采用了由高分辨率正交照片和相应的密集图像匹配技术产生的数字地表模型(DSM)。这两个数据集区域都涵盖了城市场景。其中Vaihingen是一个相对较小的村庄,有许多独立的建筑和小的多层建筑。

  • 不透水面 (RGB: 255, 255, 255)

  • 建筑物(RGB: 0, 0, 255)

  • 低矮植被 (RGB: 0, 255, 255)

  • 树木 (RGB: 0, 255, 0)

  • 汽车(RGB: 255, 255, 0)

  • 背景 (RGB: 255, 0, 0)

数据集处理

需要对原始数据集进行切分,并将原始值变成标签。这里我们使用gdal库,按256*256的滑窗进行裁切,并根据颜色映射进行赋值。

from osgeo import gdal, gdalconst
import os
import numpy as np

def color_to_value(rgb):
    color_mapping = {
        (255255255): 1,  # Impervious surfaces
        (00255): 2,      # Building
        (0255255): 3,    # Low vegetation
        (02550): 4,      # Tree
        (2552550): 5,    # Car
        (25500): 0       # Clutter/background
    }
    return color_mapping.get(tuple(rgb), 6)

def crop_images(image_folder1,label_folder, output_image_folder1,output_label_folder, size=256,window=256):
    # 获取文件夹中的文件名列表
    image_files1 = os.listdir(image_folder1)
    label_files = os.listdir(label_folder)

    # 遍历每个文件
    for image_file in image_files1:
        if image_file in label_files:
            # 读取图像和标签
            image_path1 = os.path.join(image_folder1, image_file)

            label_path = os.path.join(label_folder, image_file)

            # 打开遥感影像文件
            image_dataset1 = gdal.Open(image_path1, gdalconst.GA_ReadOnly)

            label_dataset = gdal.Open(label_path, gdalconst.GA_ReadOnly)

            if image_dataset1 is None or label_dataset is None:
                print(f"Failed to open {image_file} ")
                continue

            image_width1 = image_dataset1.RasterXSize
            image_height1 = image_dataset1.RasterYSize

            label_width = label_dataset.RasterXSize
            label_height = label_dataset.RasterYSize

            # 创建单通道数组
            single_channel_array = np.zeros((label_height, label_width), dtype=np.uint8)
            label_array = label_dataset.ReadAsArray()
            # 遍历图像像素,并根据颜色映射进行赋值
            for y in range(label_height):
                for x in range(label_width):
                    pixel_value = color_to_value(label_array[:, y, x])
                    single_channel_array[y, x] = pixel_value

            # 循环裁剪图像和标签
            for y in range(0, image_height1 - size, window):
                for x in range(0, image_width1 - size, window):
                    # 读取图像数据
                    image_data1 = image_dataset1.ReadAsArray(x, y, size, size)

                    label_data = single_channel_array[y:y+size,x:x+size]


                    # 保存裁剪后的图像和标签
                    output_image_path1 = os.path.join(output_image_folder1, f"{image_file[:-4]}_{x}_{y}.tif")

                    output_label_path = os.path.join(output_label_folder, f"{image_file[:-4]}_{x}_{y}.tif")

                    driver = gdal.GetDriverByName("GTiff")
                    new_image1 = driver.Create(output_image_path1, size, size, 3, gdal.GDT_Byte)

                    new_label = driver.Create(output_label_path, size, size, 1, gdal.GDT_Byte)

                    new_image1.SetProjection(image_dataset1.GetProjection())
                    new_image1.SetGeoTransform(
                        (x, image_dataset1.GetGeoTransform()[1], 0, y, 0, image_dataset1.GetGeoTransform()[5]))



                    new_label.SetProjection(label_dataset.GetProjection())
                    new_label.SetGeoTransform(
                        (x, label_dataset.GetGeoTransform()[1], 0, y, 0, label_dataset.GetGeoTransform()[5]))

                    new_image1.GetRasterBand(1).WriteArray(image_data1[0])
                    new_image1.GetRasterBand(2).WriteArray(image_data1[1])
                    new_image1.GetRasterBand(3).WriteArray(image_data1[2])



                    new_label.GetRasterBand(1).WriteArray(label_data)

                    new_image1.FlushCache()

                    new_label.FlushCache()

                    del new_image1, new_label

            image_dataset1 = None

            label_dataset = None


# 使用示例
crop_images(r"G:\download\ISPRS_semantic_labeling_Vaihingen\top",r"G:\download\ISPRS_semantic_labeling_Vaihingen\gts_for_participants" ,r"G:\download\ISPRS_semantic_labeling_Vaihingen\images",r"G:\download\ISPRS_semantic_labeling_Vaihingen\labels",size=256)

裁剪完成后对数据集进行划分,划分完成后的数据集包含679对训练集、156对验证集以及211对测试集。原始数据集与切分后数据集获取链接见文末。

loss变化

alt

测试精度

这里的iou0~iou5分别代表背景、建筑物等iou值。 alt

总结

按以下方式获取文中数据集。完整代码与训练结果请加入我们的星球。

如有需要,请关注微信公众号「DataAssassin」后,后台回复「030」领取。

「感兴趣的可以加入我们的星球,获取更多数据集、网络复现源码与训练结果的」

alt 加入前不要忘了领取优惠券哦! alt

往期精彩

SENet实现遥感影像场景分类
SENet实现遥感影像场景分类
BiseNet实现遥感影像地物
BiseNet实现遥感影像地物
FC-Densenet实现遥感影像道路分类
FC-Densenet实现遥感影像道路分类
pytorch实现遥感影像建筑物提取
pytorch实现遥感影像建筑物提取

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/472218.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开放签开源电子签章白皮书-简版

开放签开源电子签章白皮书-简版 一、摘要: 开放签电子签章团队源自于电子合同SaaS公司,立志于通过开源、开放的模式,结合团队十多年的行业经验,将电子签章产品更简单、更低门槛的推广到各行各业中。让电子签章应用更简单&#x…

动态路由协议-OSPF与LSA简介

一、概述 前面路由基础学习了路由的类型可以按照动静态路由分类,静态路由就是直连和手动配置的路由,而动态路由协议是各路由器相互动态学习的一种路由协议,现在常用的有OSPF和ISIS路由协议,前面在基础篇我们也已经对OSPF有一个简单…

记录我的第一次面试

面试感受 这是我的第一次面试,我感觉我这次面试的很差,很糟糕,十分的糟糕,万分的糟糕。第一次面试,面试了半个小时。我去真的好紧张,脑子里一篇空白。脑子空白还不是最惨的,最惨的是那个八股文…

MySQL的概述与安装

一、数据库的基本概念: 1.1 数据: 1) 描述事物的符号记录称为数据(Data)。数字、文字、图形、图像、声音、档案记录等 都是数据。 2)数据是以“记录”的形式按照统一的格式进行存储的,而不是…

基于SSM的宿舍管理系统的设计与实现(JSP,MySQL)

摘 要 随着社会发展、信息技术的普及,人们日常管理工作也发生了巨大的变化。信息化技术之渗透各行业的方方面面。学生宿舍管理作为校园管理工作的重要一环,不仅关系到学生自身的确切利益,同时也是对校园管理工作重大考验。近来年由于在校学生…

ECMAscript6学习

ECMAscript6介绍 ECMA是一个浏览器脚本标准制定的公司,Netscape 创造了 JavaScript 由于商标原因, 后面ECMA公司取名ECMAscript 1 发布,JavaScript 也就是 ECMAscript.到现在最新的版本是6,简称es6. 新增let 与const let 与const …

精酿啤酒:啤酒花的添加时机与风味影响

啤酒花是啤酒酿造过程中不可或缺的成分,它为啤酒带来与众不同的苦味和香味,并增加了啤酒的层次感和复杂性。接下来将详细介绍Fendi Club啤酒在啤酒花的选择、添加时机和风味影响方面的实践和特点。 首先,Fendi Club啤酒选用上好啤酒花&#x…

Python爬虫获取接口数据

Python爬虫获取接口数据 正常人的操作​​​​​​​​​​爬虫的思路标题获取请求信息标题请求转换为代码完整代码请求返回信息执行程序获取静态网页数据的教程,适用于我们要爬取的数据在网页源代码中出现,但是还是有很多的数据是源代码中没有的,需要通过接口访问服务器来获…

docker仓库登录及配置insecure-registries的方法

docker仓库登录及配置insecure-registries的方法 这篇文章主要介绍了docker仓库登录配置insecure-registries的方法,docker客户端如果配置中添加了insecure-registary配置,就不需要在docker 客户端配置上对应证书,如果不配置要在/etc/docker/certs.d/目…

如何选择适合自己的电源?主机的小伙伴们

如何选择适合自己的电源? 首先我们要学会简单的了解电源,掌握一些关于电源的基础知识。 学会从整体上看待它,然后分析电源的各个元件,以了解一些基本且重要的元件。 比如从电源的分类、电源的铭牌参数信息、电源的结构、材质、品…

强大的文本编辑器:Sublime Text for Mac注册激活版

Sublime Text for Mac是一款功能强大的文本编辑器,特别适合程序员和开发者使用。它提供了丰富的功能,如智能代码补全、语法高亮、自定义快捷键、项目管理、多行选择、自动保存等,以提高代码编写效率和舒适度。此外,Sublime Text还…

网络: DHCP 协议简介

文章目录 1. 前言2. DHCP 协议简介2.1 DHCP 客户端广播 DHCPDISCOVER 消息2.2 DHCP 服务器回复 DHCPOFFER 消息2.3 DHCP 客户端广播 DHCPREQUEST 消息2.4 DHCP 服务器回复 DHCPACK 消息2.5 剩余的工作 3. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误&…

LeetCode hard也就这么回事

给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如下&…

Day72:WEB攻防-业务逻辑篇水平越权垂直越权未授权访问检测插件SRC项目

目录 逻辑越权-检测原理-水平&垂直&未授权 水平越权:同级别的用户之间权限的跨越 垂直越权:低级别用户到高级别用户权限的跨越 未授权访问:无登录用户就能直接访问到需验证应用 逻辑越权-检测项目-BURP插件&对比项目 Xia_Y…

【开源鸿蒙】编译OpenHarmony轻量系统QEMU RISC-V版

文章目录 一、背景介绍二、准备OpenHarmony源代码三、准备hb命令3.1 安装hb命令3.2 检查hb命令 四、编译RISC-V架构的OpenHarmony轻量系统4.1 设置hb构建目标4.2 启动hb构建过程 五、问题解决5.1 hb set 报错问题解决 六、参考链接 开源鸿蒙坚果派,学习鸿蒙一起来&a…

【操作系统】以Pthread线程库为例详解多线程并发运行的特点

目录 写在开头 1.线程的创建 2.主线程与子线程的结束顺序 3.线程之间的数据共享与并发执行 4.蒙特卡洛法求pi(单线程) 5.蒙特卡洛法求pi(多线程) 写在最后 写在开头 近期准备重学操作系统,感觉还是有很多细节的…

通过切面编程(AOP)实现不同字段转换为同一字段

文章目录 前言一、切面编程(AOP)是什么?二、demo样例1.实体类a.新增订单b.更新订单b.日志实体类 2.实现相关a.类型转换接口类b.类型转换接口实现类c.自定义注解d.切面配置e.运行 三、结果示例四、其他 前言 项目中有很多场景需要去记日志,,也…

深入浅出前端本地储存

引言 2021 年,如果你的前端应用,需要在浏览器上保存数据,有三个主流方案: CookieWeb Storage (LocalStorage)IndexedDB 这些方案就是如今应用最广、浏览器兼容性最高的三种前端储存方案 今天这篇文章就聊一聊这三种方案的历史…

Python学习:列表

Python 列表概念 在Python中,列表(List)是一种有序、可变、允许重复元素的数据结构。列表使用方括号 ​[]​来表示,可以包含任意类型的元素,如整数、字符串、列表等。 Python 访问列表中的值 在Python中&#xff0…

BI(商业智能):开启数据驱动的未来

在当今信息时代,企业和组织面临着大量的数据和信息。这些数据包含了各种各样的信息,从市场趋势和消费者行为到销售数据和供应链信息。对于企业而言,利用这些数据来做出明智的决策,提高效率和竞争力变得尤为重要。而商业智能&#…