HRNet

HRNet 是一个卷积网络,它靠反复的多尺度融合始终保持一路高分辨率特征流,而不是先下采样再把分辨率恢复回来。LibreYOLO 封装了官方的自顶向下姿态变体,用于推理和验证。

任务
pose
尺寸
安装
pip install libreyolo
支持层级
仅推理,自 v 起。仅支持预测、验证和导出。训练相关的功能不适用。
上游
HRNet,由 Microsoft 发布,采用 MIT 许可。论文源码
许可
代码采用 MIT,权重采用 MIT。商用

安装

HRNet 不需要基础包之外的任何 extra。

bash
pip install libreyolo

它默认的人体检测器是一个轻量的 LibreYOLO9t 检查点(checkpoint),在 HRNet 第一次 与它配对时自动下载。

预测

权重在首次使用时从 Hugging Face 下载,并缓存在本地。

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE # 没有给出人体来源:HRNet 会自动给自己配一个轻量的 LibreYOLO9t# 检测器,并把这个选择记录一次model = LibreYOLO("LibreHRNetw32-pose.pt")result = model(SAMPLE_IMAGE, save=True) print(result.keypoints.xy)print(result.boxes.xyxy)
CLI
libreyolo predict model=LibreHRNetw32-pose.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
人体来源
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreHRNetw32-pose.pt") # 完全跳过检测:把整张图当作一个人result = model(SAMPLE_IMAGE, cropped=True) # 或者把你已经跑过的检测器给出的检测框交给 HRNetresult = model(SAMPLE_IMAGE, person_boxes=[[34, 12, 220, 400]]) # 或者给它配一个指定的 LibreYOLO 检测器,代替默认的# LibreYOLO9tresult = model(SAMPLE_IMAGE, person_detector="rfdetr")

HRNet 是一个自顶向下的姿态估计器:姿态 head 能跑起来之前需要有一个人体检测框,所 以每次调用都会先解析出一个。不去管它的话,它会在第一次调用时自动给自己配上一个 LibreYOLO9t 检测器,并记录这个选择。cropped=True 跳过检测,把整张图当作一个人; person_boxes 接收你已经跑过的检测器给出的检测框;person_detector 接收 "auto""rfdetr"、任何 LibreYOLO 检测模型,或者一个普通的可调用对象。 flip_test=True 会在水平翻转后的裁剪图上再跑一次模型,并对两张热力图取平均,这是 HRNet 自带的测试时增强(TTA);通用的 augment=True 在这里没有定义。多图数据源按 顺序逐张运行:HRNet 的检测器,以及每张图上不固定的人数,都不支持堆叠预测。数据 源、流式处理和结果处理见预测

变体

两种尺寸,w32w48,都是从固定分辨率的人体裁剪图预测标准的 COCO-17 关键点集 合;w48 是两个骨干里更宽的那个。

上游的 model zoo 用它自己的人体检测器、自己的翻转测试设置和官方的 COCO 评测协议, 给出每种尺寸的姿态精度。LibreYOLO 默认配的是另一个检测器,所以在这里跑一次验证测 的是这个组合,而不是上游那个;要对上上游的数字,需要与原始评测相同的人体检测框、 检测器分数和翻转设置。

验证

val() 跑的是 COCO 风格的关键点 OKS-AP,接收 YOLO-pose 的 data.yaml,或者一份 COCO 关键点 JSON 加一个图像目录。指标后端默认是 faster-coco-eval,没有装 faster-coco-eval 时会自动改用 pycocotoolsfaster_coco_eval=False 强制走 pycocotools 这条路径。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreHRNetw32-pose.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/keypoints_mAP50-95"])print(metrics["metrics/keypoints_mAP50"])
CLI
libreyolo val model=LibreHRNetw32-pose.pt data=my-dataset.yaml

验证在内部驱动的是 HRNet 自己的 predict(),所以它用的是模型构造时或调用时给定的 那个人体检测器。构造模型时显式传入 person_detector=,可以让这个来源在多次运行之 间保持固定,而不是让每次调用都重新解析一遍默认值。

导出

任务ONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
PosePose to ONNX:支持Pose to TorchScript:支持Pose to ExecuTorch:不支持Pose to TensorRT:支持Pose to OpenVINO:支持Pose to Paddle:不支持Pose to MNN:不支持Pose to RKNN:不支持Pose to ncnn:不支持Pose to TFLite:不支持Pose to CoreML:不支持Pose to Core AI:不支持

HRNet 的导出约定只覆盖 ONNX、TorchScript、OpenVINO 和 TensorRT;其他任何格式都会在 追踪开始前抛出异常。每次导出的都只是固定画布的热力图 head,批大小为一的 FP32,接收 一张人体裁剪图并返回原始热力图:它前面的仿射裁剪几何,以及它后面的热力图解码、翻转 还原和 OKS 抑制,都留在 Python 里,所以一条完整的「图像进、关键点出」流水线在另一端 仍然需要 LibreYOLO。

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreHRNetw32-pose.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)
CLI
libreyolo export model=LibreHRNetw32-pose.pt format=onnx
使用导出的文件
import numpy as npimport onnxruntime as ort # 导出的计算图只有固定画布的热力图 head:它接收一批已经裁好、# 已经归一化的人体裁剪图,返回原始热力图。人体检测、裁剪几何、# 热力图解码和 OKS 抑制都不在这个计算图里;在 LibreYOLO 之外# 运行它,意味着解码这一步得你自己重新实现一遍session = ort.InferenceSession("LibreHRNetw32-pose.onnx")name = session.get_inputs()[0].nameheatmaps = session.run(    None, {name: np.zeros((1, 3, 256, 192), dtype=np.float32)})[0]

检查点

这个家族已发布的全部权重文件。

文件输入(px)权重许可
Pose
LibreHRNetw32-pose.ptmit
LibreHRNetw48-pose.ptmit

上面的每个文件目前都在 LibreYOLO 组织中,并会在首次使用时下载。

许可证

请检查你所下载的具体权重在 Hugging Face 仓库中的许可。LibreYOLO 组织里的每个检查点都附有许可,同一家族内也不一定相同。该仓库是权威来源;以下摘要说明本页上次验证时适用的情况。

这里只说明涉及的许可证,不构成法律意见。如果答案对商用很重要,请自行阅读许可证并咨询法律顾问。

原始工作
HRNet, Microsoft
上游许可
MIT
LibreYOLO 代码
MIT
权重
采用 MIT 许可,重新发布在 huggingface.co/LibreYOLO
解读
MIT permits commercial and non-commercial use, modification and redistribution of both the code and the two published checkpoints, with the copyright notice retained. The official repository does not attach a separate license to its model-zoo checkpoints; LibreYOLO's redistribution basis is the MIT license the releasing project implies, the same basis the upstream repository's own files state.

引用

@inproceedings{sun2019deep,
  title={Deep High-Resolution Representation Learning for Human Pose Estimation},
  author={Sun, Ke and Xiao, Bin and Liu, Dong and Wang, Jingdong},
  booktitle={CVPR},
  year={2019}
}

复制自作者在 github.com/leoxiaobin/deep-high-resolution-net.pytorch#citation 上提供的引用块。

已针对 LibreYOLO v1.5.0 验证。本页的支持表、检查点和基准测试数据由已发布的库和权重生成,并非手工编写。