{"notes":[{"id":"classic-cnns/overlock","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"OverLoCK","subtitle":"先看大局","author":"Z. Yuan","paperDate":"2025-02-27","publishedOn":"2026-02-24","paperTitle":"OverLoCK: An Overview-first-Look-Closely-next ConvNet with Context-Mixing Dynamic Kernels","paperUrl":"https://arxiv.org/abs/2502.20087","bibliography":{"title":"OverLoCK: An Overview-first-Look-Closely-next ConvNet with Context-Mixing Dynamic Kernels","authors":["Meng Lou","Yizhou Yu"],"url":"https://arxiv.org/abs/2502.20087","pdfUrl":"https://arxiv.org/pdf/2502.20087v3","codeUrl":"https://github.com/LMMMEng/OverLoCK","preprint":{"id":"2502.20087","submittedOn":"2025-02-27","url":"https://arxiv.org/abs/2502.20087"},"publication":{"venue":"CVPR","year":2025,"kind":"conference","url":"https://openaccess.thecvf.com/content/CVPR2025/html/Lou_OverLoCK_An_Overview-first-Look-Closely-next_ConvNet_with_Context-Mixing_Dynamic_Kernels_CVPR_2025_paper.html"},"citation":"@misc{classiccnnsoverlock2025,\n  title = {{OverLoCK: An Overview-first-Look-Closely-next ConvNet with Context-Mixing Dynamic Kernels}},\n  author = {Meng Lou and Yizhou Yu},\n  year = {2025},\n  eprint = {2502.20087},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2502.20087}\n}\n","citationPath":"/content/papers/citations/classic-cnns/overlock.a1eecba8875b.bib"},"thumbnail":{"src":"/content/papers/assets/99458c439c8f5458671d09ec6d68f52f31a20702b6a0bdba99e2fe33dbf86ea7.png","width":2112,"height":681},"locale":"zh-hant","path":"/content/papers/zh-hant/classic-cnns/overlock.f654e8b388c7.md","headings":[{"id":"定義問題","text":"定義問題","depth":2},{"id":"中間層缺一個方向","text":"中間層缺一個方向","depth":3},{"id":"卷積核看不遠","text":"卷積核看不遠","depth":3},{"id":"解決問題","text":"解決問題","depth":2},{"id":"拆成三個子網路","text":"拆成三個子網路","depth":3},{"id":"contmix把全圖塞進卷積核","text":"ContMix：把全圖塞進卷積核","depth":3},{"id":"四個尺寸","text":"四個尺寸","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"imagenet","text":"ImageNet","depth":3},{"id":"偵測與分割","text":"偵測與分割","depth":3},{"id":"一步一步加上去","text":"一步一步加上去","depth":3},{"id":"和其他動態運算子比","text":"和其他動態運算子比","depth":3},{"id":"實際用起來","text":"實際用起來","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/internimage","relation":"referenced","topic":""},{"id":"classic-cnns/dcnv4","relation":"referenced","topic":""}]},{"id":"classic-cnns/internimage","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"InternImage","subtitle":"大力出奇蹟？","author":"Z. Yuan","paperDate":"2022-11-10","publishedOn":"2025-09-04","world":"external/internimage","paperTitle":"InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Convolutions","paperUrl":"https://arxiv.org/abs/2211.05778","bibliography":{"title":"InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Convolutions","authors":["Wenhai Wang","Jifeng Dai","Zhe Chen","Zhenhang Huang","Zhiqi Li","Xizhou Zhu","Xiaowei Hu","Tong Lu","Lewei Lu","Hongsheng Li","Xiaogang Wang","Yu Qiao"],"url":"https://arxiv.org/abs/2211.05778","pdfUrl":"https://arxiv.org/pdf/2211.05778v4","codeUrl":null,"preprint":{"id":"2211.05778","submittedOn":"2022-11-10","url":"https://arxiv.org/abs/2211.05778"},"publication":{"venue":"CVPR","year":2023,"kind":"conference","url":"https://openaccess.thecvf.com/content/CVPR2023/html/Wang_InternImage_Exploring_Large-Scale_Vision_Foundation_Models_With_Deformable_Convolutions_CVPR_2023_paper.html"},"citation":"@misc{classiccnnsinternimage2022,\n  title = {{InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Convolutions}},\n  author = {Wenhai Wang and Jifeng Dai and Zhe Chen and Zhenhang Huang and Zhiqi Li and Xizhou Zhu and Xiaowei Hu and Tong Lu and Lewei Lu and Hongsheng Li and Xiaogang Wang and Yu Qiao},\n  year = {2022},\n  eprint = {2211.05778},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2211.05778}\n}\n","citationPath":"/content/papers/citations/classic-cnns/internimage.4baca0899bc9.bib"},"thumbnail":{"src":"/content/papers/assets/eb597a4ac9a7c2e5e9b05e8ff1c61a951adab71d5cc5a273796762d353a9a0e9.png","width":1012,"height":1179},"locale":"zh-hant","path":"/content/papers/zh-hant/classic-cnns/internimage.ace4173a8cfd.md","headings":[{"id":"定義問題","text":"定義問題","depth":2},{"id":"卷積輸在哪裡","text":"卷積輸在哪裡","depth":3},{"id":"dcnv2-為什麼不能直接用","text":"DCNv2 為什麼不能直接用","depth":3},{"id":"解決問題","text":"解決問題","depth":2},{"id":"dcnv3-的三個修改","text":"DCNv3 的三個修改","depth":3},{"id":"疊成網路","text":"疊成網路","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"imagenet","text":"ImageNet","depth":3},{"id":"偵測與分割","text":"偵測與分割","depth":3},{"id":"消融softmax-那一項","text":"消融：softmax 那一項","depth":3},{"id":"代價","text":"代價","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/deformable-convnets","relation":"referenced","topic":""},{"id":"reparameterization/replknet","relation":"referenced","topic":""},{"id":"classic-cnns/slak","relation":"referenced","topic":""}]},{"id":"classic-cnns/dcnv4","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"DCNv4","subtitle":"權重不設上限","author":"Z. Yuan","paperDate":"2024-01-11","publishedOn":"2025-12-29","paperTitle":"Efficient Deformable ConvNets: Rethinking Dynamic and Sparse Operator for Vision Applications","paperUrl":"https://arxiv.org/abs/2401.06197","bibliography":{"title":"Efficient Deformable ConvNets: Rethinking Dynamic and Sparse Operator for Vision Applications","authors":["Yuwen Xiong","Zhiqi Li","Yuntao Chen","Feng Wang","Xizhou Zhu","Jiapeng Luo","Wenhai Wang","Tong Lu","Hongsheng Li","Yu Qiao","Lewei Lu","Jie Zhou","Jifeng Dai"],"url":"https://arxiv.org/abs/2401.06197","pdfUrl":"https://arxiv.org/pdf/2401.06197v1","codeUrl":"https://github.com/OpenGVLab/DCNv4","preprint":{"id":"2401.06197","submittedOn":"2024-01-11","url":"https://arxiv.org/abs/2401.06197"},"publication":{"venue":"CVPR","year":2024,"kind":"conference","url":"https://openaccess.thecvf.com/content/CVPR2024/html/Xiong_Efficient_Deformable_ConvNets_Rethinking_Dynamic_and_Sparse_Operator_for_Vision_CVPR_2024_paper.html"},"citation":"@misc{classiccnnsdcnv42024,\n  title = {{Efficient Deformable ConvNets: Rethinking Dynamic and Sparse Operator for Vision Applications}},\n  author = {Yuwen Xiong and Zhiqi Li and Yuntao Chen and Feng Wang and Xizhou Zhu and Jiapeng Luo and Wenhai Wang and Tong Lu and Hongsheng Li and Yu Qiao and Lewei Lu and Jie Zhou and Jifeng Dai},\n  year = {2024},\n  eprint = {2401.06197},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2401.06197}\n}\n","citationPath":"/content/papers/citations/classic-cnns/dcnv4.f17f87f8ee11.bib"},"thumbnail":{"src":"/content/papers/assets/fe768f9a1b9df098fd7de1ed2c34ba0713cb83936e024d45ca26e85a2b340ff1.png","width":1020,"height":522},"locale":"zh-hant","path":"/content/papers/zh-hant/classic-cnns/dcnv4.6e861d751ac3.md","headings":[{"id":"定義問題","text":"定義問題","depth":2},{"id":"只取樣-9-個點為什麼不快","text":"只取樣 9 個點，為什麼不快","depth":3},{"id":"softmax-是借來的","text":"softmax 是借來的","depth":3},{"id":"解決問題","text":"解決問題","depth":2},{"id":"一拿掉-softmax","text":"一、拿掉 softmax","depth":3},{"id":"二讓-gpu-少搬資料","text":"二、讓 GPU 少搬資料","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"運算子本身","text":"運算子本身","depth":3},{"id":"flashinternimage","text":"FlashInternImage","depth":3},{"id":"換進別的網路","text":"換進別的網路","depth":3},{"id":"代價","text":"代價","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/internimage","relation":"referenced","topic":""},{"id":"classic-cnns/deformable-convnets","relation":"referenced","topic":""}]}],"text":"人看一張照片，通常不是從左上角一格一格看下去。我們會先掃一眼，知道這是一隻水豚泡在溫泉裡，再回頭去看牠頭上那顆橘子。認知科學把這叫做由上而下的注意力（top-down attention），先有粗略的全貌，再用它引導細看。\n\n卷積網路的骨幹不是這樣運作的。金字塔式的架構一層層降採樣，每一層只能用前面幾層的結果，中間層在處理特徵的時候，還不知道這張圖整體在講什麼。\n\n這篇來自香港大學，作者是 Meng Lou 和 Yizhou Yu。他們想做一個純卷積的骨幹，讓網路也能「先看大局，再看細節」。\n\n## 定義問題\n\n### 中間層缺一個方向\n\n作者用 Grad-CAM 看了 Swin-T、ConvNeXt-T 和 VMamba-T 的中間層，發現離分類器比較遠的第三階段，常常抓不到正確類別的物體。這些網路都能捕捉長距離關係，只是中間層缺少一個來自高層語意的指引。\n\n以前也有人在視覺模型裡加由上而下的訊號，主流做法是遞迴，把最後的輸出接回前面再跑一次。這樣就要多算一輪，在骨幹網路上划不來。\n\n### 卷積核看不遠\n\n第二個問題在運算子。有了全圖的語意，還要有辦法把它用進卷積核裡。\n\n大卷積核和一般的動態卷積，看的範圍都被卷積核大小限制住了，輸入解析度變大，能看到的比例就跟著變小。可變形卷積能看得比較遠，可是取樣點一旦散開，卷積原本的局部歸納偏置也就沒了。作者要的運算子，權重要隨輸入變化，要能用上全圖的資訊，還要保有局部的歸納偏置。\n\n## 解決問題\n\n### 拆成三個子網路\n\n[![原論文 Figure 3：下方是 Base-Net，輸入一張頭上頂著橘子的水豚照片，依序經過三組 Embedding 和 Basic Block，解析度從 H/4 降到 H/16。上方左邊是 Overview-Net，接在 Base-Net 之後，一個 Embedding 加幾個 Basic Block，直接降到 H/32，輸出一個綠色立方體標示為 Context Prior。上方右邊是 Focus-Net，接收 Base-Net 的輸出，經過 Dynamic Block、Embedding、Dynamic Block，從 H/16 到 H/32；紅色箭頭代表 context guidance flow，把 context prior 送進 Focus-Net 的每個 Dynamic Block。](/content/papers/assets/d32df0756ccbd0c769259f897b5ad9cf4c8079758897be9a2147cd65a4d46ce1.png)](/content/papers/assets/d32df0756ccbd0c769259f897b5ad9cf4c8079758897be9a2147cd65a4d46ce1.png)\n\n*原論文 Figure 3（Lou 與 Yu），取自 [**PDF 第 4 頁**](https://arxiv.org/pdf/2502.20087v3#page=4)，CC BY 4.0。圖說未收錄。*\n\n作者把網路拆成三個子網路，叫做深層分解策略（Deep-stage Decomposition Strategy，DDS）：\n\n- **Base-Net**：一般的前三個階段，把影像降到 $H/16\\times W/16$，產生中層特徵。\n- **Overview-Net**：很輕的一段，拿 Base-Net 的輸出直接降到 $H/32$，快速得到一份粗糙但有語意的全圖理解，叫做 context prior。這就是「先看大局」。\n- **Focus-Net**：比較深的一段，同樣從 Base-Net 的輸出出發，一邊往下做，一邊用 context prior 指引每個區塊。這就是「再看細節」。\n\n所以這裡其實藏了兩個骨幹，Base-Net 接 Overview-Net 是一個，Base-Net 接 Focus-Net 是另一個，兩者共用 Base-Net。預訓練時兩個子網路各接一個分類頭，都算分類損失；用在下游任務時，Overview-Net 不再需要額外監督，特徵金字塔取 Base-Net 的 $H/4$、$H/8$，加上 Focus-Net 的 $H/16$、$H/32$。\n\ncontext prior 在 Focus-Net 裡會一路更新。每個區塊把它和特徵圖接在一起處理，出來時再拆開，更新後的 context prior 交給下一個區塊。為了避免越傳越淡，每次都會加回最初那份，寫成 $P_{i+1}=\\alpha P'_i+\\beta P_0$，$\\alpha$ 和 $\\beta$ 是可學的純量。\n\nBase-Net 和 Overview-Net 用的區塊裡，有一個來自 UniRepLKNet 的 Dilated RepConv，也就是用空洞小卷積重參數化的大卷積核。\n\n### ContMix：把全圖塞進卷積核\n\nFocus-Net 的核心是一個新的動態卷積，叫 ContMix（Context-Mixing Dynamic Convolution）。\n\n[![原論文 Figure 5：(a) ContMix 的流程圖。輸入特徵 X 經過 1×1 卷積和重塑得到 Q；另一路先做自適應平均池化，再經過 1×1 卷積得到 K。Q 轉置後和 K 做矩陣乘法，得到大小 G×HW×S² 的親和力矩陣 A，其中一列用黃色虛線框起來；這一列經過線性層 W_d 和 softmax，變成 G×1×K² 的向量，再重塑成 K×K 的「全域感知卷積核」，和輸入做逐元素相乘再加總；下方還有一條 K×K RepConv 的旁路，最後相加輸出。(b) 一張泡在溫泉裡的水豚照片，切成四塊，每塊有一個彩色星號代表區域中心；中間一個 3×3 的網格，九個藍色圓點代表「全域感知權重」，紅色虛線從四個區域中心連到網格中央。](/content/papers/assets/99458c439c8f5458671d09ec6d68f52f31a20702b6a0bdba99e2fe33dbf86ea7.png)](/content/papers/assets/99458c439c8f5458671d09ec6d68f52f31a20702b6a0bdba99e2fe33dbf86ea7.png)\n\n*原論文 Figure 5（Lou 與 Yu），取自 [**PDF 第 5 頁**](https://arxiv.org/pdf/2502.20087v3#page=5)，CC BY 4.0。圖說未收錄。*\n\n跟著圖 (a) 走一次：\n\n1. 輸入 $X$ 經過 1×1 卷積得到 $Q$，每個位置一個查詢向量，共 $HW$ 個。\n2. $X$ 另外用自適應平均池化壓成 $S\\times S$ 個區域中心，再經過 1×1 卷積得到 $K$。論文設 $S=7$，也就是 49 個區域中心。\n3. $Q$ 和 $K$ 相乘，得到親和力矩陣 $A$，大小是 $HW\\times S^2$。第 $i$ 列記錄了第 $i$ 個位置和 49 個區域中心各有多像。\n4. 每一列經過一個線性層 $W_d$，從 49 個數變成 $K^2$ 個數，再做 softmax，就是這個位置專屬的 $K\\times K$ 卷積核。\n5. 用這些卷積核對輸入做卷積，每個位置用自己的那一個。\n\n通道會分成 $G$ 組，每組算自己的親和力和卷積核，同一組的通道共用。放進 OverLoCK 的動態區塊時，$Q$ 來自特徵圖，$K$ 則來自 context prior，Overview-Net 看到的全貌就是從這裡進到卷積核裡。\n\n重點在第 4 步。卷積核的每個權重，都是由「這個位置和全圖 49 個區域中心的關係」算出來的，所以權重裡帶著全圖的資訊。可是卷積本身還是在 $K\\times K$ 的鄰域裡做，局部的歸納偏置沒有丟掉。圖 (b) 畫的就是這件事，3×3 的格子還在原地，決定格子權重的卻是四個角落的區域中心。\n\n我們寫一個最簡化的版本驗證。改動左上角一個像素，看右下角的輸出會不會變：\n\n```python\nimport torch\nimport torch.nn.functional as F\n\ntorch.manual_seed(0)\nC, H, W = 8, 16, 16\nS, K, G = 4, 3, 2                    # 4×4 個區域中心、3×3 的動態卷積核、通道分 2 組\nWq = torch.nn.Conv2d(C, C, 1)\nWk = torch.nn.Conv2d(C, C, 1)\nWd = torch.nn.Linear(S * S, K * K)   # 把 16 個相似度變成 9 個卷積核權重\n\ndef contmix(x):\n    q = Wq(x[None])[0].flatten(1)                                   # C × HW：每個位置的查詢\n    k = Wk(F.adaptive_avg_pool2d(x[None], S))[0].flatten(1)         # C × S²：區域中心\n    out = []\n    for qg, kg, xg in zip(q.chunk(G), k.chunk(G), x.chunk(G)):\n        A = qg.T @ kg                                               # HW × S²：每個位置和每個區域中心的相似度\n        D = Wd(A).softmax(-1)                                       # HW × K²：每個位置自己的 3×3 卷積核\n        patches = F.unfold(xg[None], K, padding=K // 2)[0]          # 每個位置周圍的 3×3 鄰居\n        patches = patches.view(C // G, K * K, H * W)\n        out.append((patches * D.T[None]).sum(1).view(C // G, H, W))\n    return torch.cat(out)\n\nstatic = torch.nn.Conv2d(C, C, K, padding=K // 2, groups=C)       # 一般的 3×3 depthwise 卷積\n\nx = torch.randn(C, H, W)\nx2 = x.clone()\nx2[:, 0, 0] += 5.0                                                  # 只改左上角那一個像素\n\nwith torch.no_grad():\n    for name, f in [(\"3×3 depthwise 卷積\", lambda t: static(t[None])[0]), (\"ContMix（3×3）\", contmix)]:\n        diff = (f(x2) - f(x))[:, 12, 12].abs().max().item()       # 看右下角 (12, 12) 的輸出變了多少\n        print(f\"{name}：右下角輸出的變化 {diff:.4f}\")\n```\n\n```text\n3×3 depthwise 卷積：右下角輸出的變化 0.0000\nContMix（3×3）：右下角輸出的變化 0.0274\n```\n\n同樣是 3×3，一般卷積完全看不到 12 格外的變化，ContMix 看得到。左上角的像素改變了第一個區域中心，所有位置的親和力跟著變，右下角那個位置的卷積核也就換了。\n\n實際的模組比這個複雜一些。官方程式碼還有一個 value 投影和相對位置偏差；一半的組用大卷積核，另一半用 5×5 的小卷積核；旁邊再並聯一條 Dilated RepConv。有裝鄰域注意力套件 NATTEN 的話，套用動態卷積核那一步直接借用它的 CUDA 運算子，計算方式和鄰域注意力的加權加總一模一樣。差別在權重怎麼來，鄰域注意力是查詢和鄰居的 key 相乘，ContMix 則是查詢和全圖的區域中心相乘。\n\n### 四個尺寸\n\n四個版本 XT、T、S、B，T 有 33M 參數、5.5 GFLOPs，B 有 95M、16.7 GFLOPs。Base-Net 的三個階段用 17、15、13 的卷積核，Overview-Net 用 7，Focus-Net 用 13 和 7。\n\n## 討論\n\n### ImageNet\n\nImageNet-1K 訓練 300 個 epoch，配方照 DeiT。吞吐量用一張 L40S、批次 128、224×224 輸入量：\n\n| 模型 | 參數量 | FLOPs | 吞吐量（張／秒） | top-1 |\n| --- | ---: | ---: | ---: | ---: |\n| ConvNeXt-T | 29M | 4.5G | 1507 | 82.1% |\n| UniRepLKNet-T | 31M | 4.9G | 1094 | 83.2% |\n| InternImage-T | 30M | 5.0G | 1084 | 83.5% |\n| MogaNet-S | 25M | 5.0G | 766 | 83.4% |\n| OverLoCK-T | 33M | 5.5G | 810 | **84.2%** |\n| ConvNeXt-S | 50M | 8.7G | 926 | 83.1% |\n| ConvNeXt-B | 89M | 15.4G | 608 | 83.8% |\n| OverLoCK-S | 56M | 9.7G | 480 | **84.8%** |\n| OverLoCK-B | 95M | 16.7G | 306 | **85.1%** |\n\n*表：摘自原論文 Table 2 與附錄 Table I 的部分列。*\n\n論文摘要強調 OverLoCK-T 用三分之一的參數和 FLOPs 贏過 ConvNeXt-B，吞吐量也比較高，810 對 608，這是真的。\n\n可是別忘了它叫 T。同樣叫 T 的 ConvNeXt-T 每秒能跑 1507 張，OverLoCK-T 只有一半多一點。拿差不多快的模型來比比較公平，ConvNeXt-S 每秒 926 張、83.1%，OverLoCK-T 慢一成多，準確率多了 1.1 個百分點。\n\n### 偵測與分割\n\n下游任務的差距比分類大。COCO 上用 Mask R-CNN 訓練 12 個 epoch，OverLoCK-T 的 box AP 是 48.3，InternImage-T 是 47.2，ConvNeXt-T 是 44.2。ADE20K 上接 UperNet，OverLoCK-T 的單尺度 mIoU 是 50.3，UniRepLKNet-T 是 48.6，ConvNeXt-T 是 46.0。\n\n偵測和分割的輸入解析度比分類大得多。ContMix 的區域中心固定是 7×7 個，不管圖多大都涵蓋全圖，這正是它和固定大小的大卷積核拉開差距的地方。\n\n### 一步一步加上去\n\n作者從一個純靜態的卷積網路出發，一次加一樣東西。這組實驗在 ImageNet 上只訓練 120 個 epoch，ADE20K 訓練 80K 步，數字和主表不能直接比：\n\n| 模型 | FLOPs | top-1 | mIoU |\n| --- | ---: | ---: | ---: |\n| 靜態的基準網路 | 2.6G | 78.5% | 41.1 |\n| 加上遞迴回饋 | 4.4G | 76.8% | 39.5 |\n| 改用 DDS 三個子網路 | 2.6G | 79.0% | 41.6 |\n| Focus-Net 換成 ContMix 動態區塊 | 2.6G | 80.0% | 42.9 |\n| 加上 Overview-Net 的輔助損失 | 2.6G | 80.2% | 43.1 |\n| 每個區塊加回最初的 context prior | 2.6G | 80.4% | 43.4 |\n| 加上閘門（OverLoCK-XT） | 2.6G | **80.8%** | **43.8** |\n\n*表：摘自原論文 Table 6 的部分列。*\n\n幾件事很清楚。\n\n1. **遞迴的回饋行不通**：照 AbsViT 的方式把第四階段的輸出接回第三階段，計算量多了七成，準確率反而掉了。\n2. **DDS 在同樣計算量下有幫助**：top-1 和 mIoU 各多 0.5，不用多算一輪就有了由上而下的指引。\n3. **最大的一步是 ContMix**：靜態區塊換成動態區塊，top-1 多 1.0，mIoU 多 1.3。\n\n附錄還有一組對照。把 Overview-Net 拿掉，改成一般的四階段金字塔，其他區塊不變，top-1 從 80.7% 掉到 79.2%，mIoU 從 43.8 掉到 41.9。由上而下的結構本身值這麼多。\n\n### 和其他動態運算子比\n\n為了公平比較運算子，作者另外搭了一個 Swin 形狀的網路，只換 token mixer，卷積核或視窗都是 7×7：\n\n| 運算子 | top-1 | ADE20K mIoU |\n| --- | ---: | ---: |\n| DyConv | 77.5% | 36.3 |\n| Involution | 78.3% | 37.5 |\n| 位移視窗注意力（Swin） | 78.4% | 37.4 |\n| 鄰域注意力（NATTEN） | 78.6% | 38.1 |\n| DCNv3 | 78.7% | 37.5 |\n| ContMix | **78.8%** | **39.0** |\n\n*表：摘自原論文 Table 7 的部分列。*\n\n分類上大家差不多，ContMix 只比第二名多 0.1；換到解析度高的分割，就比其他運算子多了 0.9 到 2.7。\n\n順帶一提 softmax。ContMix 在產生卷積核時有做 softmax，附錄的消融把它拿掉，top-1 從 80.8% 變成 80.5%，mIoU 從 43.8 變成 43.5，影響不大。在 InternImage 裡，sigmoid 取代 softmax 會讓訓練崩掉；DCNv4 則是把 softmax 拿掉之後收斂更快。同樣是動態權重，softmax 的分量差很多。\n\n\n> [!TIP]\n> \n> DCNv3 和 DCNv4 的 softmax 之爭，可以看這兩篇：\n> \n> - **[[22.11] InternImage：大力出奇蹟？](/blog/papers/classic-cnns/internimage)**\n> - **[[24.01] DCNv4：權重不設上限](/blog/papers/classic-cnns/dcnv4)**\n\n\n### 實際用起來\n\n官方程式碼依賴不少外部套件。動態卷積最好裝 NATTEN，沒裝也能跑，只是比較慢；大卷積核可以用 UniRepLKNet 那套 iGEMM 實作；偵測和分割還要 mmcv。GitHub issue 裡有不少安裝相關的問題。\n\n大卷積核的加速實作也要看批次大小。有使用者[回報](https://github.com/LMMMEng/OverLoCK/issues/33)打開 `use_gemm` 之後訓練反而慢了三倍，作者回覆這個實作在小批次時沒有優勢，批次小就關掉，對準確率沒有影響。另一位使用者[用 4 張 A100、總批次 8](https://github.com/LMMMEng/OverLoCK/issues/38) 訓練 COCO，預估要 41 天；作者自己在 8 張 H800 上是兩三天，建議加大批次、開梯度檢查點。\n\n## 結論\n\nOverLoCK 的兩個想法可以分開看。DDS 讓網路先用一段輕量的子網路看完全圖，再把這份理解送進後面每個區塊；ContMix 讓每個位置的卷積核由它和全圖區域中心的關係決定，卷積範圍還是局部的。前者在同樣計算量下多了 0.5，後者多了 1.0 以上，偵測和分割的差距又更大。\n\n「先看大局」聽起來像是整篇的主角，消融表卻顯示，出力最多的是 ContMix 把全圖資訊算進卷積核的那一步。由上而下的結構讓這份資訊有地方來，ContMix 讓它有地方用。\n\n要拿來用的話，先把環境準備好。NATTEN、大卷積核的 CUDA 擴充、mmcv，裝齊了再開工；批次小的話，記得把 `use_gemm` 關掉，不然只會更慢。\n","imageSizes":{"/content/papers/assets/d32df0756ccbd0c769259f897b5ad9cf4c8079758897be9a2147cd65a4d46ce1.png":{"width":1047,"height":762},"/content/papers/assets/99458c439c8f5458671d09ec6d68f52f31a20702b6a0bdba99e2fe33dbf86ea7.png":{"width":2112,"height":681}}}
