基于SwinTransformer和Unet的自适应多类别分割

1、介绍

transformer的基于全局信息的把握,使得对图像的处理成为了可能

swin-transformer在图像分类应用的成功,证明了transformer比传统的cnn卷积网络可以更好的提取图像特征。因为图像分割也是基于特征信息的融合,将不同尺度下的信息拼接,那么transformer肯定也可以在分割领域实现好的效果

前言废话多,很多内容之前介绍过了,这里不想重复,可以参考往期的博文:

unet网络介绍:UNet - unet网络-优快云博客

unet多类别网络的实战:Unet 实战分割项目、多尺度训练、多类别分割_unet进行多类分割-优快云博客

unet更换骨干网络为resnet、deeplab等等:Unet+ResNet 实战分割项目、多尺度训练、多类别分割_resnet分类和unet 图像分割-优快云博客

Unet 高阶分割网络实战、多类别分割、迁移学习(deeplab、resnet101等等)_unet多分类-优快云博客

swin-transformer在图像分类的介绍:

Swin-Transformer 在图像识别中的应用_swim transformer 应用-优快云博客

没有数据集的话,想要自己制作,并且利用 swin-transformer 分类,实现端到端的分类项目的话,参考:图像识别完整项目之Swin-Transformer,从获取关键词数据集到训练的完整过程_transformer图像识别-优快云博客

2、项目介绍

因为小白在做分类人物的时候,不知道怎么定义分类的类别,这不是分割吗?怎么还有number classes这个参数?或者这个参数需不需要加背景(+1)?等等

本项目对数据集进行处理,将mask的灰度值进行编码重构,这样可以根据数据集自动获取number classes的个数,不需要手动定义,这也就是为什么叫自适应分割的原因

代码根据官方的代码进行更改,因为官方的代码训练过程可能稍微繁琐了一些,需要生成指定的数据格式啊、或者参数定义太多了等等

事实上,如果跑了很多项目,有了自己熟悉的代码风格的话,完全可以只用源代码的model部分,其余的train、predict等等自己实现

项目目录如下:

这里的data就是数据,按照目录摆好即可,里面都是图片

这里建议图片的名称完全一样,要不然dataset提取到images,想要找到mask的话,还要更改对应的代码 

这里本人写过一篇python自动化办公的脚本,可以参考这个更改:PYTHON 自动化办公:更改图片后缀-优快云博客

3、训练

定义好数据后,就可以训练了,超参数就是下面这几个,如果想要更改优化器啊、动量啊等等,在代码里更改就好了。如果不是炼丹大师的话,建议默认,更改下面的值就行了

这里会自动载入官方的预训练权重,达到迁移学习的目的

当然了,运行前需要配置好环境!!

代码运行完,会在run_results目录下,生成下面的数据,这个目录就是自己生成的

只需要注意一点,每次运行train脚本,都会删除之前的run_results目录,然后生成新的!!

这里对腹部多脏器的进行分割,miou达到了0.81!!

在日志文件中,可以看到更为具体每个类别的iou

因为腹部多脏器是4类别分割,加上背景就是5类,而每个列表下就是对应的类别(索引0代表背景)

4、推理

推理的时候,直接运行predict脚本即可,代码会将inference目录下的所有图像进行推理,并且保存

5、其他

这里捋一遍代码的运行的逻辑

1、按照指定格式摆放好数据

2、更改完超参数后,直接运行train脚本即可

train代码会将数据的mask灰度重新索引,不管你的数据是按照0 255这样灰度,还是0 1 2这样格式,都会重新编码,保存在data下

然后dataset就会根据这个文本,自动灰度映射,因为二值分割需要保证灰度是0 1而非0 255的格式。

最后,trian脚本根据这个文本自动提取分割网络输出的number classes,达到自适应分割

3、运行predict推理即可

项目的下载:基于Swin-Transformer和Unet项目、自适应多尺度训练、多类别分割:腹部多脏器5类别分割数据集资源-优快云文库

这里多尺度,是因为train的预处理,会自动将图片随机缩放到指定尺寸的0.5-1.5倍之间,然后随机裁剪成224*224的size,这样可以达到数据增广的目的

因为transformer的训练时间很长才能收敛,所以本项目自动载入官方的预训练权重,使用迁移学习

其他:

这里没有给出网络输入的维度,而是固定了224*224的输入。因为本人在测试官方代码的时候,发现更改为480*480会报错,所以干脆直接固定了

本项目是一个基于PyTorch框架实现的通用图像分割系统,支持二分类多类别分割任务。系统提供从数据预处理到模型训练、验证评估的完整流程,具有高度可配置性实用性。在数据处理方面,系统支持自定义图像掩码文件格式(如.jpg、.png等),能自动处理不连续的标签值,并集成数据增强功能以提升模型泛化能力。模型特性上,UNet架构可根据任务需求灵活调整参数,包括输入尺寸、卷积通道数等,同时兼容不同类别数量的分割任务(通过--num_classes参数指定)。训练功能支持GPU加速,提供学习率、批次大小等超参数配置选项,可记录损失曲线评估指标(如IoU、Dice系数),并自动保存性能最佳的模型权重。 使用流程简明:用户需按规范组织数据集(图像与掩码文件需名称对应且分别存放于images/masks子目录),通过命令行参数即可启动训练,例如指定数据路径(--data_dir)、学习率(--learning_rate)或标签映射规则(--label_mapping)。系统输出包含模型权重文件(.pth)、训练曲线可视化图表及指标日志,便于结果分析。特别注意事项包括:掩码需为单通道灰度图且标签值为整数,多分类任务推荐使用one-hot编码掩码。项目依赖主流科学计算库(PyTorch、NumPy)及可视化工具(Matplotlib),安装简便。该系统适用于医学影像、遥感等领域的语义分割任务,兼顾易用性与扩展性,用户可通过调整UNet深度或添加注意力机制等进一步优化性能。 【项目说明书】包含代码原理的讲解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

听风吹等浪起

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值