3.1K Views
October 24, 24
スライド概要
AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!
2024年度後期第4回輪読会 【物体検出】 ConvNeXt ConvNeXt V2 京都大学理学部2回 千葉 一世 0
アジェンダ ◼ ConvNeXtの概要 ◼ ResNetからConvNeXtへ ◼ ConvNeXtの性能評価 ◼ ConvNeXt V2の概要 ◼ FCMAE, GRN ◼ ConvNeXt V2の性能評価 1
アジェンダ ◼ ConvNeXtの概要 ◼ ResNetからConvNeXtへ ◼ ConvNeXtの性能評価 ◼ ConvNeXt V2の概要 ◼ FCMAE, GRN ◼ ConvNeXt V2の性能評価 2
ConvNeXtの概要 2020年にViTが登場してから、画像分野にTransfomerが台頭し、 Swin Transfornerではウィンドウをずらすという畳み込みの考えを導入して成功を収めた。 ・Transformer系の問題点は 解像度の二乗で増える計算量や、帰納バイアスが無いこと ・純粋なCNN系のモデルで、Transfomerを超えるモデルの開発を目指す。 ・ResNetをベースとして、Swin Transfomerなどの最新のモデルで用いられている手法を 取り入れ、現代のCNN系モデルを構築していく ・驚くべきことに、Swin Transformerで用いられる手法のほとんどが有効に働いた 実験は、ImageNet-1Kのデータセットを用いて学習し、1位予測の精度によって評価した 3
ConvNeXtの概要 ◼ ResNetからの変更点 • 学習方法の見直し • 様々なデータ拡張と正則化 • ステージ毎のブロック数の見直し • パッチ化の導入 • Depthwise Convの導入とチャンネル数の増加 • 反転ボトルネックへ変更 • 7×7の大きなカーネルサイズを使用 • 活性化関数をReLUからGeLUにし、数を減らす • バッチ正規化をレイヤー正規化にする 画像引用:https://arxiv.org/pdf/2201.03545 4
アジェンダ ◼ ConvNeXtの概要 ◼ ResNetからConvNeXtへ ◼ ConvNeXtの性能評価 ◼ ConvNeXt V2の概要 ◼ FCMAE, GRN ◼ ConvNeXt V2の性能評価 5
ResNetからConvNeXtへ ◼ 学習手法の変更 1. オプティマイザーにAdamWを用いる 2. 学習量を90エポックから300エポックに増やす 3. Mixup, Cutmix, RandAugment, Random Erasing のデータ拡張を行う 4. Stochastic Depthの導入 5. Label Smoothingの導入 6. Layer scaleの導入 精度は76.1% 78.8%に上昇 画像引用:https://arxiv.org/pdf/2201.03545 6
ResNetからConvNeXtへ Stochastic Depth Layer Scale 確率的にブロックを丸ごとスキップする ・学習の速度が上がる ・モデル全体の表現力向上 残差ブロック内の出力のスケールを調整する ・層を深くしても学習が安定する ・初期値を小さくすることで、学習が 徐々に進むようにする 各チャンネルに異なる値をかける 画像引用:https://arxiv.org/pdf/1603.09382, https://arxiv.org/pdf/2103.17239 7
ResNetからConvNeXtへ ◼ ステージ毎のブロック数の見直し ResNetでは、経験的にブロック数を決めており、順に(3, 4, 6, 3)であったが、 Swin Transformerでは、(2, 2, 6, 2) や (2, 2, 18, 2) のブロック数が用いられている。 3つ目のステージは、下流タスクへの応用に重要であるためにブロック数を多く割いているが、 ResNetではそこまで多く設定されていない。 Swin Transformerに倣い、ブロック数として(3, 3, 9, 3)を採用する 精度は78.8% 79.4%に向上 8
ResNetからConvNeXtへ ◼ パッチ化 画像処理では、高解像度のデータを徐々にダウンサンプリングしていくが、 特に、初めのStem層で大きくダウンサンプリングを行う ResNetでは、7×7のストライド2の畳み込みとMaxPoolingでダウンサンプリングするが、 Swin Transformerの、4×4重複無しでパッチに分割する手法を取り入れ、 4×4でストライド4の重複無し畳み込みを用いる これで、79.4% 79.5%に • 何故情報が減っているはずのパッチ化で精度が下がらないのか 画像には無駄な部分が多く、4×4程まで拡大すると、その16ピクセルはほとんど同じ 情報しかもっていない。 つまり、情報量は誤差レベルでしか変化していない 9
ResNetからConvNeXtへ ◼ Depthwise・Pointwise 畳み込みに変更 ResNeXtのモデル設計から、グループ化畳み込みを取り入れ 「グループ数とチャンネル数を多くする」という考えから、 グループ数を最大限増やしたDepthwise畳み込みを採用する。 Depthwise畳み込みに変更するだけでは精度が大きく落ちるので、 その後に1×1畳み込みを合わせて用いる。 チャンネル数もSwin Transformerと同じ96まで増やす Depthwise・Pointwise畳み込みは、純粋な畳み込みが本来一度に 行っている空間方向とチャンネル方向の集約を分離して行っており、 Transformerにおいて、Attentionが空間的な繋がりを計算した後に、 MLPでチャンネル方向の計算をしている事と上手く対応した構造になっている これにより79.5% 80.5%に 画像引用:https://arxiv.org/pdf/2201.03545 10
ResNetからConvNeXtへ Swin Transformer ◼ 反転ボトルネック(Inverted Bottleneck) ・Swin TransformerのMLPでは、中間層の次元が4倍になっている。 ・間のチャンネル数だけを増やす反転ボトルネック構造を用いる ・FLOPsが減少し、精度も80.5% 80.6%に上がった 特に、大きなモデルの ResNet-200/Swin-Bの領域では さらに顕著に精度が上がり、81.9% 82.6%となった 384→96 1×1 1×1 96→384 d3×3 96→96 d3×3 384→384 1×1 96→384 1×1 384→96 画像引用:https://arxiv.org/pdf/2201.03545 11
ResNetからConvNeXtへ ◼ カーネルサイズを大きくする ・ConvNetとVision Transformerの最大の違いは、畳み込みが局所的な情報を層を経る毎に 積み重ねていくのに対して、Attentionは、各層毎に全体の特徴を集約できる ・カーネルサイズを大きくすることによって、より広い受容野の獲得を目指す ・カーネルサイズを大きくすると計算量が増えるので、ブロックの一層目のチャンネル数が 少ない部分に入れる。 これは、TransformerがAttention → MLPの順になっている事と合致する ・実験の結果、7×7が一番精度が良くなった 精度としては、80.6%のまま変化なし 画像引用:https://arxiv.org/pdf/2201.03545 12
ResNetからConvNeXtへ ◼ 活性化関数を変更 ・Transformerでは、ブロック内に活性化関数が MLP層の一つしか含まれないが、 ResNetでは畳み込み層毎に活性化関数があり、 活性化関数の数が多い。 ・1ブロックに1つの活性化関数を使用し、 ReLUをGeLUに変更する。 ・その結果、80.6% 81.3%となり、 Swin Transformerに匹敵する精度となった。 画像引用:https://arxiv.org/pdf/2201.03545 13
ResNetからConvNeXtへ ◼ バッチ正規化を層正規化に変更し、1ブロックに1つとする ・活性化関数と同様、正規化層についてもTransformerでは ResNetと比べて少なく、層正規化を用いている ブロックの初めの正規化層は 精度に影響しなかった ・バッチ正規化層を一つに減らす ・さらに、バッチ正規化を層正規化に置き換える ・ResNetでは、バッチ正規化を層正規化に置き換えても 上手くいかないが、ViTに似たアーキテクチャに 大きく変更したからか、層正規化によって精度が わずかに向上し、 81.3% 画像引用:https://arxiv.org/pdf/2201.03545 81.5%に 14
ResNetからConvNeXtへ ◼ ダウンサンプリング層を重複無し畳み込みに変更 各ステージの初めのダウンサンプリング層についても、 パッチ化のように重複のない2×2畳み込みを用いる そのままでは学習が発散してしまうが、ダウンサンプリングの前に層正規化を入れることによっ て学習が安定する 解像度が変化する際には、層正規化を入れると学習が安定することがわかったので、 さらに、stem層の後と最後のグローバル平均プーリングの後に1つずつ層正規化を入れる。 精度は81.5% 82%まで上昇した 15
ResNetからConvNeXtへ 最終的なモデル構造(Tiny) Pointwise畳み込みを 線形層で実装するために、 (B, C, H, W)→(B, H, W, C) と変形している Conv(3→96, 4×4, s=4) DepthConv(C→C, 7×7, s=1) Conv(192→384, 2×2, s=2) LayerNorm Block(96) Block(C) ×3 Block(384) LayerNorm ×9 Linear(C→4*C) LayerNorm LayerNorm GeLU Conv(96→192, 2×2, s=2) Conv(384→768, 2×2, s=2) Linear(4*C→C) Block(192) LayerNorm ×3 Block(768) Global Average Pooling ×3 Layer Scale Stochastic Depth LayerNorm 16
アジェンダ ◼ ConvNeXtの概要 ◼ ResNetからConvNeXtへ ◼ ConvNeXtの性能評価 ◼ ConvNeXt V2の概要 ◼ FCMAE, GRN ◼ ConvNeXt V2の性能評価 17
ConvNeXtの性能評価 以下のように、チャンネル数とブロック数によりサイズの異なる5つのモデルを構築する • • • • • C = (96,192,384,768) B = (3,3,9,3) ConvNeXt-S : C = (96,192,384,768) B = (3,3,27,3) ConvNeXt-B : C = (128,256,512,1024) B = (3,3,27,3) ConvNeXt-L : C = (192,384,768,1536) B = (3,3,27,3) ConvNeXt-XL : C = (256,512,1024,2048) B = (3,3,27,3) ConvNeXt-T : 円の大きさはFLOPsを表す Swin Transformerと比較して、各モデルサイズで精度が良くなっている 画像引用:https://arxiv.org/pdf/2201.03545 18
ConvNeXtの性能評価 ⚫ ConvNeXtとSwin Transformerの分類タスクでの性能比較 各サイズで、処理速度と精度が上がっている 画像引用:https://arxiv.org/pdf/2201.03545 19
ConvNeXtの性能評価 ⚫ 物体検出・セグメンテーションでの性能 Mask R-CNN, Cascade Mask R-CNNを用いたCOCOでの物体検出(左)と、 UperNetを用いたADE20Kでのセマンティックセグメンテーション(右) いずれのサイズにおいてもSwin Transformerと同等以上の性能を発揮する 画像引用:https://arxiv.org/pdf/2201.03545 20
アジェンダ ◼ ConvNeXtの概要 ◼ ResNetからConvNeXtへ ◼ ConvNeXtの性能評価 ◼ ConvNeXt V2の概要 ◼ FCMAE, GRN ◼ ConvNeXt V2の性能評価 21
ConvNeXt V2の概要 Vision Transformerの分野では、MAE(Masked AutoEncoder)という自己教師あり学習を 事前学習として用いる手法が考案され、成功を収めた しかし、このMAEをCNN系のモデルで事前学習として使用しようとしても上手くいかない 新たに、FCMAEという学習手法と、GRNという正規化層を導入し、MAEによる事前学習を取り 入れたCNN系モデルを開発する その結果、公開されたデータのみの学習でImageNetのSOTAを達成 22
アジェンダ ◼ ConvNeXtの概要 ◼ ResNetからConvNeXtへ ◼ ConvNeXtの性能評価 ◼ ConvNeXt V2の概要 ◼ FCMAE, GRN ◼ ConvNeXt V2の性能評価 23
FCMAE, GRU ⚫ MAE(Masked AutoEncoder) BERTの事前学習手法を元に提案された Vision Transformerの事前学習手法で、 パッチの一部がマスクされた入力から 元の状態を予測する MAEがCNN系のモデルで上手くいかない原因 • マスクされた無駄な部分に多くの計算が必要となる Transformerは、マスクされていない部分だけを入力として処理できるが、 CNNではマスクした部分もそのまま入力しないといけない • マスクされていない部分同士の関係を学習しにくい Transformerでは、Attentionによってマスクされていないパッチ間の関係を直接学習できるが、 CNNでは、マスクされた部分を多く取り込みながら関係性を学習する → マスクがあるという情報を学習するが、実用時はマスクは無い 画像引用:https://arxiv.org/pdf/2111.06377 24
FCMAE, GRU ◼ FCMAE(Fully Convolutional Masked AutoEncoder) 1. ダウンサンプリングの過程でマスクされた領域が混ざらないように、32×32のパッチ化をし てから、60%をランダムにマスクする • マスク部分のリークがなくなる 2. エンコーダでは、Sparse畳み込みを使用し、 • 計算量・メモリ使用量の削減 ファインチューニング時には普通の畳み込みに戻す (点群データの知見を取り入れ、マスクされた画像を疎な行列と捉える) 3. デコーダはシンプルな構造を採用し、ConvNeXtの1ブロックのみを用いる Sparse畳み込み 値のある部分のみを畳み込み演算する 通常の畳み込み 画像引用:https://arxiv.org/pdf/2301.00808, https://nvidia.github.io/MinkowskiEngine/sparse_tensor_network.html Sparse畳み込み 25
FCMAE, GRU ◼ 問題点 : FCMAEで事前学習されたモデルでは、各チャンネルが似た特徴マップを 出力してしまう特徴崩壊が起こっている 多様な特徴を学習できるように、特徴崩壊を防ぐ仕組みが必要になる 特徴マップの可視化 画像引用:https://arxiv.org/pdf/2301.00808 各層毎の特徴マップのコサイン距離 26
FCMAE, GRU ◼ GRN(Global Response Normalization) 脳が持つ側方抑制(lateral inhibition)という、活性化されたニューロンが隣接するニューロンの 活動を抑制する事により、ニューロンの多様性を促進する仕組みから提案された 1)大域的特徴集約 2)正規化 3)調整の3ステップで畳み込み層の出力をチャンネル間で正規化する GRN X ∈ ℛ𝐻×𝑊×𝐶 𝑋𝑖 ∈ ℛ𝐻×𝑊 ・ ∶ L2ノルム 1) 𝒢 𝑋 = ( 𝑋1 , 𝑋2 , … , 𝑋𝐶 ) ∈ ℛ𝐶 𝑋𝑖 ∈ℛ 2) 𝒩 𝑋𝑖 = 𝐶 σ𝑗=1 𝑋𝑗 畳み込みの出力 : i番目のチャンネル : 3) 𝑋𝑖 = 𝛾 ∗ 𝑋𝑖 ∗ 𝒩 𝒢 𝑋 𝑖 + 𝛽 + 𝑋𝑖 (𝛾・𝛽は学習可能なパラメータ) 画像引用:https://arxiv.org/pdf/2301.00808 27
FCMAE, GRU GRNは各ブロックの活性化関数GeLUの後に入れる 実験の結果、LayerScaleは外しても学習が進むようになり、 最終的に右のようなブロックになった 目的であった、畳み込みの出力の多様化が以下で確認できる 画像引用:https://arxiv.org/pdf/2301.00808 28
アジェンダ ◼ ConvNeXtの概要 ◼ ResNetからConvNeXtへ ◼ ConvNeXtの性能評価 ◼ ConvNeXt V2の概要 ◼ FCMAE, GRN ◼ ConvNeXt V2の性能評価 29
ConvNeXt V2の性能評価 以下の8種類の大きさの異なるモデルを提案 ・全てのモデルサイズにおいて、 ConvNeXt・Swin Transformerを上回った ・ConvNeXtはスケーリング可能 画像引用:https://arxiv.org/pdf/2301.00808 30
ConvNeXt V2の性能評価 ◼ ConvNeXt V2の転移学習性能 COCOでの、Mask R-CNNによる物体検出とセグメンテーション(左) ADE20Kでの、UPerNetによるセマンティックセグメンテーション(右) 画像引用:https://arxiv.org/pdf/2301.00808 31
まとめ ConvNeXt ConvNeXt V2 ResNetにSwin Transformerの手法を取り入れることで、 畳み込みのみでTransformer系を超える性能を達成 Sparse畳み込みと、GRNを導入したことにより、 マスクを復元する大規模な事前学習ができるようになった 32
33