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

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

概要

YOLO11 顔検出システムは Flask ベースのリアルタイム顔検出 Web アプリケーションで、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 モデル推論: BPU による高効率な推論
  • 後処理アルゴリズム: DFL デコード、NMS、座標変換
  • マルチスケール検出: 40x40、20x20、10x10 の 3 つの特徴層に対応
  • 性能最適化: アンカーポイントと静的な重みの事前計算
  • 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. 形式変換: BGR を NV12 形式に変換し、BPU の入力に適合させます
  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. Multipart ストリーム: MJPEG の multipart HTTP レスポンスを生成します
  5. フレームレート制御: 設定に従って出力フレームレートを制御します
  6. クライアントでの再生: ブラウザ側でリアルタイムにビデオを再生します

🛠️ 技術スタック

バックエンド技術

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

AI/ML 技術

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

フロントエンド技術

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

🚀 デプロイ構成

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、メモリ、温度の監視
  • ガベージコレクション: メモリとリソースの自動クリーンアップ
  • 起動の最適化: 高速起動とプリロード