TransUNet
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=HW/(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
更多推荐
所有评论(0)