U-Net详解

初入菜鸟,希望能通过做笔记的方式记录下自己学到的东西,也希望能对同样入门的人有所帮助。希望大佬们帮忙指正错误~侵权立即删除。

内容

一、U-Net产生的原因以及简单介绍

二、U-Net网络结构分析

1、U-Net网络结构图

2、U-Net的Encoder(收缩路径)

3、U-Net的Decoder(扩展路径)

一、U-Net产生的原因以及简单介绍

🎈原因及背景:

U-Net 是为了解决生物医学图像分割问题而产生的。因为它的效果很好,所以后来被广泛应用于语义分割的各个方向:比如卫星图像分割等等。

🎈变体:

U-Net是由FCN衍生而来的,都是 Encoder-Decoder 结构,结构比较简单。

想了解FCN可以看博主往期文章全卷积网络FCN详解_tt丫的博客-CSDN博客

🎈优点和解决的问题:

因为在医学方面,样本收集比较困难,数据量难以达到那么多。为了解决这个问题,U-Net应用了图像增强的方法,在数据集有限的情况下获得了不错的精度。

二、U-Net网络结构分析

1、U-Net网络结构图

🌳数字解释:

其中那些长条的上方(64,128等等)都是通道数;像572 * 572这些是尺寸大小;

蓝色和白色上的通道数是两者之和,即白色和蓝色的通道数是通道数的一半。

(比如下面这个蓝白相间通道数为128,即代表白的64,蓝的也是64)

🌳 方框和箭头说明:

蓝/白色框表示 feature map

蓝色箭头表示 3×3 卷积,用于特征提取;

灰色箭头表示 skip-connection(跳跃连接),用于特征融合;

红色箭头代表最大池化,用于降维;

绿色箭头表示上采样,用于恢复维度;

天蓝色(emmm这个颜色是这么描述吧)箭头表示 1×1 卷积,用于输出结果。

U-Net详解

2、U-Net的Encoder(收缩路径)

它由卷积操作和下采样操作组成。

🌳卷积:

文中所用的卷积结构统一为 3×3 的卷积核,padding 为 0 ,striding 为 1,所以由公式n_{\text {out }}=\left[\frac{n_{\text {in }}+2 p-k}{s}\right]+1

得到n_{\text {out }}=n_{\text {in }}-2

可以看到第1~5层卷积层都分别是由3个3*3卷积组成,每通过一个3*3卷积尺寸都减少2

🌳 池化(下采样):

而前4层卷积层都通过最大池化进入下一层,各池化层的核大小均为k=2,填充均为p=0,步长均为s=2,所以n_{\text {out }}=n_{\text {in }}/2

🌳第5层没有 max-pooling,而是直接将得到的 feature map送入 Decoder

3、U-Net的Decoder(扩展路径)

feature map 经过 Decoder 恢复原始尺寸,该过程由卷积,上采样和跳级结构组成。

🌳上采样:插值

补充:

上采样一般有两种方法:

(1)反卷积(详见之前的博文FCN的介绍中全卷积网络FCN详解_tt丫的博客-CSDN博客)(2)插值(bilinear 双线性插值较为常见)

(原矩阵称为源矩阵;插值矩阵为目的矩阵)

举个栗子:我们要把以下2*2的矩阵插值成4*4

1 2
3

4

A

🎈公式 1 – 从目标矩阵到源矩阵的坐标映射:

X_{s r c}=\left(X_{d s t}+0.5\right) *\left(\frac{W i d t h_{s r c}}{W i d t h_{d s t}}\right)-0.5

Y_{s r c}=\left(Y_{d s t}+0.5\right) *\left(\frac{\text { Height }_{s r c}}{\text { Height }_{d s t}}\right)-0.5

A的坐标是(0,1)那么由公式得源矩阵坐标为(-0.25,0.25),是小数没事。

为了找到负坐标点,我们将源矩阵展开为如下形式,中间红色部分为源矩阵。

1 1 2 2
1 1 2 2
3 3 4 4
3 3 4 4

那么(-0.25,0.25)应该在这里面

1 2
1 2

🎈公式2 – 特定点的值:

f(i + u, j + v) = (1 - u) (1 - v) f(i, j) + (1 - u) v f(i, j + 1) + u (1 - v) f(i + 1, j) + u v f(i + 1, j + 1)

可得i = -1, u = 0.75, j = 0, v = 0.25;再由这个公式可得A的值为1.25

其他值等等

对应代码

nn.Upsample(scale_factor=2, mode='bilinear')

🌳 跳级结构

FCN中的跳级结构解释全卷积网络FCN详解_tt丫的博客-CSDN博客

FCN是采用逐点相加的方法,而U-Net采用将特征在channel维度拼接在一起,形成更“厚”的特征,对应caffe的ConcatLayer层,对应tensorflow的tf.concat()。

对应代码

torch.cat([low_layer_features, deep_layer_features], dim=1)

两种方法都用于特征融合。

欢迎大家在评论区批评指正,谢谢~

版权声明:本文为博主tt丫原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/weixin_55073640/article/details/123060574

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2022年2月23日
下一篇 2022年2月23日

相关推荐