【面试】泰康诺生物科技公司
U-Net网络结构讲解(语义分割)
我来介绍一下U-Net算法,这篇论文主要是针对于生物医学影像这个领域提出的,被广泛应用于各种医学图像分割任务,包括:
- 组织和器官分割
- 肿瘤检测和分割
- 细胞计数和分类
- 病变检测
U-Net网络是一个Encoder
-Decoder
的结构,Encoder
对应的是U型左边的这般部分,也就是我们特征提取下采样的部分,Decoder
解码就是右边的这一部分,是通过一系列上采样得到分割图。
左边的这一部分作者称为contracting path
,右边的这一部分作者称之为expansive path
,在这幅图当中每一个长条的矩形对应的都是一个特征层,这些箭头每一个对应的都是一种操作,右下角就是每种操作对应的类型。
我们先从输入开始看一下,这里输入是以572*572的单通道的图像为例的,首先会通过一个卷积层,这个卷积层会跟一个ReLU激活函数。这个卷积层他的布距是为1的,其次它是没有进行Pading的,所以你会发现通过卷积层之后他的高和宽都会减少。
接下来通过一个下采样:也就是一个max pool
,池化为2*2,布距为2。高和宽就会减半,由568变为这里的284,此时channel是没有变化的,还是64。然后在通过卷积层,但是每次下采样之后通过卷积层都会将他的channel翻倍,也就是现在变成了128。。最后的最后由512跳转到了1024。
这个绿色的箭头是一个上采样,这个上采样采用的就是一个转质卷积,通过这个转质卷积之后,它会将特征层的高和宽都放大两倍(28-54),而channel会减半(1024-512),
然后注意一下这个灰色的箭头,上面写的是copy and crop
,左边的特征层大小是64 * 64大小的,但是我们经过上采样得到的特征层他的高宽高宽56 * 56大小的,很明显现在是没法将他们直接进行一个copy and crop
拼接的。那么他将这里的64*64的特征层进行了一个中心裁剪,就是将中间56 * 56的部分裁剪过来,然后再将它们进行一个copy and crop
的拼接。然后拼接之后channel就变成1024了,然后再通过两个3 * 3的卷积层将channel调整成512,然后再通过上采样的方式,将特征层的高和宽从52调整为104,
最后得到388 * 388宽高,通道个数为64的特征层,最后再通过一个灰色的1 * 1的卷积层,他的卷积和的个数是和我们分类的类别个数是一样的,论文中的示例它只有两个类别也就是前景和背景。所以他的卷积和的个数是=2的,最后通过它之后我们输出的分割的结果就是一个388 * 388 * 2 的一个分割图,最后通过的这个卷积层是没有ReLU激活函数的。
我们输入的图片大小是572 * 572,但是我们最后得到的分割图的大小是388 * 388的。他不是针对572的分割图,而是只有中间388 * 388那个区域的分割图。
但是现在主流的实现方式并不是按照原论文当中这种方式实现,而是在这些紫色的卷积层当中加上一个Pading
,就是说每次通过3 * 3 的卷积层不会去改变特征层的宽高。并且在卷积和ReLU中间再加上一个BN,也就是Batch Normalization。由于加了Pading所以不会改变大小,原来是32 * 32 ,还是32 * 32,然后上采集变为64 * 64,两个都是64 * 64,就可以进行拼接了,所以最后得到的分割图其实也是你传入的图的大小,也就是572 * 572。
参考链接:BiliBili-U-Net网络结构讲解