github:https://github.com/Beckschen/TransUNet
论文:https://arxiv.org/abs/2102.04306

TransU-net就是transformer+U-net
且整体的网络架构还是U-net,只有在encoder结构上运用 了transformer的encoder结构,这样可以提取更好的特征。
因为CNN受感受野的缘故,始终不能很好地利用全局信息,或者说需要很多层后才能得到抽象的全局信息,但CNN对局部细节信息可以很好地提取。
transformer网络由于具有self-attention结构,所以对于全局信息的提取有着天然的优势,但,导致了对于局部的细节信息提取不太好。
所以本文就像把两者结合起来,用于图像分割。

具体的实现:
使用vit+resnet50+skip
encoder:
先在stem进行信息的压缩
然后在resnet50(分为3个block,每个block的个数分别为3,4,9)在每个block输出提取特征,作skip使用,共提取3次
因为transform的输入是序列,所以会有图像转化为序列的步骤
把从resnet50输出得到的图像分为N个pp像素的patch,考虑到channel得到的序列就是N个ppc的序列
N=H
W/(p*p)
这里p为1,N为196,C为968
加入位置信息后,进行transformer
layer 进行全局信息的提取
输出的大小和输入的大小一致,得到输出序列再整合为三维图像特征进行skip 进行skip前先把维度降到512 然后上采样为原来图像大小的2倍
再与之前相对应的block提取的特征进行拼接 经过两个卷积降到下个维度
经过3词skip 再上采样一次 经过softmax得到概率图

原文的图:
原文的图
具体实现的图:
在这里插入图片描述
关于VIT的图可以参考

请添加图片描述
请添加图片描述

预训练模型 && 结构图 && 我自己已经配好的模型

链接:https://pan.baidu.com/s/1Yx4haga3amBhLR-YsPg7wQ
提取码:1111

自己配置的transunet只适合二分类的语义分割
而且我没有写指标
test根据train 自行修改就行
代码改的不好 多多包涵 (自己修改后的代码 由于BOSS要求 暂时不能公布自己完整版修改后代码 但是有问题可以联系我)

修改train.py root_path 路径即可
在这里插入图片描述

数据集的分布如下
数据集分布

参考:
https://blog.csdn.net/qq_37541097/article/details/118242600?spm=1001.2014.3001.5501

https://blog.csdn.net/qq_20373723/article/details/117225238?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166200152316782391824536%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=166200152316782391824536&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-2-117225238-null-null.142v44pc_rank_34_2&utm_term=transunet&spm=1018.2226.3001.4187

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐