HRNet
HRNet 是一个卷积网络,它靠反复的多尺度融合始终保持一路高分辨率特征流,而不是先下采样再把分辨率恢复回来。LibreYOLO 封装了官方的自顶向下姿态变体,用于推理和验证。
- 任务
- pose
- 尺寸
- 安装
pip install libreyolo- 支持层级
- 仅推理,自 v 起。仅支持预测、验证和导出。训练相关的功能不适用。
- 许可
- 代码采用 MIT,权重采用 MIT。商用
安装
HRNet 不需要基础包之外的任何 extra。
pip install libreyolo它默认的人体检测器是一个轻量的 LibreYOLO9t 检查点(checkpoint),在 HRNet 第一次 与它配对时自动下载。
预测
权重在首次使用时从 Hugging Face 下载,并缓存在本地。
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)libreyolo predict model=LibreHRNetw32-pose.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom 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 的检测器,以及每张图上不固定的人数,都不支持堆叠预测。数据
源、流式处理和结果处理见预测。
变体
两种尺寸,w32 和 w48,都是从固定分辨率的人体裁剪图预测标准的 COCO-17 关键点集
合;w48 是两个骨干里更宽的那个。
上游的 model zoo 用它自己的人体检测器、自己的翻转测试设置和官方的 COCO 评测协议, 给出每种尺寸的姿态精度。LibreYOLO 默认配的是另一个检测器,所以在这里跑一次验证测 的是这个组合,而不是上游那个;要对上上游的数字,需要与原始评测相同的人体检测框、 检测器分数和翻转设置。
验证
val() 跑的是 COCO 风格的关键点 OKS-AP,接收 YOLO-pose 的 data.yaml,或者一份
COCO 关键点 JSON 加一个图像目录。指标后端默认是 faster-coco-eval,没有装
faster-coco-eval 时会自动改用 pycocotools;faster_coco_eval=False 强制走
pycocotools 这条路径。
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"])libreyolo val model=LibreHRNetw32-pose.pt data=my-dataset.yaml验证在内部驱动的是 HRNet 自己的 predict(),所以它用的是模型构造时或调用时给定的
那个人体检测器。构造模型时显式传入 person_detector=,可以让这个来源在多次运行之
间保持固定,而不是让每次调用都重新解析一遍默认值。
导出
| 任务 | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Pose | Pose 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。
from libreyolo import LibreYOLO model = LibreYOLO("LibreHRNetw32-pose.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibreHRNetw32-pose.pt format=onnximport 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.pt | mit | |
| LibreHRNetw48-pose.pt | mit | |
上面的每个文件目前都在 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 上提供的引用块。