(9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO

YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计

1. 简介

Time:2022


我们介绍了一种YOLO-Pose,一种新的无热图联合检测方法,以及基于流行的YOLO目标检测框架的图像二维多人姿态估计。现有的基于热图的两阶段方法是次优的,因为它们不是端到端可训练的,训练依赖于替代L1损失,不等于最大化评估度量,即目标对象关键点相似度(OKS)。我们的框架允许我们端到端训练模型,并优化OKS度量本身。该模型学习了在一次正向传递中联合检测多个人的边界框及其相应的二维姿态,从而引入了自上而下和自下而上两种方法的最佳效果。所提出的方法不需要对自底向上的方法进行后处理,以将检测到的关键点分组到一个骨架中,因为每个边界框都有一个相关的姿态,从而导致关键点的固有分组。与自上而下的方法不同,多个向前通道被取消,因为所有人的姿势都是局部化的。YOLO-pose在COCO验证(90.2%AP50)和测试开发方面取得了新的最先进的结果。

效果如下:

在这里插入图片描述

  • 从yolov5m6姿态的输出显示了我们的方法的鲁棒性。一个人的关键点永远不会因为固有的分组而与另一个人误解。

论文的主要贡献有:

### 使用 YOLO-Pose 进行视频姿态估计的推理实现 YOLO-Pose 是一种基于 YOLOv5 的姿态估计模型,其核心在于引入了对象关键点相似性损失(Object Keypoint Similarity Loss),从而提高了姿态估计的准确性与效率[^2]。为了在视频中应用该模型进行姿态估计,可以按照以下方式构建流程。 #### 1. 数据预处理 对于输入视频流中的每一帧图像,需将其转换为适合 YOLO-Pose 推理的形式。通常情况下,这涉及调整分辨率至固定大小以及标准化像素值范围。具体操作如下: ```python import cv2 from torchvision import transforms def preprocess_image(image, input_size=640): transform = transforms.Compose([ transforms.Resize((input_size, input_size)), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) return transform(image).unsqueeze(0) ``` 此函数会将原始图片缩放到指定尺寸,并执行必要的归一化步骤以适配模型需求[^3]。 #### 2. 加载训练好的 YOLO-Pose 模型 加载官方提供或者自行微调后的权重文件来初始化网络实例。这里假设使用 PyTorch 版本作为例子展示如何完成这一过程: ```python import torch from yolopose.models.experimental import attempt_load device = 'cuda' if torch.cuda.is_available() else 'cpu' weights_path = './path/to/yolopose_weights.pt' model = attempt_load(weights_path, map_location=device) # 自动选择 GPU 或 CPU 设备运行 model.eval() ``` 上述代码片段实现了从本地路径读取已保存的最佳参数集合,并设置模型进入评估模式以便后续预测阶段正常运作[^4]。 #### 3. 执行前向传播获取结果 针对每张经过前期准备完毕的照片数据送入神经网络内部计算得出最终输出结果集。这些信息包含了边界框位置坐标、类别标签概率分布情况还有各个关节部位的具体定位详情等内容项。 ```python with torch.no_grad(): outputs = model(input_tensor.to(device)) detected_objects = non_max_suppression_kpt(outputs, conf_thres=0.25, iou_thres=0.45)[0].cpu().numpy() ``` 注意此处采用了 `non_max_suppression_kpt` 函数代替普通的 NMS 方法因为前者特别设计用来处理带有关节点附加属性的目标实体列表[^1]。 #### 4. 可视化显示检测成果 最后一步就是把得到的所有相关信息绘制回原图画面上呈现给用户观看效果怎样样啦! ```python for obj in detected_objects: bbox = obj[:4] keypoints = obj[7:].reshape((-1, 3)) # 提取出所有的骨骼点 plot_one_box(bbox, image_copy, label="Person", color=(0, 255, 0), line_thickness=2) for kp_idx, keypoint in enumerate(keypoints): x_coord, y_coord, confidence = int(keypoint[0]), int(keypoint[1]), float(keypoint[2]) if confidence > 0.5: cv2.circle(image_copy, center=(x_coord, y_coord), radius=5, thickness=-1, color=(255, 0, 0)) cv2.imshow('Video Pose Detection', image_copy) if cv2.waitKey(1) & 0xFF == ord('q'): break ``` 以上即完成了整个利用 YOLO-Pose 对实时视频序列实施物姿势识别工作的基本框架搭建工作。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

明月醉窗台

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

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

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

打赏作者

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

抵扣说明:

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

余额充值