Slide 1

Slide 1 text

AI 2023/05/25 内田 祐介 株式会社ディー・エヌ・エー + GO株式会社 高速な深層学習モデル アーキテクチャ2023

Slide 2

Slide 2 text

AI 2 ▪ モデルアーキテクチャ観点からのDeep Neural Network高速化 ▪ 畳み込みニューラルネットワークの研究動向 ▪ 畳み込みニューラルネットワークの高精度化と高速化 ▪ モデルアーキテクチャ観点からの高速化2019 ▪ 近年のHierarchical Vision Transformer モデルアーキテクチャ好き

Slide 3

Slide 3 text

AI 3 ▪ モデルアーキテクチャ観点からのDeep Neural Network高速化 ▪ 畳み込みニューラルネットワークの研究動向 ▪ 畳み込みニューラルネットワークの高精度化と高速化 ▪ モデルアーキテクチャ観点からの高速化2019 ▪ 近年のHierarchical Vision Transformer モデルアーキテクチャ好き ここからどのくらい 進化したのか︖

Slide 4

Slide 4 text

AI 4 ▪ モデルの高速化・軽量化概略 ▪ 軽量なモデルアーキテクチャ (CNN) ▪ 軽量なモデルアーキテクチャ (ViT) ▪ 最近の軽量モデル アウトライン

Slide 5

Slide 5 text

AI 5 モデルの高速化・軽量化概略

Slide 6

Slide 6 text

AI 6 ▪エッジデバイス等リソース制限があるユースケースで重要 ▪色々な観点 ▪モデルパラメータ数の削減 ▪FLOPs (MACs) 数の削減 ▪モデルファイルサイズの削減 ▪推論時間の削減 ▪訓練時間の削減 ▪微妙に違うので、使うときは何を重視すべきか、 論文を読むときは何が改善しているのかを気にする ▪本資料は基本的にはFLOPsの削減手法 ▪実デバイスでの推論速度を意識した研究も増加しており 最後に紹介する2モデル(CNN/ViT)は推論速度を意識 モデルの高速化・軽量化

Slide 7

Slide 7 text

AI 7 ▪軽量なモデルアーキテクチャを利用する ▪アーキテクチャ探索 (Neural Architecture Search; NAS) ▪枝刈り (Pruning) ▪アーキテクチャ探索に含まれると考えても良い ▪蒸留 (Distillation) ▪量子化 (Quantization) ▪早期終了、動的計算グラフ (Early Termination, Dynamic Computation Graph) モデル軽量化手法

Slide 8

Slide 8 text

AI 8 ▪軽量なモデルアーキテクチャを利用する ▪アーキテクチャ探索 (Neural Architecture Search; NAS) ▪枝刈り (Pruning) ▪アーキテクチャ探索に含まれると考えても良い ▪蒸留 (Distillation) ▪量子化 (Quantization) ▪早期終了、動的計算グラフ (Early Termination, Dynamic Computation Graph) モデル軽量化手法 今⽇のメイン

Slide 9

Slide 9 text

AI 9 ▪モデルのパラメータを削ることで高速化 ▪Unstructured pruning ▪Structured pruning ▪Structured(チャネル単位)のpruningが一般的 ▪重みのL1/L2 normが小さいフィルタを削除するといった手法[1]から activationの誤差を最小にするといった手法まで色々な手法が存在 枝刈り (Pruning) … … 計算量vs.精度のtrade-offは優れているが 専⽤のハードウェアでないと⾼速化できない 単にチャネル数が減少したネットワークに 再構築が可能で⾼速化の恩恵を受けやすい [1] H. Li, et al., "Pruning Filters for Efficient ConvNets," in Proc. of ICLR’17.

Slide 10

Slide 10 text

AI 10 ▪大規模モデルや複数モデルの知識(e.g. 出力) を利用して小規模なモデルを学習[1] ▪学習データのみで学習するより高精度 ▪最近の手法[2]だとResNet50で ImageNet top-1 77.2→82.8 蒸留 (Distillation) … … 学習画像 学習済みモデル (教師モデル) 学習するモデル (⽣徒モデル) … 正解ラベル (ハード ターゲッ ト) … ソフトターゲット ソフト ターゲット ハード ターゲット [1] G. Hinton, et al., "Distilling the Knowledge in a Neural Network," in Proc. of NIPS Workshop, 2014. [2] L. Beyer, "Knowledge distillation: A good teacher is patient and consistent," in Proc. of CVPR'22.

Slide 11

Slide 11 text

AI 11 ▪浮動小数点数として扱われるニューラルネットワークのweightや activationを整数近似 ▪int8が一般的 ▪一時期binary化が流行った(e.g. XNOR-Net)が最近見ない気が ▪モデルサイズや推論時間が削減できるが量子化誤差により精度低下も 発生する ▪学習済みモデルを量子化する、学習時に量子化を意識した学習をする 等、量子化方法も様々 量子化 (Quantization) B. Jacob, et al., "Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference," in Proc. of CVPR, 2018.

Slide 12

Slide 12 text

AI 12 ▪モデルのforwardの途中で信頼性が高い場合に結果を出力してしまう ことで高速化 ▪別に1つのモデルに閉じている必要はない ▪カスケード型分類器の時代から当たり前といえば当たり前 ▪例えばBranchyNetでは 出力のエントロピーが低い場合に exit 早期終了 (Early Termination) S. Teerapittayanon, et al., "BranchyNet: Fast Inference via Early Exiting from Deep Neural Networks," in Proc. of ICPR’16.

Slide 13

Slide 13 text

AI 13 軽量なモデルアーキテクチャ (CNN)

Slide 14

Slide 14 text

AI 14 ▪入力レイヤサイズ:H x W x N ▪畳み込みカーネル:K x K x N x M convKxK, M と表記 (e.g. conv 3x3, 64) ▪出力レイヤサイズ:H x W x M ▪畳み込みの計算量:H・W・N・K2・M(バイアス項を無視) 畳み込み層の計算量 W H N M K K W H ⼊⼒特徴マップ 畳み込み カーネル N 出⼒特徴マップ * 和 要素積 × M convK×K, M 畳み込み層の計算量は ・画像/特徴マップのサイズ(HW) ・⼊出⼒チャネル数(NM) ・カーネルサイズ(K2) に⽐例

Slide 15

Slide 15 text

AI 15 ▪軽量モデルの始祖的存在 ▪3x3の代わりに1x1のフィルタを利用する(一部をサボる) ▪3x3への入力となるチャネル数を少なくする(1x1で次元圧縮) SqueezeNet conv 1x1, s1x1 conv 1x1, e1x1 conv 3x3, e3x3 concat Fire module 32 128 128 256 256 Squeeze layer Expand layer F. Iandola, et al., "SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size," in arXiv:1602.07360.

Slide 16

Slide 16 text

AI 16 ▪conv3x3のかわりにseparable convを利用 ▪高速モデルのベースライン ▪MobileNetV2**/V3***も存在 MobileNet 通常の畳み込み MobileNetの モジュール A. Howard, et al., "MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications," in arXiv:1704.04861.

Slide 17

Slide 17 text

AI 17 ▪空間方向とチャネル方向の畳み込みを独立に行う ▪Depthwise畳み込み(空間方向) ▪特徴マップに対しチャネル毎に畳み込み ▪計算量:H・W・N・K2・M (M=N) H・W・K2・N ▪Pointwise畳み込み(チャネル方向) ▪1x1の畳み込み ▪計算量:H・W・N・K2・M (K=1) H・W・N・M ▪Depthwise + pointwise (separable) ▪計算量:H・W・N・(K2 + M) ≒ H・W・N・M (※M >> K2) ▪H・W・N・K2・M から大幅に計算量を削減 ▪K2が消える Separable conv W H W H N 1 1 M W H W H N K K N W H W H N M K K 通常 depthwise pointwise

Slide 18

Slide 18 text

AI 18 ▪V2ではボトルネック構造を採用、conv1x1の計算量を相対的に削減 ▪V1ではconv1x1が重く、depthwise3x3は軽すぎ、アンバランスだった MobileNetV1 vs. V2 depthwise conv conv 1x1 depthwise conv conv 1x1 conv 1x1 spatial channel MobileNetV1 MobileNetV2 M. Sandler, et al., "MobileNetV2: Inverted Residuals and Linear Bottlenecks," in Proc. of CVPR'18.

Slide 19

Slide 19 text

AI 19 ▪アーキテクチャ探索手法 ▪Mobile inverted bottleneck にSEモジュールを追加 (MBConv) ▪MBConv3 (k5x5) →ボトルネックでチャネル数を3倍 depthwiseのカーネルが5x5 MNasNet M. Tan, et al., "MnasNet: Platform-Aware Neural Architecture Search for Mobile," in Proc. of CVPR, 2019.

Slide 20

Slide 20 text

AI 20 ▪MnasNetをベースに最適化 ▪SEモジュールを大きめにする ▪(h-)swishの利用、実装の最適化 ▪NetAdaptによるPruning ▪Compactation↓ MobileNetV3 swishが⼊ったMBConvは みんな⼤好きのEfficientNetでも 基本モジュールとして採⽤ A. Howard, et al., "Searching for MobileNetV3," in Proc. of ICCV'19.

Slide 21

Slide 21 text

AI 21 ▪MobileNetのボトルネックとなっているconv1x1を group conv1x1 + channel shuffleに置換 ▪group conv: 入力の特徴マップをG個にグループ化し 各グループ内で個別に畳み込みを行う (計算量 H・W・N・K2・M → H・W・N・K2・M / G) ▪channel shuffle: チャネルの順序を入れ替える reshape + transposeの操作で実現可能 ShuffleNet c shuffle depthwise conv gconv 1x1 spatial channel gconv 1x1 X. Zhang, et al., "ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices," in arXiv:1707.01083.

Slide 22

Slide 22 text

AI 22 ▪FLOPsではなく対象プラットフォームでの実速度を見るべき ▪効率的なネットワーク設計のための4つのガイドラインを提言 1. メモリアクセス最小化のためconv1x1は入力と出力を同じにすべし 2. 行き過ぎたgroup convはメモリアクセスコストを増加させる 3. モジュールを細分化しすぎると並列度を低下させる 4. 要素毎の演算(ReLUとかaddとか)コストは無視できない ▪これらの妥当性がtoyネットワークを通して実験的に示されている ShuffleNet V2 N. Ma, X. Zhang, H. Zheng, and J. Sun, "ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design," in Proc. of ECCV’18.

Slide 23

Slide 23 text

AI 23 ShuffleNet V2

Slide 24

Slide 24 text

AI 24 ▪チャネルをグループ化し、各グループごとに空間的にシフ トするshift演算 (0 FLOPs) とconv1x1でモジュールを構 成 ShiftNet B. Wu, et al., "Shift: A Zero FLOP, Zero Parameter," in arXiv:1711.08141, 2017.

Slide 25

Slide 25 text

AI 25 ▪畳み込み演算をどのようにサボるかがポイント ▪空間方向とチャネル方向を分けて計算 ▪空間方向の畳み込み ▪depthwise conv ▪spatial shift ▪チャネル方向の畳み込み ▪conv1x1 ▪channel shuffle, ▪bottleneck, expansion CNN高速化のまとめ

Slide 26

Slide 26 text

AI 26 軽量なモデルアーキテクチャ (ViT)

Slide 27

Slide 27 text

AI 27 ▪ Self-attentionの計算量が系列長の二乗に比例する(𝑄𝐾Tの内積) ▪ 画像の場合は系列長=画像サイズ(特徴マップのH×W) ▪ ViTの場合は入力画像サイズ224で14x14(入力の1/16)の特徴マップ ▪ 画像サイズを大きくして(e.g. 1280)、高解像度化(e.g. 入力の1/4) すると大変なことになる ▪ この課題をどう解決するかで様々な手法が提案されている ▪ Attentionの範囲を局所的に制限するwindow (local) attention ▪ K, Vの空間サイズを小さくするspatial-reduction attention(Qはそのまま ▪ 実はほぼ上記の2パターン Vision Transformerの計算量

Slide 28

Slide 28 text

AI 28 ▪ 様々なVision Transformerはほぼこの形で表現可能 ▪ Transformer blockのtoken mixerが主な違い ▪ MLP-Mixer, PoolFormer, ShiftViT等のattentionを使わないモデルも token mixerが違うだけのViTと言える ▪ この構造を [1] ではMetaFormerと呼び、この構造が性能に寄与していると主張 階層的Vision Transformerの一般系(CNN的な階層構造) Transformer Block !! × # 4 × % 4 Stage 1 !" × # 8 × % 8 Stage 2 !# × # 16 × % 16 Stage 3 !$ × # 32 × % 32 Stage 4 3×#×% Input Norm Token Mixer FFN Norm + + Patch Embedding Transformer Blocks Patch Merging Transformer Blocks Patch Merging Transformer Blocks Patch Merging Transformer Blocks [1] W. Yu, et al., "MetaFormer is Actually What You Need for Vision," in Proc. of CVPR’22.

Slide 29

Slide 29 text

AI 29 ▪ Token mixer: Shifted Window-based Multi-head Self-attention Swin Transformer Two Successive Swin Transformer Blocks ココがポイント Swin Transformer (ICCV'21 Best Paper) を 完璧に理解する資料 も見てネ! Z. Liu, et al., "Swin Transformer: Hierarchical Vision Transformer using Shifted Windows," in Proc. of ICCV'21.

Slide 30

Slide 30 text

AI 30 ▪ 特徴マップをサイズがMxMのwindowに区切り window内でのみself-attentionを求める ▪ hxw個のパッチが存在する特徴マップにおいて、 (hw)x(hw)の計算量が、M2xM2 x (h/M)x(w/M) = M2hwに削減 ▪ M=7 (入力サイズ224の場合) ▪ C2(stride=4, 56x56のfeature map)だと、8x8個のwindow Window-based Multi-head Self-attention (W-MSA) per window window数 パッチ数の2乗

Slide 31

Slide 31 text

AI 31 ▪ (M/2, M/2) だけwindowをshiftしたW-MSA ▪ 通常のwindow-basedと交互に適用することで 隣接したwindow間でのconnectionが生まれる Shifted Window-based Multi-head Self-attention (SW-MSA) h=w=8, M=4の例

Slide 32

Slide 32 text

AI 32 ▪ Token mixer: Spatial-Reduction Attention (SRA) Pyramid Vision Transformer (PVT) Spatial-Reduction Attention (SRA) がポイント W. Wang, et al., "Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions," in Proc. of ICCV’21.

Slide 33

Slide 33 text

AI 33 ▪ K, V(辞書側)のみ空間サイズを縮小 ▪ 実装としてはConv2D -> LayerNorm ▪ Qはそのままなので 出力サイズは変わらない ▪ 各stageの削減率は8, 4, 2, 1 と 特徴マップの縮小率と整合させる Spatial-Reduction Attention (SRA)

Slide 34

Slide 34 text

AI 34 最近のVision Transformerたち(全部同じじゃないですか!? Swin Trasnformer PoolFormer ShiftViT AS-MLP Shunted Transformer CSWin Transformer ResT SepViT Lite Vision Transformer Pyramid Vision Transformer

Slide 35

Slide 35 text

AI 35 最近の軽量モデル

Slide 36

Slide 36 text

36 ▪CNN, ViTからそれぞれエッジデバイスを意識したモデルを紹介 ▪MobileOne (CNN) ▪EfficientFormer (ViT) 最近の軽量モデル

Slide 37

Slide 37 text

AI 37 ▪モバイル環境ではactivationとbranchingがボトルネックとなる ▪branching: skip connection等の分岐構造。メモリや同期にオーバーヘッ ドが発生する ▪PyTorch → ONNX →CoreMLと変換したモデルをiPhone12で推論時 間を評価 MobileOne P. Kumar, et al., "MobileOne: An Improved One millisecond Mobile Backbone," in Proc. of CVPR'23.

Slide 38

Slide 38 text

AI 38 ▪MobileNet-V1をベースとしたMobileOne Blockをスタック ▪kブロックを利用したover-parameterizationにより小さいモデルの学習を改善 ▪学習時と推論時で構造が異なるre-parameterizationを利用 MobileOneアーキテクチャ MobileOne Block 各ステージのMobileOne Blockパラメータ kブロックを利用したover- parameterizationはS0のみ (それ以上大きいモデルは改善しない) 3x3 convはdepthwise

Slide 39

Slide 39 text

AI 39 ▪学習時は性能向上が見込める multi branchで学習し、 推論時は高速なsingle branchの モデルに変換する ▪VGG⇔RepVGG ▪MobileNet-V1⇔MobileOne ▪みんな大好きYOLOv7 [2] でも (少しだけ)使われている Re-parameterization [1] [1] X. Ding, et al., "RepVGG: Making VGG-style ConvNets Great Again," in Proc. of CVPR’21. [2] C. Wang, et al., "YOLOv7: Trainable Bag-of-freebies Sets New State-of-the-art for Real-time Object Detectors," in Proc. of CVPR'23.

Slide 40

Slide 40 text

AI 40 ▪ Mobile: iPhone 12, Core ML CPU: 2.3GHz Intel Xeon Gold 5118 GPU: RTX-2080Ti, NVIDIA TensorRT ※CPU/GPUはUbuntu desktop GPUはバッチサイズ1 ▪ 網羅的に実際の推論時間が載っていて 参考になる ▪ MobileがGPUと遜色ないのは Apple Neural Engineのおかげ? 精度 vs. 推論時間

Slide 41

Slide 41 text

AI 41 ▪ ViT系はFLOPsの割に遅い おまけ

Slide 42

Slide 42 text

AI 42 ▪ViTの軽量モデルは提案されているが実デバイスでの推論時間は遅い ▪オリジナルのViTはPatch embedding, CNN的な構造を取り入れたLeViTは 4D⇔3D間のreshapeがオーバーヘッドとなっている EfficientFormer Y. Li, "EfficientFormer: Vision Transformers at MobileNet Speed," in Proc. of NeurIPS 2022. iPhone12での推論時間 Reshape overhead Patch embed overhead Patch embed overhead

Slide 43

Slide 43 text

AI 43 ▪Patch embedding→stride=2のconv3x3 ▪前半はPoolFormer的構造、FFNは推論時にfuseできるconv+BN ▪後半は普通のglobal attention ▪特徴マップの小さい後半ステージのみで利用→精度と速度のトレードオフを改善 ▪4D区間と3D区間を分けreshape overheadをなくす EfficientFormer

Slide 44

Slide 44 text

AI 44 ▪アーキテクチャ探索を行いモデルのwidth, depth等を決定 ▪Supernetの学習→slimmingにより、実デバイスの推論時間を制約として 精度を最大化 EfficientFormer

Slide 45

Slide 45 text

AI 45 ▪ NPU: iPhone 12, Core ML CPU: iPhone12 CPU GPU: A100, TensorRT ※GPUはバッチサイズ64 精度 vs. 推論時間

Slide 46

Slide 46 text

AI 46 EfficientFormerV2 Y. Li, "Rethinking Vision Transformers for MobileNet Size and Speed," in arXiv:2212.08059.

Slide 47

Slide 47 text

AI 47 EfficientFormerV2 Y. Li, "Rethinking Vision Transformers for MobileNet Size and Speed," in arXiv:2212.08059. もうCNNで良くない…︖

Slide 48

Slide 48 text

AI 48 ▪ iPhone 12, Core ML Pixel 6 CPU, XNNPACK A100, TensorRT ※GPUはバッチサイズ64 精度 vs. 推論時間

Slide 49

Slide 49 text

AI 49 MobileOne vs. EfficientFormerV2 iPhone 12 推論時間 ImageNet top-1 acc ImageNet top-1 acc ・MobileOne-S1≒EffFormerV2-S0 ・⼤きいモデルはEffFormerV2の⽅が良い ・昔ながらのMobileNet系や ShuffleNetも善戦している

Slide 50

Slide 50 text

AI 50 ▪ 高速化の基本は軽量モデルをベースとし、蒸留、量子化 ▪ 以前のサーベイ (2019) からの進化 ▪CNNは分かりやすい進化はない(RepVGGくらい?) ▪ViT系は急速に進化、モバイル実測でも早くなった! ▪ 実デバイスに応じたプロファイリング、設計が重要 ▪オーバーヘッドとなる可能性のある処理を知っておく! ▪これもShuffleNetV2の時代から言われていたが ▪今回のMobileOne、EfficientFormerは、iPhone+Core MLという GPU的な処理性能とモバイルのオーバヘッドを併せ持つ 最適化の効果が分かりやすい環境での出来事かもしれない まとめ