大数跨境

CVPR2026 SOTA|PoseStream多人姿态估计实战!端侧实时关键点检测、遮挡人体不丢点、动作分析SOTA

CVPR2026 SOTA|PoseStream多人姿态估计实战!端侧实时关键点检测、遮挡人体不丢点、动作分析SOTA AI与计算机视觉
2026-10-20
6
导读:做行为分析的时候,大家都知道光靠检测框不够——你得知道人是站着还是蹲着、手举起来没有、脚有没有站稳。

做行为分析的时候,大家都知道光靠检测框不够——你得知道人是站着还是蹲着、手举起来没有、脚有没有站稳。这就是姿态估计要干的事:把人的关节点(头、肩、肘、腕、髋、膝、踝)一个一个标出来。

今天分享的这篇 CVPR2026 论文 PoseStream,提出了一个流式多人姿态估计框架:不需要先做人检测再估姿态,一步到位直接出关键点,而且在遮挡严重、人多人挤的场景下依然稳。在 COCO Keypoints 和 CrowdPose 上刷新了实时姿态估计的 SOTA。

一、姿态估计到底难在哪

姿态估计听起来就是"标几个点",但真做了才知道,真实场景里的人体姿态比论文数据集里难多了。

1.1 两步走太慢:先检测再估点

传统自顶向下方法是:先跑一遍人检测,把每个人框出来,再分别对每个框做姿态估计。问题很明显——N 个人就要跑 N 次姿态网络,画面里人一多,速度直接崩。监控场景里一个画面挤几十个人,根本跑不动。

1.2 遮挡是最大的坑

论文数据集里的人基本都是正面、完整、不挡的。但真实监控里——两个人并排站着互相挡、人坐在椅子上只露出上半身、人被桌子挡住下半身——这种遮挡场景下,被挡住的关节点你根本看不到,怎么估?模型得学会"脑补"被挡住的关键点位置。

1.3 多人交错,关键点容易串

画面里两个人挨得很近,A 的左手和 B 的右手在视觉上几乎重合,模型很容易把 A 的点安到 B 身上——这就是关键点 ID 串扰。人越多、越挤,这个问题越严重。

1.4 小人体关键点根本看不清

远处监控里的人可能只有 30 像素高,头、肩、肘这些关节点根本分辨不出来。但行为分析又必须要这些点——人是走是跑、是站是坐,全靠关节点判断。小人体的关键点估计一直是个老大难。

二、PoseStream 的三个核心设计

PoseStream 的整体思路:不做"先检测再估点"的两步走,而是一次前向直接输出所有人的所有关键点,用中心偏移把人和关键点关联起来。

2.1 自底向上 + 中心关联

自顶向下慢,自底向上(先估所有关键点再组人)快,但组人一直是难题。PoseStream 用了一个很巧妙的设计:

•先估所有关键点的位置:不管是谁的头、谁的手,先把所有关节点都检测出来。

•同时预测每个人的中心点:每个人的 torso 中心(大概在腰的位置)也检测出来。

•用中心点关联关键点:每个关键点预测一个"它属于哪个中心点"的偏移向量,自动把关键点归到对应的人身上。

这个设计的好处是:不需要先做人检测,一次前向全部搞定;而且组人是靠几何关系自动完成的,不需要额外的匹配算法,速度很快。

2.2 遮挡感知关键点补全

看不到的关键点怎么办?PoseStream 在训练时做了一个很聪明的数据增强:

•随机遮挡模拟:训练的时候随机把人体的一部分挡住(比如用黑色矩形遮掉手臂),然后要求模型依然预测出被挡住的关键点位置。

•可见性预测:每个关键点同时输出一个"可见性"分数——是真的看到了,还是根据身体结构猜出来的。

这样模型就学会了"根据身体结构常识推断被挡住的关节点位置"。比如看到了肩膀和手腕,即使肘被挡住了,模型也能根据人体结构大概猜出肘的位置。消融实验显示,加了遮挡训练后,CrowdPose(拥挤场景数据集)上的 AP 提升了 4.5 个点。

2.3 多尺度关键点增强

小人体关键点看不清怎么办?PoseStream 做了两个针对性设计:

•高分辨率特征图: backbone 下采样到 1/8 就停了,不像常规方法下采样到 1/32——保留更多细节信息,小关键点不容易丢。

•关键点尺度加权损失:小人体的关键点损失权重更大,让模型更重视小目标的精度。

在 COCO 小人体子集上,AP 提升了 3.8 个点,这对于监控远距离人体的姿态分析非常实用。

三、技术架构拆解

PoseStream 的整体 pipeline 分四个模块:

模块

做什么

关键设计

高分辨率 Backbone

提取图像特征

轻量 CNN,保持 1/8 分辨率,保留小目标细节

关键点热图头

预测所有关节点位置

每个关键点一张热图,同时输出可见性分数

人体中心点检测头

检测每个人的 torso 中心

和关键点共享特征,自动学习人体中心位置

中心偏移关联头

把关键点归到对应的人

每个关键点预测到最近人体中心的偏移向量,自动组人

几个工程上的亮点:

•参数量:整个模型 12.3M,INT8 量化后在 Jetson Nano 上能跑 25fps 以上。

•端到端推理:从输入图像到输出"每个人的 17 个关键点",一次前向搞定,不需要后处理。

•视频友好:可以和跟踪器结合——关键点检测 + ID 跟踪,输出每个人的连续姿态轨迹。

四、和主流方法的横向对比

论文在 COCO Keypoints(标准多人姿态)和 CrowdPose(拥挤场景)两个基准上做了对比:

方法

COCO AP↑

CrowdPose AP↑

参数量(M)

FPS(RTX3090)

Mask R-CNN (Top-Down)

63.9

53.2

45

12

HRNet-W32

74.4

63.5

28

15

RTMPose-s

67.9

58.3

9

150

PoseStream

71.2

66.8

12.3

180

可以看到,PoseStream 的 COCO AP 比 HRNet 略低一点,但速度快了 12 倍。更重要的是在 CrowdPose(拥挤场景)上反超了 HRNet——这得益于遮挡感知训练和中心关联机制,人多、人挤的场景下优势很明显。这个 trade-off 非常适合实时监控场景。

五、快速上手:推理核心代码

下面是 PoseStream 的推理框架,帮大家理解整体流程:

python
PoseStream 多人姿态估计核心逻辑
import torch
import torch.nn as nn

class PoseStream(nn.Module):
    def __init__(self, num_keypoints=17):
        super().__init__()
        self.backbone = HighResBackbone()          # 高分辨率特征提取
        self.keypoint_head = KeypointHead(num_keypoints)  # 关键点热图+可见性
        self.center_head = HumanCenterHead()       # 人体中心点检测
        self.offset_head = CenterOffsetHead(num_keypoints)  # 中心偏移关联

    def forward(self, image):
        # 1. 提取高分辨率特征
        feat = self.backbone(image)

        # 2. 预测所有关键点热图和可见性
        kp_heatmaps, kp_visibility = self.keypoint_head(feat)

        # 3. 预测人体中心点
        center_heatmap = self.center_head(feat)
        centers = extract_centers(center_heatmap)  # 所有人体中心点坐标

        # 4. 预测每个关键点到最近中心的偏移,自动组人
        offsets = self.offset_head(feat)

        # 5. 根据偏移把关键点分配给对应的人
        persons = assign_keypoints_to_centers(
            kp_heatmaps, kp_visibility, centers, offsets
        )
        # persons: [N, 17, 3] 每个人17个关键点(x,y,visibility)

        return persons

# 使用示例
model = PoseStream(num_keypoints=17)  # COCO格式17个关键点
model.load_state_dict(torch.load("posestream_coco.pth"))
model.eval()

with torch.no_grad():
    img = load_image("监控画面.jpg")
    persons = model(img)

    for i, person in enumerate(persons):
        print(f"第{i}个人:")
        for j, (x, y, vis) in enumerate(person):
            if vis > 0.5:
                print(f"  关键点{j}: ({x:.1f}, {y:.1f}) 可见")

    visualize_keypoints(img, persons, save="result.jpg")

实际部署的时候,如果要做连续视频的姿态分析,可以和 ByteTrack 跟踪器结合——每一帧估完姿态,再用跟踪器把同一个人的关键点串起来,就能得到每个人的连续动作轨迹。跌倒检测、徘徊检测这些上层应用都可以基于这个轨迹做。

六、毕设/竞赛拓展方向

姿态估计这个方向做毕设有个天然优势——Demo 效果非常直观,画出来骨架图一眼就能看懂。分享几个有价值的拓展点:

6.1 跌倒检测专项

跌倒检测是养老监控、居家安全的刚需。基于 PoseStream 的关键点,做跌倒判断逻辑——比如髋部中心点快速下降、身体角度从垂直变水平——做一个完整的跌倒检测报警系统。工程完整性很强。

6.2 健身动作计数与评估

基于关键点做动作分析:深蹲做了几个、俯卧撑标准不标准、瑜伽动作对不对。结合角度计算和动作分类,做一个 AI 健身教练的 Demo——这个方向现在 App 端很火,产品感很强。

6.3 手势识别 + 交互

只取手腕、手肘、肩膀、手这几个关键点,做手势识别——挥手、握拳、比心——然后做手势交互控制。这个方向在体感游戏、展厅交互里都有应用。

6.4 工地安全帽/违规行为检测

结合姿态估计和目标检测:检测到工人没戴安全帽 + 关键点显示他在危险区域 = 报警。把姿态信息和业务规则结合起来,做一个工地安全监控系统——和实际行业场景结合很紧。

七、写在最后

姿态估计这个方向,看起来就是"标几个点",但它是很多上层应用的基础——行为识别、动作分析、体感交互、康复评估,全都是建立在姿态估计之上的。

PoseStream 给我的启发是:不要总沿着"自顶向下"的老路走。自顶向下精度高但慢,自底向上快但组人难——能不能找到一个中间方案,既快又准?中心关联这个思路就是这样一个折中:不需要做人检测,但用中心点做桥梁把关键点串起来。很多工程问题就是这样,找到一个巧妙的中间表示,问题就解决了一半。

做毕设的同学如果选这个方向,我建议先拿一个开源姿态模型跑通 baseline,然后选一个上层应用去做——跌倒检测、健身计数、手势交互都行。姿态估计本身只是中间件,最终要有一个看得见的应用场景,工作才有价值。

大家如果有复现上的问题或者想聊具体的姿态应用场景,欢迎评论区交流。

【声明】内容源于网络
0
0
AI与计算机视觉
专注分享于计算机视觉和人工智能方向相关内容,包括不限于图像分类、目标检测、语义分割、基础编程、面试面经、生活启示录等,欢迎大家关注与学习。
内容 135
粉丝 0
AI与计算机视觉 专注分享于计算机视觉和人工智能方向相关内容,包括不限于图像分类、目标检测、语义分割、基础编程、面试面经、生活启示录等,欢迎大家关注与学习。
总阅读2.5k
粉丝0
内容135