HRNet
HRNetは、downsampling後に解像度を復元する代わりに、マルチスケール融合を繰り返して高解像度の特徴量streamを維持する畳み込みネットワークです。LibreYOLOは公式のトップダウン姿勢バリアントを推論と検証向けにラップします。
- タスク
- pose
- サイズ
- インストール
pip install libreyolo- サポートティア
- 推論のみ、v以降。推論、検証、エクスポートのみです。学習機能は対象外です。
- ライセンス
- コード:MIT、重み:MIT。商用利用
インストール
HRNetに基本パッケージ以外の追加パッケージは必要ありません。
pip install libreyoloデフォルトの人物検出器である軽量なLibreYOLO9tチェックポイントは、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") # 検出を完全に省略し、画像全体を1人として扱うresult = model(SAMPLE_IMAGE, cropped=True) # すでに実行済みの検出器によるボックスをHRNetへ渡す方法result = model(SAMPLE_IMAGE, person_boxes=[[34, 12, 220, 400]]) # デフォルトのLibreYOLO9tではなく、特定のLibreYOLO検出器と# 組み合わせる方法result = model(SAMPLE_IMAGE, person_detector="rfdetr")HRNetはトップダウン姿勢推定器です。姿勢ヘッドを実行する前に人物ボックスが必要なので、呼び出しのたびに1つの取得元を解決します。設定を変更しなければ、初回にLibreYOLO9t検出器と組み合わせ、その選択をログへ記録します。cropped=True は検出を省略して画像全体を1人として扱います。person_boxes はすでに実行済みの検出器によるボックスを受け付けます。person_detector は "auto"、"rfdetr"、任意のLibreYOLO検出モデル、通常のcallableを受け付けます。flip_test=True は水平方向に反転したcropでもモデルを実行して2つのヒートマップを平均します。これはHRNet独自のテスト時データ拡張であり、genericな augment=True はここでは定義されません。複数画像のソースは順番に実行されます。HRNetの検出器と画像ごとに異なる人物数は、stackした推論に対応しません。ソース、ストリーミング、結果の処理については推論を参照してください。
バリアント
w32 と w48 の2サイズがあり、どちらも固定解像度の人物cropから標準COCO-17キーポイントセットを予測します。w48 は2つのうち幅の広いバックボーンです。
アップストリームのmodel zooでは、それぞれのサイズについて独自の人物検出器、flip testing設定、公式COCO評価手順を使った姿勢精度が報告されています。LibreYOLOのデフォルトの組み合わせは異なる検出器を使うため、ここでの検証実行が測定するのはその組み合わせであり、アップストリームの組み合わせではありません。アップストリームの値を再現するには、元の評価と同じ人物ボックス、検出器スコア、flip設定が必要です。
検証
val() はCOCO形式のキーポイントOKS-APを実行し、YOLO-poseの data.yaml またはCOCO keypoints JSONと画像ディレクトリを受け付けます。指標のbackendはデフォルトで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だけであり、ほかの形式ではトレース開始前に例外が送出されます。すべてのエクスポートは、batch-one FP32の固定キャンバスheatmap headだけです。人物cropを受け取り、未加工のヒートマップを返します。その前段のaffine crop geometryと、後段のheatmap decode、flip restoration、OKS suppressionは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 # エクスポート済みグラフは固定キャンバスのheatmap headだけであり# 切り取り・正規化済みの人物cropのバッチを受け取って# 未加工のheatmapを返す。人物検出、crop geometry、heatmapの# decode、OKS suppressionはこのグラフに含まれないため# LibreYOLO外で実行する場合はdecode stepを自身で再実装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 orgにあり、初回使用時にダウンロードされます。
ライセンス
ダウンロードする特定の重みについて、Hugging Faceリポジトリのライセンスを確認してください。LibreYOLO orgの各チェックポイントにはライセンスが付与されており、同じファミリー内でも常に同一とは限りません。そのリポジトリが正式な情報源です。以下の概要は、このページを最後に検証した時点で適用されていた内容を示します。
これは関連するライセンスの説明であり、法的助言ではありません。商用上重要な場合は、自分でライセンスを読み、専門家の助言を受けてください。
- 原著作物
- 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の引用ブロックからコピーしています。