Rethinking on Multi-Stage Networks for Human Pose Estimation

本文提出一种改进的multi-stage模型用于多人位姿估计,通过调整单阶段设计、优化特征传递并改进loss函数,实现了从粗到细的逐步优化过程,达到最新最优效果。在模型设计上,每降采样一次channel翻倍;信息传递中,前一阶段的特征经处理后传递给下一阶段;在loss函数上,各阶段加监督,并对hard keypoint进行特殊处理。

COCO 2018 关键点检测第一名。

  pose estimation里面一个常用的trick是multi-stage。代表是8 stacks的houglass network。这可以解释为多stage可以实现coarse-to-fine的逐步优化过程。但是在多人位姿估计中,multi-stage效果是不如single-stage的。比如现在coco上领先的方法CPN, simple baseline等都是single-stage的。实验表明,如hourglass等,简单想通过stack来增大模型容量,实现精度提升是很难的。因此本文从网络结构设计, 特征传递和loss几个方面改善来提升multi-stage模型在多人位姿估计的表现。 达到了state-of-the-art效果。

  首先是single-stage的设计,这是multi-stage的基础。回想hourglass的设计,每个stack中降采样和上采样分别4次,但是特征的channel是始终维持256不变。这似乎是不合理的。因为降采样过程中我们想提取不同尺度丰富的信息,丢失的信息在上采样中很难恢复。所以在降采样分辨率下降时,channel适当增加才能减少信息丢失。本文采取的方法是每降采样一次,channel翻倍。

 

  然后是stages之间的信息传递。前一个stage的信息如何传给下一个stage?

我们可以看到,当前stage的降采样后特征有3个部分, 第一个是当前stage实际降采样的特征,第二个和第三个分别是前一个stage对应scale的降采样和上采样特征, 当然分别用1*1卷积处理后才传递。这样当前stage可以充分利用前面的信息去提取更有效的特征。

最后, 在loss function上下功夫。首先是各个stage分别要加监督。这个监督的形式可以参考CPN, 是在上采样的各个scale的预测上做监督,此外最大的scale上,使用了OHKM, 对hard keypoint做处理。

还有一点小的trick是不同的stage, ground truth的heatmap采用不同大小的高斯核来生成,具体是前面satge 的kernel大, 后面的stage kernel小。也是一种coarse-to-fine的思想吧。

代码也开源了,有时间看一看细节, 看看有没有什么补充的吧。

 

### Features-Fused-Pyramid-Neck 的设计与性能优化分析 Features-Fused-Pyramid-Neck 是一种用于目标检测的特征融合架构,其核心目标是通过改进特征金字塔的设计,解决多尺度目标检测中的特征错位问题。该架构通过重新思考特征融合的方式,提升了检测的精度和效率[^1]。 #### 特征金字塔的设计目标 在目标检测任务中,多尺度目标的检测一直是技术难点之一。传统特征金字塔(如FPN)通过自上而下和横向连接的方式,将高层语义信息和低层空间信息进行融合,以增强多尺度目标的特征表示。然而,这种方法存在特征错位的问题,即不同层级的特征在空间上难以完全对齐,导致融合效果受限。Features-Fused-Pyramid-Neck 通过改进特征融合的设计,优化了这一问题[^1]。 #### 特征融合架构的改进 Features-Fused-Pyramid-Neck 的改进主要体现在以下几个方面: 1. **特征对齐机制**:引入了更精细的特征对齐技术,确保不同层级的特征在空间维度上能够精确对齐。这种对齐机制有效减少了特征错位带来的信息损失,从而提升了多尺度目标的检测精度[^1]。 2. **动态特征融合**:通过动态调整特征融合的权重,根据输入图像的内容自适应地选择最优的特征组合。这种方法不仅提高了模型的灵活性,还增强了其对不同场景的适应能力。 3. **轻量化设计**:为了提升实时性,Features-Fused-Pyramid-Neck 在保证性能的前提下,对网络结构进行了轻量化设计。例如,通过使用深度可分离卷积(Depthwise Separable Convolution)等技术,减少了计算量,从而提高了推理速度。 #### 性能优化 在性能优化方面,Features-Fused-Pyramid-Neck 通过以下方式提升了目标检测的效率和精度: 1. **多尺度特征提取**:通过多层级特征金字塔的设计,能够有效捕捉不同尺度的目标特征,从而提升小目标和大目标的检测性能。 2. **实时性优化**:通过轻量化设计和动态特征融合策略,减少了模型的计算复杂度,使得该架构能够在实时目标检测任务中表现出色。 3. **实验验证**:在多个目标检测数据集上进行了广泛的实验验证,结果表明 Features-Fused-Pyramid-Neck 在检测精度和推理速度方面均优于传统的特征金字塔架构。 #### 代码示例 以下是一个简化的 Features-Fused-Pyramid-Neck 的实现示例,展示了其核心特征融合模块的设计: ```python import torch import torch.nn as nn class FeatureFusedPyramidNeck(nn.Module): def __init__(self, in_channels_list, out_channels): super(FeatureFusedPyramidNeck, self).__init__() self.lateral_convs = nn.ModuleList() self.top_down_convs = nn.ModuleList() self.out_convs = nn.ModuleList() # 构建横向连接和自上而下连接 for in_channels in in_channels_list: lateral_conv = nn.Conv2d(in_channels, out_channels, 1) top_down_conv = nn.Conv2d(out_channels, out_channels, 3, padding=1) self.lateral_convs.append(lateral_conv) self.top_down_convs.append(top_down_conv) # 输出层卷积 for _ in range(len(in_channels_list)): out_conv = nn.Conv2d(out_channels, out_channels, 3, padding=1) self.out_convs.append(out_conv) def forward(self, inputs): # 横向连接 laterals = [lateral_conv(x) for x, lateral_conv in zip(inputs, self.lateral_convs)] # 自上而下传播 feature_maps = [] feature_map = laterals[-1] feature_maps.append(feature_map) for i in range(len(laterals) - 2, -1, -1): feature_map = torch.nn.functional.interpolate(feature_map, scale_factor=2, mode='nearest') feature_map = feature_map + laterals[i] feature_maps.append(feature_map) # 输出层处理 outputs = [out_conv(fm) for fm, out_conv in zip(feature_maps, self.out_convs)] return outputs ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值