動画・音声解析 用 モデル候補と導入手順
[!NOTE] 最新の実装状況は 機能実装ステータス (Remaining Functionality) を参照してください。
目的: MoveNet 系キーポイント抽出と Whisper 系 ASR を中心に、本番運用向けの候補モデル、変換・最適化パス、導入手順、運用上の注意点をまとめる。
1) キーポイント抽出(pose)候補 - MoveNet (TF / TFLite / ONNX) - バリアント: Lightning, Thunder - 長所: 高速、軽量、GPU/CPU 両対応、良好な精度/レイテンシトレードオフ - 短所: 複雑な姿勢や密集時は HRNet 等に劣る - 推奨バックエンド: ONNX Runtime (GPU/CPU), TensorRT for GPU高速化 - 変換: TF -> ONNX (tf2onnx) -> ORT/TensorRT
- MediaPipe Pose
- 長所: 高速で実装済みのパイプライン(推論 + 前処理)が揃う
- 短所: カスタマイズ性はやや低い、ライセンス/バイナリ依存
-
推奨: エッジ/モバイルでのデプロイ(TFLite)
-
HRNet / Higher-accuracy models
- 長所: 高精度(研究/評価用)
- 短所: 重く、リアルタイム要件には GPU が必要
- 推奨: オフライン/バッチ処理、精度ベンチマーク
最短導入手順(pose)
1. MoveNet Lightning の ONNX を取得/変換 (tf2onnx を使用)。
2. ONNX Runtime でシンプルラッパー get_pose_backend(name) を実装。
3. 推論のバッチ/ストリーミング入出力仕様を pose インターフェースで固定。
4. CI で精度・レイテンシのベンチを追加(サンプル 1080p フレーム連続 1000 枚)。
2) ASR 候補
- OpenAI Whisper 系
- バリアント: tiny, base, small, medium, large
- 長所: 多言語対応、再現性、まとまった精度
- 短所: medium/large は重い(GPU必須)、PyTorch 依存
- 軽量化: whisper.cpp (int8), ONNX 変換 + quantize が利用可能
- 推奨バックエンド: ONNX Runtime (CPU/GPU), torch (GPU)、whisper.cpp(CPU組込み向け)
- Wav2Vec2 (HuggingFace)
- 長所: 高精度、カスタム学習が容易
-
短所: 前処理・デコーダ設計が必要
-
VOSK / Kaldi
- 長所: オンプレ向け・低遅延の組み込み向けエンジン
- 短所: 設定と辞書管理が必要
最短導入手順(ASR)
1. 要件を元にバリアント決定(小さい <-> 高精度)。
2. Whisper small を torch で組み込むか、軽量用途は whisper.cpp を検討。
3. ONNX 変換: PyTorch -> ONNX -> ORT のパスを整備。必要なら INT8/FP16 量子化。
4. スピーカーダイアリゼーションを入れる場合は pyannote 等の追加モジュールをプラグイン化。
3) モデル変換と最適化(共通手順)
- 推奨ツール: torch.onnx, tf2onnx, onnxruntime-tools, onnxruntime-transformers, optimum (HuggingFace), tensorrt/trtexec。
- 基本パイプライン:
1. 学習済み重み取得(ライセンス確認)
2. フレームワーク変換(PyTorch/TF -> ONNX)
3. ONNX の簡易検証(shape, dtype)
4. 量子化(FP16/INT8): まず FP16、次に INT8(校正データで精度劣化確認)
5. TensorRT エンジン化(GPU、必要なら dynamic shape 設定)
4) 推論サービス設計(運用)
- モデルリポジトリ: models/video/pose/ と models/audio/asr/ を分け、バージョン管理。Manifest に SHA/日付を記録。
- コンテナ: ベースは python:3.10-slim、GPU は NVIDIA CUDA 対応イメージ。ONNX Runtime / TensorRT がインストールされたイメージを用意。
- モデル切替: 実行時に MODEL_SELECTION 環境変数または API で切替可能にする。
- モニタリング: per-model latency, success_rate, memory_usage を Prometheus に出力。
5) 導入チェックリスト(実務) - ライセンス確認(Whisper: MIT? / 背景モデルはライセンス依存) - サンプルデータで精度/レイテンシベンチ - 量子化後の性能と精度差レポート - CI (CPU) と nightly GPU ベンチの分離 - セキュリティ: モデルアーティファクトの署名/検証
6) 具体的なコマンド例 - TF -> ONNX (MoveNet の例):
pip install tf2onnx onnx onnxruntime
python -m tf2onnx.convert --saved-model movenet_savedmodel --output movenet.onnx --opset 14
pip install torch onnx onnxruntime
python export_whisper_to_onnx.py --model small --out whisper_small.onnx
python -m onnxruntime.tools.convert_to_ort --model whisper_small.onnx --output whisper_small_fp16.onnx --target_fp16
7) 推奨初期構成(プロダクション立ち上げ) - pose: MoveNet Lightning -> ONNX Runtime (GPU 優先, FP16) - asr: Whisper small -> ONNXRuntime GPU (medium 要求高精度に応じて切替) - 量子化: INT8 は本番で慎重に採用(校正データで評価)
8) CI/テスト - 小さな CPU ベースの smoke tests(whisper.cpp / ORT cpu)を常時実行 - nightly GPU ベンチ(精度 + latency)
9) 追加資料と参考 - ONNX Runtime Quantization docs - TensorRT best practices - whisper.cpp repository (CPU向け最適化)
まとめ: まずは MoveNet (ONNX, FP16) と Whisper small (ONNX, FP16) を初期候補として導入し、CI ベンチと量子化パイプラインを整備したうえで medium/large を段階的に追加するのが現実的です。
実装済みフォールバックモジュール(2026-04-24 追加)
本番モデル導入前のフォールバックとして、以下 7 モジュールが evospikenet/video_analysis/ に実装済みです。
本番モデルへの切替は backend 引数または設定ファイルで行います。
| モジュール | 実装済みバックエンド | 本番モデルフック | 切替キー |
|---|---|---|---|
depth_estimation.py |
輝度勾配疑似深度 | torch.hub MiDaS-small |
backend="midas_real" |
vad.py |
エネルギーしきい値 VAD | pyannote.audio Pipeline.from_pretrained() |
SpeakerDiarizer.use_pyannote=True |
shot_boundary_detector.py |
ヒストグラム / ピクセル差分 | PySceneDetect / own CNN | method="combined" |
narrative_generator.py |
テンプレート文 | EvoSpikeNet LM (NeuralLanguageAdapter) |
use_lm=True |
temporal_action_localizer.py |
位置差分スライドウィンドウ | ST-GCN / SlowFast | backend="stgcn_real" |
spatial_relations.py |
BBox 座標 + depth map | 同左(追加アルゴリズム予定) | — |
event_schema.py |
純粋 dataclass(依存なし) | — | — |
本番移行チェックリスト
depth_estimation.py:pip install timm torch→DepthEstimator(backend="midas_real")でテストvad.py:pip install pyannote.audio→SpeakerDiarizer(model_id="pyannote/speaker-diarization-3.1")narrative_generator.py: EvoSpikeNet LM サービス起動後NarrativeGenerator(use_lm=True)で動作確認temporal_action_localizer.py: ST-GCN ONNX モデルをbackends.pyのSTGCNRealActionBackendに登録- E2E:
pipeline.run(frames, audio, fps=25, enable_extended=True)でレイテンシ計測
更新日: 2026-04-24