{"notes":[{"id":"reparameterization/unireplknet","category":"reparameterization","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"UniRepLKNet","subtitle":"大きなカーネルで領域を越える","author":"Z. Yuan","paperDate":"2023-11-27","publishedOn":"2025-12-14","world":"external/unireplknet","paperTitle":"UniRepLKNet: A Universal Perception Large-Kernel ConvNet for Audio, Video, Point Cloud, Time-Series and Image Recognition","paperUrl":"https://arxiv.org/abs/2311.15599","bibliography":{"title":"UniRepLKNet: A Universal Perception Large-Kernel ConvNet for Audio, Video, Point Cloud, Time-Series and Image Recognition","authors":["Xiaohan Ding","Yiyuan Zhang","Yixiao Ge","Sijie Zhao","Lin Song","Xiangyu Yue","Ying Shan"],"url":"https://arxiv.org/abs/2311.15599","pdfUrl":"https://arxiv.org/pdf/2311.15599v2","codeUrl":"https://github.com/AILab-CVC/UniRepLKNet","preprint":{"id":"2311.15599","submittedOn":"2023-11-27","url":"https://arxiv.org/abs/2311.15599"},"publication":{"venue":"CVPR","year":2024,"kind":"conference","url":"https://openaccess.thecvf.com/content/CVPR2024/html/Ding_UniRepLKNet_A_Universal_Perception_Large-Kernel_ConvNet_for_Audio_Video_Point_CVPR_2024_paper.html"},"citation":"@misc{reparameterizationunireplknet2023,\n  title = {{UniRepLKNet: A Universal Perception Large-Kernel ConvNet for Audio, Video, Point Cloud, Time-Series and Image Recognition}},\n  author = {Xiaohan Ding and Yiyuan Zhang and Yixiao Ge and Sijie Zhao and Lin Song and Xiangyu Yue and Ying Shan},\n  year = {2023},\n  eprint = {2311.15599},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2311.15599}\n}\n","citationPath":"/content/papers/citations/reparameterization/unireplknet.df5ca5b9a0be.bib"},"thumbnail":{"src":"/content/papers/assets/8dc0f2f7d7d64f92bea8485e2e00428225297bb13404dee50fe50f28385d34c8.png","width":1680,"height":384},"locale":"ja","path":"/content/papers/ja/reparameterization/unireplknet.3a5454a3701e.md","headings":[{"id":"問題の定義","text":"問題の定義","depth":2},{"id":"33の1層が3つの役割を担う","text":"3×3の1層が3つの役割を担う","depth":3},{"id":"問題の解決","text":"問題の解決","depth":2},{"id":"基準となる構造","text":"基準となる構造","depth":3},{"id":"指針1安価な構造で深くする","text":"指針1：安価な構造で深くする","depth":3},{"id":"指針2小さなdilated畳み込みで再パラメータ化する","text":"指針2：小さなdilated畳み込みで再パラメータ化する","depth":3},{"id":"指針3カーネルサイズは下流タスクで決める","text":"指針3：カーネルサイズは下流タスクで決める","depth":3},{"id":"指針4深くするときは小さなカーネルを足す","text":"指針4：深くするときは小さなカーネルを足す","depth":3},{"id":"考察","text":"考察","depth":2},{"id":"画像","text":"画像","depth":3},{"id":"ほかのモダリティ","text":"ほかのモダリティ","depth":3},{"id":"代償","text":"代償","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"reparameterization/replknet","relation":"referenced","topic":""},{"id":"classic-cnns/slak","relation":"referenced","topic":""},{"id":"lightweight/senet","relation":"referenced","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/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":"lightweight/senet","category":"lightweight","legacyPath":"lightweight/1709-senet","legacySlug":"1709-senet","legacyPaths":[],"title":"SENet","subtitle":"強く絞ってください","author":"Z. Yuan","paperDate":"2017-09-05","publishedOn":"2024-06-28","paperTitle":"Squeeze-and-Excitation Networks","paperUrl":"https://arxiv.org/abs/1709.01507","bibliography":{"title":"Squeeze-and-Excitation Networks","authors":["Jie Hu","Li Shen","Samuel Albanie","Gang Sun","Enhua Wu"],"url":"https://arxiv.org/abs/1709.01507","pdfUrl":"https://arxiv.org/pdf/1709.01507","codeUrl":null,"preprint":{"id":"1709.01507","submittedOn":"2017-09-05","url":"https://arxiv.org/abs/1709.01507"},"publication":{"venue":"CVPR","year":2018,"kind":"conference","url":"https://arxiv.org/abs/1709.01507"},"citation":"@misc{lightweightsenet2017,\n  title = {{Squeeze-and-Excitation Networks}},\n  author = {Jie Hu and Li Shen and Samuel Albanie and Gang Sun and Enhua Wu},\n  year = {2017},\n  eprint = {1709.01507},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1709.01507}\n}\n","citationPath":"/content/papers/citations/lightweight/senet.1766a7978dde.bib"},"thumbnail":{"src":"/content/papers/assets/322f16ed8c782ffbdd7d7db3e8292c991908e3543dc69e1addd9238e22484363.jpg","width":1688,"height":394},"locale":"ja","path":"/content/papers/ja/lightweight/senet.73180da00315.md","headings":[{"id":"問題の定義","text":"問題の定義","depth":2},{"id":"問題の解決","text":"問題の解決","depth":2},{"id":"モデルアーキテクチャ","text":"モデルアーキテクチャ","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"画像分類の効果の表示","text":"画像分類の効果の表示","depth":3},{"id":"軽量モデルでの効果の表示","text":"軽量モデルでの効果の表示","depth":3},{"id":"squeeze-の重要性","text":"Squeeze の重要性","depth":3},{"id":"excitation-の重要性","text":"Excitation の重要性","depth":3},{"id":"その他の実験結果","text":"その他の実験結果","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"lightweight/mobilenet-v3","relation":"comparison","topic":"軽量ネットワークのチャネル Attention"},{"id":"lightweight/pp-lcnet","relation":"comparison","topic":"軽量ネットワークのチャネル Attention"}]}],"text":"RepLKNetがカーネルを31×31まで広げてから、大きなカーネルは人気の研究テーマになりました。SLaKは帯状に分けて51×51まで広げ、物体検出やセグメンテーションなど、さまざまなタスクへ持ち込む研究も現れました。\n\n筆頭著者のXiaohan DingはRepLKNetとRepVGGの著者です。今回はTencent AI Labで、香港中文大学の研究者とともに大きなカーネルを使うネットワークの構造を見直します。既存の構造は他の設計をそのまま引き継いだものが多く、RepLKNetはSwin Transformer、SLaKはConvNeXtに倣っています。しかしConvNeXt自体のカーネルは中程度の7×7です。大きなカーネル専用の構造は、まだあまり研究されていません。\n\n論文はもう1つの問いにも答えようとしています。Transformerは画像、音声、点群、時系列で地位を固めました。畳み込みネットワークは画像の外でも競争力を保てるのでしょうか。\n\n\n> [!TIP]\n> \n> 大きなカーネルをたどる道の、前の2つの停留所はこちらです。\n> \n> - **[[22.03] RepLKNet：巨大なカーネル](/blog/papers/reparameterization/replknet)**\n> - **[[22.07] SLaK：カーネルPro Max](/blog/papers/classic-cnns/slak)**\n\n\n## 問題の定義\n\n### 3×3の1層が3つの役割を担う\n\n著者は小さなカーネルを使うネットワークの古い問題から考えます。3×3畳み込みを積んだネットワークに1層足すと、3つのことが同時に起こります。\n\n1. 受容野が広がる\n2. 空間特徴の抽象度が上がる。たとえば角やテクスチャから物体の形へ進む\n3. 深さ、パラメータ、非線形性が増し、表現力が高まる\n\n小さなカーネルのネットワークは層を積んで受容野を広げるしかないため、この3つが結び付いています。大きなカーネルなら、深くしなくても広い範囲を見られます。数層で十分な有効受容野を確保し、残る計算資源をより効率的な構造へ回して、2番目と3番目の役割を担わせられます。\n\n著者はこの3つを分けて設計すべきだと考えます。以下の4つの指針は、すべてここから出発します。\n\n## 問題の解決\n\n### 基準となる構造\n\n[![原論文Figure 1。左は4ステージのバックボーンで、入力をまず4倍ダウンサンプリングし、Stage 1からStage 4の間は2倍ずつダウンサンプリングする。中央はStage 3を展開し、橙色のLarK Blockと青いSmaK Blockが並び、各LarKの後にSmaKが2つ続く。右の破線枠はLarK内部で、Dilated Reparam Blockによるdepthwise畳み込み、BN、平均プーリング・ReLU・sigmoidの乗算を含むSE Block、FFN、BNの順に進み、drop pathと残差加算を経る。](/content/papers/assets/95a64d551639000b4d79a5746c5aa0f05d914227d468929959577bade902ad80.png)](/content/papers/assets/95a64d551639000b4d79a5746c5aa0f05d914227d468929959577bade902ad80.png)\n\n*Dingらの原論文Figure 1。[**PDF 2ページ**](https://arxiv.org/pdf/2311.15599v2#page=2)より。原図のキャプションは省略。*\n\nまず実験の基準を見ます。4ステージでチャネル数は$C$、$2C$、$4C$、$8C$、ブロック数は$(3, 3, 9, 3)$と、ConvNeXt-Tと同じです。ブロックもConvNeXtに似ており、depthwise畳み込みの後にGRN付きFFNを置きます。ただしLayerNormをBatchNormへ変え、推論時に畳み込みへ融合できるようにします。最初のステージは3×3、残りは13×13です。\n\n構造探索ではImageNetを100 epochだけ学習し、その後ADE20KでUperNetを接続してセグメンテーションを行います。大きなカーネルの利点は下流タスクで現れやすく、ImageNet精度だけでは差を見落としやすいため、著者はセグメンテーションも見ることを強調します。\n\n### 指針1：安価な構造で深くする\n\n受容野を大きなカーネルに任せるなら、深さは広域の空間演算を必要としない構造で増やします。著者は各ブロックに小さな構造を加え、4種類を試しました。\n\n| 追加する構造 | スループット（枚／秒） | ImageNet | ADE20K mIoU |\n| --- | ---: | ---: | ---: |\n| なし | 1954 | 81.2% | 45.1 |\n| ボトルネック（1×1、DW 3×3、1×1） | 1716 | 81.5% | 46.3 |\n| 1×1を2つ | 1745 | 81.3% | 46.2 |\n| DW 3×3を2つ | 1659 | 81.3% | 45.4 |\n| SE Block | **1863** | **81.6%** | **46.5** |\n\n*表：原論文Table 1より。A100、バッチ128。*\n\nSE Blockはチャネル間の情報交換と空間集約を両方行います。空間集約には非常に安価なグローバル平均プーリングを使い、結果も速度も最良でした。\n\n\n> [!TIP]\n> \n> SE Blockがグローバル平均プーリングでチャネルに重みを付ける仕組みは、こちらで読めます。\n> \n> - **[[17.09] SENet：強く絞ってください](/blog/papers/lightweight/senet)**\n\n\n### 指針2：小さなdilated畳み込みで再パラメータ化する\n\nRepLKNetは、大きなカーネルの学習時に小さなカーネルを並列に置き、小さいスケールのパターンを捉えるとよいことを示しました。学習後にBNを畳み込みへ融合すれば、小さなカーネルをゼロ埋めして大きなカーネルへ足し込み、推論時は1層にできます。\n\nこの論文はさらに一歩進みます。小さなスケールのほかに、疎なパターンもあります。特徴マップのあるピクセルが、すぐ隣より数マス先のピクセルと強く関係する場合です。これを捉えるのがdilated convolutionの得意分野です。dilation率$r$なら、サンプリング点の間に$r-1$ピクセルの間隔を空けます。\n\n[![原論文Figure 2。上半分は構造の視点で、入力を9×9・dilation 1、5×5・1、5×5・2、3×3・3、3×3・4の5分岐へ送り、それぞれBNを通して加算する。右のRe-parameterize矢印の先は9×9・dilation 1の単一畳み込み。下半分はパラメータの視点で、各分岐の重みを格子で表し、dilated畳み込みの重みは間に空白を挟む疎な格子へ展開される。すべて足すと9×9の格子になり、濃淡は異なる分岐の重みの重なりを示す。](/content/papers/assets/8dc0f2f7d7d64f92bea8485e2e00428225297bb13404dee50fe50f28385d34c8.png)](/content/papers/assets/8dc0f2f7d7d64f92bea8485e2e00428225297bb13404dee50fe50f28385d34c8.png)\n\n*Dingらの原論文Figure 2。[**PDF 4ページ**](https://arxiv.org/pdf/2311.15599v2#page=4)より。原図のキャプションは省略。*\n\n図の例は$K=9$ですが、実際のネットワークは$K=13$です。重要なのは下半分で、dilation率$r$の$k\\times k$畳み込みは、間に0を挟んだサイズ$(k-1)r+1$の疎なカーネルと等価です。カーネルになれば、大きなカーネルへ加算できます。\n\nまずdilated畳み込みと展開した疎なカーネルの結果が同じになることを確かめます。\n\n```python\nimport torch\nimport torch.nn.functional as F\n\ndef dilate(w, r):\n    \"\"\"k×kの重みを展開し、隣接する重みの間にr-1個の0を挿入する。\"\"\"\n    c, _, k, _ = w.shape\n    size = (k - 1) * r + 1\n    big = torch.zeros(c, 1, size, size)\n    big[:, :, ::r, ::r] = w\n    return big\n\ntorch.manual_seed(0)\nc = 4\nx = torch.randn(1, c, 32, 32)\nw = torch.randn(c, 1, 3, 3)\ny_dilated = F.conv2d(x, w, padding=3, dilation=3, groups=c)   # 3×3、dilation率3の畳み込み\ny_sparse = F.conv2d(x, dilate(w, 3), padding=3, groups=c)     # 7×7の疎なカーネルへ展開\nprint(\"展開後のカーネル：\", tuple(dilate(w, 3).shape[-2:]), \"非ゼロのマス数\", int((dilate(w, 3)[0] != 0).sum()))\nprint(\"2つの計算方法の最大差：\", f\"{(y_dilated - y_sparse).abs().max():.1e}\")\n```\n\n```text\n展開後のカーネル： (7, 7) 非ゼロのマス数 9\n2つの計算方法の最大差： 0.0e+00\n```\n\n続いて論文の既定値に沿い、13×13の主カーネルに5分岐を並列に置きます。サイズは$k=(5,7,3,3,3)$、dilation率は$r=(1,2,3,4,5)$です。学習時は別々に計算して足し、推論前に各分岐を展開して13×13へゼロ埋めし、主カーネルへ足し込みます。\n\n```python\nK = 13\nbranches = [(5, 1), (7, 2), (3, 3), (3, 4), (3, 5)]          # (カーネルサイズk, dilation率r)\nw_main = torch.randn(c, 1, K, K)\nw_small = [torch.randn(c, 1, k, k) for k, _ in branches]\n\n# 学習時：13×13と5つの小さなdilated畳み込みを別々に計算して加算\ny_train = F.conv2d(x, w_main, padding=K // 2, groups=c)\nfor (k, r), w in zip(branches, w_small):\n    y_train += F.conv2d(x, w, padding=r * (k - 1) // 2, dilation=r, groups=c)\n\n# 推論前：各分岐を展開して13×13へゼロ埋めし、主カーネルへ加算\nmerged = w_main.clone()\nfor (k, r), w in zip(branches, w_small):\n    big = dilate(w, r)\n    pad = (K - big.shape[-1]) // 2\n    merged += F.pad(big, [pad] * 4)\n    print(f\"{k}×{k}、dilation率{r} → 等価サイズ{big.shape[-1]}×{big.shape[-1]}\")\ny_infer = F.conv2d(x, merged, padding=K // 2, groups=c)\nprint(\"出力値の大きさ：\", f\"{y_train.abs().max():.1f}\")\nprint(\"1つの13×13へ融合した後の最大差：\", f\"{(y_train - y_infer).abs().max():.1e}\")\n```\n\n```text\n5×5、dilation率1 → 等価サイズ5×5\n7×7、dilation率2 → 等価サイズ13×13\n3×3、dilation率3 → 等価サイズ7×7\n3×3、dilation率4 → 等価サイズ9×9\n3×3、dilation率5 → 等価サイズ11×11\n出力値の大きさ： 59.9\n1つの13×13へ融合した後の最大差： 2.7e-05\n```\n\n6つの畳み込みを1つにまとめても、残るのは浮動小数点の加算順序による丸め誤差だけです。実際のモジュールは各分岐の後にBNもあるので、推論前にBNのスケールとシフトを畳み込みの重みとバイアスへ融合します。RepVGGと同じ方法です。\n\n\n> [!TIP]\n> \n> BNを畳み込みへ融合し、並列分岐を1つにまとめる方法はこちらで読めます。\n> \n> - **[[21.01] RepVGG：VGG を再び偉大に](/blog/papers/reparameterization/repvgg)**\n\n\n効果はあるのでしょうか。著者は分岐数を同じにした2つのdilationなし版と比べます。1つはカーネルサイズ$(5,7,3,3,3)$をそろえ、もう1つは等価サイズ$(5,13,7,9,11)$をそろえます。推論時はすべて同じ13×13で、違いは学習時だけです。\n\n| 再パラメータ化 | ImageNet | ADE20K mIoU |\n| --- | ---: | ---: |\n| なし | 81.44 ± 0.04% | 45.78 ± 0.05 |\n| 小さなdilated畳み込み | **81.63 ± 0.02%** | **46.37 ± 0.10** |\n| 同じカーネルサイズ、dilationなし | 81.55 ± 0.01% | 46.07 ± 0.07 |\n| 同じ等価サイズ、dilationなし | 81.59 ± 0.02% | 46.17 ± 0.04 |\n\n*表：原論文Table 2より。3回の学習の平均と標準偏差。*\n\ndilated版が最良で、再パラメータ化なしよりmIoUが0.6高くなります。著者は疎なパターンを捉える能力が役立ったと解釈しています。単に小さなカーネルや異なる受容野サイズを増やすだけでは効果が劣ります。\n\n### 指針3：カーネルサイズは下流タスクで決める\n\n各ステージで使うカーネルサイズを見ます。\n\n| 各ステージのカーネル | スループット（枚／秒） | ImageNet | ADE20K mIoU |\n| --- | ---: | ---: | ---: |\n| 3、13、13、13（基準） | 1863 | 81.6% | **46.5** |\n| 3、11、11、11 | 1876 | 81.6% | 45.5 |\n| 3、15、15、15 | 1851 | 81.7% | 45.9 |\n| 3、3、13、13 | 2006 | 81.7% | 46.1 |\n| 13、13、13、13 | 1547 | 81.6% | 44.9 |\n\n*表：原論文Table 3の一部の行を抜粋。*\n\nImageNet精度はほぼ81.6%付近のままですが、mIoUは44.9〜46.5まで動きます。分類だけを見ると、カーネルサイズはあまり影響しないと考えてしまいます。\n\n不思議なのは、カーネルを15へ広げたり、最初のステージにも13を使ったりすると、mIoUが下がることです。著者はUperNetが原因だと疑います。UperNetはバックボーンの浅い層と深い層の特徴を組み合わせ、浅い層は局所情報だけを持つと想定しています。浅い層に大きなカーネルを使うと、特徴の局所性が薄れ、組み合わせの効果が落ちます。\n\n著者は第4ステージの出力だけをUperNetへ渡し、最終特徴の品質を単独で評価しました。この場合は15が最高の42.7、最初のステージにも13を使う版は基準と同じ42.4、11が最低の41.9でした。大きなカーネルで特徴が悪化したのではなく、浅い層の特徴がUperNetに合わなくなったのです。\n\nカーネルサイズは、下流で何につなぐかに応じて決めます。一般的な画像タスクでは、中・高層の既定値を13×13としています。\n\n### 指針4：深くするときは小さなカーネルを足す\n\n最後はモデルの拡大です。第3ステージのブロックを9から27へ増やすとき、追加する18個にも大きなカーネルが必要かを調べます。Dilated Reparam Blockを使うものをLarK Block、DW 3×3を使うものをSmaK Blockと呼びます。\n\n| 第3ステージの構成 | スループット（枚／秒） | ImageNet | ADE20K mIoU |\n| --- | ---: | ---: | ---: |\n| LarK 9個（元の浅い版） | 1863 | 81.6% | 46.5 |\n| LarK 27個 | 1145 | 82.3% | **49.0** |\n| LarK 14個とSmaK 13個を交互に配置 | 1229 | 82.3% | 48.8 |\n| LarK 9個、SmaK 18個 | 1264 | 82.3% | 48.8 |\n| 同上、SmaKのDW 3×3を除去 | 1289 | 82.2% | 47.8 |\n\n*表：原論文Table 4より。*\n\nすべて大きなカーネルにしてもmIoUは0.2増えるだけで、速度は約1割落ちます。受容野には9個で十分なので、深さを増やす部分は小さなカーネルで済みます。\n\n最後の行も興味深い結果です。SmaKの3×3を除くと速度は少ししか上がらないのに、mIoUは1ポイント下がります。受容野への寄与は小さくても、空間特徴の抽象度を積み上げているのです。冒頭の2番目の役割に対応します。\n\n最終的なUniRepLKNetはこの方針で並べます。S以上では第3ステージにLarK 9個とSmaK 18個を置き、各LarKの後にSmaKを2つ続けます。構造図の中央と同じです。最小のTは9個ずつです。\n\n## 考察\n\n### 画像\n\nまずImageNet-1Kだけで学習した結果です。スループットはA100、バッチ128で測定します。\n\n| モデル | パラメータ数 | スループット（枚／秒） | top-1 |\n| --- | ---: | ---: | ---: |\n| SLaK-T | 30M | 1312 | 82.5% |\n| InternImage-T | 30M | 1292 | 83.5% |\n| UniRepLKNet-T | 31M | **1804** | 83.2% |\n| ConvNeXt-S | 50M | 1182 | 83.1% |\n| UniRepLKNet-S | 56M | 1265 | **83.9%** |\n\n*表：原論文Table 6の一部の行を抜粋。*\n\nUniRepLKNet-TはInternImage-Tより0.3ポイント低い一方、4割速くなります。ImageNet-22Kで事前学習し、解像度384を使う最大のUniRepLKNet-XLはInternImage-XLと同じ88.0%で、スループットは131対114です。\n\n下流タスクでも良い結果です。ADE20KでUniRepLKNet-TのmIoUは48.6（シングルスケール）、ConvNeXt-Tは46.0です。XLは55.6（マルチスケール）、COCOのbox APは56.4です。\n\n### ほかのモダリティ\n\n同じネットワークを別のデータに使う方法は単純です。すべて$B\\times C'\\times H\\times W$のテンソルに整理し、第1層の入力チャネル数$C'$だけを変え、残りはそのまま使います。\n\n- **音声**：時間$T$、周波数$F$のスペクトログラムを、単一チャネルの$T\\times F$画像として扱う。\n- **時系列**：Corrformerの埋め込み層で潜在空間へ射影し、単一チャネルの2次元画像へ整形する。\n- **点群**：数層の畳み込みでX、Y、Zの3視点の投影画像を作り、224×224の3チャネル画像として扱う。\n- **動画**：224×224の16フレームを4×4に並べ、896×896の1枚の大きな画像にする。\n\n動画は特に大胆です。フレーム間の時間関係を見る手段は、並べた画像の境界をカーネルがまたぐことだけです。\n\n4つのモダリティの結果を並べます。\n\n| タスク | UniRepLKNet-S | 比較対象 |\n| --- | --- | --- |\n| 音声コマンド認識（Speech Commands V2） | 98.5%、55.5M、事前学習なし | Audio-MAE 98.3%、86.2M、AudioSet-2Mで事前学習 |\n| 全球気温予測（MSE、低いほど良い） | 7.602 | Corrformer 7.709 |\n| 3D形状分類（ModelNet-40 OA） | 93.2% | DGCNN、KPConv 92.9% |\n| 動作認識（Kinetics-400） | 54.8%、事前学習なし | MViTv2-B 81.2%、ImageNet-1Kで事前学習 |\n\n*表：原論文Table 9〜Table 12の一部の行を抜粋。*\n\n音声、時系列、点群では専用設計のモデルに並ぶか、わずかに上回ります。動画では大差があり、著者も専用の動画モデルに及ばないと認めています。比較対象に挙げるのは、同じく汎用をうたうImageBind（50.0%）とMeta-Transformer（47.3%）で、両者は大量の事前学習データも使っています。\n\nここでもカーネルサイズが重要です。同じ前処理と学習設定で、別の畳み込みネットワークへ変えます。\n\n| モデル（カーネル） | 音声 | 動画 |\n| --- | ---: | ---: |\n| ResNet-101（3） | 73.6% | 41.3% |\n| ConvNeXt-S（7） | 94.3% | 48.5% |\n| UniRepLKNet-S（11） | 94.7% | 51.7% |\n| UniRepLKNet-S（13） | **98.5%** | **54.8%** |\n\n*表：原論文Table 13の一部の列を抜粋。*\n\nResNet-101の音声精度は73.6%ですが、カーネルを13へ広げると98.5%になります。スペクトログラムもフレームを並べた画像も、一度に広い範囲を見る必要があり、大きなカーネルの強みが生きます。\n\n### 代償\n\n著者は結論で、dilated分岐は学習時に多くの資源を使うと明記しています。5分岐がそれぞれ畳み込みとBNを計算するため、推論時には1本に融合できても、学習時の負担は残ります。\n\n推論速度も実装次第です。大きなdepthwiseカーネルには公式の高速実装が必要です。GitHubで[学習が遅いとの報告](https://github.com/AILab-CVC/UniRepLKNet/issues/15)があった際、著者の最初の質問はその実装を入れたかどうかでした。[4090で測定した利用者](https://github.com/AILab-CVC/UniRepLKNet/issues/22)からはUniRepLKNet-SがConvNeXt-Bより速くないとの報告もあり、著者は論文の測定はA100で、速度順位はハードウェアに依存すると答えています。\n\n## 結論\n\nUniRepLKNetの4つの指針は、同じことを述べています。大きなカーネルは広く見る、小さなカーネルは抽象度を積み上げる、SEのような安価な構造は深くする。それぞれ役割を担い、1つの演算に3つを背負わせないという方針です。\n\n最も持ち帰りやすいのはDilated Reparam Blockです。学習時に小さなdilated畳み込みを並べ、推論時に大きなカーネルへ融合すれば、デプロイ側の構造は同じです。上のコードが融合のロジックすべてで、BNの融合を足せば完成します。\n\n一方、マルチモーダル実験はさらに意外です。音声スペクトログラムを画像とし、動画を並べた画像に変えるだけで、専用設計を加えなくても、畳み込みネットワークはTransformerが得意とする複数の領域で互角か、わずかに上回れました。\n","imageSizes":{"/content/papers/assets/95a64d551639000b4d79a5746c5aa0f05d914227d468929959577bade902ad80.png":{"width":960,"height":621},"/content/papers/assets/8dc0f2f7d7d64f92bea8485e2e00428225297bb13404dee50fe50f28385d34c8.png":{"width":1680,"height":384}}}
