初入菜鸟,希望能通过做笔记的方式记录下自己学到的东西,也希望能对同样入门的人有所帮助。希望大佬们帮忙指正错误~侵权立即删除。
内容
一、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 卷积,用于输出结果。
2、U-Net的Encoder(收缩路径)
它由卷积操作和下采样操作组成。
🌳卷积:
文中所用的卷积结构统一为 3×3 的卷积核,padding 为 0 ,striding 为 1,所以由公式
得到
可以看到第1~5层卷积层都分别是由3个3*3卷积组成,每通过一个3*3卷积尺寸都减少2
🌳 池化(下采样):
而前4层卷积层都通过最大池化进入下一层,各池化层的核大小均为k=2,填充均为p=0,步长均为s=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 – 从目标矩阵到源矩阵的坐标映射:
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 – 特定点的值:
可得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