{"notes":[{"id":"classic-cnns/regnet","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"RegNet","subtitle":"好架构都很像吗？","author":"Z. Yuan","paperDate":"2020-03-30","publishedOn":"2024-12-16","world":"external/regnet","paperTitle":"Designing Network Design Spaces","paperUrl":"https://arxiv.org/abs/2003.13678","bibliography":{"title":"Designing Network Design Spaces","authors":["Ilija Radosavovic","Raj Prateek Kosaraju","Ross Girshick","Kaiming He","Piotr Dollár"],"url":"https://arxiv.org/abs/2003.13678","pdfUrl":"https://arxiv.org/pdf/2003.13678v1","codeUrl":null,"preprint":{"id":"2003.13678","submittedOn":"2020-03-30","url":"https://arxiv.org/abs/2003.13678"},"publication":{"venue":"CVPR","year":2020,"kind":"conference","url":"https://openaccess.thecvf.com/content_CVPR_2020/html/Radosavovic_Designing_Network_Design_Spaces_CVPR_2020_paper.html"},"citation":"@misc{classiccnnsregnet2020,\n  title = {{Designing Network Design Spaces}},\n  author = {Ilija Radosavovic and Raj Prateek Kosaraju and Ross Girshick and Kaiming He and Piotr Dollár},\n  year = {2020},\n  eprint = {2003.13678},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2003.13678}\n}\n","citationPath":"/content/papers/citations/classic-cnns/regnet.51d4a967c43d.bib"},"thumbnail":{"src":"/content/papers/assets/477f84998189b88eda3ae1c093bfad949ef34cf53e00368019c348b971c3a63d.png","width":1013,"height":550},"locale":"zh-hans","path":"/content/papers/zh-hans/classic-cnns/regnet.f79de4cb64b2.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"手工设计和-nas-各缺一块","text":"手工设计和 NAS 各缺一块","depth":3},{"id":"怎么比较两个设计空间","text":"怎么比较两个设计空间","depth":3},{"id":"解决问题","text":"解决问题","depth":2},{"id":"起点anynet","text":"起点：AnyNet","depth":3},{"id":"一步步收窄","text":"一步步收窄","depth":3},{"id":"宽度是一条斜线","text":"宽度是一条斜线","depth":3},{"id":"regnet","text":"RegNet","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"和常见做法不一样的地方","text":"和常见做法不一样的地方","depth":3},{"id":"和-resnetresnext-比","text":"和 ResNet、ResNeXt 比","depth":3},{"id":"移动设备的计算量","text":"移动设备的计算量","depth":3},{"id":"和-efficientnet-比","text":"和 EfficientNet 比","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/nasnet","relation":"referenced","topic":""},{"id":"classic-cnns/efficientnet","relation":"referenced","topic":""}]},{"id":"classic-cnns/nasnet","category":"classic-cnns","legacyPath":"classic-cnns/1707-nasnet","legacySlug":"1707-nasnet","legacyPaths":[],"title":"NASNet","subtitle":"搜索网络架构","author":"Z. Yuan","paperDate":"2017-07-21","publishedOn":"2024-06-26","paperTitle":"Learning Transferable Architectures for Scalable Image Recognition","paperUrl":"https://arxiv.org/abs/1707.07012","bibliography":{"title":"Learning Transferable Architectures for Scalable Image Recognition","authors":["Barret Zoph","Vijay Vasudevan","Jonathon Shlens","Quoc V. Le"],"url":"https://arxiv.org/abs/1707.07012","pdfUrl":"https://arxiv.org/pdf/1707.07012","codeUrl":null,"preprint":{"id":"1707.07012","submittedOn":"2017-07-21","url":"https://arxiv.org/abs/1707.07012"},"publication":{"venue":"CVPR","year":2018,"kind":"conference","url":"https://doi.org/10.1109/cvpr.2018.00907"},"citation":"@misc{classiccnnsnasnet2017,\n  title = {{Learning Transferable Architectures for Scalable Image Recognition}},\n  author = {Barret Zoph and Vijay Vasudevan and Jonathon Shlens and Quoc V. Le},\n  year = {2017},\n  eprint = {1707.07012},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1707.07012}\n}\n","citationPath":"/content/papers/citations/classic-cnns/nasnet.f6a561f13f90.bib"},"thumbnail":{"src":"/content/papers/assets/b2d2e9edd0aa83df25d43fcba9a942774de024dfa090f0771473452abb1ff417.jpg","width":930,"height":966},"locale":"zh-hans","path":"/content/papers/zh-hans/classic-cnns/nasnet.d6ac59e95af8.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"解决问题","text":"解决问题","depth":2},{"id":"可迁移架构","text":"可迁移架构","depth":3},{"id":"基础结构","text":"基础结构","depth":3},{"id":"搜索过程","text":"搜索过程","depth":3},{"id":"droppath-模组","text":"DropPath 模组","depth":3},{"id":"搜索实验结果","text":"搜索实验结果","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"在-cifar-10-上的结果","text":"在 CIFAR-10 上的结果","depth":3},{"id":"迁移架构到-imagenet","text":"迁移架构到 ImageNet","depth":3},{"id":"在行动装置上的评比","text":"在行动装置上的评比","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/efficientnet","relation":"next","topic":"架构搜索与高效模型扩展"}]},{"id":"classic-cnns/efficientnet","category":"classic-cnns","legacyPath":"classic-cnns/1905-efficientnet","legacySlug":"1905-efficientnet","legacyPaths":[],"title":"EfficientNet","subtitle":"联合缩放架构","author":"Z. Yuan","paperDate":"2019-05-28","publishedOn":"2024-07-04","paperTitle":"EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks","paperUrl":"https://arxiv.org/abs/1905.11946","bibliography":{"title":"EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks","authors":["Mingxing Tan","Quoc V. Le"],"url":"https://arxiv.org/abs/1905.11946","pdfUrl":"https://arxiv.org/pdf/1905.11946","codeUrl":null,"preprint":{"id":"1905.11946","submittedOn":"2019-05-28","url":"https://arxiv.org/abs/1905.11946"},"publication":{"venue":"ICML","year":2019,"kind":"conference","url":"https://arxiv.org/abs/1905.11946"},"citation":"@misc{classiccnnsefficientnet2019,\n  title = {{EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks}},\n  author = {Mingxing Tan and Quoc V. Le},\n  year = {2019},\n  eprint = {1905.11946},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1905.11946}\n}\n","citationPath":"/content/papers/citations/classic-cnns/efficientnet.ad7d6744b5d4.bib"},"thumbnail":{"src":"/content/papers/assets/f8202301fddceafac70e33ea34ffeb6b2255d2617c880baee08c51ce4c8a4c93.jpg","width":1596,"height":674},"locale":"zh-hans","path":"/content/papers/zh-hans/classic-cnns/efficientnet.c8e22ae59a11.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":"imagenet-上的结果","text":"ImageNet 上的结果","depth":3},{"id":"推理速度","text":"推理速度","depth":3},{"id":"参数-精度曲线","text":"参数-精度曲线","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/nasnet","relation":"background","topic":"架构搜索与高效模型扩展"},{"id":"classic-cnns/efficientnet-v2","relation":"next","topic":"架构搜索与高效模型扩展"}]}],"text":"2019 年前后，设计卷积网络最热门的方法之一，是神经架构搜索（NAS）。先定好一个搜索空间，让算法在里面找出最好的网络，NASNet、EfficientNet 都是这样来的。\n\n\n> [!TIP]\n> \n> 这两篇可以先看我们的笔记：\n> \n> - **[[17.07] NASNet：搜索网络架构](/blog/papers/classic-cnns/nasnet)**\n> - **[[19.05] EfficientNet：联合缩放架构](/blog/papers/classic-cnns/efficientnet)**\n\n\n搜出来的网络很强，可是我们拿到的就是一个网络，一组针对某个计算量、某个硬件调好的数字。为什么它长这样？换一个计算量要怎么改？搜索结果本身回答不了。\n\nFacebook AI Research 的 Ilija Radosavovic、Raj Prateek Kosaraju、Ross Girshick、何恺明与 Piotr Dollár 想换个做法。他们不设计单一网络，而是设计「网络的设计空间」，从一大群网络的表现里找出设计原则。\n\n## 定义问题\n\n### 手工设计和 NAS 各缺一块\n\n回头看 LeNet、AlexNet、VGG、ResNet，这些手工设计的网络留下的不只是模型，还有使用卷积、加大数据和网络、加深、加残差这些原则。这些原则可以套用到很多新的场景。问题是设计选项一多，靠人力很难一一试出最好的组合。\n\nNAS 解决了「试」的问题，但它的产出是一个针对特定设置调好的网络实例。作者想要的是简单、好懂、可以推广到不同设置的网络，以及背后的原则。\n\n至于不同计算量的需求，常见做法是拿一个网络，按某种规则缩放深度、宽度或分辨率，EfficientNet 的复合缩放就是一例。可是这仍然是从一个网络出发。\n\n### 怎么比较两个设计空间\n\n如果要设计的是「一群网络」，就需要一个比较一群网络好坏的方法。作者沿用 Radosavovic 等人前一年提出的工具，从设计空间里随机抽样 $n$ 个模型，全部训练完，看错误率的分布。\n\n具体的工具是错误率的经验分布函数（EDF）：\n\n$$\nF(e)=\\frac{1}{n}\\sum_{i=1}^{n}\\mathbf{1}[e_i<e].\n$$\n\n$F(e)$ 就是「错误率低于 $e$ 的模型占多少比例」。曲线越靠左上，说明这个空间里好模型越多。\n\n[![左边是三个嵌套的椭圆，最外层蓝色是 A，中间橙色是 B，最内层黄色是 C，箭头从 A 指向 B 再指向 C。右边是三条累积概率曲线，横轴是错误率（40 到 60），纵轴是累积概率（0 到 1）。蓝色的 A 最平缓、偏右；橙色的 B 往左移；黄色的 C 最靠左、最陡](/content/papers/assets/526c9907c4f475ec129b14c60e3189345920cb53e55b91dea16ee61a5c64c0b2.png)](/content/papers/assets/526c9907c4f475ec129b14c60e3189345920cb53e55b91dea16ee61a5c64c0b2.png)\n\n*原论文 Figure 1，取自 [**v1 PDF 第 1 页**](https://arxiv.org/pdf/2003.13678v1#page=1)。设计空间的设计：每一步把空间 A 缩小成更简单或更好的 B，再到 C；右边是三者的错误率 EDF。*\n\n左图是作者的流程。从一个很大的空间 A 开始，每次加一条限制，得到更小的 B、再到 C。右图是三个空间各自抽样训练后的 EDF，C 的曲线最靠左，说明它里面的模型整体上最好。\n\n比较整个分布，比只比较两个空间各自搜出来的最佳模型更稳定。作者也希望，对一整群模型都成立的原则，更有机会推广到别的设置。\n\n要抽样训练几百个模型，成本是个问题。作者在「低计算量、短训练」的设置下做设计，每个模型大约 4 亿次乘加（400MF），只在 ImageNet 上训练 10 个 epoch。这样训练 100 个模型的计算量，大约相当于把一个 ResNet-50 训练 100 个 epoch。\n\n## 解决问题\n\n### 起点：AnyNet\n\n作者先定一个很自由的设计空间，叫做 AnyNet。网络由三段组成。stem 是一层步幅 2、32 个通道的 $3\\times3$ 卷积；head 是平均池化加全连接层；中间的 body 才是重点，分成 4 个 stage，分辨率依次减半，每个 stage 由几个相同的块组成。\n\n块用的是 ResNeXt 那种带分组卷积的残差 bottleneck，作者叫它 X 块：\n\n[![X 块的示意图。(a) 步幅 1 的版本：输入 wi, ri, ri 经过 1x1 s=1 卷积变成 wi/bi 个通道，接着 3x3、分组宽度 gi、s=1 的卷积，再经过 1x1 s=1 卷积回到 wi 个通道，最后和右侧的捷径相加。(b) 步幅 2 的版本：中间的 3x3 卷积步幅为 2，捷径上多了一个 1x1 s=2 卷积](/content/papers/assets/a529e6e4b1fdd3d828f2fabfc86390e33c5501faa9cca45a206d01dc23706bf0.png)](/content/papers/assets/a529e6e4b1fdd3d828f2fabfc86390e33c5501faa9cca45a206d01dc23706bf0.png)\n\n*原论文 Figure 4，取自 [**v1 PDF 第 4 页**](https://arxiv.org/pdf/2003.13678v1#page=4)。X 块：$1\\times1$ 卷积、$3\\times3$ 分组卷积、$1\\times1$ 卷积，每个卷积后面接 BN 和 ReLU。*\n\n每个 stage $i$ 有四个参数可以调：\n\n- **块数 $d_i$**\n- **块宽度 $w_i$**：输出的通道数\n- **bottleneck 比例 $b_i$**：中间那层的通道数是 $w_i/b_i$\n- **分组宽度 $g_i$**：$3\\times3$ 分组卷积每组有几个通道\n\n4 个 stage、每个 4 个参数，一共 16 个自由度。抽样的范围是 $d_i\\le16$、$w_i\\le1024$ 且为 8 的倍数、$b_i\\in\\{1,2,4\\}$、$g_i\\in\\{1,2,\\ldots,32\\}$，组合起来大约有 $10^{18}$ 种网络。输入固定为 $224\\times224$。\n\n作者没有在这 $10^{18}$ 种网络里搜索最好的一个，而是一步步加限制，每一步都要让空间更简单、更好理解，同时好模型不能变少。\n\n### 一步步收窄\n\n作者每加一条限制，就重新抽 500 个模型训练，看 EDF 有没有变差：\n\n| 空间 | 新增的限制 | 自由度 | 组合数 | 最低／平均错误率 |\n| --- | --- | ---: | ---: | ---: |\n| AnyNetX$_A$ | 无 | 16 | $\\sim1.8\\cdot10^{18}$ | 39.0 / 49.0 |\n| AnyNetX$_B$ | 所有 stage 共用 $b$ | 13 | $\\sim6.8\\cdot10^{16}$ | 39.0 / 49.2 |\n| AnyNetX$_C$ | 所有 stage 共用 $g$ | 10 | $\\sim3.2\\cdot10^{14}$ | 38.9 / 49.4 |\n| AnyNetX$_D$ | $w_{i+1}\\ge w_i$ | 10 | $\\sim1.3\\cdot10^{13}$ | 38.7 / 43.2 |\n| AnyNetX$_E$ | $d_{i+1}\\ge d_i$ | 10 | $\\sim5.5\\cdot10^{11}$ | 38.7 / 42.7 |\n| RegNetX | 量化线性 | 6 | $\\sim3.0\\cdot10^{8}$ | 38.2 / 41.0 |\n\n*表：组合数整理自原论文 Table 1，错误率来自 Figure 5、7、9 的图例，400MF、训练 10 个 epoch 的 ImageNet top-1 错误率（%）。*\n\n前两步让每个 stage 共用同一个 $b$ 和 $g$，自由度少了 6 个，EDF 几乎没变，说明这两个参数不需要每个 stage 分开调。\n\n第三步来自观察。作者把 AnyNetX$_C$ 里好的和差的网络各挑几个画出来，发现好网络的宽度都是越往后越宽。加上 $w_{i+1}\\ge w_i$ 这条限制，平均错误率从 49.4% 一下子降到 43.2%，最好的模型也没有变差。第四步的 $d_{i+1}\\ge d_i$ 也让结果再好一点。\n\n到这里，空间缩小了三百多万倍，好模型反而更集中。\n\n### 宽度是一条斜线\n\n接着作者把 AnyNetX$_E$ 里最好的 20 个模型画在同一张图上，横轴是块的编号，纵轴是块的宽度：\n\n[![上排左图：20 条灰色的阶梯状曲线，代表 20 个最好的模型每个块的宽度（纵轴为对数刻度），一条黑色的平滑曲线穿过它们的中间。上排中、右两张：各是一个好模型的实际宽度（蓝色实线阶梯）、线性拟合（点线）与量化后的拟合（虚线阶梯），两者几乎重叠。下排三张散点图：AnyNetXC、AnyNetXD、AnyNetXE 中每个模型的拟合误差 efit 对错误率，好模型都集中在 efit 接近 0 的地方，从 C 到 E 点越来越往左集中](/content/papers/assets/477f84998189b88eda3ae1c093bfad949ef34cf53e00368019c348b971c3a63d.png)](/content/papers/assets/477f84998189b88eda3ae1c093bfad949ef34cf53e00368019c348b971c3a63d.png)\n\n*原论文 Figure 8，取自 [**v1 PDF 第 5 页**](https://arxiv.org/pdf/2003.13678v1#page=5)。好模型的宽度可以用量化的线性函数描述；拟合误差 $e_\\text{fit}$ 大的模型，错误率也偏高。*\n\n左上那张图里，每个模型的灰色阶梯都不一样，但整体趋势可以用一条很简单的直线 $w_j=48\\cdot(j+1)$ 描述，也就是那条黑线（纵轴是对数刻度，所以看起来是弯的）。\n\n直线给每个块一个不同的宽度，实际的网络却是同一个 stage 宽度相同，是一段段的阶梯。作者用三个式子把直线变成阶梯。\n\n先用一条直线给每个块一个连续的宽度：\n\n$$\nu_j=w_0+w_a\\cdot j,\\qquad 0\\le j<d.\n$$\n\n$w_0$ 是起始宽度，$w_a$ 是斜率，$d$ 是块的总数。接着引入一个参数 $w_m$，把 $u_j$ 写成 $w_0$ 乘上 $w_m$ 的若干次方：\n\n$$\nu_j=w_0\\cdot w_m^{s_j}.\n$$\n\n最后把指数 $s_j$ 四舍五入：\n\n$$\nw_j=w_0\\cdot w_m^{\\lfloor s_j\\rceil}.\n$$\n\n指数取整之后，宽度只剩 $w_0$、$w_0w_m$、$w_0w_m^2$ 这几种值，同一种宽度的块就是一个 stage，所以 $w_m$ 就是相邻 stage 之间的宽度倍数。\n\n我们拿 RegNetX-1.6GF 实际算一次。它在 torchvision 里的参数是 $d=18$、$w_0=80$、$w_a=34.01$、$w_m=2.25$，分组宽度 $g=24$：\n\n```python\nimport math\n\nd, w0, wa, wm, g = 18, 80, 34.01, 2.25, 24        # RegNetX-1.6GF\n\nu = [w0 + wa * j for j in range(d)]                 # 式 (2)：每个块一个连续的宽度\ns = [math.log(uj / w0) / math.log(wm) for uj in u]  # 式 (3)：换算成 w0 · wm^s 的指数\nw = [w0 * wm ** round(sj) for sj in s]              # 式 (4)：指数四舍五入，宽度变成阶梯\nw = [round(wj / 8) * 8 for wj in w]                 # 宽度取 8 的倍数\n\nfor j in (0, 1, 2, 5, 6, 15, 16, 17):\n    print(f\"块 {j:>2}：u = {u[j]:6.1f}，s = {s[j]:4.2f} → 取整 {round(s[j])}，宽度 {w[j]}\")\n\nstages = sorted(set(w))\ndepths = [w.count(x) for x in stages]\nwidths = [round(x / g) * g for x in stages]         # 再调成 group width 的倍数\nprint(\"各阶段块数：\", depths)\nprint(\"各阶段宽度：\", widths)\n```\n\n```text\n块  0：u =   80.0，s = 0.00 → 取整 0，宽度 80\n块  1：u =  114.0，s = 0.44 → 取整 0，宽度 80\n块  2：u =  148.0，s = 0.76 → 取整 1，宽度 176\n块  5：u =  250.0，s = 1.41 → 取整 1，宽度 176\n块  6：u =  284.1，s = 1.56 → 取整 2，宽度 408\n块 15：u =  590.1，s = 2.46 → 取整 2，宽度 408\n块 16：u =  624.2，s = 2.53 → 取整 3，宽度 912\n块 17：u =  658.2，s = 2.60 → 取整 3，宽度 912\n各阶段块数： [2, 4, 10, 2]\n各阶段宽度： [72, 168, 408, 912]\n```\n\n18 个块的宽度沿着直线往上爬，指数取整之后分成四段，得到每个 stage 2、4、10、2 个块，宽度 72、168、408、912。这和论文列出的 RegNetX-1.6GF 一致，也和 torchvision 构建出来的模型一致。stage 的块数不用另外指定，直线和取整就决定了。torchvision 的 `regnet_x_*`、`regnet_y_*`，以及 timm 的 `regnetx_*`、`regnety_*`，都是用这组公式生成的，按计算量挑就好。\n\n作者也回头验证了这个描述。他们拿 AnyNetX$_C$ 到 AnyNetX$_E$ 的每个模型去拟合这条量化直线，算出拟合误差 $e_\\text{fit}$。Figure 8 下排的散点图显示，每个空间里最好的模型，拟合误差都接近 0；而且从 C 到 E，模型整体越来越贴近这种结构。\n\n### RegNet\n\n既然好模型都长这样，干脆只保留这种结构的网络。一个网络由 $d$、$w_0$、$w_a$、$w_m$ 四个参数，加上 $b$ 和 $g$ 决定。抽样范围是 $d<64$、$w_0,w_a<256$、$1.5\\le w_m\\le3$。作者把这个空间叫做 RegNet，意思是只包含规则（regular）的网络。\n\n自由度从 16 降到 6，空间大小少了将近 10 个数量级，平均错误率却从 49.0% 降到 41.0%，最好的模型也略好一点。好模型足够集中，随机抽大约 32 个模型，就很可能抽到不错的。\n\n作者也确认了，这些结论在低计算量、短训练以外的设置下同样成立。换成更高的计算量、更长的训练、5 个 stage 的网络，或是其他块类型，三个空间的排名始终是 RegNetX 优于 AnyNetX$_E$、优于 AnyNetX$_A$。\n\n## 讨论\n\n### 和常见做法不一样的地方\n\nRegNetX 的好模型很集中，作者接着改用每个计算量各抽 100 个模型、训练 25 个 epoch，看各个参数的趋势：\n\n[![六张折线图，横轴都是计算量（0.2 到 12.8 GFLOPs），每张图有浅色的 all 范围、蓝色的 good 范围与黑色的 best 线。d：最佳深度大约维持在 16 到 23 之间，多数是 20；b：最佳值始终是 1；wm：最佳值大约在 2.2 到 2.8 之间；g、wa、w0：最佳值都随着计算量增加而变大](/content/papers/assets/88e61c9524447ce29968da46650f265df2c5f591a45aaf965adef78e49826d51.png)](/content/papers/assets/88e61c9524447ce29968da46650f265df2c5f591a45aaf965adef78e49826d51.png)\n\n*原论文 Figure 11，取自 [**v1 PDF 第 7 页**](https://arxiv.org/pdf/2003.13678v1#page=7)。RegNetX 各参数在不同计算量下的趋势，蓝色区域是以 95% 置信度包含最佳模型的范围，黑线是最可能的最佳值。*\n\n有几个结果和当时的习惯不同：\n\n1. **最佳深度很稳定**。不论计算量多少，最好的模型大约都是 20 个块（约 60 层）。一般的做法是计算量越大，网络就越深。\n2. **不需要 bottleneck**。最好的模型 $b=1$，中间那层和输出一样宽。\n3. **stage 之间的宽度倍数约 2.5**。常见做法是每个 stage 翻倍。\n4. **inverted bottleneck 和 depthwise 卷积都比较差**。移动端网络常用的 $b<1$ 会让结果略差，$g=1$ 的 depthwise 卷积更差。作者在附录中用 6.4GF、100 个 epoch 重新测试，inverted bottleneck 的差距更大。\n5. **分辨率固定为 $224\\times224$ 最好**。这和 EfficientNet「放大分辨率有帮助」的结论相反，即使在较高的计算量下也是如此。\n\n$g$、$w_a$、$w_0$ 则随计算量增加而变大。另外，在 X 块上加 SE 模块，得到的 RegNetY 空间整体又更好。\n\n作者还加入了一个平常很少有人看的指标，**activations**，也就是所有卷积层输出张量的总大小。在 V100 GPU 上，推理时间和 activations 的相关系数是 0.897，和 FLOPs 只有 0.643。GPU 这类硬件常常受限于内存带宽，所以中间结果有多大，比乘加次数更能预测速度。最好的模型里，activations 大约随计算量的平方根增长，参数量则是线性增长。\n\n根据这些趋势，作者给 RegNetX 再加上 $b=1$、$d\\le40$、$w_m\\ge2$，并限制参数量和 activations，得到一个更快、更省内存的空间，后面的比较都用这个版本。\n\n### 和 ResNet、ResNeXt 比\n\n比较最终模型时，作者在每个计算量下随机试 25 组参数，挑出最好的，再用 100 个 epoch 训练 5 次。所有模型，包括被比较的 ResNet、ResNeXt，都用同一套基本训练设置，除了 weight decay 之外，没有额外的正则化或训练技巧：\n\n| 模型 | GFLOPs | 参数 | 推理（ms） | top-1 错误率 |\n| --- | ---: | ---: | ---: | ---: |\n| ResNet-50 | 4.1 | 22.6M | 53 | 23.2% |\n| ResNeXt-50 | 4.2 | 25.0M | 78 | 21.9% |\n| **RegNetX-4.0GF** | 4.0 | 22.1M | 69 | **21.4%** |\n| ResNet-101 | 7.8 | 44.6M | 90 | 21.4% |\n| ResNeXt-101 | 8.0 | 44.2M | 137 | 20.7% |\n| **RegNetX-8.0GF** | 8.0 | 39.6M | 94 | **20.7%** |\n| ResNet-152 | 11.5 | 60.2M | 130 | 20.9% |\n| ResNeXt-152 | 11.7 | 60.0M | 197 | 20.4% |\n| **RegNetX-12GF** | 12.1 | 46.1M | 137 | **20.3%** |\n\n*表：摘自原论文 Table 3(b)，计算量相近的分成一组。推理时间是 V100 上一次处理 64 张图像。*\n\n三组都是 RegNetX 最好或并列最好。在 8GF 那一组，RegNetX 和 ResNeXt-101 打平，推理时间却只要 94 ms，ResNeXt-101 要 137 ms。这些网络用的是同样的组件和训练设置，差别只在结构，作者因此认为，这些进步全部来自设计空间。\n\n### 移动设备的计算量\n\n在 600MF 左右，RegNetX-600MF 的 top-1 错误率是 25.9%，RegNetY-600MF 是 24.5%。同一个计算量下，MobileNet-V2 报告的是 25.3%，ShuffleNet V2 是 25.1%，NAS 搜出来的 NASNet-A 是 26.0%、AmoebaNet-C 是 24.3%。\n\n这些对手的数字是各自论文报告的，通常用了更长的训练和各种增强技巧；RegNet 只用 100 个 epoch 的基本设置，结果仍然相当接近。作者希望这组简单的模型可以作为之后研究的基准线。\n\n### 和 EfficientNet 比\n\n最后是当时最强的 EfficientNet。作者用 EfficientNet 的原始架构，但改用和 RegNet 相同的训练设置重新训练，只为它另外调了学习率和 weight decay：\n\n| 模型 | GFLOPs | 参数 | activations | 推理（ms） | 训练（小时） | top-1 错误率 |\n| --- | ---: | ---: | ---: | ---: | ---: | ---: |\n| EfficientNet-B0 | 0.4 | 5.3M | 6.7M | 34 | 11.7 | **24.9%** |\n| RegNetY-400MF | 0.4 | 4.3M | 3.9M | 19 | 5.1 | 25.9% |\n| EfficientNet-B3 | 1.8 | 12.0M | 23.8M | 114 | 32.1 | 22.5% |\n| RegNetY-1.6GF | 1.6 | 11.2M | 8.0M | 39 | 10.1 | **22.0%** |\n| EfficientNet-B5 | 9.9 | 30.0M | 98.9M | 504 | 135.1 | 21.5% |\n| RegNetY-8.0GF | 8.0 | 39.2M | 18.0M | 113 | 28.1 | **20.1%** |\n\n*表：摘自原论文 Table 4 的三组。两者都用 100 个 epoch、只有 weight decay 的基本训练设置；推理时间的测法和前表相同。*\n\n计算量很低时，EfficientNet 比较好；计算量往上，RegNetY 开始领先。速度的差距更明显，EfficientNet-B5 推理一批要 504 ms，RegNetY-8.0GF 只要 113 ms（B5 算完一批，它已经跑完四批），错误率还更低。\n\n速度的差距和前面的 activations 有关。EfficientNet 同时放大分辨率和深度，activations 大约随计算量线性增长，B5 的 activations 是 98.9M；RegNet 则是随平方根增长，8.0GF 只有 18.0M。\n\n这张表要注意训练设置。EfficientNet 原论文用了更长的训练、AutoAugment 等增强技巧，报告的错误率低得多，例如 B5 是 16.7%。作者自己的实验也显示，光是训练设置，就能让 EfficientNet-B0 的错误率差上 2 个百分点左右。所以这张表比较的是「同样的训练条件下，哪个架构比较好」，而不是两者各自能做到的最好成绩。\n\n## 结论\n\n好架构都很像吗？至少在这篇论文的设计空间里，答案是肯定的。从 $10^{18}$ 种网络一路收窄，留下来的好模型，宽度都落在同一条量化的直线上，深度大约 20 个块，不用 bottleneck，stage 之间的宽度乘以 2.5 左右。\n\n这些规律是在固定的 X 块、低计算量、短训练的条件下找出来的，作者也承认，把算子等更多选项放进设计空间，可能会得到不一样的答案。\n\n为了画出这条直线，作者光是比较设计空间，就训练了好几千个模型。这个做法不便宜，但换来的是一组讲得出道理的规则，比 NAS 交出一个「就是这样，别问」的网络好懂多了。\n","imageSizes":{"/content/papers/assets/526c9907c4f475ec129b14c60e3189345920cb53e55b91dea16ee61a5c64c0b2.png":{"width":1013,"height":387},"/content/papers/assets/a529e6e4b1fdd3d828f2fabfc86390e33c5501faa9cca45a206d01dc23706bf0.png":{"width":863,"height":467},"/content/papers/assets/477f84998189b88eda3ae1c093bfad949ef34cf53e00368019c348b971c3a63d.png":{"width":1013,"height":550},"/content/papers/assets/88e61c9524447ce29968da46650f265df2c5f591a45aaf965adef78e49826d51.png":{"width":1004,"height":409}}}
