实时高精度的单阶段人体姿态估计算法 RTMO 正式开源!RTMO 结合了坐标回归策略与 YOLOX 检测框架,克服了现有的单阶段人体姿态估计模型精度与速度难以兼得的难题。RTMO 具有两个突出的优势:
-
在密集的多人场景中,速度和精度均领先。相比传统的二阶段模型如 RTMPose,RTMO 的速度受画面中的人数的影响可以忽略不计。同时它在多个多人密集场景的数据集上获得了最高精度,如在 CrowdPose 数据集上取得83.8 AP,较以往最佳模型提升 5.3 AP。
-
模型简单易部署。作为端到端的单阶段模型,RTMO 可以一条命令完成推理和部署,无需额外的人体检测器网络,大大简化了使用流程。
项目主页:
https://github.com/open-mmlab/mmpose/tree/main/projects/rtmo
(文末点击阅读原文可直达)
论文链接:
https://arxiv.org/abs/2312.07526
效果展示
让我们一起先看看 RTMO 在多人场景中的检测效果(latency 为 NVIDIA 3090 TensorRT-FP16 测试结果)
图1 推理效果图1
图2 推理效果图2
实时姿态估计模型的性能对比
现有的实时姿态估计模型主要包括二阶段 top-down 架构的轻量级模型(例如 RTMPose)以及基于 YOLO 架构的单阶段模型(例如 YOLO-Pose, YOLOv8-Pose)。我们在 CPU 和 GPU 上分别比较了它们的速度和精度。
图3 CPU 上实时姿态估计模型的速度-精度对比图
图4 GPU 上实时姿态估计模型的速度-精度对比图
相较其他实时单阶段模型,RTMO 在性能上全面领先,达到了和二阶段模型 RTMPose 差不多的精度。而相比二阶段模型,RTMO 在画面中人数较多时有速度优势。在相同精度要求下,当画面中人数超过 4(cpu)/2(gpu) 时,RTMO 的推理速度就已经超越了 RTMPose。
多人场景下的领先性能
多人加拥挤场景一直是姿态估计领域的难题。RTMO 在训练过程中使用了 MixUp 数据增强,模拟了拥挤的场景;在正负样本分配的过程中考虑了姿态估计的准确度,减少了关键点错位造成的误差;再加上 MMPose 多数据集训练的加持。因此,RTMO 在多人拥挤场景下依旧有很高的精度。在针对这类场景的 CrowdPose 和 OCHuman 两个数据集上,RTMO 都取得了当前最高的精度。
图5 CrowdPose 测试集 SOTA 模型精度
在 CrowdPose 上,RTMO-l 取得了 83.8 的 AP,相比之前的最佳模型有 5.3 AP 的提升。谁能想到这是一个能跑 100+ FPS 的轻量级模型呢?
图6 OCHuman 数据集 SOTA 模型精度
在 OCHuman 上,RTMO 同样取得了当前最高的精度(不使用标注检测框的情况下)。
便捷的推理接口
得益于 MMPose 框架便捷的推理接口,只需要一行代码,我们就可以调用 RTMO 模型进行推理。
图7 一行代码用 RTMO 完成多人姿态估计
在 OpenXLab 应用平台上,RTMPose 应用也已集成 RTMO。无需本地安装,在浏览器中就能在线使用 RTMO 处理图像、视频。
RTMPose 应用链接:
https://openxlab.org.cn/apps/detail/mmpose/RTMPose
图8 在线试用 RTMO
多平台部署支持
对于需要在业务侧部署模型的小伙伴,RTMO 也带来了福音。
不同于二阶段姿态估计模型,RTMO 无需使用人体检测器预先获取人体检测框,因此它的部署相比 RTMPose 要更加简单。RTMO 项目主页介绍了如何使用 MMDeploy 部署 RTMO 模型,无论是用 ONNX 还是 TensorRT 后端都可以一键搞定。
图9 RTMO 部署教程
此外,我们还提供了开箱即用的轻量推理库 rtmlib (https://github.com/Tau-J/rtmlib):
-
无需安装 mmcv,mmengine,mmpose 等一系列训练库,有 opencv 就能推理
-
超级友好简洁的推理和可视化接口
-
自动下载和缓存 onnx 模型
-
支持 RTMPose 全系列官方及衍生模型:RTMPose,DWPose,RTMO,RTMW etc.
代码样例:
import cv2
from rtmlib import Body, draw_skeleton
device = 'cpu'
backend = 'onnxruntime'
img = cv2.imread('./demo.jpg')
openpose_skeleton = False # True for openpose-style, False for mmpose-style
body = Body(
pose='rtmo',
to_openpose=openpose_skeleton,
mode='balanced',
backend=backend,
device=device)
keypoints, scores = body(img)
# img_show = np.zeros(img_show.shape, dtype=np.uint8)
img_show = draw_skeleton(img_show, keypoints, scores, kpt_thr=0.5)
cv2.imshow('img', img_show)
cv2.waitKey()
One More Thing
RTMPose 家族的全身姿态估计模型 RTMW 也进行了全面更新,基于 DWPose 蒸馏方案(同样已集成在 MMPose 中)进行了加强,相较于 alpha 版本中 RTMW-x 取得 70.2 mAP 精度,蒸馏得到的 RTMW-l 用 60% 的计算量取得了 70.1 mAP。
图10 DWPose (上) 与 RTMW (下) 效果对比动图
图11 DWPose (上) 与 RTMW (下) 效果对比静图
总结
RTMO 是基于 MMPose 的单阶段实时人体姿态估计模型,它结合了坐标回归与 YOLOX 检测框架,在多人场景下实现了领先的速度与精度。RTMO 在 CrowdPose 数据集上首次达到了 80+ 的 AP,是多人拥挤场景当前效果最好的实时模型。作为单阶段模型,RTMO 推理部署简单方便。我们还提供了 Python 推理接口、多平台部署方案,开发者可以快速上手使用。诚挚欢迎对人体姿态估计感兴趣的小伙伴来试用 RTMO,提出宝贵意见!
项目主页:
https://github.com/open-mmlab/mmpose/tree/main/projects/rtmo
(欢迎扫码加入 MMPose 交流群获取更多资讯)
换个框架,LLaVA-7B 竟能媲美 13B?
2023-12-28
书生·浦语大模型实战营——两周带你玩转微调部署评测全链路
2023-12-25