{"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-hans","path":"/content/papers/zh-hans/lightweight/cbam.a16781df30f8.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-hans","path":"/content/papers/zh-hans/lightweight/senet.fa3515c1688a.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-hans","path":"/content/papers/zh-hans/classic-cnns/wide-resnet.70d00b511f7e.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-hans","path":"/content/papers/zh-hans/classic-cnns/xception.46a958dbdfb9.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}}}
