{"notes":[{"id":"lightweight/cbam","category":"lightweight","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"CBAM","subtitle":"你在看哪裡？","author":"Z. Yuan","paperDate":"2018-07-17","publishedOn":"2024-07-31","world":"external/cbam","paperTitle":"CBAM: Convolutional Block Attention Module","paperUrl":"https://arxiv.org/abs/1807.06521","bibliography":{"title":"CBAM: Convolutional Block Attention Module","authors":["Sanghyun Woo","Jongchan Park","Joon-Young Lee","In So Kweon"],"url":"https://arxiv.org/abs/1807.06521","pdfUrl":"https://arxiv.org/pdf/1807.06521v2","codeUrl":null,"preprint":{"id":"1807.06521","submittedOn":"2018-07-17","url":"https://arxiv.org/abs/1807.06521"},"publication":{"venue":"ECCV","year":2018,"kind":"conference","url":"https://openaccess.thecvf.com/content_ECCV_2018/html/Sanghyun_Woo_Convolutional_Block_Attention_ECCV_2018_paper.html"},"citation":"@misc{lightweightcbam2018,\n  title = {{CBAM: Convolutional Block Attention Module}},\n  author = {Sanghyun Woo and Jongchan Park and Joon-Young Lee and In So Kweon},\n  year = {2018},\n  eprint = {1807.06521},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1807.06521}\n}\n","citationPath":"/content/papers/citations/lightweight/cbam.bf1587b50fdf.bib"},"thumbnail":{"src":"/content/papers/assets/c62baa4fde1b39b59d98582de01b1a1303f006289a91791c235dfc69e88ec40b.png","width":1395,"height":713},"locale":"zh-hant","path":"/content/papers/zh-hant/lightweight/cbam.2c8d01816d90.md","headings":[{"id":"定義問題","text":"定義問題","depth":2},{"id":"解決問題","text":"解決問題","depth":2},{"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":3},{"id":"偵測","text":"偵測","depth":3},{"id":"模型在看哪裡","text":"模型在看哪裡","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"lightweight/senet","relation":"referenced","topic":""},{"id":"classic-cnns/wide-resnet","relation":"referenced","topic":""},{"id":"classic-cnns/xception","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":"zh-hant","path":"/content/papers/zh-hant/lightweight/senet.dd5fabe0868c.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":"輕量網路裡的通道注意力"},{"id":"lightweight/pp-lcnet","relation":"comparison","topic":"輕量網路裡的通道注意力"}]},{"id":"classic-cnns/wide-resnet","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Wide ResNet","subtitle":"加寬不加深","author":"Z. Yuan","paperDate":"2016-05-23","publishedOn":"2024-02-14","world":"external/wide-resnet","paperTitle":"Wide Residual Networks","paperUrl":"https://arxiv.org/abs/1605.07146","bibliography":{"title":"Wide Residual Networks","authors":["Sergey Zagoruyko","Nikos Komodakis"],"url":"https://arxiv.org/abs/1605.07146","pdfUrl":"https://arxiv.org/pdf/1605.07146v4","codeUrl":null,"preprint":{"id":"1605.07146","submittedOn":"2016-05-23","url":"https://arxiv.org/abs/1605.07146"},"publication":{"venue":"BMVC","year":2016,"kind":"conference","url":"https://doi.org/10.5244/C.30.87"},"citation":"@misc{classiccnnswideresnet2016,\n  title = {{Wide Residual Networks}},\n  author = {Sergey Zagoruyko and Nikos Komodakis},\n  year = {2016},\n  eprint = {1605.07146},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1605.07146}\n}\n","citationPath":"/content/papers/citations/classic-cnns/wide-resnet.2e42de74f658.bib"},"thumbnail":{"src":"/content/papers/assets/eb123078c88654918b04d17b5ebccd1009fc7fbc33305ebd9ba853f2ad2cc024.png","width":1400,"height":500},"locale":"zh-hant","path":"/content/papers/zh-hant/classic-cnns/wide-resnet.9aefa55a43c2.md","headings":[{"id":"定義問題","text":"定義問題","depth":2},{"id":"越做越細的-resnet","text":"越做越細的 ResNet","depth":3},{"id":"捷徑太好走","text":"捷徑太好走","depth":3},{"id":"細長的網路也跑不快","text":"細長的網路也跑不快","depth":3},{"id":"解決問題","text":"解決問題","depth":2},{"id":"能動的地方","text":"能動的地方","depth":3},{"id":"wrn-n-k","text":"WRN-n-k","depth":3},{"id":"區塊裡要放什麼","text":"區塊裡要放什麼","depth":3},{"id":"把-dropout-放進區塊","text":"把 dropout 放進區塊","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"寬度和深度怎麼分","text":"寬度和深度怎麼分","depth":3},{"id":"和千層-resnet-比","text":"和千層 ResNet 比","depth":3},{"id":"寬的跑得比較快","text":"寬的跑得比較快","depth":3},{"id":"dropout-的效果","text":"Dropout 的效果","depth":3},{"id":"imagenet-要加寬中間那層","text":"ImageNet 要加寬中間那層","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/resnet-v2","relation":"referenced","topic":""},{"id":"classic-cnns/stochastic-depth","relation":"referenced","topic":""}]},{"id":"classic-cnns/xception","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Xception","subtitle":"Inception 的盡頭","author":"Z. Yuan","paperDate":"2016-10-07","publishedOn":"2024-03-20","world":"external/xception","paperTitle":"Xception: Deep Learning with Depthwise Separable Convolutions","paperUrl":"https://arxiv.org/abs/1610.02357","bibliography":{"title":"Xception: Deep Learning with Depthwise Separable Convolutions","authors":["François Chollet"],"url":"https://arxiv.org/abs/1610.02357","pdfUrl":"https://arxiv.org/pdf/1610.02357v3","codeUrl":null,"preprint":{"id":"1610.02357","submittedOn":"2016-10-07","url":"https://arxiv.org/abs/1610.02357"},"publication":{"venue":"CVPR","year":2017,"kind":"conference","url":"https://openaccess.thecvf.com/content_cvpr_2017/html/Chollet_Xception_Deep_Learning_CVPR_2017_paper.html"},"citation":"@misc{classiccnnsxception2016,\n  title = {{Xception: Deep Learning with Depthwise Separable Convolutions}},\n  author = {François Chollet},\n  year = {2016},\n  eprint = {1610.02357},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1610.02357}\n}\n","citationPath":"/content/papers/citations/classic-cnns/xception.3a6fa7188c36.bib"},"thumbnail":{"src":"/content/papers/assets/b56e8b540dd5a4cb9856460b3e47a6e3e624df308ab08b70809438075caf5f0a.png","width":917,"height":538},"locale":"zh-hant","path":"/content/papers/zh-hant/classic-cnns/xception.68cdf9c18112.md","headings":[{"id":"定義問題","text":"定義問題","depth":2},{"id":"解決問題","text":"解決問題","depth":2},{"id":"換個角度看-inception-模組","text":"換個角度看 Inception 模組","depth":3},{"id":"一路分到底","text":"一路分到底","depth":3},{"id":"光譜的另一端","text":"光譜的另一端","depth":3},{"id":"xception","text":"Xception","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"imagenet","text":"ImageNet","depth":3},{"id":"jft","text":"JFT","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/inception-v1","relation":"referenced","topic":""},{"id":"classic-cnns/inception-v3","relation":"referenced","topic":""},{"id":"lightweight/mobilenet-v1","relation":"referenced","topic":""}]}],"text":"2017 年，SENet 拿下 ILSVRC 最後一屆的分類冠軍。它在每個卷積區塊後面加一個很小的模組，先把每個通道平均成一個數字，再用兩層全連接層算出每個通道的權重，乘回原本的特徵圖。參數多一點點，準確率提升不少。\n\n\n> [!TIP]\n> \n> SENet 可以先看我們的筆記：\n> \n> - **[[17.09] SENet：擠！用力擠！](/blog/papers/lightweight/senet)**\n\n\n韓國 KAIST、Lunit 與美國 Adobe Research 的 Sanghyun Woo 等人，在 SENet 的基礎上繼續追問。通道的權重只看平均值夠嗎？除了「看哪些通道」，是不是也該決定「看哪些位置」？\n\n## 定義問題\n\n作者從網路設計的幾個方向講起。網路可以變深，像 VGG、ResNet；可以變寬，像 Wide ResNet；也可以增加基數，像 Xception 和 ResNeXt。這三個方向我們都寫過筆記，可以參考 [Wide ResNet](/blog/papers/classic-cnns/wide-resnet)、[Xception](/blog/papers/classic-cnns/xception) 和 [ResNeXt](/blog/papers/classic-cnns/resnext)。\n\n作者想從另一個方向著手，也就是注意力，讓網路強調重要的特徵、壓抑不需要的。\n\n卷積本來就同時混合通道和空間的資訊，所以作者讓注意力也沿著這兩個方向走。通道注意力決定「看什麼」，因為每個通道可以看成一種特徵偵測器；空間注意力決定「看哪裡」。\n\nSENet 只做了通道這一半，而且只用平均池化收集資訊。作者認為這兩點都還有改進空間，又希望模組維持輕量，任何卷積網路都能直接插進去。\n\n## 解決問題\n\n### 整體結構\n\n[![CBAM 的整體結構：Input Feature 先進入 Channel Attention Module，產生的通道注意力和輸入相乘；結果再進入 Spatial Attention Module，產生的空間注意力再相乘一次，得到 Refined Feature](/content/papers/assets/6bb23fb7d2af72e07e37ef41762e65dd79a4f36a6b6309ea002c27127650f5bd.png)](/content/papers/assets/6bb23fb7d2af72e07e37ef41762e65dd79a4f36a6b6309ea002c27127650f5bd.png)\n\n*原論文 Fig. 1，取自 [**v2 PDF 第 2 頁**](https://arxiv.org/pdf/1807.06521v2#page=2)。CBAM 由通道與空間兩個子模組依序組成。*\n\n給一張中間的特徵圖 $\\mathbf{F}\\in\\mathbb{R}^{C\\times H\\times W}$，CBAM 先算一個 1D 的通道注意力 $\\mathbf{M_c}\\in\\mathbb{R}^{C\\times1\\times1}$，再算一個 2D 的空間注意力 $\\mathbf{M_s}\\in\\mathbb{R}^{1\\times H\\times W}$：\n\n$$\n\\mathbf{F}'=\\mathbf{M_c}(\\mathbf{F})\\otimes\\mathbf{F},\\qquad\n\\mathbf{F}''=\\mathbf{M_s}(\\mathbf{F}')\\otimes\\mathbf{F}'.\n$$\n\n$\\otimes$ 是逐元素相乘，形狀不同的地方用廣播補齊。通道注意力每個通道一個數字，乘的時候複製到整個平面；空間注意力每個位置一個數字，乘的時候複製到所有通道。\n\n[![兩個子模組的細節。上方綠框是 Channel Attention Module：Input feature F 分別經過 MaxPool 和 AvgPool 得到兩個向量，各自送進同一個 Shared MLP，兩個輸出相加後經過 sigmoid，得到 Channel Attention Mc。下方紫框是 Spatial Attention Module：Channel-refined feature F' 沿通道做 MaxPool 和 AvgPool，疊成兩張圖，經過一層 conv layer 和 sigmoid，得到 Spatial Attention Ms](/content/papers/assets/c62baa4fde1b39b59d98582de01b1a1303f006289a91791c235dfc69e88ec40b.png)](/content/papers/assets/c62baa4fde1b39b59d98582de01b1a1303f006289a91791c235dfc69e88ec40b.png)\n\n*原論文 Fig. 2，取自 [**v2 PDF 第 5 頁**](https://arxiv.org/pdf/1807.06521v2#page=5)。通道注意力與空間注意力子模組。*\n\n兩個子模組的做法很對稱，都是先沿某個方向做平均池化和最大池化，把資訊壓縮，再用一個小網路算出注意力。我們一個一個看。\n\n### 通道注意力\n\n通道注意力要把每個通道的 $H\\times W$ 個值壓成一個數字。SENet 用的是平均池化，作者認為還應該加上最大池化。\n\n為什麼？我們用一個極端的例子看。假設有兩個通道，一個在整張 $10\\times10$ 的圖上都是 0.1，另一個只有一個位置是 10、其他都是 0：\n\n```python\nimport torch\n\nflat = torch.full((10, 10), 0.1)                   # 通道 A：到處都是 0.1\npeak = torch.zeros(10, 10); peak[3, 6] = 10.0       # 通道 B：只有一個位置很亮\nF = torch.stack([flat, peak])                      # [C=2, H=10, W=10]\n\nprint(\"平均池化：\", [round(v, 4) for v in F.mean(dim=(1, 2)).tolist()])\nprint(\"最大池化：\", [round(v, 4) for v in F.amax(dim=(1, 2)).tolist()])\n```\n\n```text\n平均池化： [0.1, 0.1]\n最大池化： [0.1, 10.0]\n```\n\n只看平均值，兩個通道一模一樣；看最大值，就知道第二個通道在某個地方有很強的反應。作者的說法是，平均池化給的是溫和的全域統計，最大池化記下最顯著的部位有多強，兩者可以互補。\n\n兩個池化的結果送進**同一個** MLP，輸出相加後過 sigmoid：\n\n$$\n\\mathbf{M_c}(\\mathbf{F})=\\sigma\\big(\\mathrm{MLP}(\\mathrm{AvgPool}(\\mathbf{F}))+\\mathrm{MLP}(\\mathrm{MaxPool}(\\mathbf{F}))\\big).\n$$\n\nMLP 只有一層隱藏層，大小是 $C/r$，$r$ 是縮減比例，和 SENet 一樣取 16。共用同一個 MLP，參數量就和 SENet 一樣。\n\n### 空間注意力\n\n空間注意力反過來，沿著**通道**方向做平均池化和最大池化。每個位置原本有 $C$ 個值，壓成兩個數字，整張圖就變成兩張 $H\\times W$ 的描述圖。把它們疊起來，接一層 $7\\times7$ 卷積，再過 sigmoid：\n\n$$\n\\mathbf{M_s}(\\mathbf{F})=\\sigma\\big(f^{7\\times7}([\\mathrm{AvgPool}(\\mathbf{F});\\mathrm{MaxPool}(\\mathbf{F})])\\big).\n$$\n\n### 拼起來\n\n我們把兩個子模組寫出來，拿一張 256 通道、$14\\times14$ 的特徵圖走一次：\n\n```python\nimport torch\nimport torch.nn as nn\n\nclass ChannelAttention(nn.Module):\n    def __init__(self, C, r=16):\n        super().__init__()\n        self.mlp = nn.Sequential(nn.Linear(C, C // r), nn.ReLU(), nn.Linear(C // r, C))   # 共用的 MLP\n\n    def forward(self, F):\n        avg = F.mean(dim=(2, 3))                  # [B, C]\n        mx = F.amax(dim=(2, 3))                   # [B, C]\n        Mc = torch.sigmoid(self.mlp(avg) + self.mlp(mx))\n        print(\"  通道注意力 Mc：\", tuple(Mc[:, :, None, None].shape))\n        return Mc[:, :, None, None]               # [B, C, 1, 1]\n\nclass SpatialAttention(nn.Module):\n    def __init__(self, k=7):\n        super().__init__()\n        self.conv = nn.Conv2d(2, 1, k, padding=k // 2)\n\n    def forward(self, F):\n        avg = F.mean(dim=1, keepdim=True)         # [B, 1, H, W]\n        mx = F.amax(dim=1, keepdim=True)          # [B, 1, H, W]\n        desc = torch.cat([avg, mx], dim=1)        # [B, 2, H, W]\n        Ms = torch.sigmoid(self.conv(desc))\n        print(\"  空間描述子：\", tuple(desc.shape), \"→ 空間注意力 Ms：\", tuple(Ms.shape))\n        return Ms\n\nclass CBAM(nn.Module):\n    def __init__(self, C, r=16):\n        super().__init__()\n        self.channel, self.spatial = ChannelAttention(C, r), SpatialAttention()\n\n    def forward(self, F):\n        F1 = self.channel(F) * F                  # 式 (1)：先乘通道注意力\n        F2 = self.spatial(F1) * F1                # 再乘空間注意力\n        return F2\n\nF = torch.randn(2, 256, 14, 14)\ncbam = CBAM(256)\nout = cbam(F)\nprint(\"輸出：\", tuple(out.shape))\nprint(f\"通道部分參數 {sum(p.numel() for p in cbam.channel.parameters()):,}，空間部分參數 {sum(p.numel() for p in cbam.spatial.parameters()):,}\")\n```\n\n```text\n  通道注意力 Mc： (2, 256, 1, 1)\n  空間描述子： (2, 2, 14, 14) → 空間注意力 Ms： (2, 1, 14, 14)\n輸出： (2, 256, 14, 14)\n通道部分參數 8,464，空間部分參數 99\n```\n\n輸出和輸入的形狀一樣，所以 CBAM 可以插在任何地方。參數幾乎都在通道部分的 MLP（$256\\to16\\to256$），空間部分只有一個 $2\\to1$ 的 $7\\times7$ 卷積，99 個參數。\n\n放進 ResNet 時，CBAM 接在每個殘差區塊的卷積輸出上，處理完再和捷徑相加，位置和 SENet 一樣。timm 也有現成的版本，`timm.layers.create_attn(\"cbam\", channels)` 會回傳一個 `CbamModule`。\n\n## 討論\n\n除非特別說明，實驗都在 ImageNet-1K 上進行，報告驗證集單一裁切的錯誤率。所有網路都是作者自己用 PyTorch 重新訓練的，包括 SENet，表上 SE 的數字是他們重現的結果，和 SENet 論文報告的數字不完全相同。\n\n### 設計怎麼一步步定下來\n\n作者先固定 ResNet-50，依序決定通道注意力怎麼算、空間注意力怎麼算，以及兩者怎麼組合。\n\n**通道注意力用哪種池化。** 這組只用通道注意力，$r=16$：\n\n| 設定 | Top-1 錯誤率 | Top-5 錯誤率 |\n| --- | ---: | ---: |\n| ResNet-50 | 24.56% | 7.50% |\n| ＋平均池化（即 SE） | 23.14% | 6.70% |\n| ＋最大池化 | 23.20% | 6.83% |\n| ＋平均與最大池化 | **22.80%** | **6.52%** |\n\n*表：摘自原論文 Table 1。*\n\n只用最大池化，效果和平均池化差不多；兩個一起用最好，比 SE 少了 0.34 個百分點，參數量沒有增加。\n\n**空間注意力怎麼算。** 接在上一步的通道注意力後面，比較兩種產生描述圖的方法：作者提出的沿通道池化，以及用一層 $1\\times1$ 卷積把通道壓成一個；卷積核大小則比較 3 和 7：\n\n| 設定 | Top-1 錯誤率 | Top-5 錯誤率 |\n| --- | ---: | ---: |\n| 只有通道注意力 | 22.80% | 6.52% |\n| ＋空間（$1\\times1$ 卷積，$k=3$） | 22.96% | 6.64% |\n| ＋空間（$1\\times1$ 卷積，$k=7$） | 22.90% | 6.47% |\n| ＋空間（平均與最大池化，$k=3$） | 22.68% | 6.41% |\n| ＋空間（平均與最大池化，$k=7$） | **22.66%** | **6.31%** |\n\n*表：摘自原論文 Table 2。*\n\n用 $1\\times1$ 卷積產生描述圖的兩個版本，top-1 反而比只有通道注意力還差；沿通道做池化才有進步。卷積核大的比較好，作者的解釋是，判斷哪裡重要需要比較大的視野。\n\n**兩個子模組怎麼排。**\n\n| 排法 | Top-1 錯誤率 | Top-5 錯誤率 |\n| --- | ---: | ---: |\n| 只有通道（SE） | 23.14% | 6.70% |\n| 先通道、再空間 | **22.66%** | **6.31%** |\n| 先空間、再通道 | 22.78% | 6.42% |\n| 平行，相加後過 sigmoid | 22.95% | 6.59% |\n\n*表：摘自原論文 Table 3。*\n\n依序比平行好，先通道再空間又略好一點，這就是最後的 CBAM。\n\n把三張表串起來看，從 SE 的 23.14% 到 CBAM 的 22.66%，一共進步 0.48 個百分點。其中 0.34 來自通道注意力多加的最大池化，空間注意力再多貢獻 0.14。\n\n### 各種網路上的結果\n\n接著把 CBAM 插進各種網路，和原版、加 SE 的版本比較：\n\n| 網路 | 原版 | ＋SE | ＋CBAM | 參數（原版 → 加模組） |\n| --- | ---: | ---: | ---: | ---: |\n| ResNet-18 | 29.60% | 29.41% | **29.27%** | 11.69M → 11.78M |\n| ResNet-34 | 26.69% | 26.13% | **25.99%** | 21.80M → 21.96M |\n| ResNet-50 | 24.56% | 23.14% | **22.66%** | 25.56M → 28.09M |\n| ResNet-101 | 23.38% | 22.35% | **21.51%** | 44.55M → 49.33M |\n| WideResNet-18（1.5 倍寬） | 26.85% | 26.21% | **26.10%** | 25.88M → 26.08M |\n| WideResNet-18（2 倍寬） | 25.63% | 24.93% | **24.84%** | 45.62M → 45.97M |\n| ResNeXt-50（32×4d） | 22.85% | **21.91%** | 21.92% | 25.03M → 27.56M |\n| ResNeXt-101（32×4d） | 21.54% | 21.17% | **21.07%** | 44.18M → 48.96M |\n\n*表：摘自原論文 Table 4，ImageNet-1K top-1 錯誤率。SE 和 CBAM 的參數量幾乎相同，這裡列 CBAM 的。*\n\nCBAM 在每個網路上都比原版好，多數也比 SE 好，差距最大的是 ResNet-101（比 SE 少 0.84 個百分點）。ResNeXt-50 則和 SE 打平。計算量的增加很小，ResNet-50 從 3.858 GFLOPs 變成 3.864。\n\n作者也試了輕量的 MobileNet。原版 MobileNet 的 top-1 錯誤率 31.39%，加 SE 是 29.97%，加 CBAM 是 29.01%；寬度縮成 0.7 倍的版本，三者分別是 34.86%、32.50% 和 31.51%。\n\n### 偵測\n\n在 COCO 上用 Faster R-CNN、把 CBAM 加進骨幹，ResNet-50 的 mAP@[.5:.95] 從 27.0 到 28.1，ResNet-101 從 29.1 到 30.8。\n\n在 VOC 2007 上，作者改把 CBAM 放在偵測器裡，以 SSD 為基礎的 StairNet 在每個分類器前面加一個。VGG16 骨幹的 mAP@0.5 從 78.9 到 79.3（加 SE 是 79.1），MobileNet 骨幹從 70.1 到 70.5（加 SE 是 70.0）。偵測上的進步大約在 0.4 到 1.7 個百分點之間。\n\n### 模型在看哪裡\n\n作者用 Grad-CAM 畫出網路判斷時看的區域。Grad-CAM 是 CAM 的推廣，用梯度算出每個位置對某個類別的重要程度，不需要網路尾端是全域平均池化。\n\n\n> [!TIP]\n> \n> CAM 可以看我們的筆記：\n> \n> - **[[15.12] CAM：模型在看哪裡？](/blog/papers/classic-cnns/cam)**\n\n\n[![Grad-CAM 視覺化結果，共六欄，類別分別是 Tailed frog、Toilet tissue、Loudspeaker、Spider web、American egret、Tank。第一列是輸入影像，下面三列依序是 ResNet50、ResNet50 + SE、ResNet50 + CBAM 的熱力圖，每張圖下方標著該網路對正確類別的 softmax 分數 P。CBAM 那一列的紅色區域大多覆蓋整個物體，分數也最高，例如 Tank 從 0.14763、0.15367 提高到 0.53005](/content/papers/assets/80d662363e321efb620082338d5820d7ffec1bee0ef0cb792b3b69e58a759f43.png)](/content/papers/assets/80d662363e321efb620082338d5820d7ffec1bee0ef0cb792b3b69e58a759f43.png)\n\n*原論文 Fig. 5 的上半部前六欄，取自 [**v2 PDF 第 12 頁**](https://arxiv.org/pdf/1807.06521v2#page=12)。每張圖下方的 P 是網路對正確類別的 softmax 分數。*\n\n每一欄由上往下，是原圖、ResNet-50、加 SE、加 CBAM 的熱力圖。以白鷺（American egret）為例，原版 ResNet-50 的紅色區域集中在頭部附近，CBAM 的紅色區域則沿著整個身體延伸，正確類別的分數也從 0.64 提高到 0.87。坦克那一欄更明顯，分數從 0.15 左右跳到 0.53。\n\n作者據此推測，CBAM 的進步來自注意力更準確，雜亂背景的干擾也被壓下來了。這些是挑出來的例子，能說明模組在做什麼，但要量化這件事，還是得回到前面的表格。\n\n## 結論\n\nCBAM 的通道注意力除了平均池化，也看最大池化；之後再加一個空間注意力，決定要看哪些位置。兩個子模組依序接在殘差分支上，參數幾乎和 SE 一樣。\n\n拆開來看，ResNet-50 上比 SE 多出來的 0.48 個百分點，大部分來自最大池化，負責另一半工作的空間注意力只貢獻 0.14，存在感不太高。如果只想動一點點，把 SE 的平均池化改成「平均加最大」，就能拿到大部分的好處。\n\n至於 Grad-CAM 那幾張圖，CBAM 每一欄都看得最準，分數也最高。作者挑出來放進論文的例子，當然好看。要判斷模組有沒有用，還是得回到前面那幾張表。\n","imageSizes":{"/content/papers/assets/6bb23fb7d2af72e07e37ef41762e65dd79a4f36a6b6309ea002c27127650f5bd.png":{"width":1446,"height":437},"/content/papers/assets/c62baa4fde1b39b59d98582de01b1a1303f006289a91791c235dfc69e88ec40b.png":{"width":1395,"height":713},"/content/papers/assets/80d662363e321efb620082338d5820d7ffec1bee0ef0cb792b3b69e58a759f43.png":{"width":960,"height":713}}}
