概述
u2net是在unet的基础上提出来的,是一个效果非常棒的显著性目标检测模型。 显著性目标检测:分割出图像的主体。 模型提出的主要背景 是两部分: 1、分割任务的backbone主要是一些预训练模型。因为一些分割backbone的效果没有预训练模型的效果好,所以大家也都采用预训练模型了。问题 :他么并不是为了分割而设计的,对于分割任务中比较关键的局部细节和全局对比信息关注不够,所以想要更加好的适应分割还需要在这个基础上加一些特殊的结构,实现对于提取的特征的更好的利用,这就带来了计算复杂度。 2、模型一般比较深,考虑到显存和计算的开销,会在最前面的一些层中对图片先做一些下采样操作,降低分辨率。问题 :其实对于分割任务而言,高分辨率图像中丰富的空间信息是需要好好利用的。
u2net成功的解决了这两个问题,提出了两层嵌套的u形结构,可以从头训练网络而不依赖于预训练模型,特征提取的效果和预训练模型一样棒,并且不需要额外的结构处理这些特征。另外它在网络变深之后,还能保持高分辨率(因为RSU中大量的池化操作),并且带来的的显存和计算量的开销也是非常友好的。
细节
网络结构
以下就是u2net的网络结构,总体还是unet的u形结构,但是其中的每层或者每个stage由unet中朴素的卷积结构变为了RUS(Residual U-blocks),然后每个decoder的侧边输出都收到gt的监督,所有的侧边输出做concat之后,在进行卷积操作就是最终的网络输出了。 之前的研究还有堆叠或者级联unet得到
u
?
n
?
n
e
t
u*n-net
u?n?net,但是作者是嵌套或者指数表示unuet去了,显然嵌套的数量可以很大,即
u
n
n
e
t
u^n net
unnet,但是考虑实际情况,还是嵌套一层得到
u
2
n
e
t
u^2 net
u2net 然后每个RSU的层数随着encoder的层数的增加而减少,即En_1、En_2、En_3、En_4使用的分别是RSU-7、RSU-6、RSU-5、RSU-4,因为我们重视对于高分辨率特征图的特征提取,同时会进行池化操作,降低尺寸。而En_5、En_6采用的就是RSU-4F了,F表示不会变化尺寸,也就是只进行特征提取。
RSU(Residual U-blocks)
RUS替换了unet中朴素的卷积块,他能够更好的捕捉全局和局部的信息,而以往的1x1,3x3的卷积由于感受野的缘故,往往擅长捕捉局部的信息,对于全局信息的捕捉没有那么良好,而全局信息往往是分割分割所需要的。RUS通过这个u形状结构实现不同尺度不同感受野的特征图的混合,能够捕捉来自更多的不同尺度的全局信息。
并且他还使用了残差的思想。resnet中需要至少两层才能做恒等映射,不然就是做线性变换,而n次的线性变化效果等价与1次的线性变换。而本文中,由于这个u-block包含了若干层了,所以跨越一个block就行了。 然后是计算量方面,作者将一些主流的块结构进行了对比,发现虽然RSU的计算量随着深度的增加是线性的,但是系数很小,故计算量其实没有怎么大,是可以堆叠的很深的。
损失
主要就是两部分,一部分是侧边输出特征图的损失,另一部分是这些侧边输出融合之后形成的最终输出特征图的损失。
|