コンボリューション (3)

分離可能な畳み込み

分離可能な畳み込みが背景を提案

従来の畳み込みニューラルネットワークはコンピュータビジョンの分野で非常に優れた成果を上げてきましたが、計算量が大きいという改善すべき問題がまだありました。

畳み込みニューラル ネットワークを実際の産業シナリオに適用する場合、モデルのパラメーター量と計算量は非常に重要な指標になります。モデルが小さいほど効率的に分散トレーニングを実行し、モデル更新のオーバーヘッドを削減し、プラットフォームの容量、消費電力、ストレージと計算能力を削減できます。モバイル端末への展開を容易にするための制限。

したがって、この要件をより適切に実現するために、学者たちは、畳み込み演算に基づいて、より効率的な分離可能な畳み込みを提案しました。

空間的に分離可能な畳み込み

空間分離可能コンボリューションは、その名前が示すように、標準コンボリューション演算を空間次元で分割し、標準コンボリューション カーネルを複数の小さなコンボリューション カーネルに分割します。たとえば、コンボリューション カーネルを 2 つ (またはそれ以上) のベクトルの外積に分割できます: [ 3 6 9 4 8 12 5 10 15 ] = [ 3 4 5 ] × [ 1 2 3 ] \left[\begin {配列{ccc} 3 & 6 & 9 \\ 4 & 8 & 12 \\ 5 & 10 & 15 \end{array}\right]=\left[\begin{array}{ccc} 3 \\ 4 \ \ 5 \end{配列}\right] \times \left[\begin{array}{ccc} 1 \quad 2 \quad 3 \end{array}\right] 345681091215 = 345 ×[123]現時点では、入力画像に対して、最初に 3×1 カーネルで畳み込みを実行し、次に 1×3 カーネルで畳み込みを実行して最終結果を得ることができます。具体的な動作を下図に示します。

ここに画像の説明を挿入します
このようにして元の畳み込みを分割し、元々 9 回の乗算演算を必要とした 1 つの畳み込み演算が 3 回の乗算演算を必要とする 2 つの畳み込み演算となり、最終的な効果は変わりません。乗算演算が少なくなると、計算の複雑さが軽減され、ネットワークがより高速に動作すると考えられます。

ただし、空間的に分離可能な畳み込みには特定の問題もあります。つまり、すべての畳み込みカーネルを 2 つの小さな畳み込みカーネルに分割できるわけではありません。したがって、この方法はあまり使用されません。

応用例

空間分離可能なコンボリューションは深層学習ではほとんど使用されません. 従来の画像処理の分野ではエッジ検出に使用できるソーベル オペレーターの方が有名です. 分離ソーベル オペレーターの計算方法は次のとおりです: [ − 1 0 1 − 2 0 2 − 1 0 1 ] = [ 1 2 1 ] × [ − 1 0 1 ] \left[\begin{array}{ccc} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{array}\right]= \left[\begin{array}{ccc} 1 \\ 2 \\ 1 \end{array}\right] \times \left[\begin{array}{ccc} } -1 \quad 0 \quad 1 \end{配列}\right] 12 1000121 = 121 ×[101

深さ方向の分離可能な畳み込み

深さ方向に分離可能な畳み込みの違いは、空間次元だけでなく深さ次元 (つまり、チャネル次元) も関係することです。通常、入力画像には R、G、B の 3 つのチャンネルがあります。一連の畳み込み演算の後、入力特徴マップは複数のチャネルになります。各チャンネルについて、画像の特定の特徴の説明として考えることができます。たとえば、入力画像では、「赤」チャネルの説明は画像内の「赤」の特徴を説明し、「緑」チャネルの説明は画像内の「緑」の特徴を説明し、「青」チャネルの説明は「」を説明します。画像の「ブルー」が特徴です。別の例として、チャネル番号 64 の出力特徴マップは、元の入力画像の 64 個の異なる特徴を説明することに相当します。

空間分離可能な畳み込みと同様に、深さ分離可能な畳み込みも畳み込みカーネルを 2 つの別々の小さな畳み込みカーネルに分割し、深さ畳み込み演算とポイントバイポイント畳み込み演算という 2 種類の畳み込み演算をそれぞれ実行します。まず、通常の畳み込みがどのように機能するかを見てみましょう。

標準畳み込み

12×12×3 の入力画像があるとします。つまり、画像サイズは 12×12、チャネル数は 3、画像はパディングなしで 5×5 で畳み込まれ、ストライドは 1 です。画像の幅と高さのみを考慮し、5×5 畳み込みを使用して 12×12 サイズの入力画像を処理すると、最終的に 8×8 の出力特徴マップを取得できます。ただし、画像には 3 つのチャネルがあるため、コンボリューション カーネルにも 3 つのチャネルが必要です。これは、コンボリューション カーネルが各位置で計算されるとき、実際には 5×5×3=75 回の乗算を実行することを意味します。以下の図に示すように、畳み込み演算には 5×5×3 の畳み込みカーネルを使用し、最終的に 8×8×1 の出力特徴マップを取得できます。

ここに画像の説明を挿入します
ネットワークがより多くの機能を学習できるように出力チャネルの数を増やしたい場合はどうすればよいでしょうか? 現時点では、256 個の異なるカテゴリの特徴を学習するための 256 個の畳み込みカーネルなど、複数の畳み込みカーネルを作成できます。このとき、256 個のコンボリューション カーネルは個別に動作して 256 個の 8×8×1 出力特徴マップを取得し、これらを積み重ねて最終的に 8×8×256 出力特徴マップを取得します。以下に示すように。
ここに画像の説明を挿入します
次に、深さ分離可能な畳み込みを通じて 8×8×256 の出力特徴マップを取得する方法を見てみましょう。

深さ畳み込み演算

まず、入力画像に対して深度コンボリューション演算を実行しますが、ここでの深度コンボリューション演算は実際にはチャネルごとのコンボリューション演算です。12×12×3の入力画像に対し、サイズ5×5のコンボリューションカーネルを用いてチャネルごとの演算を行う場合の計算方法を下図に示します。

ここに画像の説明を挿入します
ここでは実際に 3 つの 5×5×1 コンボリューション カーネルを使用して、入力画像の 3 つのチャネルの特徴をそれぞれ抽出します。各コンボリューション カーネルの計算が完了すると、3 つの 8×8×1 出力特徴マップが得られます。特徴マップがスタックされて、サイズ 8×8×3 の最終出力特徴マップが得られます。ここで、深さ畳み込み演算にはチャネル間の特徴融合が欠如しており、演算の前後でチャネル数を変更できないという欠点が見られます。

したがって、その欠点を補うために点単位の畳み込みを接続する必要があります。

点ごとの畳み込み演算

以前は、深度コンボリューション操作を使用して、12×12×3 の入力画像から 8×8×3 の出力特徴マップを取得しましたが、深度コンボリューションを使用するだけでは異なるチャネル間の特徴融合を達成できず、また不可能であることがわかりました。異なるチャネル間の特徴融合を実現するには、標準の畳み込み演算と一致する 8×8×256 の特徴マップを取得することは不可能です。そこで、点単位の畳み込みを使用してこれら 2 つのタスクを達成する方法を見てみましょう。

点ごとの畳み込みは、各点を通過するため、実際には 1×1 の畳み込みであるため、点ごとの畳み込みと呼びます。1×1畳み込みについては前回のコンテンツで詳しく紹介しましたが、ここでは上記の例をもとにその具体的な機能を見ていきます。

3 チャネル 1×1 畳み込みを使用して、上で取得した 8×8×3 特徴マップを操作すると、8×8×1 出力特徴マップを取得できます。以下に示すように。このとき、ポイントバイポイント畳み込みを使用して、3 つのチャネル間の特徴をマージする機能を実装します。

ここに画像の説明を挿入します
さらに、256 個の 3 チャネル 1×1 畳み込みを作成して、上で得られた 8×8×3 特徴マップを操作することで、標準の畳み込み演算と一致する 8×8×256 特徴マップを実現できます。特徴マップ機能。以下に示すように。

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

深さ方向分離可能畳み込みの意味

上記では、深さ分離可能な畳み込みの具体的な計算方法を示しましたが、標準的な畳み込みの代わりに深さ分離可能な畳み込みを使用する意義は何でしょうか?

ここで、上記の例における標準コンボリューションの乗算演算の数を見てみましょう。コンボリューション演算用に 256 個の 5×5×3 コンボリューション カーネルを作成しました。各コンボリューション カーネルは、入力画像上で 8×8 回移動します。したがって、総数は乗算演算は次のとおりです: 256 × 3 × 5 × 5 × 8 × 8 = 1228800 256 \times 3 \times 5 \times 5 \times 8 \times 8=1228800256×3×5×5×8×8=1228800深度分離可能なコンボリューションに切り替えた後、深度コンボリューション演算中に、3 つの 5×5×1 コンボリューション カーネルを使用して入力画像上で 8×8 回移動します。このときの乗算演算の数は: 3 × 5 です。 × 5 × 8 × 8 = 4800 3 \times 5 \times 5 \times 8 \times 8=48003×5×5×8×8=4800 ポイントバイポイントの畳み込み演算では、入力特徴マップ上を 8×8 回移動するのに 256 回の 1×1×3 の畳み込みを使用し、このときの乗算演算数は 256 × 1 × 1 × 3 となります。 × 8× 8 = 49152 256 \times 1 \times 1 \times 3 \times 8 \times 8=49152256×1×1×3×8×8=49152これら 2 つの演算を追加すると、深さ分離可能な畳み込みを使用した後の乗算演算の総数は 53952 になります。深さ分離可能な畳み込みの計算の複雑さは、標準の畳み込みの計算の複雑さよりもはるかに少ないことがわかります。

応用例

MobileNetv1 で使用される深さ方向の分離可能な畳み込みを次の図の右側に示します。左側の標準的な畳み込みと比較すると、それは分割されており、BN 層と RELU 活性化関数を使用して、深さの畳み込み演算と点単位の畳み込み演算が分散されています。

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

変形可能なコンボリューション

現在の背景

視覚認識における主な課題は、オブジェクトのスケール、姿勢、視点、部品の変形やモデルの幾何学的変換における幾何学的変化にどのように適応するかということです。

ただし、視覚認識用の従来の CNN モジュールでは、固定幾何構造に必然的に欠陥が存在します。畳み込みユニットは入力特徴マップを固定位置でサンプリングし、プーリング層は空間解像度を固定比率で低下させ、ROI (関心領域) ) ) プーリング層は ROI を固定空間単位に分割しますが、幾何学的変換などを処理する内部メカニズムがありません。

これらはいくつかの明らかな問題を引き起こすでしょう。たとえば、同じ CNN 層内のすべての活性化ユニットの受容野サイズは同じですが、空間的位置でセマンティクスをエンコードする高度な CNN 層には必要ありません。さらに、微細な位置特定を伴う視覚認識の実際的な問題(例えば、完全畳み込みネットワークを使用したセマンティックセグメンテーション)では、異なる位置が異なるスケールまたは変形を有するオブジェクトに対応する可能性があるため、スケールまたは受容野サイズの適応を決定することが望ましい。

前述の制限を解決するために、コンボリューション カーネルがその形状を適応的に調整するという自然なアイデアが生まれました。これにより、変形可能な畳み込み法が生まれます。

変形可能な畳み込み

DCN v1

名前が示すように、変形可能な畳み込みとは、畳み込みの位置が変形可能であることを意味します。従来の N×N グリッド上で畳み込みを実行するのではなく、必要な特徴をより正確に抽出できるという利点があります (従来の畳み込みのみ)長方形の箱の特徴を抽出することができます) 図を見ると、より直感的に理解できます。

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

上の図では、左側の従来の畳み込みは明らかに完全な羊の特徴を抽出していませんが、右側の変形可能な畳み込みは完全な不規則な羊の特徴を抽出しています。

では、変数の畳み込みは実際にどのように機能するのでしょうか? 実際には、次の図に示すように、オフセットが各畳み込みサンプリング ポイントに追加されます。

ここに画像の説明を挿入します
(a) 通常の畳み込みルールは 9 点 (緑色の点) をサンプルします; (b)©(d) は変形可能な畳み込みで、通常のサンプリング座標に変位 (青色の矢印) を追加します。 (b) の場合、変形可能な畳み込みがスケール変換、スケール変換、回転変換などの特殊なケースとして使用できることを示しています。

3 × 3 3\times3による通常の畳み込み3×各出力y ( p 0 ) y_(\mathrm{p}_0)の例として3 つの畳み込みy(p0)、すべてxxx上の 9 つの位置をサンプリングすると、これらの 9 つの位置はすべて中心位置x (p 0) \mathrm{x}(p0)x ( p 0 )は ( − 1 , − 1 ) (-1,-1)の周囲に広がります。( 1 1 )はx ( p 0 ) \mathrm{x}(p0)を表しますx ( p 0 ) ,( 1 , 1 ) (1,1)( 1 1 )はx ( p 0 ) \mathrm{x}(p0)を表しますx ( p 0 )の右下隅。R = { ( − 1 , − 1 ) , ( − 1 , 0 ) , . . . , ( 0 , 1 ) , ( 1 , 1 ) } \mathrm{R} = \{(-1,-1), (-1,0),...,(0,1),(1,1)\}R={( 1 ,1 ) ( 1 0 ) ... ( 0 ,1 ) ( 1 1 )}したがって、従来の畳み込みの出力は (ここで、pn \mathrm{p}_npグリッドのnnですn点、w ( pn ) \mathrm{w}(\mathrm{p}_n)w ( p)は対応点位置の畳み込み重み係数を表します): y ( p 0 ) = ∑ pn ∈ R w ( pn ) ⋅ x ( p 0 + pn ) y(\mathrm{p}0)=\sum{\mathrm { p}_n\in\mathrm{R}}\mathrm{w}(\mathrm{p}_n) \cdot \mathrm{x}(\mathrm{p}_0+\mathrm{p}_n)y ( p0 ) _=pR w ( p)x ( p0+p)前述したように、変形可能な畳み込みは、従来の畳み込み演算にオフセットΔ pn \Delta \mathrm{p}_nΔp _, 畳み込みを不規則な畳み込みに変形させるのはこのオフセットですが、このオフセットは小数にすることができるため、次の式の固有値は双一次補間によって計算する必要があることに注意してください。y ( p 0 ) = ∑ pn ∈ R w ( pn ) ⋅ x ( p 0 + pn + Δ pn ) y(\mathrm{p}0)=\sum{\mathrm{p}_n\in\mathrm{R }}\mathrm{w}(\mathrm{p}_n) \cdot \mathrm{x}(\mathrm{p}_0+\mathrm{p}_n+\デルタ \mathrm{p}_n)y ( p0 ) _=pR w ( p)x ( p0+p+Δp _)では、このオフセットをどのように計算するのでしょうか? 見てみましょう:ここに画像の説明を挿入します

入力特徴マップの場合、元の畳み込み演算が 3×3 であると仮定すると、オフセット offset を学習するために、別の 3×3 畳み込み層 (画像の上層) を定義します。出力の次元は実際には次のようになります。元の特徴マップのサイズ、チャネル数は 2N に等しくなります (それぞれ x 方向と y 方向のオフセットを表します)。次の変形可能な畳み込みは、最初に上記の部分で生成されたオフセットに基づいて補間演算を実行し、次に通常の畳み込みを実行すると見ることができます。

DCN v2

DCN v2 は、DCN v1 に基づいて各サンプリング ポイントの重みを追加します (オフセットを追加します)。

いくつかの無関係な領域が導入されるという問題を解決するために、DCN v2 では各サンプリング ポイントのオフセットを追加するだけでなく、重み係数Δ mk \Delta m_kも追加します。Δm_ _を使用して、導入する領域が関心のある領域であるかどうかを区別します。このサンプリング ポイントの領域に関心がない場合は、重みを 0 まで学習するだけです: y ( p 0 ) = ∑ pn ∈ R w ( pn ) ⋅ x ( p 0 + pn + Δ pn ) ⋅ Δ mky(\mathrm{p}0)=\sum{\mathrm{p}_n\in\mathrm{R}}\mathrm{w}(\mathrm {p}_n ) \cdot \mathrm{x}(\mathrm{p}_0+\mathrm{p}_n+\Delta \mathrm{p}_n) \cdot \Delta m_ky ( p0 ) _=pR w ( p)x ( p0+p+Δp _)Δm_ _

おすすめ

転載: blog.csdn.net/weixin_49346755/article/details/127485502