Simple Pose: Rethinking and Improving a Bottom-up Approach for Multi-Person Pose Estimation

本文深入探讨了底部向上人体姿态估计方法Simple Pose的问题与改进,包括尺度多变性、高分辨率特征图、特征点聚类以及数据不平衡问题。作者提出使用Hourglass网络并结合SE Block进行特征融合,改进关键点和Part Affinity Fields的heatmap生成,以及设计新的损失函数以优化学习困难样本。开源实现可验证其效果。

arxiv: https://arxiv.org/pdf/1911.10529.pdf
github:https://github.com/jialee93/Improved-Body-Parts
原作者在知乎有讲解,链接

既然是Rethinking, 那么就要先只出需要rethinking的内容. 文章主要针对于人体姿态估计中的bottom-up的方法, 提出了关于bottom-up方法里的一些问题的思考:

  1. 人体姿态估计中的尺度多变性. 由于bottom-up的方法是一次性的提取出整张图片上的所有人体的关键点, 而图片中多个人的尺度大小并不是统一的,有的人大有的人小, 这就给算法增加了很大的难处. 图像金字塔或者一些特殊的网络结构(如FPN, hourglass)等都是用来提取多尺度信息的方法
  2. 高分辨率的特征图. 这个特征图不仅是网络的输入图像大小,也是网络的输出图像大小.在HRNet中已经证明了,使用更大的图像size作为输入,保留更高分辨率的feature map作为输出,能够更准确的提取关键点坐标位置.
  3. 特征点的聚类方法. Bottom-up方法是一次性提取出所有人体的所有关键点,那么怎么把属于同一个人的特征点分在一起,而把不同人的特征点分开就很重要.之前的方法有associate embedding, Part affinity fields等方法来解决这个问题
  4. 最后一个也是其它论文经常不关注的一点是数据不平衡问题. 这个数据不平衡是指两个方面:1) 数量少的positive samples VS 数量多的negative samples. 由于目前大部分都是采用回归热力图的方法来计算关键点, 打的label是在关键点处为中心的一个高斯分布, 这
### TransUNet架构设计及其在医学图像分割中的改进 TransUNet 是一种结合了 Transformer 和 U-Net 的混合架构,旨在解决传统卷积神经网络(CNN)在处理长距离依赖和复杂特征时的不足。以下是 TransUNet 的核心设计和改进: #### 1. 架构概述 TransUNet 将 Transformer 引入到传统的 U-Net 结构中,通过以下方式增强其性能: - **Transformer Encoder**:利用多头自注意力机制(Multi-head Self-Attention, MHSA),捕捉全局上下文信息[^4]。 - **Decoder**:采用与 U-Net 类似的解码器结构,结合跳过连接(Skip Connection)恢复高分辨率特征图[^5]。 这种设计使得 TransUNet 能够在保持计算效率的同时,显著提升对复杂医学图像的分割精度。 #### 2. 改进点分析 TransUNet 在医学图像分割任务中引入了以下关键改进: - **长距离依赖建模**:相比于传统的 CNN,Transformer 的自注意力机制能够更好地捕捉图像中的长距离依赖关系,这对于医学图像中需要精确分割的小目标尤其重要[^6]。 - **多尺度特征融合**:通过结合 Transformer 和 CNN 的优势,TransUNet 能够在不同尺度上提取特征,并通过跳跃连接将这些特征有效融合[^7]。 - **轻量化设计**:尽管引入了 Transformer,TransUNet 仍然保持了较低的计算复杂度,这得益于其模块化的设计和高效的实现方式[^8]。 #### 3. 实现细节 以下是 TransUNet 的实现步骤和代码示例: ```python import torch import torch.nn as nn from transformer import Transformer class TransUNet(nn.Module): def __init__(self, img_size=224, patch_size=16, in_channels=3, num_classes=2, embed_dim=768, depth=12, num_heads=12): super(TransUNet, self).__init__() self.encoder = Transformer(img_size, patch_size, in_channels, embed_dim, depth, num_heads) self.decoder = UNetDecoder(embed_dim, num_classes) def forward(self, x): encoded_features = self.encoder(x) # Extract features using Transformer output = self.decoder(encoded_features) # Decode to generate segmentation map return output class UNetDecoder(nn.Module): def __init__(self, input_dim, num_classes): super(UNetDecoder, self).__init__() self.upconv1 = nn.ConvTranspose2d(input_dim, 512, kernel_size=2, stride=2) self.upconv2 = nn.ConvTranspose2d(512, 256, kernel_size=2, stride=2) self.final_conv = nn.Conv2d(256, num_classes, kernel_size=1) def forward(self, x): x = self.upconv1(x) x = self.upconv2(x) x = self.final_conv(x) return x ``` #### 4. 实验结果与比较 实验表明,TransUNet 在多个医学图像分割数据集上表现出色。例如,在 CT 腹部图像分割任务中,TransUNet 的 Dice 系数显著高于传统的 U-Net 和 Attention U-Net[^9]。此外,TransUNet 还展示了良好的泛化能力,能够在不同规模的数据集上保持稳定的性能[^10]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值