LoginSignup
0
0

速度特化の軽量CNNであるFasterNet (CVPR'23) の解説

Last updated at Posted at 2024-05-04

実行時間レベルでとても速いCNNであるFasterNet (CVPR'23)について解説する。

目次

  1. 概要
  2. 背景
  3. (提案手法)FasterNet
  4. Experiments
  5. まとめ

概要

SOTA級の高速・軽量なCNNらよりも、優れた実行時間・精度カーブを実現するFasterNetが提案された。(Latency=実行時間)
image.png

背景

従来の高速CNNで使われるDWConvの問題

高速・軽量を謳うCNNの多くではdepthwise convolution (DWConv) が採用されている。しかし、DWConvは通常Convに比べて計算量を大幅に低減できるのだが、メモリアクセス性能が低いことで計算速度が十分に上がらない傾向にある。そこでこの論文では、計算量が少なくかつメモリアクセス性能も高いpartial convolution (PConv)を提案し、さらなる速度向上を実現している。
ちなみに、DWConvのメモリアクセス性能の低さの原因としては、同じチャネルを使い回さないことによるメモリアクセス効率の低下や、性能低下をカバーするために使われるpointwise convolution (PWConv)と組み合わせた際のチャネル数の増加(Inverted bottleneck構造)が理由として挙げられる。

[前提知識]実行時間(Latency)・計算量(FLOPs)・計算速度(FLOPS)の関係

CNNにおける実行時間(Latency)・計算量(FLOPs)・計算速度(FLOPS)は、時間・距離・速さと同じ関係性を持つので、以下の式で表現される。
$Latency = \frac{FLOPs}{FLOPS}$
これらの内でLatencyとFLOPSは、モデルに実際に入力データを与えることで算出可能であり、残るFLOPSは上式にそれらの値を代入することで計算できる。(Latency算出には推論の開始時刻と終了時刻の差を取り、FLOPS算出には実際の計算回数をカウントする)

(提案手法)FasterNet

FasterNetは、以下の図に示すように高速に設計されたPartial convolution (PConv)から成るFasterNet Blockで構成されている。
以降では、それらについて順に説明していく。

image.png

Partial Convolution (PConv)

FasterNetでは、メモリアクセスに負担のかからない形でconvolutionの軽量化を実現するPConv (Partial Convolution) を提案している。
PConvの構造は極めて簡単である。以下の図に示すように、大部分のチャネルはそのまま何もせず(idnedity処理)、一部のチャネルに絞って通常のconvolutionを行う、それだけである。
image.png
実験では、PConvでconvolution対象のチャネル数$c_p$は元のチャネル数$c$の1/4としている。計算量はチャネル数の2乗に比例するため1/16となり、DWConvの計算量削減率である1/$c$(大抵は$c$ >> 16)には及ばないものの、かなりの削減ができている。加えて、PConvは通常Convを使用しているため上述したメモリアクセス性能の低下がほぼ発生しない。このように、DWConvと比べて計算量が少々多くなる一方で、メモリアクセス性能は高い水準を維持できているため、結果としてPConvはDWConvよりも高速なconvolutionを実現する。

FasterNet Block

PConv単体では大部分のチャネルにアクセスしないため、後段で全チャネルをconvolutionしてそこをカバーする必要がある。そのためFasterNetブロックは、PConv後に2段のPWConv(Inverted bottleneck風)を連結したresidual構造を採用している。(このinverted風な構造にした理由は論文で説明されていない‥)
また、軽量化のために正規化層は1段目のPWConv直後にBN層を1個置くだけに留めている。(最適化でconv層と結合できるのでBNを採用)
image.png
受容野を広げているとこがPConvの一部のチャネルだけだと性能が心配になる人がいるかもしれないので、2点補足する。
①下図は学習済みResNet18の各ステージで、3x3カーネル上のどの位置(1が左上、5が中央、9が右下)が最重要だったかを分布で示している。最重要位置が中央(=5)に集中しており、中央のみを処理するPWConvと周囲を少々処理するPConvで十分対応できそうである。
②大部分をidentity処理しても十分な性能が出せることはGhostNet (CVPR'20)が実証済みである。
image.png

FasterNetの全体構造

最終的なFasterNetの構造は下図(再掲)になる。
最初にEmbedding(Patch化)層があり、以降でFasterNet BlockMerging(Downsampling処理)を交互に通していき、最後はGAP + FC層で締めるという標準的な構成を取っている。
image.png

Experiments

Classificationタスク (ImageNet-1k)

下図はNVIDIA GPU, Intel CPU, ARM CPUの3つの環境において、各SOTA級モデルとそれらの各サイズで、それぞれLatency(実行時間)・Accuracy(精度)のカーブを比較したグラフである。(NVIDIA GPUだけはLatencyでなく32 batch入力でのThroughputとなっている。逆数取ればほぼ同じ)
どの環境においてもFasterNetが他手法に比べて優秀なLatencyAccuracyカーブを実現できており、速度面においてFasterNetはSOTAを達成した。(ちなみに、モデルサイズは高速・軽量なCNNの中では標準的)
image.png

Object detection / Instance segmentationタスク (COCO)

Mask R-CNN + FasterNetで代表的なモデル(モデルサイズ別)と対決した結果が下表である。どのサイズにおいても、ほぼ同等の精度の基で最小のLatencyを出せている。
image.png

まとめ

DWConvを上回る高速化手法であるPConvを提案し、PConvベースのFasterNetでSOTA級モデルらを上回る実行時間・精度カーブを達成した。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0