2024.4.21 机器学习周报

本文介绍了一种新的高效网络设计——Lite-HRNet,通过在HRNet中应用轻量级的条件通道加权操作,以减少1×1卷积带来的计算负担,显著提升人体姿态估计的性能。实验结果表明,Lite-HRNet在计算效率和准确性上优于现有轻量级网络,并展示了在语义分割任务中的良好表现。
摘要由CSDN通过智能技术生成

目录

引言

Abstract

文献阅读

1、题目

2、引言

3、创新点

4、Motivation

5、naive Lite-HRNet

6、Lite-HRNet

7、实验

 总结

引言

本周阅读了一篇关于人体姿态估计的文献,人体姿势估计需要高分辨率表示以实现高性能,过去的高效网络设计主要从两个角度出发,一个是从分类网络中借鉴设计,另一个是通过各种技巧中介空间信息损失,鉴于对模型效率的不断增加需求,研究了在计算资源有限的情况下开发高效的高分辨率模型的问题。

Abstract

This week, I read a literature on human pose estimation. Human pose estimation requires high-resolution representation to achieve high performance. In the past, efficient network design was mainly based on two perspectives: one was to borrow design from classification networks, and the other was to mediate spatial information loss through various techniques. Given the increasing demand for model efficiency, I studied the problem of developing efficient high-resolution models in the context of limited computing resources.

文献阅读

1、题目

Lite-HRNet: A Lightweight High-Resolution Network

2、引言

我们提出了一个高效的高分辨率网络,Lite-HRNet,用于人体姿态估计。首先,我们简单地将Shuf Chronenet中的高效shuffle块应用于HRNet(高分辨率网络),从而获得比流行的轻量级网络(如MobileNet,Shuf Chronenet和Small HRNet)更强的性能。我们发现,大量使用的逐点(1 × 1)卷积在shuffle块成为计算瓶颈。我们引入了一个轻量级的单元,条件信道加权,以取代昂贵的逐点(1 × 1)卷积在shuf?信道加权的复杂度与信道数成线性关系,低于逐点卷积的二次时间复杂度。我们的解决方案从所有通道和多个分辨率中学习权重,这些权重在HRNet的并行分支中很容易获得。它使用权重作为跨通道和分辨率交换信息的桥梁,补偿逐点(1 × 1)卷积所扮演的角色。Lite-HRNet在人体姿态估计方面表现出优于流行的轻量级网络的上级结果。此外,Lite-HRNet可以以同样的轻量级方式轻松应用于语义分割任务。

3、创新点

  • 在Lite-HRNet中,通过使用轻量级的条件通道加权操作替代1×1卷积,提高了网络的性能并减少了计算复杂度。
  • 通过引入空间权重和多分辨率权重,有效地提高了网络的性能,尤其是在COCO和MPII数据集上取得了显著的AP提升。
  • Lite-HRNet通过交叉分辨率权重计算,实现了跨通道和分辨率的信息交换,进一步提升了网络的容量和性能

4、Motivation

人体姿态估计一般比较依赖于高分辨率的特征表示以获得较好的性能,基于对模型性能日益增长的需求,本文研究了在计算资源有限的情况下开发高效高分辨率模型的问题。HRNet有很强的表示能力,很适用于对位置敏感的应用,比如语义分割、人体姿态估计和目标检测。通过简单地将ShuffleNet中的Shuffle Block应用于Small HRNet,即可得到一个轻量级的HRNet,并且可以获得超越ShuffleNet、MobileNet的性能。Naive Lite-HRNet的shuffle block存在的大量的 1×1 卷积操作成为了计算瓶颈,因此,如何能替换掉成本较高的 1×1 Conv并且保持甚至取得超越其性能是本文要解决的核心问题。为此,作者提出名为 Lite-HRNet 的网络,在Lite-HRNet中使用conditional channel weighting模块替代1×1卷积,以进一步提高网络的计算效率。

5、naive Lite-HRNet

Shuffle blocks. ShuffleNet V2 中的 shuffle block 首先将通道分成两个分区。一个分区经过一个(1×1卷积、3×3 depthwise 卷积和1×1卷积)序列,其输出与另一个分区连接。最后,串接的通道被 shuffled,如下图 (a) 所示

HRNet. HRNet 从一个高分辨率卷积 stem 作为 first stage 开始,逐步添加一个高到低分辨率的 stream 作为新的 stage。多分辨率流是并行连接的。主体main body 由一系列 stage 组成。在每个stage,跨分辨率的信息都会反复交换。我们遵循 Small HRNet 的设计,使用更少的层和更小的宽度来形成我们的网络。Small HRNet 的 stem 由两个 stride=2 的 3×3 卷积组成。主体中的每个 stage 包含一系列残差块和一个多分辨率融合。下图显示了Small HRNet 的结构。

Simple combination. 将 shuffle block 替换 Small HRNet 主干中的第二个3×3卷积,并替换所有残差块(由两个3×3卷积形成)。多分辨率融合中的一般卷积被可分离卷积所取代,从而形成一个 naive Lite-HRNet。 

6、Lite-HRNet

(1) 1×1convolution is costly.

1×1卷积在每个位置执行矩阵向量乘法:

其中 X 和 Y 是输入和输出 map,W 是1×1卷积kernel。因为shuffle操作和depthwise卷积不做跨通道的信息交换,所以1×1卷积在跨通道交换信息方面起关键作用。

C个通道的1×1卷积具有二次时间复杂度 ( O(C^{2}) ) ,3×3 depthwise 卷积具有线性时间复杂度 ( O(9C)^{3}) 。在 shuffle block 中,两个1×1卷积的复杂度远高于深度卷积:O(C^{2}) > O(9C),通常情况下 C > 5 。表2表示了1×1卷积和depthwise卷积之间的复杂性的比较。

(2) Conditional channel weighting

为了进一步降低计算的复杂度,作者提出使用element-wise multiplication operation即Conditional channel weighting来代替 1×1 卷积,此网络命名为 Lite-HRNet。

对于Lite-HRNet中的第 s 个分支,conditional channel weighting可以表示为:

其中, W_{s} 是 W_{s}\times H_{s}\times C_{s} 的矩阵,表示weight map,会从不同分辨率的feature map中计算得到,可以起到一个跨通道、跨分辨率的特征交互的作用权重矩阵,它由Cross-resolution Weight Computation和Spatial Weight Computation这两种方法进行计算。⊙表示元素乘法操作。 

Conditional Channel Weighting的时间复杂度为 O(C),远低于1×1卷积。

使用Conditional Channel Weighting操作替换掉1×1卷积后的Shuffle Block结构如下图 (b) 所示:

(3) Cross-resolution weight computation

在网络的第 s 个Stage中有 s 个平行分支,每个分支的feature map分辨率不同,共有 s 个weight map分别与这些分支对应,将这 s 个weight map记作 W_{1},W_{2},...,W_{s}。 

使用 X_{1},X_{2},...,X_{s} 表示 s 个分支的feature map,X_{1} 表示分辨率最高的feature map,相应地,X_{s} 表示第 s 个分辨率的feature map,则有:

其中,H_{s} 是一个轻量级的函数,它的具体实现过程为:

首先对 X_{1},X_{2},...,X_{s-1} 进行Adaptive Average Pooling(AAP)操作,输出的feature map尺寸为 W_{s}\times H_{s} ,即:

将 AAP 操作得到的{ {X}'_{1},{X}'_{2},...{X}'_{s-1} }和特征 X_{s} 进行Concat操作,得到 ({X}'_{1},{X}'_{2},...{X}'_{s}) ; 

({X}'_{1},{X}'_{2},...{X}'_{s}) 依次进行1×1卷积、ReLU、1×1卷积、sigmoid操作,将输出结果记作({W}'_{1},{W}'_{2},...{W}'_{s}),即:

通过上述操作,可以得到 s 个分支的权重矩阵。某个分支中特定位置的权重是由经过AAP操作得到的 ({X}'_{1},{X}'_{2},...{X}'_{s}) 中同样位置的值决定的,即由多个分辨率的特征得到。 

之后对 ({W}'_{1},{W}'_{2},...{W}'_{s-1}) 使用最近邻进行上采样操作,使得权重的分辨率与它们所对应分支的feature map分辨率一致,用于随后的element-wise channel weighting。

对于第 s 个分支中位置 i 处的特征值,计算公式为:

w_{si} 与所有分支的feature map在位置 i 处对应的特征区域有关,因此 w_{si} 包含多种分辨率的特征,通过上式得到的 y_{si} 包含多尺度的特征。 

H_{s} 在操作时,先使用AAP操作减小了 {X_{1},X_{2},...,X_{s-1}} 的分辨率,因此在后面的卷积运算中不会引入很大的计算量。

class CrossResolutionWeighting(nn.Module):
    def __init__(self,
                 channels,
                 ratio=16,
                 conv_cfg=None,
                 norm_cfg=None,
                 act_cfg=(dict(type='ReLU'), dict(type='Sigmoid'))):
        super().__init__()
        if isinstance(act_cfg, dict):
            act_cfg = (act_cfg, act_cfg)
        assert len(act_cfg) == 2
        assert mmcv.is_tuple_of(act_cfg, dict)
        self.channels = channels
        total_channel = sum(channels)
        self.conv1 = ConvModule(
            in_channels=total_channel,
            out_channels=int(total_channel / ratio),
            kernel_size=1,
            stride=1,
            conv_cfg=conv_cfg,
            norm_cfg=norm_cfg,
            act_cfg=act_cfg[0])
        self.conv2 = ConvModule(
            in_channels=int(total_channel / ratio),
            out_channels=total_channel,
            kernel_size=1,
            stride=1,
            conv_cfg=conv_cfg,
            norm_cfg=norm_cfg,
            act_cfg=act_cfg[1])

    def forward(self, x):
    	# mini_size即为当前stage中最小分辨率的shape:H_s, W_s
        mini_size = x[-1].size()[-2:]  # H_s, W_s
        # 将所有stage的input均压缩至最小分辨率,由于最小的一个stage的分辨率已经是最小的了
        # 因此不需要进行压缩
        out = [F.adaptive_avg_pool2d(s, mini_size) for s in x[:-1]] + [x[-1]]
        out = torch.cat(out, dim=1)
        out = self.conv1(out)  # ReLu激活
        out = self.conv2(out)  # sigmoid激活
        out = torch.split(out, self.channels, dim=1)
        out = [
        	# s为原输入
        	# a为权重,并通过最近邻插值还原回原输入尺度
            s * F.interpolate(a, size=s.size()[-2:], mode='nearest')
            for s, a in zip(x, out)
        ]
        return out

(4) Spatial Weight Computation

本文在引入跨分辨率信息后,还引入了一个单分辨率内部空间域的增强操作:

权重矩阵 W_{s} 的值在所有空间域位置处都相等,其中 F_{s} 的实现过程为: 

其中,Global Average Pooling(GAP)的作用是聚集所有位置的特征。

得到权重矩阵后,根据下式得到第 s 个分支位置 i 处的输出特征:

 

根据权重矩阵的计算过程可知,输出特征的每个元素都和该分支所有输入特征有关。

class SpatialWeighting(nn.Module):
    def __init__(self,
                 channels,
                 ratio=16,
                 conv_cfg=None,
                 act_cfg=(dict(type='ReLU'), dict(type='Sigmoid'))):
        super().__init__()
        if isinstance(act_cfg, dict):
            act_cfg = (act_cfg, act_cfg)
        assert len(act_cfg) == 2
        assert mmcv.is_tuple_of(act_cfg, dict)
        self.global_avgpool = nn.AdaptiveAvgPool2d(1)
        self.conv1 = ConvModule(
            in_channels=channels,
            out_channels=int(channels / ratio),
            kernel_size=1,
            stride=1,
            conv_cfg=conv_cfg,
            act_cfg=act_cfg[0])
        self.conv2 = ConvModule(
            in_channels=int(channels / ratio),
            out_channels=channels,
            kernel_size=1,
            stride=1,
            conv_cfg=conv_cfg,
            act_cfg=act_cfg[1])

    def forward(self, x):
        out = self.global_avgpool(x)
        out = self.conv1(out)
        out = self.conv2(out)
        return x * out

 (5) 计算量分析

假设网络中的某个Stage包含2个分支,输入特征为X1和X2,X1的尺寸为64×64×40,X2的尺寸为32×32×80。则:1×1卷积、3×3的Depthwise卷积、不同类型的Conditional Channel Weighting(CCW)操作的计算量如下表所示:

由上图可知,CCW的计算量远小于1×1卷积。再由(3)和(4)中权重矩阵的计算过程可知,CCW也可以完成多个通道的信息融合,说明了CCW代替1×1卷积以减少网络的计算需求的有效性。

(6) 实例 Lite-HRNet 

在stem中,有1个步长为2的3×3卷积和1个Shufflt Block。接下来的3个Stage中,每个Stage均包含2个CCW模块和1个融合模块。上表中“resolution branch”一栏中表示该Stage包含的feature map的分辨率信息。在上表的最后两列中,Lite-HRNet-N中的N表示网络的层数。 

7、实验

在COCO与MPII数据集上对所提方法的性能进行了评估,参照主流top-down框架,直接估计K个热图。

上图给出了COCO验证集上的性能对比,从中可以看到:

  • 输入为256×192的条件下,Lite-HRNet-30取得了67.2AP指标,优于其他轻量化方案。
  • 相比MobileNetV2,性能提升2.6AP,且仅需20%GFLOOs与参数量。
  • 相比ShuffleNetV2,,Lite-HRNet-18与Lite-HRNet-30分别获得了4.9与7 3指标提升,同时具有更低的计算量。
  •  相比Small HRNet-W16, Lite-HRNet指标提升超10AP。
  • 相比大网络(比如Hourglass、 CPN),所提方法可以取得相当的AP指标且具有极低复杂度。
  • Lite HRNet 18与Lite-HRNet 30分别取得了67.6与70.4AP指标。
  • 受益于所提高效条件通道加权模块,Lite-HRNet取得了更佳的精度-计算复杂度均衡。

 上表给出了COCO-test-dev数据集上的性能对比,可以看到:

  • Lite-HRNet-30取得了69.7AP指标, 显著优于其他轻量网络,同时具有更低FLOPs和参数量。
  • Lite-HRNet-30取得了优于Mask-RCNN、G_ RMI、IPR等大网络的性能。
  • 尽管相比其他大网络,所提方法仍存在性能差异,但所提方法具有超低的GFLOPs与参数量。

上表给出了MPII验证集上的性能对比,可以看到:

  • 相比MobileNet2、 MobileNetV3、ShuffleNetV2、Small HRNet等轻量化模型,所提Lite-HRNet-18取得了更高的精度,同时具有更低的计算复杂度。
  • 继续提升模型大小可以进一 步提升模型的精度,比如Lite-HRNet-30取得了87.0 PCKh@0.5的指标。

最后,所提方法迁移到语义分割任务上的效果,见上表。可以看到:

  • Lite-HRNet-18以1.95GFLOPs计算量取得72.8%的mloU指标。
  • Lite-HRNet-30以3.02GFLOPs计算量取得75.3%的mloU指标。
  • 所提方法优于手工设计网络(如ICNet、BiSeNet、DFANet等)与NAS网络(比如CAS、 GAS、FasterSeg等), 同时与SwifNetRN-18性能相当,但具有更低的计算量。

 总结

通过本周阅读文献和代码的结合,初步对该文献有了一定的了解,接下来会对其深入理解,并且对代码的复现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值