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