コンテンツにスキップ

動画・音声解析 用 モデル候補と導入手順

[!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
- PyTorch Whisper -> ONNX (簡易):
pip install torch onnx onnxruntime
python export_whisper_to_onnx.py --model small --out whisper_small.onnx
- ONNX を FP16 に変換(例):
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(依存なし)

本番移行チェックリスト

  1. depth_estimation.py: pip install timm torchDepthEstimator(backend="midas_real") でテスト
  2. vad.py: pip install pyannote.audioSpeakerDiarizer(model_id="pyannote/speaker-diarization-3.1")
  3. narrative_generator.py: EvoSpikeNet LM サービス起動後 NarrativeGenerator(use_lm=True) で動作確認
  4. temporal_action_localizer.py: ST-GCN ONNX モデルを backends.pySTGCNRealActionBackend に登録
  5. E2E: pipeline.run(frames, audio, fps=25, enable_extended=True) でレイテンシ計測

更新日: 2026-04-24