- 論文アドレス:セマンティック画像セグメンテーションのための Atrous Convolution の再考
- Pytorch 実装コード: pytorch_segmentation/deeplab_v3
これは2017年にCVPRに掲載された記事です。DeepLab V2 と比較すると、① マルチグリッドの導入、② ASPP 構造の改善、③ CRF の後処理の削除の 3 つの変更点があります。
①マルチグリッドの導入: マルチグリッドの導入は、拡張畳み込みの使用をさらに改善し、さまざまなスケールでのセマンティックセグメンテーションモデルのパフォーマンスを向上させることを目的としています。以前のバージョン (DeepLab V2 など) と比較して、DeepLab V3 ではマルチスケール拡張率設定が導入されており、過去の拡張畳み込みにおける固定拡張率によって引き起こされた制限が解決されています。DeepLab V3 では、ネットワークの一部のレイヤーで異なる拡張率が使用されるため、モデルはさまざまなスケールでより豊富なコンテキスト情報を取得し、さまざまなサイズのオブジェクトを効果的にセグメント化できます。
②改善されたASPP構造(Atrous空間ピラミッドプーリング):ASPP構造は、特徴マップの異なるスケールでマルチスケールコンテキスト情報を取得するために使用されます。DeepLab V3では、ASPP構造が改良され、独自の複数の展開係数による拡張畳み込みに加え、画像レベルの特徴(グローバル平均プーリング)も導入され、ローカルな詳細情報とグローバルなコンテキスト情報の両方を統合することができます。この改善により、モデルの知覚範囲と意味情報が向上し、セグメンテーションのパフォーマンスが向上します。
③後処理CRF の削除 (条件付きランダム フィールド) : DeepLab V2 では、CRF を使用した後処理は、セマンティック セグメンテーションの結果をさらに最適化し、特に境界の詳細を滑らかにします。ただし、CRF は計算コストが高く、モデルの複雑さが増加します。DeepLab V3 では CRF の後処理ステップが削除されていますが、代わりにマルチグリッドの導入と ASPP 構造の改善により、より包括的で正確な特徴表現をモデル内で直接取得できるため、CRF の必要性が軽減されます。このようにして、DeepLab V3 は、高いパフォーマンスを維持しながら、モデルの構造とトレーニング プロセスを簡素化します。
DeepLab v3 の概要
DeepLab v3 はセマンティック セグメンテーション モデルであり、その中心的なアイデアは、ディープ畳み込みニューラル ネットワークを使用して高精度のセマンティック セグメンテーション タスクを実現することです。DeepLab シリーズ モデルの 3 番目のバージョンであり、以前のバージョンのいくつかの欠点が改善されています。
DeepLab v3 の核となるアイデアには、次の重要なポイントが含まれます。
-
拡張コンボリューション: 受容野のサイズを増やすために、DeepLab v3 には拡張コンボリューションが導入されました。従来の畳み込み演算では、特徴を抽出する際に局所的な近傍情報のみが考慮されますが、拡張畳み込みでは、畳み込みカーネルにホール (または拡張率と呼ばれる) が導入されるため、畳み込みカーネルはより広範囲の特徴情報を取得できるため、より広範囲のコンテキスト情報を取得できます。
-
マルチスケール情報融合: DeepLab v3 は、マルチスケール情報融合手法を使用して、さまざまなスケールの特徴マップに対して空間ピラミッド プーリング操作を実行することで、さまざまな解像度の特徴マップを取得します。次に、これらの特徴マップをアップサンプリングして融合することにより、モデルはさまざまなスケールでより豊富な情報を取得できるため、ターゲットをより正確にセグメンテーションするのに役立ちます。
-
グローバル平均プーリング: DeepLab v3 は、最終特徴マップでグローバル平均プーリングを使用して、画像全体のグローバル情報を取得します。これは、モデルのコンテキスト認識をさらに向上させるのに役立ちます。これは、広範囲のオブジェクトを含む画像にとって特に重要です。
-
条件付きランダム フィールド (CRF) : 予備的なセマンティック セグメンテーションの結果を取得した後、DeepLab v3 は後処理に条件付きランダム フィールドを使用します。CRF は、ピクセル間の空間相関と色の類似性を使用して、セグメンテーションの結果を平滑化し、一部の詳細なエラーを減らすことができます。
上記の点に基づいて、DeepLab v3 は画像内のコンテキスト情報とマルチスケール特徴を効果的にキャプチャし、これらの特徴を完全に融合して処理して、セマンティック セグメンテーション タスクで高精度を実現します。
抽象的な
この研究では、拡張コンボリューション (Atrous Convolution) を再検討します。これは、コンボリューション カーネルの受容野を明示的に調整し、アプリケーションのセマンティック画像セグメンテーションに対して CNN によって計算される特徴応答の解像度を制御できる強力なツールです。複数のスケールでオブジェクトをセグメント化する問題を解決するために、複数の拡張率 rr を直列または並列で使用する拡張畳み込みを使用するモジュールを設計します。rはマルチスケールのコンテキストをキャプチャします。さらに、以前に提案された Atrous Spatial Pyramid Pooling (ASPP) モジュールを強化し、複数のスケールで畳み込み特徴を検出し、グローバル コンテキストを含む画像レベルの特徴を融合してパフォーマンスの向上を実現します。また、実装の詳細についても詳しく説明し、システムのトレーニングにおける経験を共有します。提案された「DeepLabv3」システムは、DenseCRF 後処理なしの以前の DeepLab バージョンを大幅に上回り、PASCAL VOC 2012 セマンティック画像セグメンテーション ベンチマークで他の最先端モデルと同等のパフォーマンスを達成します。
1. マルチスケールのコンテキスト情報を取得するためのオプションのアーキテクチャ
- (a)画像ピラミッド: これは私たちが考える最も簡単な方法で、画像をさまざまなスケールに拡大縮小し、推論のためにネットワークに送信し、最後にそれらを融合することです。
- (b)コーデック: 最初にバックボーンに従って入力画像に対して一連のダウンサンプリングを実行し、最後に最終的な特徴マップに対して一連のアップサンプリングを実行します。アップサンプリング プロセス中に、バックボーンで取得された特徴マップと融合されます。元の画像サイズに復元されるまで続きます。
- (c) DeepLab v1 の方法: バックボーンの最後のいくつかの畳み込み層を
stride
1 に設定し、拡張畳み込みを導入してネットワークの受容野を増加します。 - (d) DeepLab v2 の手法: ASPP (Atrous Space Pyramid Pooling) は、マルチスケール情報を取得するモデルの能力を向上させるために導入されています。
2. DeepLab v3 の 2 つのモデル構造
- カスケード モデル: カスケード モデル
- ASPP モデル: 空の空間ピラミッド モデル
- ASPP モジュールはカスケード モデルでは使用されません。
- Cascaded ブロック モジュールは ASPP モデルでは使用されません。
本文では 2 つの構造が提案されていますが、著者は、ASPP モデルは Cascaded モデルよりもわずかに優れていると述べています。。Github 上のいくつかのオープン ソース コードも含め、そのほとんどは ASPP モデルを使用しています。
2.1 カスケードモデル
論文で提案されているカスケード モデルは上の図を指します。このうち、Block1、Block2、Block3、Block4 は元の ResNet ネットワークの層構造ですが、Block4 では最初の残差構造の3 × 3 3\times 3が3×3 つの畳み込み層とショートカット ブランチ上の1 × 1 1\times 11×1畳み込み層のストライドはstride
2 から 1 に変更され (つまり、ダウンサンプリングは実行されません)、すべての残りの構造で3 × 3 3\times 3 になります。3×3 つの通常の畳み込み層は3 × 3 3\times 3に置き換えられました。3×3 つの拡張畳み込み層。Block5、Block6、Block7 は追加の層構造であり、その構造は Block4 とまったく同じで、拡張畳み込みを使用した 3 つの残差構造で構成されています。
注❗️元の論文には、カスケード モデル
output_stride=16
(つまり、入力画像に対するフィーチャ レイヤーのダウンサンプリング レート) をトレーニングするときに使用されると記載されていますが、検証中に使用されますoutput_stride=8
。output_stride=16
の場合、最終的なフィーチャ レイヤーはH
小さくW
なるため、より大きな値を設定できbatch_size
、トレーニング速度を高速化できることを意味します。ただし、フィーチャ レイヤーH
がW
小さくなると、フィーチャ レイヤーの詳細な情報が失われるため (記事では「粗くなる」と書かれています)、検証時に使用されますoutput_stride=8
。実際、ビデオ メモリが十分に大きく、コンピューティング能力が十分に高い限り、これを直接8 にGPU
設定できます。output_stride
——簡単に言うと、著者はトレーニング中に 16 倍のダウンサンプリング レートを使用し、検証中に 8 倍のダウンサンプリング レートを使用しました。しかし、そのような妥協をする必要はなく、ダウンサンプリング レートを 8 倍に直接設定できます。
また、図中でマークされているのは、rate
膨張畳み込みで使用される実際の展開係数ではないことに注意してください。実際の展開係数には、図のパラメータrate
を乗算する必要があります。たとえば、 Block4 では、実際の展開係数は2 × (1, 2, 4) = (2, 4, 8) 2 \times (1, 2) となります。 , 4) = (2, 4, 8)Multi-Grid
rate=2
Multi-Grid=(1, 2, 4)
2×( 1 、2 、4 )=( 2 、4 、8 )。マルチグリッドパラメータについては後述します。
ractually = rate × M ulti Grid r_\mathrm{actually} = \mathrm{rate} \times \mathrm{MultiGrid}r実は=レート×マルチグリッド
2.2 ASPPモデル
2.2.1 モデル全体の構造
論文の大部分はカスケード モデルとそれに対応する実験について説明していますが、最も一般的に使用されているのは ASPP モデルであり、そのモデル構造は次の図に示されています。
output_stride=16
注 ❗️カスケード モデルと同様に、元の論文ではトレーニング中に使用される(つまり、入力画像に対するフィーチャ レイヤーのダウンサンプリング レート) と記載されていますが、検証中に使用されますoutput_stride=8
。ただし、PyTorch によって正式に実装された DeepLabV3 のソース コードでは、トレーニングのために直接 8 に設定されていますoutput_stride
。
2.2.2 ASPP の 2 つのバージョンの比較
2.2.2.1 ASPP (V2 バージョン)
まず、DeepLab V2の ASPP 構造を確認します。DeepLab V2 の ASPP 構造は、実際には4 つの並列拡張畳み込み層を介しています。各ブランチの拡張畳み込み層は異なる展開係数を使用します(ここでの拡張畳み込み層の後には BatchNorm が続いていないことに注意してください)偏執的なバイアスが使用されます)。次に、add
⊕ \oplusを渡します⊕4 つのブランチの出力を加算的な方法で融合します。
ASPP (V2 バージョン) の拡張畳み込み層にはパラノイド バイアスがありますが、BN 層はありません
2.2.2.2 ASPP (V3 バージョン)
以下の図に示すように、DeepLab V3 の ASPP 構造を見てみましょう。
ASPP (V3 バージョン) の拡張畳み込みは、古典的なハンバーガー構造です: Conv → BN → Activation
ここの ASPP 構造には、次の 5 つの並列分岐があります。
①A 1 × 1 1\times 11×1畳み込み層
② ~ ④33 × 3 3\times 33×3 つの拡張畳み込み層 (拡張率は異なります)
⑤グローバル平均プーリング層 (その後に1 × 1 1\times 1 が1×1 つのW
畳み込み層を作成し、双線形補間によって入力を入力にH
)。
最後のグローバル プーリング ブランチについて、著者はグローバル コンテキスト情報 (Global Contextual Information) を追加することだと述べています。
次に、Concat
これら 5 つのブランチの出力が を介して (channel
方向に沿って) 接続され、最後に1 × 1 1\times 1を介して接続されます。1×1の畳み込み層はさらに情報を融合します。
3. マルチグリッド(多層グリッド方式)
以前の DeepLab v1 および v2 モデルでは膨張コンボリューションが使用されていましたが、展開係数の設定は比較的任意でした。DeepLab V3 では、作成者は、より合理的に設定する方法を確認するために、いくつかの関連実験を行いました。次の表では、カスケード モデル (例としてバックボーンとして ResNet-101) を実験オブジェクトとして使用し、さまざまな数のカスケード ブロック モデルを使用し、カスケード ブロックにさまざまなマルチグリッド パラメーター (平均 IoU) を使用した場合の影響を調査します。
注意してください❗️
- block5~block7はblock4と同じ構造ですが、伸張係数が変わっています。
- カスケード モデルについて説明したときに先ほど述べたように、ブロックで使用される実際の展開係数は、ピクチャ内のレートにマルチグリッド パラメーターを乗算したものである必要があります。
- この写真についてどう思いますか?
- マルチグリッド(縦) : 毎回使用されるブロック5~ブロック7のマルチグリッドパラメータ(対応するブロックが存在しない場合も含む)
- block4 (縦) : block4 を使用、block5 ~ block7 は使用しない
- block5 (縦) : block4 と block5 を使用し、block6 ~ block7 は使用しません
- block6 (垂直) : block4 ~ block6 を使用し、block7 は使用しません
- block7 (縦) : block4 ~ block7 (すべて使用) を使用
- 出力ストライド (
output stride
): 複数のダウンサンプリング
実験を通じて発見された:
- 3 つの追加ブロックが使用される (つまり、追加の Block5、Block6、および Block7 が追加される) 場合、マルチグリッドは最高の
(1, 2, 1)
効果を持つように設定されます -カスケード モデル 最良のモデル - さらに、追加のブロックを追加しない場合 (つまり、Block5、Block6、および Block7 がない場合)、マルチグリッドを最適な効果に設定します (ASPP
(1, 2, 4)
モデル)
。これは、追加のブロック層が追加されないためです。 ASPP モデル。ASPP については後で説明します。モデルのアブレーション実験では、(1, 2, 4)
マルチグリッドが に等しい状況を使用します。
4. アブレーション実験
4.1 カスケードモデルアブレーション実験
次の表は、Cascaded モデルのアブレーション実験に関するものです。
で:
- MG は Multi-Grid の略で、前述したように、
MG(1, 2, 1)
Cascaded モデルで MG を使用するのが最適です。 - OS は、output_stride ( downsampling multiple )の略で、前述したように、
output_stride
検証中に 8 に設定すると、より良い結果が得られます。 - MS はマルチスケールの略で、DeepLab V2 と同様です。ただし、DeepLab V3 ではより多くのスケールが使用されます
scales = {0.5, 0.75, 1.0, 1.25, 1.5, 1.75}
- Flip は、水平方向に反転した画像入力を追加することを表します
4.2 ASPPモデルアブレーション実験
次の表は、ASPP モデルのアブレーション実験に関するものです。
で:
- MG は Multi-Grid の略で、前述したようにASPP モデルで使用するの
MG(1, 2, 4)
が最適です。 - 前述したASPP
- イメージ プーリングは、ASPP へのグローバル平均プーリング層ブランチの追加を表します。
- OS は、output_stride の略で、前述したように、
output_stride
検証時に 8 に設定すると、より良い結果が得られます。 - MS はマルチスケールの略で、DeepLab V2 と同様です。ただし、DeepLab V3 ではより多くのスケールが使用されます
scales = {0.5, 0.75, 1.0, 1.25, 1.5, 1.75}
- Flip は、水平方向に反転した画像入力を追加することを表します
- COCO は、COCO データセットでの事前トレーニングを表します
5. 研修内容
次の表は、元の論文に記載されている Pascal VOC2012 テスト データ セットにおける DeepLab V3 の平均 IOU です。
比較すると、DeepLab V3 は V2 に比べて実際に約 6 ポイント向上していることがわかります。ただし、ここでの DeepLab V3 は Cascaded モデルなのか ASPP モデルなのか明確には示されていないようですが、個人的には ASPP モデルを指している可能性が高いと考えています。では、これら 6 つの点をどのように改善するかをよく考えてください。Multi-Grid の導入、ASPP モジュールの改善、MSC のスケールの増加だけでは、それほど多くの点は改善されないはずです。したがって、私が考えることができるのは、トレーニングプロセス中の何らかの変化が平均IOUの増加を引き起こしたということだけです。
論文のセクションでA. Effect of hyper-parameters
、著者は次のように述べています。
- トレーニング プロセス中に、トレーニング入力画像のサイズが増加します (この論文には注意が必要な点があります。大きな伸張係数を使用する場合、入力画像サイズが小さすぎることはできません。それ以外の場合は3 × 3 3\times 33×3の拡張畳み込みは、1 × 1 1\times 1に縮退する可能性があります。1×1の通常の畳み込み。
- 損失を計算する際、予測結果はアップサンプリングによって元のスケールに復元され(つまり、ネットワークの最終的な双線形補間アップサンプリングは 8 倍になります)、実際のラベル画像を使用して損失が計算されます。表8の実験によれば、1ポイント以上の改善が可能である。
以前の V1 と V2 では、実際のラベル画像の 8 倍と、アップサンプリングなしの予測結果を使用して損失が計算されていました (トレーニングの高速化が目的でした)。 - トレーニング後、BN 層のパラメータをフリーズし、ネットワークの他の層を微調整すると、表 8 の実験によると 1 ポイント以上改善できます。
6. PyTorch は DeepLab V3 モデル構造を正式に実装します
次の図は、 PyTorch によって正式に実装された DeepLab V3 ソース コードに基づいてPILIBALA WZによって描画されたネットワーク構造です (元の論文とは若干の違いがあります)。
- PyTorch によって正式に実装された DeepLab V3 では、Multi-Grid は使用されません
- DeepLab V3 には、PyTorch によって正式に実装された追加の FCNHead 補助トレーニング ブランチがありますが、これを使用しないことも選択できます。
output_stride
8 は、PyTorch によって正式に実装された DeepLab V3 のトレーニングと検証の両方で使用されます。- ASPP の 3 つの展開畳み込み分岐の展開係数は です
{12, 24, 36}
。論文では、そのoutput_stride=8
とき