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がメイン設定ファイルです - 環境変数による上書き:環境変数による動的な設定に対応
- 設定の検証:起動時にパラメータの妥当性をチェック
- ホット更新:実行時の設定変更に対応
- 複数環境対応:開発・テスト・本番の各環境の設定
設定の階層(優先度の高い順):
- 実行時の設定更新
- 環境変数
- YAML 設定ファイル
- コード内のデフォルト値
7. Web インターフェース (static/ & templates/)
- レスポンシブデザイン:デスクトップとモバイル端末に対応
- ライブ動画:MJPEG ストリーミングプレーヤー
- パラメータ制御:検出パラメータをリアルタイムに調整
- 統計表示:性能指標の可視化
- 状態監視:システムの健全性状態を表示
フロントエンド技術:
- HTML5 Video/Canvas API
- JavaScript ES6+ によるネイティブ開発
- CSS3 レスポンシブレイアウト
- WebSocket によるリアルタイム通信
データフロー
検出処理フロー
- カメラ取得:CameraManager が動画フレームを取得します
- 形式変換:BPU 入力に適した NV12 形式へ BGR から変換します
- モデル推論:YOLO11 モデルが BPU 上で推論を実行します
- 後処理デコード:DFL デコード、信頼度フィルタリング、NMS 処理を行います
- 座標変換:検出枠の座標を元画像の座標に復元します
- 結果描画:検出枠、信頼度、統計情報を描画します
- 動画ストリーム出力:MJPEG 形式でエンコードし、Web 側へ配信します
マルチスケール検出プロセス
- 特徴抽出:YOLO11 のバックボーンネットワークでマルチスケールの特徴を抽出します
- 3 層の検出ヘッド:
- 小さい対象の検出:40x40 特徴マップ、stride = 8
- 中程度の対象:20x20 特徴マップ、stride = 16
- 大きい対象の検出:10x10 特徴マップ、stride = 32
- DFL 回帰:Distribution Focal Loss によるバウンディングボックス回帰
- 信頼度計算:Sigmoid 活性化関数で対象の信頼度を計算します
- アンカーポイントのマッピング:事前計算したアンカーポイントで座標変換を行います
- 結果の統合:マルチスケールの検出結果を統合し、NMS 処理を行います
ライブストリーミングプロセス
- フレーム生成ループ:フレームの取得と検出を継続的に繰り返します
- 検出と描画:各フレームで顔検出を実行し、結果を描画します
- JPEG エンコード:設定可能な品質パラメータでフレームをエンコードします
- マルチパートストリーム:MJPEG のマルチパート HTTP レスポンスを生成します
- フレームレート制御:設定に従って出力フレームレートを制御します
- クライアント再生:ブラウザ側でリアルタイムに動画を再生します
️技術スタック
バックエンド技術
- 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、メモリ、温度の監視
- ガベージコレクション:メモリとリソースの自動クリーンアップ
- 起動の最適化:高速起動とプリロード
ドキュメント