RTMO: 超越YOLO-pose的高性能、单阶段、多人姿态估计

论文地址:https://arxiv.org/pdf/2312.07526v1.pdf

github:https://github.com/open-mmlab/mmpose/tree/dev-1.x/projects/rtmo

目录

1. 动机

2. 方法

2.1 概述

2.2 本文关键技术

2.2.1 Dynamic Coordinate Classifier

2.2.2  MLE for Coordinate Classification

3. 实验结果

 4. 写在后面


1. 动机

实时多人姿态估计面临着速度与精度平衡的问题。two-stage的方法中,top-down是先检测再估计pose,人一多的时候就会变慢,bottom-up的方法则需要grouping等操作,效果也不理想;已有的one-stage方法虽然速度很快,但精度往往不高。

因此,作者提出了一个one-stage、高性能的多人姿态估计方法——RTMO,其通过双1-D heatmap表示关键点,无缝集成到了YOLO框架中,在保持高推理速度的前提下,提升了one-stage多人姿态估计的性能。

2. 方法

作者主要是将YOLO目标检测框架和坐标分类方法(如RTMPose、SimCC,以及DFL所用的那样)结合了起来,不过和他们不同的是,RTMPose、SimCC是将整个输入图像分成若干个bins,这导致大量bin的浪费且效率低下,DFL在anchor附近设置bin,这会导致召回比较低;而作者提出在bbox内进行bin的分配,这样一来,就可以实现动态分配,既能覆盖每个实例,又能根据每个实例的大小分配bin,同时也避免了在没有实例的地方分配bin造成浪费。

2.1 概述

提出的RTMO框架如下图所示:

 网络框架描述如下:

输入图像经过backbone(CSPDarknet)后,最后三层feature map经过Hybrid Encoder得到16、32倍下采样的空间feature mapP4、P5,送入Heads;每个Head生成一个得分feature、一个坐标姿态feature,其中坐标姿态feature用于预测bbox、关键点坐标、关键点可见性。

****强行插入一段*****:

关于坐标分类,没做过的小伙伴可能有点懵,我们可以从SimCC这篇文章中的方法一窥其貌。在SimCC中,将全图沿着X、Y轴分成多个bins,每个bin的宽度是小于一个像素的,也就可以在feature map中得到亚像素级别的坐标,从而缓解量化误差。SimCC网络结构长这样:

2.2 本文关键技术

2.2.1 Dynamic Coordinate Classifier

以前的方法直接从姿态特征回归关键点的位移,这会导致性能低下。本文提出了动态坐标分类器DCC,见图2中的DCC部分,动态地为两个1-D heatmap中的bin分类范围和形式表示,其先将bbox扩展1.25倍,然后再水平、垂直方向均匀划分bin,对于x轴(水平方向),bin的坐标表示如下:

其中,xl, xr表示bbox的左右边界,共Bx个bin;y轴与之类似。

由于采用了动态的bin分配策略,所以每个bbox中的bin坐标是局部的,为了对应到全局坐标,作者使用sine进行了位置编码(positional encoding):

其中,t表示强度,c是索引,C是总维度。 

如图2中的DCC部分所示,bin经过sine 位置编码后又利用一个FC层来细化其对任务的适应性,然后与经过FC+Reshape+GAU(Gated Attention Unit)后的关键点feature相乘,再经过softmax得到heatmap:

2.2.2  MLE for Coordinate Classification

作者提出了用极大似然估计作为坐标分类的损失函数。在分类任务中,one-hot目标、交叉熵损失比较常用,还有Label平滑以及KLD,都能提升性能。高斯均值及方差可以视为标注坐标和预定义参数,则目标分布定义为:

比较重要的一点是,作者注意到上述目标分布在数学上与带有真值xi的标注ux的似然函数相等,这种对称性的出现是因为高斯分布相对于它的平均值是对称的。将xi的预测概率作为先验,则第k个关键点的似然定义为:

最大化上述似然即可建模标注的分布。

在实际使用中,作者使用了拉普拉斯分布和负对数似然损失:

总的MLE损失为:

与 KLD 不同,我们的 MLE 损失允许可学习的方差,表示不确定性。这种不确定性学习框架自动调整各种样本的难度。对于困难样本,模型预测较大方差以简化优化过程,对于简单样本,预测较小方差来提升准确性。而在KLD中,采用可学习方差是有问题的,因为模型会从简化学习的角度出发从而倾向于学习较大方差。

3. 实验结果

 4. 写在后面

RTMO这项工作对YOLO进行了扩展,将坐标分类的方法集成到了YOLO框架中。不同于YOLO-Pose的直接回归,RTMO将bbox范围内的X、Y轴范围分为多个bin,然后对关键点x/y坐标进行分类得到其坐标;也不同于其他one-stage 多人姿态估计方法,如SimCC直接在全图划分bins或者DFL在anchor附近划分bins,RTMO则在bbox范围内进行划分,这避免了全图密集bins的浪费,也保证了每个实例的覆盖。

### 如何在 Ubuntu 24.04 上进行 RTMO 实时模块操作配置 #### 安装必要的软件包 为了支持实时内核特性,在Ubuntu 24.04上需要先安装一系列特定的工具和库文件。这通常涉及到更新现有的APT源列表并下载最新的稳定版本的相关组件。 ```bash sudo apt update && sudo apt upgrade -y sudo apt install linux-image-generic-lowlatency dkms build-essential ``` 这些命令会确保系统拥有低延迟内核镜像以及其他构建必需品,这对于实现更精确的时间控制至关重要[^1]。 #### 启用实时补丁集 启用PREEMPT_RT补丁是使Linux成为完全预占式的必要条件之一。对于Ubuntu而言,可以通过重新编译带有适当选项的自定义内核来完成此过程。然而,官方仓库可能已经提供了经过优化处理过的二进制包形式发布的实时内核。 ```bash sudo apt install linux-modules-realtime-generic ``` 这条指令将会安装适用于大数应用场景下的实时调度机制增强型驱动程序集合。 #### 调整系统参数 为了让操作系统更好地适应高精度定时需求,还需要调整某些核心级别的设定值。例如,减少HRTIMER分辨率可以提高响应速度;而增大IRQ线程优先级则有助于降低中断延迟现象的发生概率。 ```bash echo "kernel.sched_rt_runtime_us=-1" | sudo tee /etc/sysctl.d/98-rtprio.conf sysctl --system ``` 上述脚本片段用于永久保存对运行时间限制所做的更改,并立即应用新的策略规则。 #### 编写加载实时模块的脚本 编写一个简单的Shell脚本来简化后续工作中涉及频繁使用的命令序列。该脚本应能自动检测当前环境中是否存在目标服务进程实例,并据此决定是否继续执行下一步骤动作。 ```bash #!/bin/bash if ! pgrep -x "rtmoduled" > /dev/null; then modprobe rtmoduled fi chmod +x ~/load_realtime_module.sh ``` 这段代码展示了如何创建可执行权限位标记的批处理文件,它会在每次启动期间检查`rtmoduled`守护程序的状态,并按需激活关联硬件资源接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AICVHub

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值