opencv dnnモジュール例(21) yolov6のターゲット検出object_detection

1. YOLOv6 の概要

1.1. 概要

2023 年初頭、Meituan のビジュアル インテリジェンス部門は YOLOv6 バージョン 3.0 をリリースしました。これにより、ターゲット検出の総合的なパフォーマンスが再び最高レベルに達しました。 YOLOv6-N/S/M/L モデルへの一連の完全なアップグレードに加え、このアップデートでは高解像度の P6 モデルも発売されます。その中でも、YOLOv6-L6は検出精度と検出速度においてYOLOv7-E6Eを上回り、現在のリアルタイムターゲット検出リストにおいてSOTAを達成しています。

YOLOv6 Github ポータル:github.com/meituan/YOLOv6、技術レポート:YOLOv6 v3 。 0: 本格的なリロード

yolov6 最初のバージョンは 2022 年 6 月にリリースされ、現在はバージョン 4.0 に更新されています。
ここに画像の説明を挿入します
図 1 さまざまなサイズの YOLOv6 モデルと他の YOLO シリーズ フレームワークのパフォーマンス比較表

ここに画像の説明を挿入します

表 1 さまざまなサイズの YOLOv6 モデルと他の YOLO シリーズ フレームワークのパフォーマンス比較結果


注: YOLOv6 シリーズのモデルはすべて、事前トレーニングされたモデルや追加の検出データ セットを使用せずに 300 エポックのトレーニング後に取得されます。「‡」は自己蒸留アルゴリズムが使用されていることを示し、「*」は再評価用の指標を示します公式コードベースからリリースされたモデル。上記の速度インジケーターはすべて T4 TRT7.2 環境でテストされています。

1.2. 主要技術

1.2.0、ネットワーク構造

バックボーン:
ここに画像の説明を挿入します
RepVGG からインスピレーションを得て、著者は EfficientRep と呼ばれる効率的な再パラメータ化されたスケルトンを設計しました。小規模モデルの場合、図 3a) に示すように、スケルトンの主コンポーネントは Rep-Block であり、図 3b) に示すように、推論段階で RepBlock が RepConv に変換されます。

他の主流のアーキテクチャと比較して、著者らは、RepVGG スケルトンが小規模ネットワークにおいて同様の推論速度でより多くの特徴表現能力を備えていることを発見しました。ただし、パラメーターと計算コストが爆発的に増大するため、大規模モデルに拡張するのはより困難です。この場合、作成者は小規模ネットワークを構築するためのビルディング ブロックとして RepBlock を採用し、大規模なモデルの場合は、より効果的な CSP ブロック、つまり CSPStackRep Block を改良します。通常、3*3 畳み込みはハードウェア コンピューティング プラットフォーム上で最適化されるため、表現能力が向上するだけでなく、推論速度も向上します。

しかし、著者は、モデルを拡張するとパラメータと計算コストが指数関数的に増加することを発見しました。より良いバランスを得るために、図 3c) に示すように、作成者は CSPStackRep ブロックを改良しました。 CSPの利点であるCross Stage部分結合を吸収し、学習フェーズのRepVGGブロックと推論フェーズのRepConvで構成されます。

ここに画像の説明を挿入します
首:

実際には、マルチスケールの特徴の融合が物体検出の重要かつ効果的な部分であることが証明されています。著者は、YOLOV4 および V5 と一貫性のある PAN トポロジを採用しています。著者は、RepBlock を使用して首を強化し、Rep-PAN を形成します。

ヘッド:
YOLOV5 の検出ヘッドは結合された検出ヘッドであり、そのパラメータは分類と測位の間で共有されます。FCOS や YOLOX などの同等製品は、分離するために 2 つの 33 畳み込みを追加します。 2 つのブランチを使用してパフォーマンスを向上させます。

著者らは、より効率的なデカップリング ヘッドを構築するためにハイブリッド チャネル戦略を採用しました。著者は畳み込み 33 のみを使用しています。検出ヘッドの幅は骨格と首の幅の積で決まるため、さらなる操作軽減と推論速度の向上を実現しました。著者は結合ヘッドを簡略化して効率を高め、これを「Efficient Decoupled Head」と呼びました。


v3.0 アップデートは主に、Neck ネットワーク設計、トレーニング、および蒸留戦略を革新および最適化します。

  • より強力な表現能力を備えた再パラメータ化可能な双方向融合 PAN (RepBi-PAN) ネック ネットワークを設計しました。
  • 新しいアンカー支援トレーニング戦略を提案しました。
  • 小規模モデルのパフォーマンスを向上させるために、分離ロケーション蒸留戦略が提案されています。

1.2.1. 表現力を強化したRepBi-PAN Neckネットワーク

効果的なマルチスケール特徴融合ネットワークは、ターゲット検出の効果にとって特に重要です。特徴ピラミッド ネットワーク (FPN) は、トップダウン パスを使用してバックボーン ネットワークのさまざまな段階からの出力特徴を融合し、ターゲット位置の損失を補います。ネットワーク学習プロセス中の情報。一方向の情報フロー送信の制限を考慮して、PANet は FPN の上に追加のボトムアップ パスを追加します。 BiFPN は、さまざまな入力特徴に対して学習可能な重みを導入し、PAN を簡素化して、より優れたパフォーマンスとより高い効率を実現します。 PRB-FPN は、正確な位置特定のための双方向融合を備えた並列残差 FPN 構造を通じて高品質の特徴を維持します。

上記の研究に基づいて、この論文では、より強力な表現能力を備えた再パラメータ化可能な双方向融合 PAN (RepBi-PAN) ネック ネットワークを提案します。一般的に言えば、バックボーン ネットワークの浅いフィーチャには高解像度と豊富な空間情報があり、ターゲット検出における測位タスクに有益です。浅い特徴を集約するための一般的なアプローチは、P2 融合層と追加の検出ヘッドを FPN に追加することですが、これにより多くの場合、多額の計算コストが発生します。

精度と遅延の間のより良いトレードオフを達成するために、双方向連結 (BiC) モジュールは、トップダウンの伝送パスにボトムアップの情報フローを導入するように設計されており、浅い特徴をより効率的に処理できます。は、マルチスケール フィーチャの融合に参加し、融合されたフィーチャの表現力をさらに強化します。このモジュールは、より正確な位置信号を保持するのに役立ちます。これは、小さなオブジェクトの位置決めにとって非常に重要です。

さらに、機能拡張の最適化が SimSPPF モジュールの以前のバージョンで実行され、機能マップの表現機能が強化されました。 YOLOv7 で使用される SPPCSPC モジュールは検出精度を向上させることができますが、ネットワーク推論速度に大きな影響を与えることが判明しました。そこで私たちは設計を簡素化し、検出精度に大きな影響を与えることなく推論効率を大幅に向上させました。同時に、再パラメータ化のアイデアを導入し、それに応じてネック ネットワークのチャネル幅と深さを調整しました。最終的な RepBi-PAN ネットワーク構造を以下の図 2 に示します。
ここに画像の説明を挿入します
図 2 RepBi-PAN ネットワーク構造図

ここに画像の説明を挿入します
表2 BiCモジュールアブレーション実験結果

表 2 からわかるように、YOLOv6-S/L モデルでは、BiC モジュールが PAN ネットワークのトップダウン伝送路に導入された後のみ、検出精度が 0.6% 向上しましたが、推論速度への影響はありませんでした。 4% と 0.4% AP に留まります。さらに、ボトムアップの情報フローで通常の接続を BiC モジュールに置き換えようとしましたが、それ以上のプラスのゲインは得られなかったため、トップダウン パスでのみ BiC モジュールを適用しました。同時に、BiC モジュールにより小さなターゲットの検出精度に 1.8% AP の向上がもたらされることにも気づきました。

ここに画像の説明を挿入します
表 3 モデルの精度と速度に関するさまざまな SPP モジュールの比較結果

表 3 では、単純化された設計の SPPF、SPPCSPC、および CSPSPPF モジュールを含む、さまざまな SPP モジュールがモデルの精度と速度に与える影響について実験的な比較が行われています。さらに、基幹ネットワーク C3、C4、C5 の出力特徴の後に SimSPPF モジュールを使用して、特徴の集約表現を強化することも試みました。表では SimSPPF * 3 で表されています。実験結果から判断すると、SimSPPFモジュールを繰り返し使用しても計算量は増加しますが、それ以上の検出精度の向上は見込めません。

SimSPPF モジュールと比較すると、SPPCSPC モジュールの簡素化された設計により、YOLOv6-N/S モデルの AP はそれぞれ 1.6% と 0.3% 増加しますが、推論速度の FPS は約 10% 低下します。 SimSPPF モジュールを最適化された SimCSPSPPF モジュールに置き換えると、YOLOv6-N/S/M モデルでそれぞれ 1.1%/0.4%/0.1% の精度向上が達成され、SimSPPCSPC モジュールと比較して推論速度が大幅に向上しました。 . .したがって、精度と効率のトレードオフを高めるために、YOLOv6-N/S では SimCSPSPPF モジュールが採用され、YOLOv6-M/L では SimSPPF モジュールが採用されます。

1.2.2. 新しいアンカー支援トレーニング戦略

YOLOv6-N をベースラインとして使用し、アンカーベースのパラダイムとアンカーフリーのパラダイムの類似点と相違点について関連する実験と分析が実施されました。
ここに画像の説明を挿入します
YOLOv6-N はアンカーベースのパラダイムとアンカーフリーのパラダイムを使用し、それぞれアンカー -free トレーニング パラダイムを使用すると、モデルの全体的な mAP はほぼ近くなりますが、小規模、中規模、および大規模のターゲットにおけるアンカーベースのモデルの AP インデックスは高くなります。上記の実験から、アンカーなしのパラダイムと比較して、アンカーベースのモデルはさらにパフォーマンスが向上すると結論付けることができます。

同時に、YOLOv6 がラベル割り当てに TAL を使用する場合、そのモデル精度の安定性は ATSS 予熱が使用されるかどうかに密接に関係していることがわかりました。 ATSS 予熱を使用しない場合、同じパラメーター構成の YOLOv6-N が複数回トレーニングされ、モデルの精度は最大 35.9% mAP、最小 35.3% mAP に達します。同じモデルには 0.6% の差があります。地図。ただし、ATSS をウォームアップに使用した場合、最高のモデル精度は 35.7% mAP にしか達しません。実験結果から、ATSS の予熱プロセスは安定したモデルトレーニングの目的を達成するためにアンカーベースのプリセット情報を使用していると結論付けることができますが、ネットワークのピーク容量もある程度制限されるため、そうではありません。最も最適な方法、素晴らしい選択です。

上記の研究からインスピレーションを得て、私たちはアンカー支援トレーニング (AAT) に基づく戦略を提案しました。ネットワークトレーニングプロセスでは、アンカーベースとアンカーフリーの2つのトレーニングパラダイムが同時に結合され、ステージ全体のネットワークがマッピングおよび最適化され、最終的にアンカーの統合が実現され、アンカーのそれぞれの利点が実現されます。異なるアンカーネットワークを組み合わせることで、モデル検出の精度がさらに向上します。さらに、柔軟な構成のトレーニング戦略も提案されています。これは、トレーニング プロセス中に追加の補助ブランチのみを導入し、テスト プロセス中にはそれらを使用しません。最終的に、推論時間を増加させることなくネットワークの精度が向上し、痛みのない増加ポイント
ここに画像の説明を挿入します
AAT トレーニング戦略を使用したアブレーション実験の結果を以下の表 5 に示します。さまざまなサイズの YOLOv6 モデルで実験を行ったところ、AAT 戦略の採用により YOLOv6-S モデルでは 0.3%、YOLOv6-M/L モデルでは 0.5% の精度向上がそれぞれ達成されました。小型ターゲット検出における YOLOv6-N/S/M の精度指数が大幅に強化されていることは注目に値します。
ここに画像の説明を挿入します

1.2.3. 痛みのない DLD デカップリング位置決め蒸留戦略

分離検出タスクと蒸留タスクに基づく DLD (分離ロケーション蒸留) アルゴリズムは、ネットワークの各層の回帰ヘッドに追加の拡張回帰ブランチを追加します。トレーニング フェーズ中、このブランチは IoU 損失の計算にも参加します。 、そしてそれを最終損失に追加します。

ターゲット検出の蒸留タスクでは、LD は DFL ブランチを導入することでネットワーク内の位置情報を蒸留するという目的を達成します。これにより、ロジット ミミック手法が位置蒸留情報を使用できないことが補われます。ただし、DFL ブランチの追加は小規模モデルの速度に大きな影響を与え、YOLOv6-N の速度は 16.7% 低下し、YOLOv6-S の速度は 5.2% 低下しました。実際の産業用アプリケーションでは、小型モデルの速度要件が非常に高いことがよくあります。したがって、現在の蒸留戦略は工業的な実施には適していません。

この問題に対処するために、分離された検出タスクと蒸留タスクに基づいた DLD (分離位置蒸留) アルゴリズムを提案します。 DLD アルゴリズムは、ネットワークの各層の回帰ヘッドに追加の拡張回帰ブランチを追加し、トレーニング フェーズ中に、このブランチも IoU 損失の計算に参加し、最終的な損失に累積します。強化された回帰ブランチを追加することにより、ネットワークにさらに多くの制約を追加することができ、その結果、ネットワークがより包括的かつ詳細に最適化されます。さらに、DLD アルゴリズムは、強化回帰ブランチをトレーニングするときにブランチ蒸留学習戦略を導入します。
ここに画像の説明を挿入します

1.3. 概要

商用アプリケーションの観点から、オープンソースターゲット検出器YOLOについて、スケルトンモデルの構築から検出ヘッドのデカップリング動作、損失関数の選定から定量的な展開まで、徹底的な改良実験を実施しました。 、私たちは常にスピードと精度のバランスの取れた利点を維持してきました。 YOLOv6 はアンカーフリーの検出器です。

サードパーティの評価
YOLOv7 が広く報告され、「現時点で最速かつ最も強力な」物体検出器と呼ばれていたとき、最新バージョンの YOLOv6 はすでに推論速度と精度が向上していました。 . BalanceはYOLOv7を破りましたが、YOLOV6は物議を醸しました。

Meituan が製造する YOLO モデルは、他社の技術を「取り入れ」、V6 の落とし穴を埋める超「ステッチ モンスター」を作成します。速度と精度の点では利点があるものの、パラメータ量の比較が避けられると指摘する人もいます。ただし、商用アプリケーションの観点から、著者がパラメータや計算の比較よりも速度パフォーマンスに注意を払うことは理解できます。

2. テスト

テストにはモデル yolov6m.pt を使用しました。

2.1. 公式プロジェクトのテスト

yolov6/core/inferer.pyinfer()関数のコードを変更して、モデルを予熱し、時間を表示します

    for i in range(0,5): self.model(img)         # 增加
                
    t1 = time.time()
    pred_results = self.model(img)
    det = non_max_suppression(pred_results, conf_thres, iou_thres, classes, agnostic_nms, max_det=max_det)[0]
    t2 = time.time()

    print("img_src process time: ", t2-t1)       # 增加

テストは次のとおりです

>python tools\infer.py --weights=weights/yolov6m.pt --source=data/images/bus.jpg --yaml=data/coco.yaml --img-size 640 640 --device cpu

ここに画像の説明を挿入します

GPU に切り替えるコード --device 0 テスト結果
ここに画像の説明を挿入します

2.2. opencv dnn テスト

まず onnx モデルをエクスポートします。スクリプトは次のとおりです。

python deploy\ONNX\export_onnx.py --weights weights\yolov6m.pt --img 640 --batch 1 --simplify

ネットワーク出力結果は yolov5 および yolor と一致しているため (前のブログ コードを参照)、前のコード テストが再利用されます。Python スクリプトのデフォルトの前処理により、元の画像が 640*640 に調整されます。前のテスト画像を使用すると、認識信頼度は 100% ですが、これは少し法外です。

さらに、比例スケーリング調整を行わずbool letterBoxForSquare = false;、実際に建物のベランダにある自転車を認識したのですが、これがとんでもなく強いのです。

ここに画像の説明を挿入します

2.3. テスト統計

Python(CPU):393ms
Python(GPU):25ms

opencv dnn(CPU):350 ミリ秒
opencv dnn(GPU):35 ミリ秒

openvino(CPU):337 ミリ秒
onnxruntime(GPU):31 ミリ秒
TensorRT:15 ミリ秒

おすすめ

転載: blog.csdn.net/wanggao_1990/article/details/133269792