Unet 实战分割项目、多尺度训练、多类别分割

news2024/10/7 0:31:12

1. 介绍

之前写了篇二值图像分割的项目,支持多尺度训练,网络采用backbone为vgg的unet网络。缺点就是没法实现多类别的分割,具体可以参考:二值图像分割统一项目

本章只对增加的代码进行介绍,其余的参考上述链接博文

本章实现的unet网络的多类别分割,也就是分割可以是两个类别,也可以是多个类别。训练过程仍然采用多尺度训练,即网络会随机将图片缩放到设定尺寸的0.5-1.5倍之间

文件目录如下:

2. 实现思路

因为多类别的分割,mask模板都是灰度图,一般0为背景,255为前景。多类别的话,就是0为背景,1 , 2,3等等其他的灰度值为前景。

而为了方便观察,前景的灰度值不会设定的这么近,都会相隔很远。例如4分割,不会前景分为0123,而是0,63,127,255类似这样的

值得注意的是,VOC数据集的mask模板也是灰度图像,只是填充的颜色才导致显示出来是彩色的

2.1 mask的灰度值

多分割的unet网络,输出的通道数就是分割的个数,从0开始依次递增,所以将mask的灰度映射成0 1 2 3 是必要的

这个就类似于二值图像,将前景 255 映射为 1

因为对于不同的任务,mask的灰度值是不同的,对于新人小白也不会查看mask的灰度值或者找不全等等。要是自己在dataset里面一个个映射也很麻烦,这里提供了一个自动实现的方法

在utils脚本里提供了一个查找mask灰度值的方法,如下:

np.unique 是查找数组里出现过的数字,例如0 0 1 2 2,返回的就是0 1 2 

这里将gray 内容按照从小到大排序,后面映射需要用!!!

代码会遍历所有的训练图像的mask,找到所有的mask前景+背景(0)灰度值,为了在dataset和预测脚本使用,这里将前景的分割像素点灰度值保存为txt格式,保存的路径是data文件夹下

这里返回的len(gray)就是分割的个数,包括背景的,这样接受compute_gray 函数的返回值,可以直接定义unet 分割的通道数

保存的txt文本如下:

这是二值图像分割

这是腹部多脏器多类别分割

2.2 加载mask 灰度值映射

这部分内容在dataset.py脚本中

首先加载txt文本,self.txt 是紫色框中的列表内容

这里很常见,通过image找到mask图片,用replace根据自己图片后缀替换即可

这部分代码就是mask的灰度值映射

首先将当前mask的所有前景找到,用gray遍历。因为之前txt的灰度值是从小到大且从背景0开始排序的,而且self.txt加载的txt是列表形式。可以取个巧,将index就作为分割的映射值

例如,txt 内容是 0 62 125 252 ,说明这是一个包含背景四分类的分割项目

那么self.txt 列表的内容就是【0 62 125 252】

我们想要映射的结果就是0-->0、62-->1、125-->2、252-->3,而0123这些不正是列表值的index吗

2.3 加载数据可视化

打开这部分代码,可以查看可视化数据

如下:

对应的灰度值:

注意:这里classes打印出来有255,不是映射失败,因为本章采用的多尺度训练,图像放大后,会用255填充,这是没关心的,因为后面计算交叉熵损失会忽略255的像素

2.4 预测脚本

预测也很简单,加载完,在映射回去即可

3. 代码使用

说了这么多,代码如何使用最重要,README如下

这里需要更改的地方就三个:

1. 自定义数据按照data目录摆放,看README第二点

2. 因为image个mask的图像后缀不一定严格一致,所以要根据自己的数据更改dataset代码

3. 为了多尺度训练效果可以更好,建议将下面两个参数尽量改成和数据size接近的

base-size 为多尺度的尺寸,图像会缩放成 0.5 * base-size --- 1.5 * base-size之间

crop-size 会中心裁剪成规定的,建议改成和数据宽高接近的

3.1 训练过程

最后两个epoch结果

训练日志有每个类别的recall和precision:

loss 曲线:

网络还没有收敛,只是测试,增大epoch可以收敛的更好

推理:依次为原图、推理图、真实GT图片

3.2注意的点

需要注意的是,有的数据mask不是多值图像,例如二分割任务,像素点除了0 255仍有中间的灰度值等等。这时候建议检查数据,通过opencv处理在进行训练,否则会出错

除此外,因为这里的255也会被映射回去,作为分割的一部分。所以类似于VOC这种有255忽略点的数据集可能不支持本项目,当然可以自己更改代码,将dataset中255不映射即可,或者把txt文本中255删除

3.3 代码下载

项目封装在这:深度学习 Unet 实战分割项目、多尺度训练、多类别分割:腹部多脏器5类别分割数据集

4. 未来展望

后续,会将resnet加入unet中,对比下效果。还有更多的高阶API分割模型等等,也会做个项目

这里展示的是腹部多脏器MRI的多分割项目,代码对二值图像DRIVE数据集也做了测试,不必担心不能兼容

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云计算 - 弹性计算技术全解与实践

一、引言 在过去的十年里,云计算从一个前沿概念发展为企业和开发者的必备工具。传统的计算模型通常局限于单一的、物理的位置和有限的资源,而云计算则通过分布式的资源和服务,为计算能力带来了前所未有的"弹性"。 弹性:…

牛客网SQL:第二快/慢用时之差大于试卷时长一半的试卷

官网链接: 第二快慢用时之差大于试卷时长一半的试卷_牛客题霸_牛客网现有试卷信息表examination_info(exam_id试卷ID, tag试卷类别,。题目来自【牛客题霸】https://www.nowcoder.com/practice/b1e2864271c14b63b0df9fc08b559166?tpId240 0 问题描述 试…

vector类的模拟实现

实现基本的vector框架 参考的是STL的一些源码&#xff0c;实现的vector也是看起来像是一个简略版的&#xff0c;但是看完能对vector这个类一些接口函数更好的认识。 我们写写成员变量&#xff0c;先来看看STL的成元变量是那些 namespace tjl {template<class T>class …

极限的反问题【高数笔记】

1. 什么是极限反问题&#xff1f; 2. 极限反问题分为几类&#xff1f; 3. 每一类极限反问题的具体做法是什么&#xff1f; 4. 每一类极限反问题具体做法是否有前提条件&#xff1f; 5. 例题&#xff1f;

网络分析仪的防护技巧

VNA的一些使用防护技巧&#xff0c;虽不全面&#xff0c;但非常实用&#xff1a; [1] 一定要使用正规接地的三相交流电源线缆进行供电&#xff0c;地线不可悬浮&#xff0c;并且&#xff0c;火线和零线不可反接&#xff1b; [2] 交流供电必须稳定&#xff0c;如220V供电&#x…

windowsserver 2016 PostgreSQL9.6.3-2升级解决其安全漏洞问题

PostgreSQL 身份验证绕过漏洞(CVE-2017-7546) PostgreSQL 输入验证错误漏洞(CVE-2019-10211) PostgreSQL adminpack扩展安全漏洞(CVE-2018-1115) PostgreSQL 输入验证错误漏洞(CVE-2021-32027) PostgreSQL SQL注入漏洞(CVE-2019-10208) PostgreSQL 安全漏洞(CVE-2018-1058) …

ISIS 特性验证(ATT置位、渗透、认证)

拓扑图 配置 sysname AR1 # isis 1is-level level-1cost-style widenetwork-entity 49.0001.0000.0000.0001.00 # interface GigabitEthernet0/0/0ip address 12.1.1.1 255.255.255.0 isis enable 1 # interface GigabitEthernet0/0/1ip address 13.1.1.1 255.255.255.0 isis e…

李宏毅LLM——大模型+大资料的神奇力量

文章目录 大模型的重要性顿悟时刻 大资料的重要性数据预处理不一样的做法&#xff1a;KNN LM 对应视频P12-P14 大模型的重要性 模型参数和数据集越大&#xff0c;文字接龙的错误率越低 顿悟时刻 当模型超过10B-20B时&#xff0c;会突然顿悟 启示&#xff1a;不能只看最终结…

股票K线简介

股票K线&#xff08;K-Line&#xff09;是用于表示股票价格走势的图形&#xff0c;主要由四个关键价格点组成&#xff1a;开盘价、收盘价、最高价和最低价。K线图广泛应用于股票市场技术分析中&#xff0c;它提供了丰富的信息&#xff0c;帮助分析师和投资者理解市场的行情走势…

tee漏洞学习-翻译-2:探索 Qualcomm TrustZone的实现

原文&#xff1a;http://bits-please.blogspot.com/2015/08/exploring-qualcomms-trustzone.html 获取 TrustZone image 从两个不同的位置提取image 从手机设备本身从google factory image 已经root的Nexus 5设备&#xff0c;image存储在eMMC芯片上&#xff0c;并且eMMC芯片…

爬虫工作量由小到大的思维转变---<第四十六章 Scrapyd 用gerapy管理多台机器爬虫(2)>

前言: 继续上一篇爬虫工作量由小到大的思维转变---&#xff1c;第四十四章 Scrapyd 用gerapy管理多台机器爬虫&#xff1e;-CSDN博客 要想在电脑B上,部署爬虫应该做哪些? 正文: 前期准备: 1.已经成功在电脑A上启动了gerapy.并能够成功连接电脑A的ip; 原理: 首先,我需要…

图数据库 之 Neo4j - 环境搭建(2)

运行环境&#xff1a; centos7 Docker version 18.09.6 下载镜像 docker search neo4j docker pull neo4j 创建 neo4j 用户 # 创建 neo4j 用户 # -M 不创建用户的主目录 sudo useradd -M neo4j # usermod 用于修改用户属性命令 # -L 锁定用户&#xff0c;用户无法登录系统 user…

C++中的闭包

在编程语言中&#xff0c;闭包(closure)&#xff0c;又称为词法闭包(lexical closure)或函数闭包(function closure)&#xff0c;是一种在具有一流函数的语言中(a language with first-class functions)实现词法作用域名称绑定的技术。从操作上来说&#xff0c;闭包是一个将函数…

HiveSQL——借助聚合函数与case when行转列

一、条件函数 if 条件函数 if函数是最常用到的条件函数&#xff0c;其写法是if(xn,a,b), xn代表判断条件&#xff0c;如果xn时&#xff0c;那么结果返回a ,否则返回b。 selectif(age < 25 or age is null, 25岁以下, 25岁以上) as age_cnt,count(1) as number from table…

C语言第二十弹---指针(四)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 指针 1、字符指针变量 2、数组指针变量 2.1、数组指针变量是什么&#xff1f; 2.2、数组指针变量怎么初始化 3、⼆维数组传参的本质 4、函数指针变量 4.1…

spring boot(2.4.x之前版本)和spring cloud项目中自动装配的监听执行顺序

目录 扫描 org.springframework.context.ApplicationListener 指定的类 内置的监听 spring boot 中的监听 spring boot autoconfigure 中的监听 spring boot context 中的监听 将加载的监听进行排序 spring boot 中的监听 spring boot context 中的监听 监听执行 监听…

Apache Paimon 文件操作

本文旨在澄清不同文件操作对文件的影响。 本页面提供具体示例和实用技巧&#xff0c;以有效地管理这些操作。此外&#xff0c;通过对提交&#xff08;commit&#xff09;和压实&#xff08;compact&#xff09;等操作的深入探讨&#xff0c;我们旨在提供有关文件创建和更新的见…

006集——where语句进行属性筛选——arcgis

在arcgis中&#xff0c; dBASE 文件除了 WHERE 语句以外&#xff0c;不支持 其它 SQL 命令。选择窗口如下&#xff1a; 首先&#xff0c;我们了解下什么是where语句。 WHERE语句是SQL语言中使用频率很高的一种语句。它的作用是从数据库表中选择一些特定的记录行来进行操作。WHE…

第二证券:沪指涨近1%收复2800点,券商等板块拉升,稀土板块爆发

7日早盘&#xff0c;两市股指延续昨日强势&#xff0c;再度拉升。沪指涨近1%克复2800点&#xff0c;深成指、科创50指数大涨约3%&#xff1b;两市半日成交超6000亿元&#xff0c;北向资金净买入超20亿元。 截至午间收盘&#xff0c;沪指涨0.91%报2814.89点&#xff0c;深成指涨…

第1章 认识Flask

学习目标 了解Flask框架&#xff0c;能够说出Flask框架的发展史以及特点 熟悉隔离Python环境的创建方式&#xff0c;能够独立在计算机上创建隔离的Python环境 掌握Flask的安装方式&#xff0c;能够独立在计算机上安装Flask框架 掌握PyCharm配置隔离环境的方式&#xff0c;能…