检测分割中的多尺度信息(Multi-scale information) 融合总结【updating…】

多尺度融合博文汇总:

  1. 多尺度深度特征(上):多尺度特征学习才是目标检测精髓(干货满满,建议收藏)
  2. 多尺度深度特征(下):多尺度特征学习才是目标检测精髓(论文免费下载)

多尺度信息的融合是检测和分割中解决小目标和边缘精度的重要方法,广泛应用于各个检测和分割的工作当中。本文以文章为对象,梳理了不同文章用到的多尺度信息融合的方法,从而有一个比较显式的对比。

1. Semantic Segmentation

1.1 FCN

1.2 DeconvNet

1.3 SegNet

1.4 DeepLab family

DeepLab的主要创新就是atrous(dilated) convolution的应用,基于空洞卷积,其提出了ASPP(Atrous Spatial Pyramid Pooling)方法,通过不同尺度的感受野来融合多尺度的上下文信息。
对于DeepLabv1和v2(TPAMI2018),ASPP只是将同一featuremap使用不同的空洞卷积来生成不同尺度的上下文信息。
在这里插入图片描述
DeepLab v3除了并行的将下采样16倍的feature map使用ASPP进行concat之外,还通过global average pooling original input (wh3->113)来进一步融入全局上下文信息。
实现:https://github.com/Tramac/awesome-semantic-segmentation-pytorch/blob/b56c4312305e083a93144424d208e548ab5b84fa/core/models/deeplabv3.py
在这里插入图片描述
DeepLab v3+和v3在encoder中多尺度融合方法相同,但在v3的基础上增加了decoder层,来避免空洞卷积使feature map变大导致的计算量的增加。实现了feature map分别率和计算量的权衡。
在这里插入图片描述
在这里插入图片描述

1.5 PSPNet (CVPR2017)

PSPNet处理的任务是场景解析(scene parsing),是一种需要全图标注的语义分割任务。PSPNet主要创新点就是提出了pyramid pooling module来聚合不同区域的上下文以获取全局上下文信息(exploit the capability of global context information by different-region- based context aggregation through our pyramid pooling module together with the proposed pyramid scene parsing network (PSPNet)).
在这里插入图片描述
pyramid pooling module可以看做是一种有效的全局上下文的先验信息。通过结合全局和局部上下文的信息来达到更高的预测精度。
pyramid pooling module是对最后一层feature map来进行多尺度的pooling操作(如图3)。其中,红色的是直接global pooling到1,其余的是将feature map分为不同的sub-regions,然后通过设定不同的kernel_size和stride进行不同尺度的pooling(pooling成 1 × 1 、 2 × 2 、 3 × 3 、 6 × 6 1\times1、2\times2、3\times3、6\times6 1×12×23×36×6)。后面再接一个 1 × 1 1\times1 1×1 Conv,使得channel减为 C / N C/N C/N。然后通过二次线性插值直接上采样到相同大小进行Concat。
图3中backbone用的是dilated ResNet,将原图下采样8倍。
实现:

class _PyramidPooling(nn.Module):
    def __init__(self, in_channels, **kwargs):
        super(_PyramidPooling, self).__init__()
        out_channels = int(in_channels / 4)
        self.avgpool1 = nn.AdaptiveAvgPool2d(1)
        self.avgpool2 = nn.AdaptiveAvgPool2d(2)
        self.avgpool3 = nn.AdaptiveAvgPool2d(3)
        self.avgpool4 = nn.AdaptiveAvgPool2d(6)
        self.conv1 = _PSP1x1Conv(in_channels, out_channels, **kwargs)
        self.conv2 = _PSP1x1Conv(in_channels, out_channels, **kwargs)
        self.conv3 = _PSP1x1Conv(in_channels, out_channels, **kwargs)
        self.conv4 = _PSP1x1Conv(in_channels, out_channels, **kwargs)

    def forward(self, x):
        size = x.size()[2:]
        feat1 = F.interpolate(self.conv1(self.avgpool1(x)), size, mode='bilinear', align_corners=True)
        feat2 = F.interpolate(self.conv2(self.avgpool2(x)), size, mode='bilinear', align_corners=True)
        feat3 = F.interpolate(self.conv3(self.avgpool3(x)), size, mode='bilinear', align_corners=True)
        feat4 = F.interpolate(self.conv4(self.avgpool4(x)), size, mode='bilinear', align_corners=True)
        return torch.cat([x, feat1, feat2, feat3, feat4], dim=1)

1.6 HR-Net Family(PAMI2020)

HR-Net family有三类模型:

  1. HRNetV1:用于姿态估计任务;
  2. HRNetV2:用于语义分割任务:
  3. HRNetV2p:用于检测和实例分割任务。

这里主要讨论HRNetV2。

与DeepLab和PSPNet使用dilated convolution来进行多尺度上下文信息的保留和融合不同,HR-Net从另一个角度来保留“高解析”表示(high-resolution representations)。
“高解析”表示是一些需要细节信息的任务(例如:语音分割、姿态预测、目标检测等)非常关键的信息。相对的,对于分类任务而言,只需要低解析的表示即可。
HRNetV2工作中明确了获取高解析表示的几种方法:

  1. 使用encoder-decoder的结构来从低解析表示中恢复高解析表示(例如:SegNet、DeconvNet、U-Net等);
  2. 直接保留高解析表示(例如:HR-Net);
  3. 使用dilated conv来计算中等解析表示(例如:DeepLab、PSPNet等)

本文主要研究的就是第2中方法,通过并行的连接高到低的解析度卷积层来重复的进行多尺度的融合。

An HRNet maintains high-resolution representations by connecting high-to-low resolution convolutions in parallel and repeatedly conducting multi-scale fusions across parallel convolutions.

保留高解析表示的方法通过并行的连接高到低的表示,而不是类似encoder-decoder那样序列式的恢复高解析表示,可以学习到空间上更加精确的表示。此外,与通过上采样的方式来获取高解析表示不同,通过重复多解析的融合,可以通过低解析表示来加强高解析表示,反之亦然。综上,可以获取更加rich的语义信息。

def forward(): 图像先经过两个33conv_s2+bn和一个relu,分别率变为原图的1/4。然后进入如下结构:
在这里插入图片描述在这里插入图片描述
上图上采样是通过二次线性插值+1
1conv来匹配channel实现的。
在这里插入图片描述
在这里插入图片描述

2. Detection

2.1 FPN

2.2 SPPNet

SPPNet主要运用到了spatial pyramid pooling layer来解决传统CNN中由于FC层维度固定,因此不能处理任意尺寸图像的问题。
在这里插入图片描述

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值