FasterNet (PConv) 紙のノート (CVPR2023)

论文:歩くな、走るな: ニューラル ネットワークを高速化するためにより高い FLOPS を追求する

まず、FLOPS と FLOPs (s は大文字と小文字) の 2 つの概念について理解します。FLOPS
: FLoating point Operations Per Second の略語で、1 秒あたりの浮動小数点演算の回数、または計算速度で表されます。これはハードウェアのパフォーマンスの尺度です。
FLOPs: FLoating point OPerationS は、乗算と加算を含む浮動小数点計算の数です。これはモデルにのみ関連しており、モデルの複雑さを測定するために使用できます。
要約すると、大文字の S は計算速度を表し、小文字の S は計算量を表します。計算量 / 計算速度 = 計算時間 Latency

概要セクション

多くのネットワークはこれまで、計算量 (FLOP) の削減に重点を置いてきましたが、著者は、たとえ FLOP が削減されたとしても、それに応じて遅延が直線的に減少しないことを発見しました。
これは、速度の FLOPS がそれに応じて増加せず、メモリ アクセスが頻繁に行われるため FLOPS が低下しているためと考えられます。

この目的のために、本稿では主に DWConv (Depthwise convolution) を研究し、
部分畳み込み PConv を提案します。
PConv を主要な要素とするバックボーン ネットワーク FasterNet も T、S、M、L バージョンで提案されており、効率が向上するだけでなく精度も向上します。

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

背景

計算 FLOPS が低減されたいくつかのネットワークとその計算速度 FLOPS を比較したところ、著者は、ほとんどの FLOPS が ResNet50 よりも低いことを発見しました。

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

Latency = FLOPs / FLOPS なので、
たとえ FLOPs が減って FLOPS が低くても、それに対応する計算時間は短縮されません。

関連作業

CNN:
実際のアプリケーションでは、CNN の計算効率は精度と同じくらい重要であるため、効率を向上させるために多くの作業が行われています。より一般的なものは、グループ畳み込みと深さ分離可能な畳み込みです。これらを適用しているものには、MobileNet、ShuffleNet
、ゴーストネットなど
これらの作業では、フィルターの冗長性を考慮してパラメーターと FLOP を削減します。しかし、精度の低下を補うためにチャネルを追加するのが一般的であり、チャネルの増加はメモリアクセスの増加につながります。
著者は、特徴マップの冗長性を考慮して、FLOP とメモリ アクセスを削減する部分畳み込み PConv を提案します。

ViT、MLP、およびそのバリアント
ViT の構造とトレーニング方法の改善に多くの研究が費やされてきましたが、主な傾向は、注意と畳み込みの複雑さを軽減することで、精度と計算時間のバランスを追求することです。
注意をMLPに置き換える取り組みも行われています。しかし、これらは多くの場合、CNN と同様の仕事に発展します。
過去の論文に基づいて、著者は、CNN と比較したアテンションの利点は明確ではなく、アテンションは CNN よりも遅く、業界では CNN ほど普及していないと考えています。
現時点では、深さ方向の分離可能な畳み込みがまだ比較的人気があるため、著者は FLOPS の問題点を見つけるために DWConv を研究することに重点を置いています。

深さ方向の分離可能な畳み込みに慣れていない人は、MobileNetV1を参照してください。

メモリアクセス

FLOPS がメモリ アクセスによって制限されることは前述しましたが、メモリ アクセスについて見てみましょう。
入力サイズが (c, h, w)、畳み込みカーネルが k*k、出力サイズが (c, h, w) であると仮定すると、DWConv の FLOP は (畳み込みカーネル
ここに画像の説明を挿入します
回数ウィンドウの移動量は出力サイズ、各計算量はk 2 * cであり、チャネルを拡張する必要はありません。)
通常の畳み込みのFLOPはここに画像の説明を挿入します
(コンボリューションカーネルウィンドウの移動回数が出力サイズです。通常の畳み込みはチャネルを展開して計算します。下図を参照してください。入力チャネルと出力チャネルが c であるため、展開後は c 2になります)
ここに画像の説明を挿入します

深度分離可能な畳み込みでは、DWConv の後に 1x1 畳み込み、つまり PWConv (点ごとの畳み込み) が続きます。

深さ方向分離可能な畳み込みは、精度が低下するため、通常の畳み込みの代替としてみなすことはできず、実際のアプリケーションではこれを補うためにチャネルが追加されます。
チャネルはネットワーク幅とも呼ばれます。DWConv のチャネルが c' (c' > c) に増加するとします。たとえば、反転残差ブロックではチャネルが 6 倍に拡張されます。
チャネルの拡張により、特に I/O バウンドのデバイスの場合、メモリ アクセスが増加し、時間遅延が増加します。

ここで、画像/特徴マップと畳み込みフィルターにアクセスするために必要なメモリ アクセスは次のとおりです。
DWConv:ここに画像の説明を挿入します
通常の畳み込み:ここに画像の説明を挿入します
ここで、 h * w * 2c' は I/O 操作のメモリ アクセスであり、これ以上最適化するのは困難です (2 を掛けると、入力メモリと出力メモリへのアクセス (それらが同じサイズであると仮定))。

提案された部分畳み込み PConv

部分的な畳み込みは以下のようになりますが、これまでのようにすべての入力チャネルを畳み込みますが、PConv ではチャネル cp の一部のみを畳み込み、残りは処理されません。

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

精度に影響を与えずに部分的な畳み込みしか実行できないのはなぜですか?
これは、以下に示すように、さまざまなチャネルの特徴マップが非常に類似していることを著者が観察したためです。この機能マップの冗長性については、他の論文でも言及されています。
これは、事前トレーニングされた ResNet50 の機能マップです。

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

特徴マップには非常に多くの冗長性があるため、畳み込みにはその一部のみを使用することをお勧めします。

メモリの連続性のために、前セグメントまたは後セグメントの cp 連続チャネルが選択され、特徴マップ全体を表します。
まだ入力と出力のチャネルが同じであると仮定すると、PConv の FLOP は
ここに画像の説明を挿入します
(コンボリューション カーネルと入力マップのウィンドウの計算量は k 2 * cp 2 (通常のコンボリューション計算)、コンボリューション カーネル ウィンドウは出力サイズです)

cp / c = 1/4 の場合、PConv の FLOP は通常の畳み込みの 1/16 にすぎません。

PConv のメモリ アクセス:
ここに画像の説明を挿入します
(入力、出力特徴マップ、畳み込​​みカーネルのメモリ アクセス)
cp / c = 1/4 の場合、メモリ アクセスは通常の畳み込みの 1/4 になります。

入力チャンネルの 1/4 だけが使用されているので、残りのチャンネルを削除できますか?
削除すると、チャネルの少ない通常の畳み込みになり、部分的な畳み込みではなくなり、これらのチャネルは後続の PWConv で使用するために保持できます。

ここで、その後の PWConv について話します。

PConv を PWConv に接続 (1x1 畳み込み)

前述したように、PConv はチャネルの一部のみを使用しており、チャネルは完全には活用されていません。
このとき、PWConv を実行すると、チャネル情報を最大限に活用できます。

以下に示すように、PConv と PWConv の組み合わせは T 字型の畳み込みに少し似ています。受容野は中央に集中しています。そして、通常の畳み込みは一様に分布します。

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

では、受容野が中央に集中している場合、何か影響があるのでしょうか?このため、著者は ResNet18 の各フィルターを調査し、
フロベニウス ノルムを使用して重要度を計算し、コンボリューション カーネル サイズを k 2 * c としました。値が大きいほど重要です。

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

次に、以下のヒストグラムが計算されます. 3x3 コンボリューション カーネルの位置は 1 ~ 9 です.
図から、一般的には中央の位置 5 が最も重要であると考えられています. したがって、上記の T 字型コンボリューションは可能であると考えられます通常の畳み込みを近似します。
ここに画像の説明を挿入します

T 字型畳み込みは直接計算することもできますが、中間畳み込みの冗長性を利用して FLOP をさらに削減できる、PConv と PWConv に分割する方がよいと著者は考えています
。両方 (h, w, c ) の場合、T 型畳み込みの FLOP は次のようになります。

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

PConv と PWConv に分割された FLOP は次のとおりです。
ここに画像の説明を挿入します

ファスターネット


筆者が提案したバックボーンネットワーク FasterNet は PConv を用いて構築されており、その構造は以下の 4 段階のシンプルな構成となっている。
ここに画像の説明を挿入します

埋め込み層は 4x4 conv、stride=4 で、画像の各ブロックを処理する畳み込みカーネルに相当します。
結合レイヤーは 2x2 conv、stride=2 で、以前に分割された画像をオーバーラップのあるブロックに結合することと同等です。
これを行うと、チャネルをダウンサンプリングして拡張することもできます。
最後の 2 つのステージのブロックは、アクセスするメモリが少なく、FLOPS が高いことが観察されます。そのため、比較的多くのブロックが最後の 2 つのステージに配置されます。各 PConv の後に 2 つの 1x1 Convolution が続きます
。プラス残余。

BN 層とアクティベーション関数は、機能の多様性を維持し、複雑さを軽減するために、中央の PWConv の後ろにのみ配置されます。
BN は Conv 層と組み合わせることができるため、他の正規化よりも BN が選択されます。

活性化関数の選択も実験に基づいており、小規模モデルには GELU、大規模モデルには ReLU が使用され、
同じ実験により、cp / c が 1/4 であることが好ましいことが示されています。
ここに画像の説明を挿入します

異なるプラットフォームでのいくつかの畳み込みの FLOPS とレイテンシの比較

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

PConv が本当に DWConv よりも通常の畳み込みに似ているかどうかを検証するために、
著者は ResNet50 の 4 つのステージのそれぞれで最初の 3x3 畳み込みの入力および出力特徴マップを抽出しました。
それを train、val、および test セットに分割します。さまざまな畳み込みの組み合わせでトレーニングした後、テスト セットを使用して、出力特徴マップの MSE 損失をテストします。もちろん、損失が小さいほど、この畳み込みの組み合わせはより類似します
。通常の畳み込み (ただし、通常の畳み込みよりも優れています。蓄積が速くなります)。

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

COCO データセットのレイテンシと mAP の比較。

ここに画像の説明を挿入します
最後に、FasterNet の構造を貼り付けます。

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

おすすめ

転載: blog.csdn.net/level_code/article/details/132731603