ターゲット検出の詳細な理解YOLOv1

参照:

https://blog.csdn.net/c20081052/article/details/80236015

紙のダウンロード:http: 
//arxiv.org/abs/1506.02640ダークネットバージョンのコードダウンロード:https//github.com/pjreddie/darknet

tensorflowバージョンのコードダウンロード:https://github.com/hizhangp/yolo_tensorflow

ソースコード分析は参照できます:https://zhuanlan.zhihu.com/p/25053311

YOLOv1は、RCNN、fast-RCNN、faster-RCNNに続くrbg(Ross Girshick)のもう1つの傑作であり、非常に面白い名前が付いています:YOLO(You Only Look Once)。YOLOV1は、元の画像の入力からオブジェクトの位置とカテゴリの出力まで、単一のエンドツーエンドネットワークに基づいて、回帰問題としてオブジェクトの検出を解決します。現在のバージョンにはいくつかの欠陥がありますが、速度の問題である現在のDeepLearningベースの検出の主要な問題点を解決します。拡張バージョンのGPUは45fpsを実行でき、簡易バージョンのGPUは155fpsを実行できます。

YOLOの主な機能は次のとおりです。

  • 高速で、リアルタイムの要件を満たすことができます。TitanXのGPUでは毎秒45フレームに達する可能性があります。
  • 画像全体をコンテキスト情報として使用すると、バックグラウンドエラー(背景をオブジェクトと間違える)が少なくなります。
  • 強力な汎化能力。

1.YOLOv1のコアアイデア 

  •  YOLOの核となるアイデアは、全体像をネットワークの入力として使用し、出力レイヤーでバウンディングボックスの位置とバウンディングボックスが属するカテゴリに直接戻ることです。
  • YOLOは、オブジェクトの検出を回帰問題として解決します。入力画像が推論(推論)を受けた後、画像内のすべてのオブジェクトの位置、それらのカテゴリ、および対応する信頼確率を取得できます。また、rcnn / fast rcnn / faster rcnnは、検出結果を2つの部分に分割して解決します。オブジェクトカテゴリ(分類問題)とオブジェクト位置はバウンディングボックス(回帰問題)です。

第二に、YOLOv1のネットワーク構造

YOLOv1検出ネットワークには、24の畳み込みレイヤー(特徴の抽出に使用)と2つの完全に接続されたレイヤー(画像の位置とクラスの信頼性の予測に使用)が含まれ、多数の1x1畳み込みを使用して前のレイヤーを減らします次のレイヤーのフィーチャスペースへのレイヤー。また、この論文では、著者はfast-YOLOのアーキテクチャ、つまり9つの畳み込み層と2つの完全に接続された層についても説明しました。titan x GPUを使用すると、高速YOLOは155fpsの検出速度を達成できますが、mAP値もYOLOの63.4%から52.7%に低下しましたが、それでも以前のリアルタイムオブジェクト検出方法(DPM)のmAP値よりはるかに高くなっています。 

  •  YOLOv1は、画像をSxSグリッドセルに分割します。オブジェクトの中心がこのグリッドにある場合、このグリッドはオブジェクトの予測を担当します。下の図に示すように、図のオブジェクトドッグの中心点(赤い原点)は5行2列目のグリッドに分類されるため、このグリッドは画像内のオブジェクトドッグを予測する役割を果たします。

     
  •  各グリッドはBバウンディングボックスを予測する必要があります。各バウンディングボックスには、x、y、w、h、信頼度の5つのデータが含まれています。ここで、x、yは、現在のグリッドによって予測されたオブジェクトの境界ボックスの中心位置の座標を指します。w、hはバウンディングボックスの幅と高さです(注:トレーニング中、wとhの値は画像の幅と高さを使用して[0,1]間隔に正規化されます; x、yはバウンディングボックスの中心の相対位置です現在のグリッド位置からのオフセット値であり、[0,1]に正規化されます。同時に、信頼値を予測する必要があります。この信頼度は、予測されたボックスにオブジェクトが含まれているという信頼性と、ボックスが予測される精度に関する二重の情報を表します。値は次のように計算されます。 

      その中で、オブジェクトがグリッドセルにある場合、最初の項目は1であり、それ以外の場合は0です。第2項は、予測された境界ボックスと実際のグラウンドトゥルースの間のIoU値です。 

  • 各グリッドは、カテゴリCとして示される情報のカテゴリも予測する必要があります。次に、画像がSxSグリッドに分割され、各グリッドはBの境界ボックスを予測し、Cのカテゴリも予測する必要があるため、出力は次のようになります。 S x S x(5 * B + C)のテンソル。この論文では、著者はS = 7、B = 2、C = 20を選択したため、出力次元は7 * 7 *(20 + 2 * 5)= 1470であり、これはネットワークコードのfc26の理由も説明しています。チャネルは1470次元です。
    注:クラス情報は各グリッド用であり、信頼度情報は各境界ボックス用です。

  • テストでは、各グリッドによって予測されたクラス情報とバウンディングボックスによって予測された信頼情報を乗算して、各バウンディングボックスのクラス固有の信頼スコアを取得します。

 方程式の左側の最初の項は、各グリッドによって予測されたカテゴリ情報であり、2番目と3番目の項は、各境界ボックスによって予測された信頼度です。この製品は、予測されたボックスが特定のカテゴリに属する​​確率をエンコードし、ボックスの精度に関する情報も持っています。各ボックスのクラス固有の信頼スコアを取得した後、しきい値を設定し、スコアの低いボックスを除外し、予約済みのボックスに対してNMS処理を実行して、最終的な検出結果を取得します。

第三に、YOLOv1の実装の詳細

  1. 各グリッドには30のディメンションがあります。これらの30のディメンションのうち、8つのディメンションは回帰ボックスの座標、2つのディメンションはボックスの信頼度、20のディメンションはカテゴリです。その中で、x、yの座標は、対応するグリッドのオフセットで0-1に正規化され、w、hは、画像の幅と高さで0-1に正規化されます。

448の写真は、グーグルの始まりのアイデアの後に、いくつかの畳み込みの層で追加されています(より良い効果があります)。上の図に示すように、オブジェクトの中心は赤いグリッドにあるため、Pr = 1です。それで、なぜ著者はこの場所の信頼にPrを追加したのですか?その理由は、後で条件付き確率計算が必要になるためです。
yoloの論文で、著者は、予測はwとhではなく、wの2乗とhの2乗であると述べています。
上記の(x、y、w、h)パラメータは次のように説明されます:
(x、y)座標は、グリッドセルの境界に対するボックスの中心を表します。
(w、h)幅と高さは、画像全体。
ここでは、インターネット上で同じ説明があり、お互いに苦しんでいますが、この場所はより理解しにくいです、bboxによって予測されたxywhの4つの値の意味について詳しく説明します:
xyはbboxの中心点を表しますセルの左上隅のオフセット値。幅と高さは、画像全体の幅と高さに対して正規化されています。オフセットの計算方法は次のとおりです。

この式の後、xywhの値は0-1の間に正規化されます。これにより、収束が難しくなることはありません。
このyolov1にはアンカーの概念がないため、トレーニング中にアンカーの初期化は行われません。ネットワークの重みのみを初期化する必要があり、この重みは7 * 7 * 30の結果を出力し、内部の値はxywhです。値。 

  2.損失関数の設計

     実装において最も重要なことは、これら3つの側面のバランスが取れるように損失関数をどのように設計するかです。著者はこれを行うために単純かつ無礼に二乗和誤差損失を使用します。このアプローチには次の問題があります 
          。1つは、8次元のローカリゼーションエラーと20次元の分類エラーが等しく重要であることは明らかに不合理です 
          。2つ目は、グリッド内にオブジェクトがない場合(画像内のグリッドなど)です。多くの場合)、これらのグリッド内のボックスの信頼度は0にプッシュされます。オブジェクトのあるグリッドが少ない場合と比較して、このアプローチは圧倒的であり、ネットワークの不安定性や発散さえ引き起こします。 
     解決:

  • 8次元座標予測にもっと注意を払い、これらの損失に大きな損失重みを与えます。これは、パスカルVOCトレーニングで5として記録されます。
  • オブジェクトのないボックスの信頼損失には、小さな損失ウェイトが割り当てられます。これは、パスカルVOCトレーニングで0.5として記録されます。
  • オブジェクトのあるボックスの信頼損失とカテゴリの損失の損失重みは通常1に設定されます。
  • グリッドは複数のバウンディングボックスを予測します。トレーニング中、各オブジェクト(グラウンドトゥルーボックス)にバウンディングボックスが1つ(1つのオブジェクトと1つのbbox)しかないことを期待します。具体的な方法は、グラウンドトゥルーボックス(オブジェクト)のIOUが最大のバウンディングボックスが、グラウンドトゥルーボックス(オブジェクト)の予測を担当することです。このアプローチは、バウンディングボックス予測子の特殊化と呼ばれます。各予測子は、特定の(サイズ、アスペクト比、またはオブジェクトのクラス化された)グラウンドトゥルーボックスに対してより適切に予測します。
  • 異なるサイズのbboxの予測では、大きなbboxの予測と比較して、小さなボックスの予測はもう少し耐え難いものです。同じオフセット損失は、二乗和誤差損失でも同じです。この問題を軽減するために、著者はよりトリッキーな方法を使用しました。これは、元の高さと幅ではなく、ボックスの幅と高さの平方根を取ることです。下の図に示すように、小さいbboxの水平軸の値は小さく、オフセットが発生すると、y軸の損失(下の図の緑)は大きいボックスの損失(下の図の赤)よりも大きくなります。

       異なるサイズのボックスの予測では、大きなボックスの予測と比較して、小さなボックスの予測は間違いなく耐え難いものです。同じオフセット損失は、二乗和誤差損失でも同じです。この問題を軽減するために、著者は、元の高さと幅の代わりにボックスの幅と高さの平方根を取るというトリッキーな方法を使用しました。下図を参照するとわかりやすいですが、小箱の横軸の値が小さいため、オフセットが発生すると、大箱よりもy軸への応答が大きくなります。  

         グリッドは複数のボックスを予測します。各ボックス予測子がオブジェクトの予測を具体的に担当することが期待されます。具体的な方法は、現在予測されているボックスとグラウンドトゥルースボックスのどちらのIoUが大きいかを確認することです。このアプローチは、ボックス予測子の特殊化と呼ばれます。

         最終的な損失関数は次のとおりです。

 この損失関数では: 

  • グリッド内にオブジェクトがある場合にのみ、分類エラーは罰せられます。
  • ボックス予測子がグラウンドトゥルースボックスを担当する場合にのみ、ボックスの座標エラーが罰せられます。どのグラウンドトゥルースボックスが責任を負うかは、その予測値とグラウンドトゥルースボックスのIoUがそのセルにあるかどうかによって異なります。すべてのボックスの中で最大。

 

 

 4、YOLOv1のトレーニングとテスト

1.トレーニングフェーズ

 

  • 事前トレーニング分類ネットワーク:ImageNet 1000クラスの競合データセットで分類ネットワークを事前トレーニングします。このネットワークは、図3の最初の20ロールマシンネットワーク+平均プーリングレイヤー+完全接続レイヤーです(現時点では、ネットワーク入力は224 * 224です)。
  • 検出ネットワークのトレーニング:モデルを変換して検出タスクを実行します。「畳み込みフィーチャマップ上のオブジェクト検出ネットワーク」では、事前トレーニングネットワークに畳み込みレイヤーとフルリンクレイヤーを追加すると、パフォーマンスが向上する可能性があると述べています。それらの例に基づいて、4つの畳み込み層と2つの完全にリンクされた層を追加し、重みをランダムに初期化します。検出にはきめ細かい視覚情報が必要なため、ネットワーク入力も224 * 224から448 * 448に変更されます。図3を参照してください。
  • 画像は7x7のグリッドセルに分割されます。オブジェクトの中心はこのグリッドに含まれます。このグリッドは、オブジェクトの予測を担当します。

  • 最後のレイヤーの出力は(7 * 7)* 30次元です。1 * 1 * 30の各次元は、元の画像の7 * 7セルの1つに対応し、1 * 1 * 30にはカテゴリ予測とbbox座標予測が含まれます。一般に、グリッドがカテゴリ情報を担当し、バウンディングボックスが主に座標情報を担当します(カテゴリ情報を部分的に担当します。信頼性もカテゴリ情報と見なされます)
  • 各グリッド(1 * 1 * 30の寸法は元の画像のセルに対応)は、2つの境界ボックス(図の黄色の実線のボックス)の座標(x、y、w、h)を予測する必要があります。ここで:中心座標x 、Yは、対応するグリッドに対して0-1に正規化され、w、hは、画像の幅と高さで0-1に正規化されます。独自の位置に戻ることに加えて、各境界ボックスは信頼値も予測する必要があります。この信頼度は、予測されたボックスにオブジェクトが含まれているという信頼度と、ボックスの正確性に関する2つの情報を表します。

その中で、オブジェクトがグリッドセルにある場合、最初の項目は1であり、それ以外の場合は0です。第2項は、予測された境界ボックスと実際のグラウンドトゥルースの間のIoU値です。 

 

  • 各グリッドはカテゴリ情報も予測します。このペーパーには20のカテゴリがあります。7x7グリッドの場合、各グリッドは2つの境界ボックスと20のカテゴリ確率を予測する必要があり、出力は7x7x(5x2 + 20)です。(一般式:SxSグリッド、各グリッドはBバウンディングボックスとCカテゴリを予測する必要があります。出力はS x S x(5 * B + C)のテンソルです。注:クラス情報はそれぞれのものです。グリッドごとに、信頼性情報は境界ボックスごとにあります)

 2.テストフェーズ

テストでは、各グリッドによって予測されたクラス情報を乗算して、各境界ボックスのクラス固有の信頼スコアを取得します。

方程式の左側の最初の項は、各グリッドによって予測されたカテゴリ情報であり、2番目と3番目の項は、各境界ボックスによって予測された信頼度です。この製品は、予測されたボックスが特定のカテゴリに属する​​確率をエンコードし、ボックスの精度に関する情報も持っています。

  •  各グリッドの各bboxに対して同じ操作を実行します:7x7x2 = 98 bbox(各bboxには対応するクラス情報と座標情報の両方があります)

  • 各bboxのクラス固有の信頼スコアを取得した後、しきい値を設定し、スコアの低いボックスを除外し、予約済みのボックスに対してNMS処理を実行して、最終的な検出結果を取得します。

  •  バウンディングボックス、信頼度、およびクラス確率を取得した後、非最大抑制アルゴリズムを使用してターゲットボックスを保持します。

 5、YOLOv1のデメリット

  • YOLOは、互いに非常に接近しているオブジェクトや小さなグループの検出には適していません。これは、グリッド内で予測されるボックスが2つだけであり、それらが1つのカテゴリにのみ属しているためです。

  • テスト画像では、同じタイプのオブジェクトやその他の状況の新しい異常なアスペクト比では、一般化能力が弱くなります。

  • 損失機能のため、位置誤差が検出効果に影響を与える主な理由です。特に大小の物の取り扱いを強化する必要があります。

おすすめ

転載: blog.csdn.net/qq_40716944/article/details/104908692