{"notes":[{"id":"classic-cnns/slak","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"SLaK","subtitle":"カーネルPro Max","author":"Z. Yuan","paperDate":"2022-07-07","publishedOn":"2025-03-09","world":"external/slak","paperTitle":"More ConvNets in the 2020s: Scaling up Kernels Beyond 51x51 using Sparsity","paperUrl":"https://arxiv.org/abs/2207.03620","bibliography":{"title":"More ConvNets in the 2020s: Scaling up Kernels Beyond 51x51 using Sparsity","authors":["Shiwei Liu","Tianlong Chen","Xiaohan Chen","Xuxi Chen","Qiao Xiao","Boqian Wu","Tommi Kärkkäinen","Mykola Pechenizkiy","Decebal Mocanu","Zhangyang Wang"],"url":"https://arxiv.org/abs/2207.03620","pdfUrl":"https://arxiv.org/pdf/2207.03620v3","codeUrl":null,"preprint":{"id":"2207.03620","submittedOn":"2022-07-07","url":"https://arxiv.org/abs/2207.03620"},"publication":{"venue":"ICLR","year":2023,"kind":"conference","url":"https://iclr.cc/virtual/2023/poster/11529"},"citation":"@misc{classiccnnsslak2022,\n  title = {{More ConvNets in the 2020s: Scaling up Kernels Beyond 51x51 using Sparsity}},\n  author = {Shiwei Liu and Tianlong Chen and Xiaohan Chen and Xuxi Chen and Qiao Xiao and Boqian Wu and Tommi Kärkkäinen and Mykola Pechenizkiy and Decebal Mocanu and Zhangyang Wang},\n  year = {2022},\n  eprint = {2207.03620},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2207.03620}\n}\n","citationPath":"/content/papers/citations/classic-cnns/slak.e167e693df01.bib"},"thumbnail":{"src":"/content/papers/assets/b5b8ba279efe42831c7ec4e60395d0559da26774c8519a438783f49f4b814a85.png","width":1640,"height":660},"locale":"ja","path":"/content/papers/ja/classic-cnns/slak.2268b5d78db5.md","headings":[{"id":"問題の定義","text":"問題の定義","depth":2},{"id":"31の先へ","text":"31の先へ","depth":3},{"id":"問題の解決","text":"問題の解決","depth":2},{"id":"ステップ12本の細長いカーネルに分解する","text":"ステップ1：2本の細長いカーネルに分解する","depth":3},{"id":"ステップ2もう少しスパースにもう少し広く","text":"ステップ2：もう少しスパースに、もう少し広く","depth":3},{"id":"slakの構成","text":"SLaKの構成","depth":3},{"id":"考察","text":"考察","depth":2},{"id":"imagenet","text":"ImageNet","depth":3},{"id":"下流タスク","text":"下流タスク","depth":3},{"id":"実際に動かしてみると","text":"実際に動かしてみると","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/convnext","relation":"referenced","topic":""},{"id":"reparameterization/replknet","relation":"referenced","topic":""},{"id":"classic-cnns/resnext","relation":"referenced","topic":""}]},{"id":"classic-cnns/convnext","category":"classic-cnns","legacyPath":"classic-cnns/2201-convnext","legacySlug":"2201-convnext","legacyPaths":[],"title":"ConvNeXt","subtitle":"卷積を再び偉大に","author":"Z. Yuan","paperDate":"2022-01-10","publishedOn":"2024-06-30","paperTitle":"A ConvNet for the 2020s","paperUrl":"https://arxiv.org/abs/2201.03545","bibliography":{"title":"A ConvNet for the 2020s","authors":["Zhuang Liu","Hanzi Mao","Chao-Yuan Wu","Christoph Feichtenhofer","Trevor Darrell","Saining Xie"],"url":"https://arxiv.org/abs/2201.03545","pdfUrl":"https://arxiv.org/pdf/2201.03545","codeUrl":"https://github.com/facebookresearch/ConvNeXt","preprint":{"id":"2201.03545","submittedOn":"2022-01-10","url":"https://arxiv.org/abs/2201.03545"},"publication":{"venue":"CVPR","year":2022,"kind":"conference","url":"https://arxiv.org/abs/2201.03545"},"citation":"@misc{classiccnnsconvnext2022,\n  title = {{A ConvNet for the 2020s}},\n  author = {Zhuang Liu and Hanzi Mao and Chao-Yuan Wu and Christoph Feichtenhofer and Trevor Darrell and Saining Xie},\n  year = {2022},\n  eprint = {2201.03545},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2201.03545}\n}\n","citationPath":"/content/papers/citations/classic-cnns/convnext.801b4060b807.bib"},"thumbnail":{"src":"/content/papers/assets/37882616c5c72df33699003256d14bf7c58c8ea5d1e9e4fb5b1c33268c9a6923.jpg","width":1224,"height":432},"locale":"ja","path":"/content/papers/ja/classic-cnns/convnext.4e647352c822.md","headings":[{"id":"問題の定義","text":"問題の定義","depth":2},{"id":"解決策","text":"解決策","depth":2},{"id":"ネットワークアーキテクチャの再設計","text":"ネットワークアーキテクチャの再設計","depth":3},{"id":"現代的なトレーニング技術の導入","text":"現代的なトレーニング技術の導入","depth":3},{"id":"マクロ設計","text":"マクロ設計","depth":3},{"id":"resnext-化","text":"ResNeXt 化","depth":3},{"id":"逆瓶頸","text":"逆瓶頸","depth":3},{"id":"大きな畳み込み核","text":"大きな畳み込み核","depth":3},{"id":"微細設計","text":"微細設計","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"モデル設定の概要","text":"モデル設定の概要","depth":3},{"id":"imagenet-上での性能","text":"ImageNet 上での性能","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"vision-transformers/convmixer","relation":"comparison","topic":"畳み込みによる画像パッチの混合"},{"id":"vision-transformers/caformer","relation":"comparison","topic":"畳み込みによる画像パッチの混合"},{"id":"reparameterization/replknet","relation":"comparison","topic":"大きなカーネルと簡潔な畳み込み骨格"}]},{"id":"reparameterization/replknet","category":"reparameterization","legacyPath":"reparameterization/2203-replknet","legacySlug":"2203-replknet","legacyPaths":[],"title":"RepLKNet","subtitle":"巨大なカーネル","author":"Z. Yuan","paperDate":"2022-03-13","publishedOn":"2024-07-21","paperTitle":"Scaling Up Your Kernels to 31x31: Revisiting Large Kernel Design in CNNs","paperUrl":"https://arxiv.org/abs/2203.06717","bibliography":{"title":"Scaling Up Your Kernels to 31x31: Revisiting Large Kernel Design in CNNs","authors":["Xiaohan Ding","Xiangyu Zhang","Yizhuang Zhou","Jungong Han","Guiguang Ding","Jian Sun"],"url":"https://arxiv.org/abs/2203.06717","pdfUrl":"https://arxiv.org/pdf/2203.06717","codeUrl":null,"preprint":{"id":"2203.06717","submittedOn":"2022-03-13","url":"https://arxiv.org/abs/2203.06717"},"publication":{"venue":"CVPR","year":2022,"kind":"conference","url":"https://arxiv.org/abs/2203.06717"},"citation":"@misc{reparameterizationreplknet2022,\n  title = {{Scaling Up Your Kernels to 31x31: Revisiting Large Kernel Design in CNNs}},\n  author = {Xiaohan Ding and Xiangyu Zhang and Yizhuang Zhou and Jungong Han and Guiguang Ding and Jian Sun},\n  year = {2022},\n  eprint = {2203.06717},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2203.06717}\n}\n","citationPath":"/content/papers/citations/reparameterization/replknet.c7cc2407aa19.bib"},"thumbnail":{"src":"/content/papers/assets/b85fa678b6e815b9d112b67d68443295a98c80478664ec8053c2e832d89574ca.jpg","width":1140,"height":972},"locale":"ja","path":"/content/papers/ja/reparameterization/replknet.c895ec076bd6.md","headings":[{"id":"問題設定","text":"問題設定","depth":2},{"id":"大きなカーネルの使い方","text":"大きなカーネルの使い方","depth":2},{"id":"大きな-depthwise-カーネルも効率化できる","text":"大きな depthwise カーネルも効率化できる","depth":3},{"id":"大きなカーネルは残差接続に依存している","text":"大きなカーネルは残差接続に依存している","depth":3},{"id":"大きなカーネルには再パラメータ化が必要","text":"大きなカーネルには再パラメータ化が必要","depth":3},{"id":"大きなカーネルは下流タスクの性能を大きく向上させる","text":"大きなカーネルは下流タスクの性能を大きく向上させる","depth":3},{"id":"大きなカーネルは小さな特徴マップにも効果的","text":"大きなカーネルは小さな特徴マップにも効果的","depth":3},{"id":"提案手法","text":"提案手法","depth":2},{"id":"ネットワークアーキテクチャ","text":"ネットワークアーキテクチャ","depth":3},{"id":"考察","text":"考察","depth":2},{"id":"大きなカーネルの評価","text":"大きなカーネルの評価","depth":3},{"id":"imagenet-上の性能","text":"ImageNet 上の性能","depth":3},{"id":"大きなカーネル-cnn-は深い小さなカーネルモデルよりも大きな-erf-を持つ","text":"大きなカーネル CNN は深い小さなカーネルモデルよりも大きな ERF を持つ","depth":3},{"id":"形状バイアス","text":"形状バイアス","depth":3},{"id":"制限","text":"制限","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{"問題定義":"問題設定","深層の大きなカーネルは依然として効率的":"大きな-depthwise-カーネルも効率化できる","問題解決":"提案手法","討論":"考察"},"guide":null,"relatedReading":[{"id":"classic-cnns/convnext","relation":"comparison","topic":"大きなカーネルと簡潔な畳み込み骨格"}]},{"id":"classic-cnns/resnext","category":"classic-cnns","legacyPath":"classic-cnns/1611-resnext","legacySlug":"1611-resnext","legacyPaths":[],"title":"ResNeXt","subtitle":"次元を探る","author":"Z. Yuan","paperDate":"2016-11-16","publishedOn":"2024-07-12","paperTitle":"Aggregated Residual Transformations for Deep Neural Networks","paperUrl":"https://arxiv.org/abs/1611.05431","bibliography":{"title":"Aggregated Residual Transformations for Deep Neural Networks","authors":["Saining Xie","Ross Girshick","Piotr Dollár","Zhuowen Tu","Kaiming He"],"url":"https://arxiv.org/abs/1611.05431","pdfUrl":"https://arxiv.org/pdf/1611.05431","codeUrl":"https://github.com/facebookresearch/ResNeXt","preprint":{"id":"1611.05431","submittedOn":"2016-11-16","url":"https://arxiv.org/abs/1611.05431"},"publication":{"venue":"CVPR","year":2017,"kind":"conference","url":"https://arxiv.org/abs/1611.05431"},"citation":"@misc{classiccnnsresnext2016,\n  title = {{Aggregated Residual Transformations for Deep Neural Networks}},\n  author = {Saining Xie and Ross Girshick and Piotr Dollár and Zhuowen Tu and Kaiming He},\n  year = {2016},\n  eprint = {1611.05431},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1611.05431}\n}\n","citationPath":"/content/papers/citations/classic-cnns/resnext.4945bb6b3dae.bib"},"thumbnail":{"src":"/content/papers/assets/268f5b641a1a85d929d88f2aa0d636902dd9d101824284c32266668493563672.jpg","width":1224,"height":576},"locale":"ja","path":"/content/papers/ja/classic-cnns/resnext.b05c868a098b.md","headings":[{"id":"問題の定義","text":"問題の定義","depth":2},{"id":"下流タスクの一般化能力","text":"下流タスクの一般化能力","depth":3},{"id":"モデル設計に不向き","text":"モデル設計に不向き","depth":3},{"id":"解決策","text":"解決策","depth":2},{"id":"ネットワークアーキテクチャ","text":"ネットワークアーキテクチャ","depth":3},{"id":"モデル設定","text":"モデル設定","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"imagenet-1k-トレーニング結果","text":"ImageNet-1K トレーニング結果","depth":3},{"id":"モデル複雑度の増加","text":"モデル複雑度の増加","depth":3},{"id":"imagenet-1k-モデルのパフォーマンス","text":"ImageNet-1K モデルのパフォーマンス","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/inception-v1","relation":"comparison","topic":"分岐・グループ畳み込み・特徴の再利用"},{"id":"classic-cnns/cspnet","relation":"comparison","topic":"分岐・グループ畳み込み・特徴の再利用"}]}],"text":"2022年の前半、畳み込みネットワークは巻き返しの論文を立て続けに2本出しました。ConvNeXtはSwin Transformerの設計にならってResNetを一歩ずつ改め、カーネルを3×3から7×7に広げました。2か月後のRepLKNetはさらに大胆で、いきなり31×31を使い、再パラメータ化した小さなカーネルで学習を助けました。\n\n\n> [!TIP]\n> \n> この2本は、先に私たちのノートで読めます。\n> \n> - **[[22.01] ConvNeXt：卷積を再び偉大に](/blog/papers/classic-cnns/convnext)**\n> - **[[22.03] RepLKNet：巨大なカーネル](/blog/papers/reparameterization/replknet)**\n\n\nRepLKNetは31×31で止まりました。この論文は、カーネルをもっと大きくできるのか、51×51や61×61にしても正解率は上がり続けるのかを確かめようとしています。著者らはUT Austin、アイントホーフェン工科大学などの大学の所属です。Decebal Mocanuと筆頭著者のShiwei Liuは長年、動的スパース学習を研究していて、論文で引用されているスパース手法のうち何本かは彼ら自身の過去の研究です。今回も彼らはスパース性から攻めています。\n\n## 問題の定義\n\n### 31の先へ\n\n著者らはまず、既存の二つのやり方でConvNeXt-Tのカーネルを大きくしていきました。どの組も120エポックしか学習させず、まずは傾向を見ます。\n\n| 最大カーネル | そのまま拡大 | RepLKNetのやり方 |\n| --- | ---: | ---: |\n| 7×7（元のConvNeXt） | 81.0% | — |\n| 31×31 | 80.5% | **81.5%** |\n| 51×51 | 80.4% | 81.3% |\n| 61×61 | 80.3% | 81.3% |\n\n*表：原論文Table 1から抜粋。ConvNeXt-TのImageNet-1Kでのtop-1正解率です。4つのステージのカーネルは順に小さくなり、たとえば51の行は[51, 49, 47, 13]です。*\n\nそのまま拡大した列では、カーネルが大きいほど悪くなります。RepLKNetのやり方は31×31で持ち直し、元の版より0.5ポイント高くなりますが、それ以上大きくしても伸びません。しかも51×51の版は9.3 GFLOPsで元のConvNeXt-Tの2倍、61×61では11.5 GFLOPsに達します。\n\n著者らの説明は局所性に関するものです。ConvNeXtのstemはストライド4の4×4畳み込みなので、224×224の入力は入った時点で56×56になります。こうした特徴マップに51×51のカーネルを使えば、ほぼ大域的な畳み込みです。ViTの側にも似た経験があり、Swinのような局所ウィンドウの注意は、たいていViTの大域的な注意より良い結果を出します。カーネルが画像全体を覆うほど大きくなると、近くだけを見るという帰納バイアスも失われてしまいます。\n\nしたがって、解決すべきことは二つあります。一つ目は、カーネルをとても大きくしつつ、局所性も保つこと。二つ目は、計算量とパラメータ数がカーネルの一辺の長さの2乗で増えるので、このコストを抑えることです。\n\n## 問題の解決\n\n著者らのレシピは2段階に分かれます。\n\n### ステップ1：2本の細長いカーネルに分解する\n\nM×Mのカーネル1つを、並列する2つの細長い畳み込み、M×NとN×Mに置き換えます。Nは5です。長い辺が遠くを見て、短い辺が局所的な細部を保ちます。RepLKNetで並べていた5×5の小さなカーネルも残し、3本の分岐それぞれにBatchNormをつないでから足し合わせます。著者らは、各分岐にまずBatchNormをつないでから足し合わせることが重要だと、特に述べています。\n\n[![3列の模式図で、大きなカーネルの3種類のやり方を比べている。左の列はConvNeXtの7×7の正方形カーネルで、チャネルあたり49個の重み。中央の列はRepLKNetの51×51の大きな正方形で、右に5×5の小さな正方形が並び、合計2,626個の重み。右の列はSLaKで、51×5の縦長の帯、5×51の横長の帯、5×5の小さな正方形が並び、合計535個の重み。3つのブロックの上には薄い色のマスが散らばっていて、0にした重みを表す。下には40%スパース、幅を1.3倍と記されている](/content/papers/assets/b5b8ba279efe42831c7ec4e60395d0559da26774c8519a438783f49f4b814a85.png)](/content/papers/assets/b5b8ba279efe42831c7ec4e60395d0559da26774c8519a438783f49f4b814a85.png)\n\n*図：本稿で作図。3つのやり方で、チャネルごとに学習する重みの数です。原論文はCC BY-NC-SA 4.0のため、原図は転載していません。*\n\nこう分けるとどれだけ節約できるか、直接数えてみましょう。ここではすべてdepthwise畳み込みで、チャネルごとに1組のカーネルがあります。\n\n```python\n# チャネルごとにカーネルを1つ持つdepthwise畳み込み：チャネルあたり学習する重みの数を比べる\nfor M in (7, 31, 51, 61):\n    dense = M * M                              # M×Mの正方形カーネル1つ\n    rep = M * M + 5 * 5                        # RepLKNet：M×Mに5×5を1つ並べる\n    slak = M * 5 + 5 * M + 5 * 5               # SLaK：M×5、5×Mに5×5を加える\n    print(f\"M={M:>2}：正方形 {dense:>5}、RepLKNet {rep:>5}、細長く分解 {slak:>4}（正方形の{slak / dense:.0%}）\")\n```\n\n```\nM= 7：正方形    49、RepLKNet    74、細長く分解   95（正方形の194%）\nM=31：正方形   961、RepLKNet   986、細長く分解  335（正方形の35%）\nM=51：正方形  2601、RepLKNet  2626、細長く分解  535（正方形の21%）\nM=61：正方形  3721、RepLKNet  3746、細長く分解  635（正方形の17%）\n```\n\nカーネルが小さいうちは、分解するとかえって高くつき、7×7では分解後に元の2倍近くになります。51×51になると、分解後は2割しか残りません。正方形のコストはM²に比例して増え、細長いカーネルはMに比例するだけなので、カーネルが大きいほど差がはっきりします。\n\n十字形に分解すると、1層の畳み込みが見る範囲は実際には十字で、四隅が空いています。ネットワークには多くの層があるので、重ねれば埋まります。9×3の小さな十字で試してみましょう。\n\n```python\nimport torch\nimport torch.nn.functional as F\n\nM, N = 9, 3                                    # 表示しやすいよう、小さめの9×3で示す\nk = torch.zeros(M, M)\nc, h = M // 2, N // 2\nk[:, c - h:c + h + 1] = 1                      # M×Nの縦の帯\nk[c - h:c + h + 1, :] = 1                      # N×Mの横の帯\n\nprint(\"1層の細長い畳み込みで見える位置（9×9のうち何マスか）：\", int(k.sum().item()))\nfor row in k.int().tolist():\n    print(\"\".join(\"■\" if v else \"·\" for v in row))\n\ntwo = F.conv2d(k[None, None], k[None, None], padding=M - 1)[0, 0] > 0   # 2層重ねた後の範囲\ncenter = two[c:c + M, c:c + M]                                          # 元の9×9の範囲に戻す\nprint(f\"2層重ねると、元の9×9の範囲で見えるのは{int(center.sum().item())}マス。範囲全体は{two.shape[0]}×{two.shape[1]}まで広がる\")\n```\n\n```\n1層の細長い畳み込みで見える位置（9×9のうち何マスか）： 45\n···■■■···\n···■■■···\n···■■■···\n■■■■■■■■■\n■■■■■■■■■\n■■■■■■■■■\n···■■■···\n···■■■···\n···■■■···\n2層重ねると、元の9×9の範囲で見えるのは81マス。範囲全体は17×17まで広がる\n```\n\n1層では81マスのうち45マスしか見えませんが、2層重ねるとすべて埋まります。\n\n分解した後、同じくConvNeXt-Tを120エポック学習させると、最大カーネル7、31、51、61の正解率は81.0%、81.3%、81.5%、81.4%で、FLOPsは4.5Gから5.6Gまでしか増えません。51×51が初めて31×31を上回り、しかもコストは5.4 GFLOPsで、RepLKNetのやり方の9.3Gより4割以上少なくなっています。\n\n### ステップ2：もう少しスパースに、もう少し広く\n\nResNeXtは「グループを増やして、ネットワークを広くする」と提案し、ConvNeXtはそれを極端まで推し進めて、depthwise畳み込みを使ったうえでチャネルを広げました。この論文は同じ言葉をスパース版に書き換えていて、著者らは「use sparse groups, expand more width」と書いています。\n\n\n> [!TIP]\n> \n> ResNeXtのグループ畳み込みは、こちらのノートで読めます。\n> \n> - **[[16.11] ResNeXt：次元を探る](/blog/papers/classic-cnns/resnext)**\n\n\n具体的には、畳み込みの重みの40%を0にします。各層のスパース率はSNIPの結果を借ります。ネットワーク全体で$|g \\cdot w|$、つまり勾配と重みの積の大きさに従って最も重要な重みを選び出し、各層にどれだけ残ったかを見て、その割合を使います。各層の中でどの位置を0にするかは、最初はランダムに決めます。学習中は動的スパースを使い、一定間隔で値の最も小さい重みを刈り込み、ランダムな位置に同じ数の重みを生やし直します。非ゼロの重みの総数は変わらず、位置だけが調整され続けます。\n\n浮いた計算量は、各ステージのチャネル数を1.3倍に広げるのに回します。\n\n| 最大カーネル | 細長く分解 | ＋40%スパース | ＋幅1.3倍 |\n| --- | ---: | ---: | ---: |\n| 7×7 | 81.0%（4.5G） | 80.0%（2.6G） | 81.1%（4.5G） |\n| 31×31 | 81.3%（5.0G） | 80.4%（2.9G） | 81.5%（4.8G） |\n| 51×51 | **81.5%**（5.4G） | **80.5%**（3.1G） | **81.6%**（5.0G） |\n| 61×61 | 81.4%（5.6G） | 80.4%（3.2G） | 81.5%（5.2G） |\n\n*表：原論文Table 2から抜粋。ConvNeXt-Tを120エポック学習させたtop-1正解率で、括弧内はFLOPsです。*\n\nスパース化で正解率は約1ポイント下がり、FLOPsも2Gほど減ります。幅を広げ直すと、正解率はまた最高に戻ります。61×61の行の81.5%は、RepLKNetのやり方の61×61での81.3%と比べて、FLOPsが55%少なくなっています。\n\n7×7の行を見てください。レシピ一式を小さなカーネルに使っても、81.0%から81.1%で、ほとんど変わりません。言い換えると、正解率を押し上げているのは大きなカーネルで、細長い分解とスパース化は、大きなカーネルを学習できるように、そして現実的なコストで計算できるようにしているだけです。\n\nタイトルは51×51を超えると言っていて、61×61も確かに試しています。ただ、どの列でも51×51より良くならなかったので、最終的なSLaKは51のままです。\n\n### SLaKの構成\n\nSLaKはConvNeXtの骨格をそのまま使っています。stemはストライド4の4×4畳み込みで、4つのステージのブロック数はSLaK-Tが[3, 3, 9, 3]、SLaK-SとSLaK-Bが[3, 3, 27, 3]です。4つのステージのカーネルは順に[51, 49, 47, 13]で、どれもM×5、5×Mに5×5を加えた形に分解されます。ネットワーク全体で40%をスパースにして幅を1.3倍にし、どのサイズのモデルにも同じ設定を使います。著者らは、個々のモデルのためにパラメータを調整し直してはいません。\n\n## 考察\n\n### ImageNet\n\n本番の300エポックで学習させ、ほかのモデルと比べます。\n\n| モデル | パラメータ数 | FLOPs | Top-1 |\n| --- | ---: | ---: | ---: |\n| Swin-T | 28M | 4.5G | 81.3% |\n| ConvNeXt-T | 29M | 4.5G | 82.1% |\n| **SLaK-T** | 30M（50M） | 5.0G（8.7G） | **82.5%** |\n| ConvNeXt-S | 50M | 8.7G | 83.1% |\n| **SLaK-S** | 55M（91M） | 9.8G（16.7G） | **83.8%** |\n| RepLKNet-31B | 79M | 15.3G | 83.5% |\n| ConvNeXt-B | 89M | 15.4G | 83.8% |\n| **SLaK-B** | 95M（158M） | 17.1G（28.5G） | **84.0%** |\n\n*表：原論文Table 3から抜粋。入力は224×224です。括弧内はスパースによる高速化がない場合のパラメータ数とFLOPsで、原論文では青字で示されています。*\n\nどのサイズでもConvNeXtより高く、差は0.2〜0.7ポイントです。入力を384×384にすると、SLaK-Bは85.5%、ConvNeXt-Bは85.1%で、差は224のときの2倍になります。著者らは、解像度が高いほど大きなカーネルが活躍の場を得ると考えています。\n\nただ、括弧内の数字はもう一度見ておく価値があります。スパースによる高速化がなければ、SLaK-Tはパラメータ50M、8.7 GFLOPsで、ちょうどConvNeXt-Sの大きさです。そしてConvNeXt-Sは83.1%で、SLaK-Tより高いのです。SLaK-Sの91M、16.7GもConvNeXt-Bとほぼ同じで、どちらも83.8%です。高速化なしのコストで比べると、SLaKの優位は消えてしまいます。\n\n### 下流タスク\n\n大きなカーネルが本当に強みを発揮するのは下流タスクです。三つのタスクとも、Tサイズで比べます。\n\n| タスク | ConvNeXt-T（7×7） | ConvNeXt-T（31×31、RepLKNetのやり方） | SLaK-T（51×51） |\n| --- | ---: | ---: | ---: |\n| ADE20KセマンティックセグメンテーションmIoU | 44.6 | 45.0 | **46.2** |\n| PASCAL VOC 2007検出mAP | 80.6 | 81.3 | **82.7** |\n| COCO検出AP<sup>box</sup> | 47.3 | 47.8 | **48.4** |\n\n*表：原論文Table 4、5、6をもとに整理。ADE20KはUperNet、VOCはFaster R-CNN、COCOはCascade Mask R-CNNを使っています。バックボーンは120エポック事前学習し、COCOは12エポック微調整しています。*\n\nカーネルが大きいほど、三つのタスクすべてで良くなります。ADE20KではSLaK-TがConvNeXt-Tより1.6高く、ImageNetでの差よりずっと大きく、ConvNeXt-Sの45.9さえ上回っています。RepLKNetも同じ現象を観察していて、分類のスコアがほぼ同じモデルでも、広い範囲を見る必要がある下流タスクでは大きく差がつくことがあります。\n\n本番の学習にすると、ADE20KではT、S、Bの3サイズがそれぞれ46.0、48.7、49.1から47.6、49.4、50.2に向上しました。COCOを36エポック微調整した場合、AP<sup>box</sup>は50.4から51.3になります。\n\n著者らは有効受容野も測っています。検証セットから50枚の画像を取り出して1024×1024に拡大し、各入力ピクセルが最終層の中心点の出力にどれだけ寄与するかを計算しました。ConvNeXtでは、寄与の大きいピクセルが中央に集中しています。31×31の版はやや広がっていますが、まだ画像全体を覆えていません。SLaKは最も広く広がり、中心から遠く離れた場所にも寄与の大きい点が現れています。\n\n### 実際に動かしてみると\n\nFLOPsは理論値なので、著者らは付録HでA100での実測を補っています。FP32で、スパースによる高速化を一切使わない場合、1秒あたりに処理できる画像数はConvNeXt-Tが1,779枚、Swin-Tが1,305枚、SLaK-Tが709枚です。SLaK-TのスループットはConvNeXt-Tの4割しかありませんが、著者らは、ネットワークが1.3倍広く、カーネルが7倍以上大きいことを考えれば、この差は許容範囲だと述べています。\n\nさらにレシピを一段階ずつ分解し、ConvNeXt-Bに[51, 49, 47, 13]のカーネルを組み合わせて、スループットを測っています。\n\n| やり方 | 1秒あたりの画像数 |\n| --- | ---: |\n| 51×51の正方形カーネルをそのまま使う | 96 |\n| 細長く分解 | 283 |\n| ＋40%スパース | 282 |\n| ＋幅1.3倍 | 198 |\n\n*表：原論文Table 12から抜粋。A100、FP32、スパースによる高速化なしです。*\n\n細長い分解は本当に速く、3倍近くになります。スパース化の段階は283から282で、まったく速くなっていません。スパース性は二値マスクで実装されているので、GPUはそれらの0もきちんと掛け算するからです。一方で、幅を広げたコストは本物で、スループットは3割落ちています。\n\n著者らは限界についての節で率直に書いています。論文中の推論FLOPsはすべて理論値で、ハードウェアが非構造化スパース性に対応するまでは実現できません。つまり、論文のメインの表に黒字で書かれたFLOPsは、未来のGPUに向けて書かれたものなのです。\n\n## 結論\n\n大きな正方形を2本の細長いカーネルに分けるのが、この論文で最も実用的な一手です。局所性は保たれ、コストは一辺の長さに比例して増えるだけで、51×51はついに31×31に勝ち、下流タスクではさらに大きく伸びました。しかも細長い分解はハードウェアを選ばないので、自分のネットワークですぐに試せます。\n\nスパースの半分は残念な結果です。一般的なGPUでは40%の0もそのまま掛け算しなければならないのに、幅を1.3倍にした代償はしっかりかかり、SLaK-TのスループットはConvNeXt-Tの4割しかありません。\n\nというわけで、このPro Maxは、細長いカーネルの半分だけ先に持ち帰れば十分です。スパースの半分は、いつかGPUが対応してくれたら、そのときまた考えましょう。\n","imageSizes":{"/content/papers/assets/b5b8ba279efe42831c7ec4e60395d0559da26774c8519a438783f49f4b814a85.png":{"width":1640,"height":660}}}
