yolov8 についてのいくつかの理解

1 はじめに

YOLOv8 は、2023 年 1 月 10 日に Ultralytics によってオープンソース化された YOLOv5 の次のメジャー アップデート バージョンです。これは、最新の SOTA テクノロジーを提供する、強力かつ柔軟なターゲット検出および画像セグメンテーション ツールです。
ここに画像の説明を挿入します
Github: yolov8

2. 工夫のポイントと取り組み

  1. 新しいSOTAモデルが提供されます。さまざまな展開プラットフォームやアプリケーション シナリオのニーズを満たすために、スケーリング係数に基づいてさまざまなスケール N/S/M/L/X のモデルも提供されます。
  2. C2F モジュールと SPPF モジュールがネットワーク構造に導入され、モデルの推論速度のバランスをとりながら、ネットワーク特徴抽出機能とモデルのパフォーマンスを向上させるために、さまざまなスケールのモデルが注意深く微調整されました。
  3. アンカー ベースの代わりにアンカー フリーを使用して、ネットワーク出力ヘッドを分離し、カテゴリ予測とターゲット フレーム回帰を分離し、信頼性ブランチを削除します。
  4. TaskAlignedAssigner の動的ポジティブ サンプル割り当て戦略を使用して、サンプル生成の品質を向上させます
  5. ターゲット ボックス回帰には分布焦点損失が導入されています。

3. ネットワーク構造

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

3.1 バックボーン

3.1.1 C2F

ネットワーク構造を最適化する方法の 1 つは、基本コンポーネントを置き換えることです。

  • YOLOv5 の C3 モジュールと YOLOv7 の ELAN モジュールを参照して設計された YOLOv8 は、軽量性を確保しながら、より多くのブランチクロスレイヤー接続を導入することで、より豊富な勾配フロー情報を取得できます。
  • YOLOv7 の ELAN モジュールの設計と比較すると、C2F モジュールは入出力チャネルで追加の作業を行わず、ある程度、ShuffleNet の設計ガイドラインの一部に準拠していません。最速の畳み込み推論速度を達成するために、入力チャンネルは出力チャンネルと一致している必要があります。
  • C2F モジュールでの分割などの操作は、以前ほど特定のハードウェア展開に適していません。
    ここに画像の説明を挿入します

3.1.2 構造の微調整

チャネルの数とモデルの深さは、さまざまなスケールのモデルに合わせて調整されます。これは、モデル構造の慎重な微調整です。すべてのモデルにパラメータのセットを無意味に適用する必要はなくなりました。精度と推論モデルの速度を総合的に考慮します。
ここに画像の説明を挿入します

  • Yolov5 の C3 モジュールのスタックは 3/6/9/3 の構成に従いますが、YOLOv8 では、C2F の構成は 3/6/6/3 の構成となり、モデルを圧縮するために 9 が 6 に減らされます。規模
  • より軽い YOLOv8-N および YOLOv8-S の場合、基本チャネル番号は 128->256->512->1024 の変化パターンに従います。つまり、それぞれの幅パラメーターが乗算されます。ただし、大きい M/L/X では、最後の 1024 がそれぞれ 768、512、512 となり、上図の赤枠に示すように、C5 スケールのチャンネル数が変化しています。これは、r と略されるパラメータ比を追加することに相当し、基本チャネルの数は 512 です。YOLOv8-N から YOLOv8-X まで、幅 (w)、深さ (d)、および YOLOv8-X の 3 つのグループの調整可能なパラメータがあります。比率®:
    ここに画像の説明を挿入します
  • この人為的なパラメータ調整の目的は、他のアルゴリズムに比べて計算量を抑えながらモデルの精度を向上させ、SOTA効果を実現することですが、この強制的な調整方法には人為的な削り跡や変更の痕跡が多すぎます。ネットワーク構造。調整はそれほど「エレガント」ではありません。

3.1.2 SPPF

SPPと比較して、単純な並列最大プーリングがシリアル+パラレル方式に変更されます。比較は以下の通り(左がSPP、右がSPPF)
ここに画像の説明を挿入します

3.2 ネック

NECK 部分は基本的に yolov5 の構造と同じですが、主に 2 つの違いがあります。

  • C3 モジュールを C2F モジュールに置き換え
  • アップサンプリング前の次元削減に使用される 1×1 畳み込みは削除されます。
    ここに画像の説明を挿入します

3.3 ヘッド

  • Anchor_base は Anchor_free に調整されます
    • 私は個人的に、アンカー ボックスがある程度先験的な役割を果たすことができると信じていますが、そのサイズは一般にデータ セットの統計分析に基づいて取得され、データ セット自体の分布にある程度依存します。
    • 同時に、アンカーの導入によりパラメータが追加されますが、全体として、anchor_free は比較的シンプルで明確です。
  • 予測結果を分離するには、yolox 操作を参照してください。分岐予測の分類と位置決めを分離します。
  • 信頼度の分岐が削除されました
  • 回帰の内容はltrbの4つの値(一致したアンカーポイントからの距離値)で、ここでのregmaxについては後述します。
    ここに画像の説明を挿入します
  • デカップリング ヘッドのカテゴリ ブランチと回帰ブランチのチャネル数は等しくない場合があることに注意してください。YOLOv8 では、これらは 2 つの異なる機能を表しており、異なるべきであると考えられます。したがって、カテゴリ ブランチの場合、YOLOv8 はチャネル数をccls = max ( c 0 3 , NC ) c_{cls} = max(c_0^3,N_C)として設定します。cクラス_ _=マックスc _03NC)回帰分岐のチャネル数はcreg = max ( 16 , c 0 3 / 4 , 4 ∗ regmax ) c_{reg} = max(16,c_0^3/4,4*regmax) に設定されます。c規則_=最大( 16 , _c03/4 4re g max )ココ データ セット (カテゴリ 80) を例にとると、最初の層のデカップリング ヘッドのチャネル数は次のように構成されます。
    ここに画像の説明を挿入します

4. 陽性サンプルのマッチング戦略

4.1 静的割り当て戦略と動的割り当て戦略

  • ターゲット検出では、ポジティブ サンプル割り当て戦略とネガティブ サンプル割り当て戦略がモデル トレーニングの精度において重要な要素です。実際のアプリケーションでは、静的割り当て戦略と動的割り当て戦略が 2 つの一般的なポジティブ サンプル割り当て戦略とネガティブ サンプル割り当て戦略です。
  • 静的割り当て戦略では、通常、iou、アスペクト比など、いくつかの固定しきい値パラメータが設定されます。割り当て戦略はトレーニング前に設定されており、ネットワークのトレーニング中に調整されることはありません。これらのハイパーパラメーターと割り当て戦略は通常、データ セットの統計結果と実際の経験に基づいています。
  • 動的割り当て戦略によって生成されたポジティブ サンプルとネガティブ サンプルは、多くの場合、モデルのトレーニングに関連付けられます。トレーニングが進行するにつれて、モデルの機能が徐々に向上し、モデルは高品質のポジティブ サンプルにさらに集中できるようになります。全体として、動的割り当て戦略はトレーニング プロセス中に調整でき、さまざまなデータ セットやシナリオにより適切に適用できます。
  • トレーニングの初期段階では、モデルの能力が弱く、生成された正のサンプルと負のサンプルには、ネットワークの学習と収束に役立たないいくつかの問題が発生する可能性があります。したがって、実際のトレーニングプロセスでは、初期段階では静的割り当て戦略を使用し、中期以降の段階では動的割り当て戦略を使用することができ、また、トレーニングの事前スクリーニングに静的割り当て戦略を使用することもできます。サンプルを抽出し、動的割り当て戦略を使用して精密なスクリーニングを行い、肯定的な結果と否定的な結果を生成します。

4.2 TaskAlignedAssigner

ポジティブおよびネガティブのサンプル割り当て戦略は、ターゲット検出の分野における一般的な最適化方向です。典型的な例には、YOLOX の simOTA、TOOD の TaskAlignedAssigner および RTMDet DynamicSoftLabelAssigner が含まれます。これらのアサイナーのほとんどは動的割り当て戦略ですが、YOLOv5 は依然として静的割り当て戦略を使用しています。動的割り当て戦略の優秀性を考慮して、YOLOv8 アルゴリズムは TOOD の TaskAlignedAssigner を直接参照します。
TaskAlignedAssigner のマッチング戦略は次のように簡単に要約されます。分類スコアと回帰スコアによって重み付けされたスコアに基づいて陽性サンプルを選択します。
ここに画像の説明を挿入します

  • α、βは重みハイパーパラメータ、sはアノテーションカテゴリに対応する予測スコア、uは予測ボックスとgtボックスのiouであり、両者を乗算することで整合度(Task-Alignment)を測定できる。
  • 分類スコアと IoU 最適化を同時に制御して、タスク アライメントを実装できます。これにより、ネットワークが高品質のアンカーに動的に集中するように誘導できます。

具体的な実行手順

  • 予測ボックスと GT の分類スコアと IoU 重み付けに基づいて、関連する分類と回帰のアラインメント スコアalignment_metrics が取得されます。
  • アンカーの中心点が現在の GT ボックス内にあるかどうかを計算します。is_in_point: 現在の GT 内のアンカーのみが正のサンプルとして使用できます。
  • 条件 2 が満たされるという前提の下で、最大の topK がalignment_metrics に基づいて正のサンプルとして選択され、残りはトレーニング用の負のサンプルとして使用されます。
# 1. 基于分类分数与回归的 IoU 计算对齐分数 alignment_metrics
alignment_metrics = bbox_scores.pow(self.alpha) * overlaps.pow(
            self.beta)
# 2. 保证中心点在 GT 内部的 mask
is_in_gts = select_candidates_in_gts(priors, gt_bboxes)
# 3. 选取 TopK 大的对齐分数的样本
topk_metric = self.select_topk_candidates(
            alignment_metrics * is_in_gts,
            topk_mask=pad_bbox_flag.repeat([1, 1, self.topk]).bool())

5.損失関数

5.1 概要

  • 損失計算には、分類と回帰の 2 つの分岐が含まれます。前のオブジェクト性分岐はありません。
  • 分類ブランチでは引き続き BCE 損失が使用されます
  • 回帰分岐では、分布焦点損失 (DFL Reg_max はデフォルトで 16) + CIoU 損失を使用します。
  • 3 つの損失は、特定の重量比を使用して重み付けできます。

5.2 分布焦点損失

従来の座標点回帰法はディラック分布であり、ある点の確率は無限大、他の点の確率は0(確率密度は鋭い縦線)であり、ラベルが絶対的に正しいとみなされる方法です。 ; 実際のアプリケーションでは、スケートボードの左境界と象の右境界など、オクルージョンやぼやけたシーンのターゲット フレームの境界についてはある程度の不確実性があり、従来の回帰手法ではこれを解決できません。不確実な問題なので、この場合、境界での分布を学習する方が合理的ですが、
ここに画像の説明を挿入します
ここに画像の説明を挿入します
分布が恣意的すぎると、積分対象が無限の分布に対応する可能性があるため、ネットワーク学習の効率が高くない可能性があります。パターン。実際の分布は通常、ラベル付けされた位置からそれほど離れていないことを考慮すると、ネットワークがラベル y に最も近い左右の位置の確率を最適化して、ネットワークが隣接する領域の分布に迅速に焦点を当てることができるようにすることをお勧めします。合理的、つまり、ネットワークによって学習された分布は理論的には実際の浮動小数点座標に近く、左右の整数座標までの距離の重みは線形補間モードで取得されます。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
具体的な実装

  • このとき、ネットワークは4つの座標点の情報ではなく、ltrbの4つの値(一致したアンカーポイントの距離値)を返します。
  • 出力チャネルは 4 *regmax です。regmaxは、現在の特徴マップの下のアンカー ポイントからのターゲット境界の最大オフセットを表します。デフォルトは 16 です。
  • トレーニング ステージ: 左境界 left を例にとると、ラベルはy = (左 - 一致したアンカー中心点の x 座標) / 現在のダウンサンプリング倍数 y= (左 - 一致したアンカー中心点 x 座標) 形式の ltrb に変換されます。 /現在のダウンサンプリングの倍数y=(_ _ _chまたは中心点x座標一致) /現在のダウンサンプリング倍数
    • 計算結果が3.2とすると、左右の値はyi=3、y(i+1)=4となります。
  • 推論段階: まず、ネットワークによって出力された 16 個のグリッドに対してソフトマックス演算を実行し、それらを確率値に変換し、次に結果を積分し (離散変数の場合は累積和)、座標オフセットを取得し、最後にその倍数を乗算します。ダウンサンプリングのマッチングを追加し、到達したアンカーの中心点の座標
def distribution_focal_loss(pred, label):
    r"""
    参数:
        pred (torch.Tensor): 预测的bbox的分布(未经softmax)(N, n+1),
         n是y的最大值对应的下标,配置里是reg_max,具体见论文.
        label (torch.Tensor): anchor中心到gt bbox四条边的距离标签(N,).

    返回值:
        torch.Tensor: 损失张量 (N,).
    """
    #将label 划分到 dis_left 和 dis_right 两个整数之间
    dis_left = label.long()
    dis_right = dis_left + 1
    # label 与其右边界的差值
    weight_left = dis_right.float() - label
    # label 与其左边界的差值
    weight_right = label - dis_left.float()
    # 求交叉熵损失乘权重
    loss = F.cross_entropy(pred, dis_left, reduction='none') * weight_left \
        + F.cross_entropy(pred, dis_right, reduction='none') * weight_right
    return loss

理解すべきいくつかのポイント

  • DFL は、bbox の位置を一般的な分布としてモデル化することで、ネットワークがラベル付けされた位置に近い値に迅速に焦点を当て、それらの値を可能な限り可能性の高いものにできることを期待しています。
  • このアプローチは、より多くの情報と正確な推定値を提供します。さらに、ターゲット ボックスの不確実性の程度の指標も提供します (分布が急峻であればあるほど、証明はより確実になります。そうでない場合は、より確実性が低くなります)。
  • reg-max=16 の場合、出力は 16 個の位置の確率であり、各位置は、現在のダウンサンプリングされた特徴マップ上のターゲットの各エッジ距離と一致するアンカー中心点の偏差に対応します。したがって、最大偏差は 16 です。 *32 =512, この値は入力解像度の半分より大きい必要があります。そうでない場合は、reg-max を増やす必要があります。 - 分布
    焦点損失の詳細については、「一般化焦点損失」を参照してください。

6. まとめ

  • Yolov8 は、v5 チームのもう 1 つの傑作であり、ネットワーク構造、ポジティブ サンプル マッチング戦略、損失関数などの観点からアルゴリズムを最適化します。これは、yolo シリーズ アルゴリズムの最適化パスでもあります。
  • Yolov8 は現段階で新しい SOTA を実装しており、Yolov5 と比較すると全体的な最適化効果は非常に明白であり、これは v5 が徐々に歴史の舞台から退く可能性があることを意味しますが、Yolov7 と比較すると最適化効果はあまり明らかではありません。
  • Yolox と Yolov8 の一連のアップデートから判断すると、ターゲット検出の傾向は Anchor_free と Dynamic label assign の方向にあり、現在この 2 つの方向の研究が多く行われていますが、今後の品質があるかどうかにかかっています。 。

おすすめ

転載: blog.csdn.net/qq_44804542/article/details/130288940