什么是unet
一个U型网络结构,2015年在图像分割领域大放异彩,unet被大量应用在分割领域。它是在FCN的基础上构建,它的U型结构解决了FCN无法上下文的信息和位置信息的弊端。
Unet网络结构
主干结构解析
左边为特征提取网络(编码器),右边为特征融合网络(解码器)
高分辨率—编码—低分辨率—解码—高分辨率
特征提取网络
高分辨率—编码—低分辨率
前半部分是编码, 它的作用是特征提取(获取局部特征,并做图片级分类),得到抽象语义特征
由两个3x3的卷积层(RELU)再加上一个2x2的maxpooling层组成一个下采样的模块,一共经过4次这样的操作
特征融合网络
低分辨率—解码—高分辨率
利用前面编码的抽象特征来恢复到原图尺寸的过程, 最终得到分割结果(掩码图片)
由一层反卷积+特征拼接concat+两个3x3的卷积层(ReLU)反复构成,一共经过4次这样的操作,与特征提取网络刚好相对应,最后接一层1*1卷积,降维处理,即将通道数降低至特定的数量,得到目标图。
FCN与UNet特征融合操作对比解析
FCN是通过特征图对应像素值的相加来融合特征的
Torch代码:
concat1 = out1+out2
# 其中out1与out2都是torch中的tensor格式
unet是通过同维度矩阵拼接来融合特征的
torch代码:
concat2 = torch.cat([convt1,conv4],dim=1)
# dim = 1 意味着在第1维度方向(第1维也就是列为4的方向)进行叠加
# 对于更高维的数据,也就是在dim = x 时,即x所对应维度方向进行叠加