YOLOv7 アルゴリズム (PyTorch+Pyside6+YOLOv7) に基づく高精度リアルタイムフェイスマスク検出および認識システム

要約: YOLOv7 アルゴリズムに基づく高精度リアルタイム フェイス マスク ターゲット検出システムは、日常生活でマスクを着用している歩行者を検出および位置特定するために使用できます。このシステムは、入力された画像、ビデオ、フォルダー、およびオブジェクトのターゲット検出と認識を完了できます。同時に、このシステムはテスト結果の視覚化とエクスポートもサポートします。このシステムは、YOLOv7 ターゲット検出アルゴリズムを使用してデータ セットをトレーニングし、Pysdie6 フレームワークを使用してデスクトップ ページ システムを構築し、システムの予測モデルとしてロードされる PT や ONNX などのモデルの重みをサポートします。このシステムによって実装される機能には、モデルの重みの選択と初期化、検出の信頼性と後処理 IOU しきい値の調整、画像のインポート、検出、検出結果とターゲット統計の視覚化、ビデオのインポート、検出、視覚化、検出結果のターゲット統計が含まれます。 ; フォルダー画像の一括インポート、検出、検出結果の可視化およびターゲット統計; デバイスカメラのインポート、検出、検出結果およびターゲット統計の可視化; 単一画像、ビデオ、およびカメラの推論時間表示。このブログ投稿では、システムの環境構築プロセス、全体的な機能の紹介とデモについて詳しく説明します。また、完全な Python ソース コードと使用方法のチュートリアルも提供します。初心者による参照に適しており、二次開発をサポートします。システム全体の完全なコードとリソース ファイルについては、を参照して、記事の最後にあるダウンロード リンクにアクセスして入手してください。
ここに画像の説明を挿入します

YOLOv7 アルゴリズムの原理の紹介

YOLOv7 は 2022 年 7 月に提案およびリリースされ、この論文は 2023 年にコンピューター ビジョンのトップ カンファレンス CVPR で発表されました。YOLOv7 のリンクと手順は YOLOv3 および YOLOv4 の公式 Web サイトに掲載されており、YOLOv7 が大きな人たち。YOLOv7 の正式バージョンは、同じサイズの YOLOv5 よりも正確で、120% 高速 (FPS)、YOLOX より 180% 高速 (FPS)、Dual-Swin-T (FPS) より 1200% 高速、ConvNext より 550% 高速です。 ( FPS)、SWIN-L (FPS) より 500% 高速です。5FPS ~ 160FPS の範囲では、YOLOv7 は速度と精度の両方で現在知られている検出器を上回っており、GPU V100 でテストされました。精度 56.8% AP のモデルは 30 FPS に達します (バッチ = 1)。上記の検出率は、同時に、これは現在でもこのような高精度で 30FPS を超えることができる唯一の検出器です。
論文アドレス: https://arxiv.org/pdf/2207.02696.pdf
ソースコードアドレス: https://github.com/WongKinYiu/yolov7
ここに画像の説明を挿入します

YOLOv7 モデルの構造

YOLOv7 モデルの全体構造は以下の通りで、YOLOv5 と同様に、Input、Backbone、Neck、Head、Prediction モジュールに分けることができます。
ここに画像の説明を挿入します

このセクションでは、YOLOv7 関連モデルの新しいモジュールを紹介します。

(1) ReOrg: yolov7-w6.yaml ファイルにあるこのモジュールは、
入力情報に対して実際にスライス操作を実行します。これは、YOLOv2 アルゴリズムの PassThrough 層や YOLOv5 (v5.0 バージョン) の Focus 操作に似ています。入力レイヤーを可能な限りスライスし、元の情報を保持してダウンサンプリングします。(コードのこの部分は、具体的には models/common.py ファイルの 48 行目にあります)
(2) マルチチャネル畳み込みモジュールのこの部分は、
主に多数の 1×1 ポイント Conv と 3×3 標準 Conv を再利用します。 、および各 Conv の出力次の Conv の入力としてだけでなく、DenseNet
(3) SPPCSPC モジュールの操作と同様に、他のすべての Conv 出力との Concat 接続操作も実行します
。これはピラミッドを使用して取得されたモジュールですプーリング操作と CSP 構造。まだ多数のブランチが含まれています。合計入力は 3 つのセグメントに分割され、異なるブランチに分割されます。中央のブランチは実際にはピラミッド プーリング操作です。左側のブランチは深さ方向の Conv に似ていますが、注意してください。中央の 3×3 畳み込みは実行されません。グループ化は依然として標準的な畳み込みであり、右側に点が付いています。最後に、すべてのブランチから出力される情報フローが連結ベクトル化されます (コードのこの部分は特に次の場所にあります)。 models/common.py ファイルの 262 行目)。
(4) RepConv モジュール
RepVGG は VGG ネットワーク設計に基づいたマルチブランチ モデルであり、学習プロセス中に複数のブランチを通じてパフォーマンスを向上させることができ、推論は 3×3 畳み込みと ReLU により連続ストレート型に変換できます。 VGG ネットワークを使用して推論を高速化します (コードのこの部分は、具体的には models/common.py ファイルの 463 行目にあります)。
(5) E-ELAN モジュール
この部分はマルチチャネル畳み込みモジュールを補足するものであり、より大きくより深いモデル (yolov7-e6e モデル) でのみ使用されます。効率的なネットワークの設計に関するほとんどの論文では、主にパラメータの数、計算量、計算密度が考慮されます。ただし、メモリ アクセスの観点からは、入出力チャネル比、アーキテクチャの分岐数、要素レベルの操作がネットワーク推論速度に及ぼす影響を分析することもできます (シャッフルネットの論文で提案されています)。モデルのスケーリングを実行するときは、活性化関数も考慮する必要があります。つまり、畳み込み層の出力テンソルの要素の数をさらに考慮する必要があります。大規模 ELAN では、勾配経路の長さや計算モジュールの数に関係なく、安定した状態が実現されます。しかし、より多くのコンピューティング モジュールが無限にスタックされると、この安定状態が破壊され、パラメーターの使用率が低下する可能性があります。著者はさらに、元の勾配パスを破壊することなくネットワークの学習能力を向上させるために、展開、シャッフル、マージ カーディナリティ構造を使用する E-ELAN を提案しています (具体的には、cfg/training/yolov7-e6e.yaml で確認できます)。オペレータの別の構造構成に分割されます)

YOLOv7 損失関数

YOLOv7 は一般に YOLOv5 と一致しており、座標損失、ターゲット信頼性損失 (GT はトレーニング フェーズの通常の IoU)、分類損失の 3 つの部分に分かれています。このうち、ターゲットの信頼損失と分類損失には BCEWithLogitsLoss (log を使用したバイナリ クロスエントロピー損失) が使用され、座標損失には CIoU 損失が使用されます。詳細については、utils/loss.py の ComputeLossOTA 関数を参照してください。
IoU_Loss: 検出フレームとターゲットフレームの重複領域を主に考慮します。
GioU_Loss: IoU に基づいて、境界ボックスが重ならない場合の問題を解決します。
DIoU_Loss: IoUとGIoUに基づいて、バウンディングボックスの中心点の距離情報を考慮します。
CIoU_Loss: DIoUに基づいて、バウンディングボックスのアスペクト比のスケール情報を考慮します。

システム環境のセットアップ

(1) Anaconda プロンプトを開きます (コンピューターに anaconda ソフトウェアがない場合は、ダウンロードしてインストールする必要があります)
(2) yolo7 の conda 環境を作成し (conda create -n yolo7 python=3.8)、yolo7 環境を有効化します ( conda activate yolo7)
(3) プロジェクト ディレクトリを入力します (この記事で説明するディレクトリは次のとおりです: E:\Pyside6_yolov7\yolov7)
(4) 環境依存パッケージをインストールします: pip install -rrequirements.txt
(5) 次を入力します: python Base_camera,環境内で py を実行してシステム インターフェイスを開きます
ここに画像の説明を挿入します
ここに画像の説明を挿入します

システムインターフェースと機能表示

このブログ投稿では、設計されたソフトウェア インターフェイスが表示されます。全体的なインターフェイス デザインはシンプルかつエレガントで、直感的な操作エクスペリエンスを提供します。主な機能には次の側面が含まれます:
 モデルの重みのインポートと初期化
 検出信頼性スコアと検出の信頼性スコアの調整後処理 IoU しきい値
 検出されたターゲットの情報表示
 検出時間の統計と表示
 画像のインポート、検出、視覚的表示および結果のエクスポート
 ビデオのインポート、検出、視覚的表示および結果のエクスポート
 バッチのインポート、検出、および結果フォルダー内の画像の視覚的な表示とエクスポート
 カメラのインポート、検出、結果の視覚的な表示とエクスポート
ソフトウェアの初期インターフェイスの例を以下に示します。
ここに画像の説明を挿入します

モデルの重みの選択と初期化

ユーザーは、「モデルの選択」ボタンをクリックして、トレーニング済みモデルの重みをアップロードできます。サポートされている重み形式には、.pt および .onnx が含まれます。モデルの重みをアップロードした後、ユーザーは「モデルの初期化」ボタンをクリックして、選択したモデルの重みの初期化情報を構成できます。さらに、信頼度しきい値(Confidence)や検出後処理しきい値(IoU)などのさまざまなパラメータを調整することで、検出結果の精度と速度を最適化することもできます。「信頼性」または「IoU」の下の入力ボックスの値を変更すると、スライダーの進行状況を同期的に変更できます。スライダーの進行状況値を変更すると、入力ボックスの値も同期的に変更できます。「信頼性」または「IoU」の値の変更は、スライダーの進行状況に同期されます。モデル内の構成を変更し、検出信頼度のしきい値と IOU のしきい値を変更します。すべての設定を完了すると、ユーザーは簡単に検出プロセスを開始し、検出結果を視覚的に表示できます。対応する操作が完了すると、システム ステータス バー (システムの右下) にも、対応する操作の返された結果が表示されます。
ここに画像の説明を挿入します

画像の選択、検出、表示、エクスポート

ユーザーは、「画像選択」ボタンをクリックすることで、検出と認識のために単一の画像を簡単にアップロードできます。次に、「検出」ボタン (システムの右下隅にあるボタン、詳細については上の凡例を参照) をクリックするだけで、システムは自動的にターゲット検出タスクを完了します。検出プロセス中、システムは「検出時間」列に検出が完了するまでの推論時間を表示し、「ターゲット数」列に検出されたターゲットの数を表示します。ユーザーは、ドロップダウン ボックスから検出されたターゲットを選択し、対応する位置情報 (つまり、左上隅の x 座標 xmin、左上隅の y 座標 ymin、左下隅の x 座標 xmax、および左下隅の y 座標 ymax) ラベル値。検出が完了すると、システムの右側に入力画像の検出結果が表示されます。
ユーザーがテスト結果を保存したい場合は、[画像結果のエクスポート] ボタンをクリックし、ポップアップ ダイアログ ボックスに保存ファイル名とサフィックス (1.jpg など) を入力してテスト結果画像を保存します。 。
ユーザーが終了ボタン (システムの右下隅にあるボタン、詳細については上の凡例を参照) をクリックすると、システムは現在の検出タスクを終了し、インターフェイスを更新し、すべての出力情報をクリアします。さらに、ユーザーは「画像選択」または「ビデオ選択」ボタンをクリックし続けて、対応する検出と認識のために画像またはビデオをアップロードできます。つまり、このシステムはシンプルで使いやすいインターフェイスをユーザーに提供し、ユーザーが画像検出タスクを迅速に完了し、検出結果を簡単に表示およびエクスポートできるようにします。具体的な動作例を下図に示します。
ここに画像の説明を挿入します

ビデオの選択、検出、表示、エクスポート

ユーザーは「ビデオ選択」ボタンをクリックして、検出と識別のためにビデオをアップロードできます。次に、ユーザーは「検出」ボタン (システムの右下隅にあるボタン、詳細については上の凡例を参照) をクリックするだけで、システムが自動的にビデオ ターゲット検出タスクを完了します。検出プロセス中、システムは「検出時間」列に単一フレームのターゲット検出の推論時間を表示し、「ターゲット数」列に単一フレームで検出されたターゲットの数を表示します。 、システムは進行状況バーを使用して、現在の検出スケジュールを視覚的に表示します。ユーザーは、ドロップダウン ボックスから検出されたターゲットを選択し、対応する位置情報 (つまり、左上隅の x 座標 xmin、左上隅の y 座標 ymin、左下隅の x 座標 xmax、および左下隅の y 座標 ymax) ラベル値。検出が完了すると、入力映像の検出結果がシステムの右側に表示されます。
ユーザーがビデオ検出結果を一時停止して観察できるようにするために、システムには「一時停止」ボタン (システムの右下隅にあるボタン、詳細については上の凡例を参照してください) が用意されています。ユーザーがクリックすると、システムはビデオ検出を一時停止します。このとき、ユーザーはドロップダウンターゲットボックスから検出されたターゲットの座標位置情報を選択し、「続行」ボタンをクリックします。これを実現するには、システムの右下隅、詳細については上の凡例を参照してください) 入力ビデオの継続検出。
ユーザーがビデオ検出結果を保存したい場合は、[ビデオ結果エクスポート] ボタンをクリックし、ポップアップ ダイアログ ボックスに保存ファイル名とサフィックス (2.mp4 など) を入力して検出結果を保存します。ビデオ。ユーザーが「終了」ボタン (システムの右下隅にあるボタン、詳細については上記の凡例を参照) をクリックすると、システムは現在のビデオ検出タスクを終了し、インターフェイスを更新し、すべての出力情報をクリアします。
ここに画像の説明を挿入します

フォルダーのバッチ画像インポート、検出、表示、エクスポート

「フォルダー」ボタンをクリックすることで、簡単に画像を一括アップロードできます。次に、「検出」ボタン (システムの右下隅にあるボタン、詳細については上の凡例を参照) をクリックするだけで、システムは自動的にターゲット検出タスクを完了し、すべてのフォルダー内の写真を検出します。検出処理中は、「検出時間」欄に検出完了までの推論時間を表示し、「ターゲット数」欄に検出したターゲットの数を表示するとともに、プログレスバーを使用して、現在の検出の進行状況を視覚的に表示します。ユーザーは、ドロップダウン ボックスから検出されたターゲットを選択し、対応する位置情報 (つまり、左上隅の x 座標 xmin、左上隅の y 座標 ymin、左下隅の x 座標 xmax、および左下隅の y 座標 ymax) ラベル値。検出が完了すると、システムの右側に入力画像の検出結果が表示されます。
テスト結果をバッチで保存したい場合は、[フォルダー エクスポート] ボタンをクリックし、ポップアップ ダイアログ ボックスで出力フォルダーを選択して、バッチ テスト結果の画像を保存します。ユーザーが終了ボタン (システムの右下隅にあるボタン、詳細については上の凡例を参照) をクリックすると、システムは現在の検出タスクを終了し、インターフェイスを更新し、すべての出力情報をクリアします。具体的な動作例を下図に示します。
ここに画像の説明を挿入します

カメラの検出、表示、エクスポート

ユーザーは、[カメラ オン] ボタンをクリックしてカメラ デバイスを起動できます (デフォルトでは、ローカル デバイスの最初のカメラが起動します)。次に、ユーザーは「検出」ボタン (システムの右下隅にあるボタン、詳細については上の凡例を参照) をクリックするだけで、システムが自動的にカメラ ターゲットの検出タスクを完了します。検出プロセス中、システムは「検出時間」列に所要時間を表示し、「ターゲット数量」列に検出されたターゲットの数を表示します。ユーザーは、ドロップダウン ボックスから検出されたターゲットを選択し、対応する位置情報 (つまり、左上隅の x 座標 xmin、左上隅の y 座標 ymin、左下隅の x 座標 xmax、および左下隅の y 座標 ymax) ラベル値。
カメラ検出結果を保存したい場合は、「カメラエクスポート」ボタンをクリックし、ポップアップダイアログボックスに保存ファイル名とサフィックス(22.mp4など)を入力してカメラ検出結果を保存します。ビデオ。ユーザーが「終了」ボタン (システムの右下隅にあるボタン、詳細については上記の凡例を参照) をクリックすると、システムは現在のカメラ検出タスクを終了し、インターフェイスを更新し、すべての出力情報をクリアします。つまり、このシステムはシンプルで使いやすいインターフェイスをユーザーに提供し、カメラ検査タスクを迅速に完了し、検査結果を簡単に表示およびエクスポートできるようにします。
ここに画像の説明を挿入します

データセットの紹介

このシステムで使用されるフェイス マスク データ セットは、顔とマスクの 2 つのカテゴリで手動でラベル付けされており、データ セットには合計 7952 枚の画像が含まれています。このデータセットのカテゴリはすべて、回転数が多く、照明条件が異なるため、より堅牢な検出モデルをトレーニングするのに役立ちます。この記事の実験でのフェイス マスクの検出および認識データ セットには、トレーニング セットに 6612 枚の画像、検証セットに 1340 枚の画像が含まれています。選択されたデータの一部とサンプル データ セットの一部を下の図に示します。

キーコード解析

このシステムは、PyTorch を使用してターゲット検出アルゴリズムを実装し、YOLOv7 アルゴリズムに基づいてターゲット検出を実行します。トレーニング フェーズでは、事前トレーニングされたモデルをトレーニングの初期モデルとして使用し、複数回の反復を通じてネットワーク パラメーターを最適化して、より優れた検出パフォーマンスを実現しました。トレーニング プロセス中に、学習率の減衰やデータ強化などの手法を採用して、モデルの汎化能力と堅牢性を強化しました。モデルのパフォーマンスをより適切に評価するために、トレーニング セットと検証セットに対して広範な実験を実施しました。学習率やバッチサイズなどのハイパーパラメータを調整することで、最終的にこのタスクに適したパラメータ設定を見つけました。同時に、モデルの汎化能力を向上させるために、ランダムな回転、スケーリング、トリミング、色変換などのデータ拡張手法も使用して、過剰適合のリスクを軽減しながらデータセットを拡張します。
テスト段階では、トレーニングされたモデルを使用して新しい画像とビデオを検出しました。閾値を設定することで、その閾値よりも信頼度が低い検出枠が除外され、最終的に検出結果が得られます。同時に、その後の分析や応用のために、検出結果を画像またはビデオ形式で保存することもできます。このシステムは YOLOv7 アルゴリズムに基づいており、PyTorch を使用して実装されています。コードで使用される主なライブラリには、PyTorch、NumPy、OpenCV、Pyside6 などが含まれます。このシステムに実装されているいくつかのキーコードを次の図に示します。
ここに画像の説明を挿入します
ここに画像の説明を挿入します

Pyside6 インターフェース設計

PySide6 は、無料の Python クロスプラットフォーム GUI ライブラリであり、Python のバインディング ライブラリであり、クロスプラットフォーム GUI アプリケーションの開発に使用されます。PySide6 は、Qt5 および PyQt5 ライブラリに基づく次世代の Python クロスプラットフォーム GUI ライブラリであり、開発者にクロスプラットフォーム ユーザー インターフェイスを構築するための強力なツールセットを提供します。PySide6 の主な目標は、パフォーマンスを向上させ、開発者の作業を簡素化し、より良いユーザー エクスペリエンスを提供することです。PySide6 の主な機能は次のとおりです。 
クロスプラットフォームのサポート: PySide6 は Windows、MacOS、Linux などの複数のプラットフォームをサポートしており、クロスプラットフォームの GUI アプリケーションを簡単に開発できます。
高いパフォーマンス: PySide6 は Qt5 と PyQt5 ライブラリの最新テクノロジーを採用し、開発者に高いパフォーマンスを提供します。
使いやすさ: PySide6 は豊富な API とツールを提供し、開発者は過剰なコーディングを行わずに GUI アプリケーションを迅速に開発できます。
拡張性: PySide6 はさまざまな GUI コンポーネントとコントロールをサポートしているため、アプリケーションのユーザー インターフェイスの拡張とカスタマイズが簡単になります。
コミュニティ サポート: PySide6 には、開発者がすぐに使い始めるのに役立つ豊富なドキュメントとサンプル コードを提供する活発なコミュニティがあります。

全体として、PySide6 は強力な Python クロスプラットフォーム GUI ライブラリであり、クロスプラットフォーム ユーザー インターフェイスを構築するためのシンプルで使いやすいツールセットを開発者に提供します。PySide6 のパフォーマンス、スケーラビリティ、コミュニティ サポートにより、PySide6 は開発者にとって優れたライブラリとなります。

実験結果と分析

実験結果と分析セクションでは、適合率や再現率などの指標を使用してモデルのパフォーマンスを評価し、損失曲線や PR 曲線を通じてトレーニング プロセスを分析します。トレーニング フェーズでは、YOLOv7 アルゴリズムを使用して、合計 300 エポックのデータ セットをトレーニングしました。以下の図からわかるように、トレーニング回数が増加するにつれて、モデルのトレーニング損失と検証損失が徐々に減少し、モデルがより正確な特徴を学習し続けていることがわかります。トレーニング後、モデルを使用してデータセットの検証セットを評価し、次の結果が得られました。
ここに画像の説明を挿入します

以下の図は、検証セットで学習させた YOLOv7 モデルの PR 曲線を示しており、図からわかるように、このモデルは高い再現率と精度を実現し、全体的なパフォーマンスが良好であることがわかります。
ここに画像の説明を挿入します

要約すると、このブログ投稿でトレーニングされた YOLOv7 モデルは、データセット上で良好にパフォーマンスし、高い検出精度と堅牢性を備えており、実際のシナリオに適用できます。さらに、このブロガーはシステム全体の詳細なテストを実施し、最終的にスムーズで高精度のターゲット検出システム インターフェイスを開発しました。これは、このブログ投稿のデモ部分で示されています。完全な UI インターフェイス、テスト画像とビデオ、コード ファイル、などはすべてパッケージ化されてアップロードされています。興味のある友達は私のプライベートメッセージをフォローしてダウンロードリンクを取得してください。さらに、このブログ記事の PDF やその他のターゲット検出および認識システムについては、著者の WeChat パブリック アカウント BestSongC にご注目ください (現在、YOLOv5 アルゴリズムおよび YOLOv8 アルゴリズムに基づいて開発されたシステム インターフェイスがリリースされています。ターゲット検出アルゴリズム改良シリーズ)。

深層学習に基づく他のターゲット検出システムには、トマト、犬猫、ヤギ、野生のターゲット、タバコの吸い殻、QR コード、ヘルメット、交通警察、野生動物、野煙、人間の転倒認識、赤外線歩行者、家禽豚、リンゴ、ブルドーザーなどがあります。 , ミツバチ、電話、ハト、サッカー、牛、人間用フェイスマスク、安全ベスト、煙感知システムなどを必要としている友達が私をフォローして、ブロガーの他のビデオからダウンロードリンクを取得します。

完全なプロジェクト ディレクトリは次のとおりです。
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/sc1434404661/article/details/135118619