发布时间:2023-07-07 19:00
unet3+是在unet以及unet++的基础上提出来的,unet的核心是skip-connection。
而unet++也正是在这个核心上做的改动,使用了重叠的稠密卷积代替粗暴的特征融合。
而unet3+注意到,unet和unet++没有直接从多尺度信息中提取足够多的信息,基于这一点,设计了一种新的skip-connection的结构,更好的将低级细粒度信息和高级语义特征进行了融合,并且这种结构的参数量会比unet和unet++都少。同时,对于decoder的输出进行深度监督,并且提出了一种新的损失函数进行训练。另一方面,使用分类做了指导,降低在背景图中过度分割的情况。
注
:unet和unet++没有直接从多尺度信息中提取足够多的信息
指的是,unet是根据对应层的encoder的输出以及下一层decoder上采样的结果构造当前层decoder的,没有进行了多尺度信息的利用;而unet++虽然通过嵌套和密集跳过连接进行了多尺度信息的利用,但是更像是对于encoder特征的不断处理,而不是对原始特征的利用;unet3+则是对原始特征进行了多尺度信息的利用。
以下就是三种结构的比较示意图:
unet3+和unet++都采用深度监督,从多尺度聚合的特征图中学习层次表示,但是监督的位置信息不同哟,这点从图中的 开发了一种混合损失用于在三级层次结构(像素级、补丁级和图片级)中进行分割,它能捕获大尺度的和精细结构清晰的边界,损失函数:是MS-SSIM loss+focal loss+ IoU loss,其中
unet3+还是在unet基础上改动得到的,故他依然是encoder-decoder的结构。encoder部分其实unet,unet++还有unet3+都是相同的,关键是decoder部分是怎么得到的。unet3+中的做法是,encoder中层数小于等于当前层的特征图经过池化(无重叠最大池化)和卷积操作得到64个通道的特征图(当然,层数相同的那一层不需要池化操作),然后decoder中层数大于当前层的特征图经过上采样(双线性插值)和卷积同样得到64个通道的特征图,接着将这些特征图concat起来,以作者采用的5层结构为例,总共会有64x5=320,这320个通道数的特征图,经过卷积、正则化、和激活函数之后就构成了decoder的一层了。
上述过程的形式化表述就是:
并且,有一个不得不提的是,尽管unet3+的结构相对于unet会复杂,但是在保证相同的encoder的基础上,参数量反而会少。也就是保证相同的encoder,参数量排名是:unet3+Full-scale DeepSupervision
sup
位置就能发现。unet++对第一层特征图进行监督,具体的操作是在这些特征图的后面都接c(C是类别个数)个1x1的卷积核和一个sigmoid函数,得到最后的分割结果;而unet3+则是对decoder的每一个层对应一个侧输出,这个输出经过3x3的卷积、上采样和sigmoid函数,得到分割的结果。其中上采样是为了得到全尺寸的特征图,使用相同的gt进行监督。
Classification-guided Module
在encoder的最后一层或者说是decoder的最后一层,经过dropout、1x1卷积、最大池化和sigmoid函数得到两个值,然后经过argmax函数转换成单个输出,表示有或者没有目标,然后我们将这个输出与侧分割相乘,得到更加准确的分割结果。解决由于较浅层中背景噪声等残留信息导致过分割的现象