HumansXドキュメントセンター 公式サイトへ ↗

YOLO11 顔検出 — システムアーキテクチャ設計

概要

YOLO11 顔検出システムは、Flask をベースとしたリアルタイム顔検出 Web アプリケーションです。Horizon RDK-X5 プラットフォーム向けに最適化されており、BPU ハードウェアアクセラレーションに対応しています。本システムはモダンな階層型アーキテクチャを採用し、YOLO11 モデルの推論、Web インターフェース、カメラ管理を効果的に分離することで、高性能なリアルタイム顔検出サービスを提供します。

️ システムアーキテクチャ

全体アーキテクチャ図

+-------------------+
|   Web浏览器前端   |
+-------------------+
         |
      HTTP请求
         |
+-------------------+
|   Flask服务器     |
+-------------------+
         |
   +-----+-----+
   |           |
   |  主应用   |<---> 配置管理
   |  main.py  |
   +-----------+
         |
    +----+----+
    |         |
    | 人脸检测 | 摄像头管理
    | 模块    | 模块
    +----+----+
         |
   +-----+-----+
   |           |
   | YOLO推理  | 地平线BPU
   | 引擎      | 硬件加速
   +-----------+

コアコンポーネント

1. メインアプリケーション (main.py)

  • Flask アプリケーションのエントリポイント:HTTP API と動画ストリーミングサービスを提供します
  • ライフサイクル管理:アプリケーションの起動、初期化、グレースフルシャットダウンの各プロセスを管理します
  • ルーティング管理:REST API と静的ファイルサービスを処理します
  • ライブ動画ストリーミング:MJPEG 形式のライブ動画ストリームを生成します
  • システム監視:ヘルスチェックと統計情報のためのインターフェースを提供します
  • シグナル処理:SIGINT/SIGTERM に対する万全な処理機構を備えています

主な機能:

  • REST API エンドポイント:/api/health、/api/stats、/api/info、/api/settings
  • 動画ストリームエンドポイント:/video_feed(MJPEG ライブ動画ストリーミング)
  • 静的ファイルサービス:Web インターフェースのリソース
  • グレースフルシャットダウン:リソースのクリーンアップとシグナル処理
  • 状態管理:グローバル状態の制御と同期

2. 顔検出モジュール (app/face_detector.py)

  • 検出器のラッパー:統一された顔検出インターフェースを提供します
  • 結果処理:顔のバウンディングボックスと信頼度を処理します
  • 描画機能:検出結果を可視化して描画します
  • 統計監視:検出性能と精度の統計を取得します
  • エラー処理:万全な例外処理とフォールバック機構を備えています

特長:

  • 信頼度および IOU のしきい値を調整可能
  • 複数の顔の同時検出に対応
  • リアルタイムの統計収集
  • 柔軟な可視化オプション

3. YOLO 推論エンジン (utils/yolo_detector.py)

  • YOLO11 モデル推論:Horizon BPU による高効率な推論
  • 後処理アルゴリズム:DFL デコード、NMS、座標変換
  • マルチスケール検出:40x40、20x20、10x10 の特徴層に対応
  • 性能最適化:アンカーポイントと静的な重みを事前計算
  • CPU 互換モード:開発環境向けの模擬検出に対応

技術的特長:

  • DFL(Distribution Focal Loss)によるバウンディングボックス回帰
  • 3 スケールの特徴ピラミッドによる検出
  • 高効率な NMS(非最大値抑制)
  • BPU に最適化された NV12 入力形式

4. ベースモデルクラス (utils/base_model.py)

  • ハードウェア抽象化レイヤー:統一されたモデル推論インターフェース
  • プラットフォーム適応:RDK-X5 の BPU モードと CPU モードに対応
  • 形式変換:BGR から NV12 への色空間変換
  • リソース管理:モデルの読み込みとメモリ管理
  • 性能監視:推論時間とリソース使用量の統計

サポート機能:

  • プラットフォームの自動検出(hobot_dnn か CPU エミュレーションか)
  • メモリプールの管理と再利用
  • 入力前処理パイプライン
  • 出力形式の標準化

5. カメラ管理 (app/camera_manager.py)

  • カメラ制御:OpenCV カメラインターフェースのラッパー
  • 非同期取得:マルチスレッドによる非同期フレーム取得に対応
  • 形式適応:複数の解像度とフレームレートに対応
  • バッファ管理:フレームのキャッシュとフレーム落ちの処理
  • 状態監視:カメラの健全性状態を検出

特長:

  • デバイス ID、解像度、フレームレートを設定可能
  • 非同期取得スレッドにより遅延を低減
  • フレーム統計と性能監視
  • 自動再接続とエラー回復

6. 設定管理 (config/)

  • YAML 設定:face_config.yaml がメイン設定ファイルです
  • 環境変数による上書き:環境変数による動的な設定に対応
  • 設定の検証:起動時にパラメータの妥当性をチェック
  • ホット更新:実行時の設定変更に対応
  • 複数環境対応:開発・テスト・本番の各環境の設定

設定の階層(優先度の高い順):

  1. 実行時の設定更新
  2. 環境変数
  3. YAML 設定ファイル
  4. コード内のデフォルト値

7. Web インターフェース (static/ & templates/)

  • レスポンシブデザイン:デスクトップとモバイル端末に対応
  • ライブ動画:MJPEG ストリーミングプレーヤー
  • パラメータ制御:検出パラメータをリアルタイムに調整
  • 統計表示:性能指標の可視化
  • 状態監視:システムの健全性状態を表示

フロントエンド技術:

  • HTML5 Video/Canvas API
  • JavaScript ES6+ によるネイティブ開発
  • CSS3 レスポンシブレイアウト
  • WebSocket によるリアルタイム通信

データフロー

検出処理フロー

  1. カメラ取得:CameraManager が動画フレームを取得します
  2. 形式変換:BPU 入力に適した NV12 形式へ BGR から変換します
  3. モデル推論:YOLO11 モデルが BPU 上で推論を実行します
  4. 後処理デコード:DFL デコード、信頼度フィルタリング、NMS 処理を行います
  5. 座標変換:検出枠の座標を元画像の座標に復元します
  6. 結果描画:検出枠、信頼度、統計情報を描画します
  7. 動画ストリーム出力:MJPEG 形式でエンコードし、Web 側へ配信します

マルチスケール検出プロセス

  1. 特徴抽出:YOLO11 のバックボーンネットワークでマルチスケールの特徴を抽出します
  2. 3 層の検出ヘッド:
  • 小さい対象の検出:40x40 特徴マップ、stride = 8
  • 中程度の対象:20x20 特徴マップ、stride = 16
  • 大きい対象の検出:10x10 特徴マップ、stride = 32
  1. DFL 回帰:Distribution Focal Loss によるバウンディングボックス回帰
  2. 信頼度計算:Sigmoid 活性化関数で対象の信頼度を計算します
  3. アンカーポイントのマッピング:事前計算したアンカーポイントで座標変換を行います
  4. 結果の統合:マルチスケールの検出結果を統合し、NMS 処理を行います

ライブストリーミングプロセス

  1. フレーム生成ループ:フレームの取得と検出を継続的に繰り返します
  2. 検出と描画:各フレームで顔検出を実行し、結果を描画します
  3. JPEG エンコード:設定可能な品質パラメータでフレームをエンコードします
  4. マルチパートストリーム:MJPEG のマルチパート HTTP レスポンスを生成します
  5. フレームレート制御:設定に従って出力フレームレートを制御します
  6. クライアント再生:ブラウザ側でリアルタイムに動画を再生します

️技術スタック

バックエンド技術

  • Web フレームワーク:FastAPI — 高性能な非同期 Web フレームワーク
  • コンピュータビジョン:OpenCV — 画像処理とカメラ制御
  • 科学計算:NumPy、SciPy — 数値計算と後処理アルゴリズム
  • AI 推論:hobot_dnn — Horizon BPU 推論エンジン
  • 設定管理:PyYAML — YAML 設定ファイルの解析
  • ロギング:Python logging — 構造化ログシステム

AI/ML 技術

  • 深層学習モデル:YOLO11 — 最新の物体検出アルゴリズム
  • ハードウェアアクセラレーション:Horizon RDK-X5 BPU — AI 推論専用チップ
  • 後処理アルゴリズム:DFL、NMS、Sigmoid — 検出結果の最適化
  • マルチスケール検出:FPN 特徴ピラミッド — さまざまなサイズの対象を検出
  • 量子化最適化:INT8 量子化 — BPU での高効率推論

フロントエンド技術

  • HTML5:モダンな Web 標準、Canvas および Video API
  • JavaScript ES6+:ネイティブ JavaScript、追加フレームワークへの依存なし
  • CSS3:レスポンシブデザイン、Flexbox レイアウト
  • MJPEG ストリーム:リアルタイム動画ストリーム再生技術

デプロイアーキテクチャ

Horizon RDK-X5 へのデプロイ

用户浏览器
    ↓ HTTP/MJPEG
FastAPI Web服务 (端口8003)
    ↓
Python应用层
    ↓
hobot_dnn推理引擎
    ↓
地平线RDK-X5 BPU芯片
    ↓
USB/CSI摄像头硬件

性能面の特長:

  • BPU ハードウェアアクセラレーションにより推論時間 20ms 未満
  • 30FPS のリアルタイム動画処理に対応
  • エッジデプロイ向けの電力最適化

開発環境へのデプロイ

开发机浏览器
    ↓ HTTP/MJPEG  
FastAPI开发服务器
    ↓
CPU模拟检测
    ↓
OpenCV摄像头接口
    ↓
本地摄像头设备

機能面の特長:

  • CPU による模擬検出で全機能を利用可能
  • ホットリロード開発モード
  • デバッグログと性能分析

⚡ 性能最適化

推論の最適化

  • BPU 専用の最適化:NV12 入力形式により形式変換を削減
  • 事前計算による最適化:アンカーポイントと重みを事前計算
  • メモリの再利用:入出力バッファを再利用
  • バッチ推論:フレームのバッチ処理に対応

ストリーミングメディアの最適化

  • 非同期処理:取得・検出・エンコードのパイプライン化
  • 品質制御:JPEG 品質とフレームレートを動的に調整
  • キャッシュ戦略:多段キャッシュ機構
  • 帯域適応:ネットワーク状況に応じてストリームのパラメータを調整

システムの最適化

  • マルチスレッド処理:取得と検出を非同期に実行
  • リソース監視:CPU、メモリ、温度の監視
  • ガベージコレクション:メモリとリソースの自動クリーンアップ
  • 起動の最適化:高速起動とプリロード