1.YOLOネットワーク構造の説明
ネットワーク構造は、主に次の3つの主要コンポーネントで構成されています。
1.バックボーン
さまざまな画像粒度で画像の特徴を集約して形成する畳み込みニューラルネットワーク
2.ネック
画像の特徴を組み合わせて組み合わせ、画像の特徴を予測レイヤーに渡す一連のネットワークレイヤー
3.頭
画像の特徴を予測し、境界ボックスを生成し、カテゴリを予測します
2. YOLOV3の紹介
yolov3の以前の検出システムは、分類器またはロケーターを再利用して検出タスクを実行します。モデルを画像の複数の場所と縮尺に適用します。スコアが高い領域は、テスト結果と見なすことができます。さらに、他のターゲット検出方法と比較して、yolov3は完全に異なる方法を使用します。
yolov3は、単一のニューラルネットワークを画像全体に適用します。ネットワークは画像を異なる領域に分割し、各領域の境界ボックスと確率を予測します。これらの境界ボックスは、予測された確率によって重み付けされます。分類器ベースのシステムに比べていくつかの利点があります。テスト中に画像全体を確認するため、予測では画像内のグローバル情報が使用されます。何千もの単一ターゲット画像を必要とするR-CNNとは異なり、単一のネットワーク評価を通じて予測を行います。これにより、YOLOv3は非常に高速になります。通常、R-CNNの1000倍、FastR-CNNの100倍の速度です。
3、YOLOV3ネットワーク構造
Yolov3の3つの基本コンポーネント
1. CBL: 3つの活性化関数Conv + Bn + Leaky_reluで構成される、Yolov3ネットワーク構造の最小コンポーネント。
2. Resユニット: Resnetネットワークの残りの構造から学習することで、ネットワークをより深く構築できます。
3. ResX:yolov3の大きなコンポーネントであるCBLとXの残差コンポーネントで構成されます。各Resモジュールの前にあるCBLはダウンサンプリングの役割を果たします。したがって、5つのResモジュールの後、取得される機能マップは608-> 304-> 152-> 76-> 38-> 19になります。
その他の基本操作:
- Concat:テンソルステッチは、たとえば2つのテンソル次元を拡張し
26*26*256
、26*26*512
2つのテンソルステッチは結果になります26*26*768
。Concatには、cfgファイルのルートと同じ機能があります。- add:テンソルの合計、テンソルの直接追加された次元は、たとえば
104*104*128
、展開されず104*104*128
、結果の追加はでした104*104*128
。追加には、cfgファイルのショートカットと同じ機能があります。
Yolov3のネットワーク構造の説明:
- 特徴利用部分では、yolo3はdarknet53を使用してターゲット検出のために複数の特徴層を抽出します。合計3つの特徴層が抽出されます。3つの特徴層はトランク部分darknet53の異なる位置にあります。これらは中間層にあります。中層と下層、下層。形状はそれぞれ(52,52,256)、(26,26,512)、(13,13,1024)です。
- これら3つの初期特徴層に対して5回の畳み込み処理を実行します。処理後、1つの部分を使用して特徴層に対応する予測結果を出力し、1つの部分を使用してデコンボリューションUmSampling2dを実行し、他の特徴層と組み合わせます。
- 出力層の形状は(13,13,75)、(26,26,75)、(52,52,75)であり、グラフはvocデータセットに基づいているため、最後の次元は75です。クラスは20タイプ、yolo3には各フィーチャレイヤーに3つのアプリオリボックスしかないため、最終的な次元は3x25です。cocoトレーニングセットを使用している場合、80のタイプがあり、最終的な次元は255 = 3x85で、3つです。フィーチャレイヤー形状は(13,13,255)、(26,26,255)、(52,52,255)です
Yolov3出力の問題:
- 9つのアンカーは、3つの出力テンソルによって均等に分割されます。大、中、小の3つのサイズに応じて独自のアンカーを選択してください。
- 各出力yは、それぞれのグリッドに3つの予測ボックスを出力します。これらの3つのボックスは、9を3で割ったものです。出力テンソルの次元の観点から、13x13x255。255= 3 *(5 + 80)。80は80のカテゴリを意味し、5は位置情報と信頼度を意味し、3は3つの予測が出力されることを意味します。
- ロジスティック回帰は、各アンカーで囲まれたコンテンツの客観性スコアをスコアリングするために使用されます。ターゲットスコアに従って、アンカープライアが予測のために選択され、すべてのアンカープライアが出力されるわけではありません。
4.予測結果のデコード
2番目のステップから、3つの特徴層の予測結果を取得できます。形状はそれぞれ(N、255,13,13)、(N、255,26,26)、(N、255,52,52)です。対応するデータ各画像は、13x13、26x26、および52x52のグリッド上の3つの予測ボックスの位置に分割されます。ただし、この予測結果は画像上の最終予測フレームの位置に対応していないため、完了するにはデコードする必要があります。
フィーチャレイヤーの予測結果は、3つの予測ボックスの位置に対応しています。最初に形状を変更します。結果は(N、3,85,13,13,3,85)、(N、3,85,26,26)です。 )、(N、3、85、52、52)。
次元の85には、4 + 1 + 80が含まれています。これらは、それぞれx_offset、y_offset、hとw、信頼度、および分類結果を表します。
yolo3固有のデコードプロセス:メッシュサイズで特徴付けられる最初のレイヤーが生成されるコードで416*416
、アクティブレイヤーの前の元のサイズ変更フレームで事前に設定します。ここで、ネットワーク予測からの最終結果のサイズyolov3中心を取得します。前のフレームの調整パラメータx_offsetとy_offset、および幅と高さの調整パラメータhとwを使用して、フィーチャレイヤーのサイズで前のフレームを調整し、各グリッドポイントを対応するx_offsetとy_offsetに追加します。調整された予測ブロックの前のフレームが中心であり、次に前のフレームとhを使用して、wバインディングは調整された前のフレームの長さと幅、つまりフレーム予測を計算し、高幅であるため、フィーチャレイヤー全体で取得できます。ボックスの予測位置、そして最後にアクティブレイヤー上の予測フレームの位置は416*416
、サイズの元の画像に再調整されて特徴付けられます。
もちろん、最終的な予測構造を取得した後、スコアのランク付けと非最大抑制スクリーニングが必要です。この部分は基本的にすべてのターゲット検出に共通の部分です。ただし、このプロジェクトは他のプロジェクトとは異なる方法で処理されます。各カテゴリを区別します。
- スコアがself.obj_thresholdより大きい各カテゴリのボックスとスコアを取り出します。
- 非最大抑制にはフレーム位置とスコアを使用します。
要約:アプリオリフレームをデコードするプロセスは、yolov3ネットワーク(3つの有効な特徴層)の予測結果を使用してアプリオリフレームを調整するプロセスです。調整後、予測フレームが取得されます。
元の画像に描画します
予測復号化により、元の画像上の予測フレームの位置を取得し、これらの予測フレームをフィルタリングします。これらのフィルタリングされたボックスを画像に直接描画して、結果を得ることができます。
五、YOLOV3の改良
1.マルチスケール予測(FPNのような)
各スケールは3つのボックスを予測しますが、アンカー設計法では引き続きクラスタリングを使用して9つのクラスター中心を取得し、サイズに応じて3つのスケールに均等に分割します。
- スケール1:基本ネットワークの後に畳み込み層をいくつか追加し、ボックス情報を出力します。
- スケール2:スケール1の最後から2番目のレイヤーの畳み込みレイヤーから(x2)をアップサンプリングし、それを最後の16x16特徴マップに追加し、スケール1よりも大きい複数の畳み込み後にボックス情報を出力します。
- スケール3:スケール2と同様に、32x32の特徴マップを使用
2.より優れた基本的な分類ネットワーク(ResNetなど)と分類子darknet-53
darknet53に変更されたバックボーンネットワーク、その重要な機能は、残余ネットワークの使用です。残余、残余畳み込みdarknet53は3*3
、畳み込みのステップ2、畳み込み、次にレイヤーを保存し、次に1*1
畳み込みと3*3
畳み込み、そしてこのレイヤーの結果として最終結果を追加すると、残差ネットワーク最適化の特性が簡単になり、かなりの深さを追加することで精度を向上させることができます。内部残余ブロックはジャンプ接続を使用します。これにより、ディープニューラルネットワークの深さが増すことによって引き起こされる勾配消失の問題が軽減されます。
darknet53の各畳み込み部分は、一意のDarknetConv2D構造を使用し、各畳み込み中にL2正則化を実行し、畳み込み後にBatchNormalizationとLeakyReLUを実行します。通常のReLUはすべての負の値をゼロに設定し、LeakyReLUはすべての負の値にゼロ以外の勾配を割り当てます。数学的には、次のように表現できます。
3.分類子-カテゴリ予測
YOLOv3は、Softmaxを使用して各ボックスを分類しません。2つの主な考慮事項があります。
(1)Softmaxを使用すると、各ボックスにカテゴリ(スコアが最も高いボックス)を割り当てることができます。OpenImagesデータセットの場合、ターゲットのカテゴリラベルが重複している可能性があるため、Softmaxはマルチラベル分類には適していません。
(2)Softmaxは、複数の独立したロジスティック分類器に置き換えることができ、正解率は低下しません。
分類損失は、バイナリクロスエントロピー損失を使用します。
6、トレーニングパート
1. predとは何ですか?
yolo3モデルの場合、ネットワークの最終出力は、3つの特徴レイヤーの各グリッドポイントに対応する予測ボックスとそのタイプです。つまり、3つの特徴レイヤーは、異なるサイズのグリッドに分割された画像に対応します。対応する位置、各グリッドポイントの前の3つのボックスの信頼度とタイプ。
出力層の形状は(13,13,75)、(26,26,75)、(52,52,75)であり、最後の次元はvocデータセットとそのクラスに基づいているため75です。は20種類で、Yolo3には各フィーチャレイヤーに3つのアプリオリボックスしかないため、最終的な寸法は3x25です。cocoトレーニングセットを使用している場合、80のクラスがあり、最終的な寸法は255 = 3x85の形状になります。 3つのフィーチャレイヤーは(13,13,255)、(26,26,255)、(52,52,255)です
注:現在のy_preはまだデコードされていません。デコード後、実際の画像の状況になります。
2.ターゲットは何ですか?
ターゲットは、実像の実フレームの状況です。最初の次元はbatch_size、2番目の次元は各画像の実際のフレームの数、3番目の次元は場所やタイプなどの実際のフレームの情報です。
3.損失計算プロセス
predとtargetを取得した後、比較のためにそれらを単純に減算することはできません。次の手順を実行する必要があります。
ステップ1: yolov3ネットワークの予測結果をデコードし、ネットワーク予測結果の前のフレームへの調整データを取得します
ステップ2:実際のフレームを処理して、ネットワークが実際に持つべき前のフレームの調整データ、つまりネットワークが持つべき予測結果を取得し、それを取得したネットワークの予測結果と比較します。コード内のget_target関数:
画像内の実際のフレームの位置を特定し、それが属するグリッドポイントを特定して検出します。
どのアプリオリボックスが実際のフレームと最も重なるかを判断します。
グリッドポイントが実際のフレームを取得するために必要な予測結果の種類を計算します(実際のフレームのデータを使用して、プリセットの事前フレームを調整し、グリッドポイントが予測する必要のある前のフレームの調整データを取得します)
すべての実際のフレームは上記のように処理されます。
ネットワークが持つべき予測結果を取得し、実際の予測結果と比較します。
ステップ3:画像の実際のフレームにターゲットがない、つまりオブジェクトがないため、実際のフレームにターゲットがなく、対応するネットワーク予測結果があり、オーバーラップの程度が大きいアプリオリボックスを無視します。フレーム内、フレームの位置情報は無意味です。前のボックスの情報とそれが表すタイプは無意味です。調整された前のボックスは無視する必要があります。ネットワークはボックス内のターゲットデータ情報のみを出力します。 Get_ignore関数をコード化します。
ステップ4:実際のフレームを使用してネットワークの実際の調整データとネットワーク予測の調整データを取得した後、損失の計算を比較します