Swin-Unet: Unet-like Pure Transformer for Medical Image Segmentation

标签:swin-transformer
作者:炼己者


本博客所有内容以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,并且是非商业用途,谢谢!


一. 概要

今天看到了这篇把swin-transformer用在分割上的文章,实在跪服,手速有点太快了,真心拼不过呀。这篇文章让我眼前一亮,他和以往的transformer用在图像分割领域的方法不一样。以往的transformer都是被用在encoder部分的,就是把UNet的encoder用transformer替换一下。再怎么改也跳不出这个范围,就没见过transformer用在decoder的。

论文连接:https://arxiv.org/abs/2105.05537

二、正文

这篇文章的要点就在于swin transformer是怎么成为decoder的,它是搞了一个patch expanding layer,这个层是怎么工作的呢。

我们看图,最后的那个Bottleneck,它是上采样之前的一层。它的大小是(W/32 × H/32 × 8C)。然后给它做个linear操作,扩张维度变成(W/32 × H/32 × 16C)。然后就是骚操作了,对它做一个rearrange操作,就是个维度调整的操作,把(W/32 × H/32 × 16C) 变成 (W/16 × H/16 × 4C)。就这样完成了上采样。是不是有种我也可以的既视感。这个rearrange的操作野生代码的窗口attention计算里面有。它是einops库里面的一个函数。
我这里直接贴它里面的代码使用



操作很简单,大家可以跟着敲一下代码感觉一下。这个函数的作用就是调整维度

作者为了证明这个patch expanding layer的效果,对比了双线性插值(bilinear interpolation)、转置卷积(transposed convolution)的比较,最后证明还是patch expanding layer牛逼。

三、总结

  • 文章解决了什么问题?
    这篇文章解决了如何把transformer用在decoder上的一个问题,虽然做法很简单,但是很新颖。
  • 作者采用了什么方法?
    提出了patch expanding layer的操作,关键在于rearrange的操作。和其他的方法比(比如线性插值、转置卷积)很有优势。
  • 论文达到一个什么样的效果?
    在一些数据集上有效果(详情见论文),很有潜力,也还有很多值得优化改善的地方。

作者最后说医疗图像都是3D图像,准备探索Swin-Unet在3D上的应用。唉,这就是最近我们在探索的呀,一直在把swin-transformer往3D上改,又要拼手速了。其实论文给的结果有些不是特别的好,但是奈何人家已经占坑了。

希望可以帮助到大家,如果你觉得这篇文章对你有一定的帮助,那就点个赞支持一下吧!如果有什么问题的话也可以在文章下面评论,我们一起交流解决问题!


以下是我所有文章的目录,大家如果感兴趣,也可以前往查看
戳右边:打开它,也许会看到很多对你有帮助的文章

你可能感兴趣的:(Swin-Unet: Unet-like Pure Transformer for Medical Image Segmentation)