共计 2970 个字符,预计需要花费 8 分钟才能阅读完成。
TResNet: High Performance GPU-Dedicated Architecture 来自阿里的达摩院,公布于 2021 WACV, 该论文引入了一系列架构批改,旨在进步神经网络的准确性,同时放弃其 GPU 训练和推理效率。
论文首先探讨了面向 FLOP 的优化引起的瓶颈。而后倡议更好地利用 GPU 构造的设计。最初引入了一个新的 GPU 专用模型,称其为 TResNet。
动机
上表将 ResNet50 与风行的较新架构进行了比拟,具备类似的 ImageNet top-1 精度——ResNet50-D [11]、ResNeXt50 [43]、SEResNeXt50 (SENet+ResNeXt) [13]、EfficientNet-B1 [36] 和 MixNet-L(MixConv)[37]。与 ResNet50 相比,新提出的网络中 FLOP 缩小和新技巧的应用并未转化为 GPU 吞吐量的进步。
最新的一些网络,如 EfficientNet、ResNeXt 和 MixNet (MixConv) 宽泛应用深度和 1×1 卷积,它们提供的 FLOP 显著少于 3×3 卷积。然而 GPU 通常受限于内存拜访老本而不是计算数量,尤其是对于低 FLOP 层。ResNeXt 和 MixNet (MixConv) 等网络宽泛应用了多路径。对于训练这会创立大量须要存储以进行反向流传的激活图,占用大量的显存必定会减小批量大小,从而升高 GPU 吞吐量。
而 TResNet 的提出旨在实现高精度的同时放弃高 GPU 利用率。
TResNet:ResNet 的改良和变动
蕴含三个变体,TResNet-M、TResNet-L 和 TResNet-XL,它们仅在深度和通道数上有所不同。
SpaceToDepth Stem
ResNet50 stem 由一个 stride-2 conv7×7 和一个最大池化层组成。ResNet-D 将 conv7×7 替换为三个 conv3×3 层。这种设计的确进步了准确性,但代价是升高了训练吞吐量。论文应用了专用的 SpaceToDepth 转换层 [33],将空间数据块重新排列为深度。SpaceToDepth 层之后是简略的卷积,以匹配所需通道的数量。
Anti-Alias Downsampling (AA)
stride-2 卷积被 stride-1 卷积替换,而后是一个 3×3 的步长为 2 的 blur filter。
In-Place Activated BatchNorm (Inplace-ABN)
所有 BatchNorm+ReLU 层都被 Inplace-ABN [32] 层取代,该层将 BatchNorm 激活为单个 inplace 操作,从而显着缩小训练深度网络所需的内存,而计算成本仅略有减少。并且应用 Leaky-ReLU 代替了 ResNet50 的一般 ReLU。
Novel Block-Type Selection
Bottleneck 层比 BasicBlock 层具备更高的 GPU 使用率,并且提供更好的准确性。然而 BasicBlock 层具备更大的感触野,因而它们可能更适宜搁置在网络的晚期阶段。因为 BasicBlock 层具备较大的感触野,因而它们被搁置在网络的前两个阶段,而 Bottleneck 层则位于最初两个阶段。与 [10] 和 [36] 相似,也批改了初始通道数和第 3 阶段中的残差块数。架构详情如上表。
Optimized SE Layers
TResNet BasicBlock 和 Bottleneck 设计(stride 1)。IBN = Inplace-BatchNorm,r = 缩减因子
SE 层仅搁置在网络的前三个阶段,以取得最大的速度 - 准确度劣势。对于 Bottleneck 单元,在 conv3×3 操作之后增加 SE 模块,缩减因子为 8(r = 8)。对于 BasicBlock 单元,在残差和之前增加 SE 模块,缩减因子为 4 (r=4)。
除了架构改良之外,进行了上面的一些代码优化。
JIT 编译可能在执行时将高级代码动静编译成高效、优化的机器代码。这与通过解释器动静运行代码的默认 Pythonic 选项造成比照。对于 AA 和 SpaceToDepth 模块,发现 JIT 编译简直能够将 GPU 老本升高两倍。
Inplace 操作间接更改给定张量的内容,无需内存之间的复制,这样能够避免创立不须要的激活映射不须要进行反向流传。所以尽量应用 Inplace 操作。TResNet-M 的最大批量大小简直是 ResNet50-512 的两倍,
Fast Global Average Pooling 是 GAP 的一个简略专用实现,针对 (1,1) 空间输入的特定状况优化了代码,比 GPU 上的样板实现快 5 倍。
试验后果
ImageNet
TResNet-M 的 GPU 吞吐量与 ResNet50 类似,在 ImageNet 上的验证准确率显着进步(+1.8%)。在 8×V100 GPU 机器上训练 TResNet-M 和 ResNet50 模型耗时不到 24 小时,可见该训练计划也是高效经济的。TResNet 模型的另一个劣势是可能解决比其余模型大得多的批量大小。
融化钻研
- 尽管预期 GPU 吞吐量会进步,但在用“更便宜”的 SpaceToDepth 单元替换 ResNet stem 时,准确度也会(稍微)进步这一事实有点令人诧异。
- 块类型抉择为所有办法提供了显着改良。
- Inplace-ABN 显着减少了批量大小。Inplace-ABN 的影响好坏参半:尽管推理速度有所提高,但训练速度有所升高。
- 优化的 SE + Anti-Aliasing 层显着进步了 ImageNet top-1 精度,但代价是升高了模型 GPU 吞吐量。
ResNet-M 模型中的代码优化对推理速度、训练速度和最大批量大小的影响
在优化中,inplace 操作提供了最大的晋升——它不仅进步了 GPU 吞吐量,而且还显着减少了批量大小,因为它防止了为反向流传创立不须要的激活图。
High-Resolution Fine-Tuning
应用 224 的 ImageNet 预训练的 TResNet 模型作为终点,并通过 10 次 epoch 微调到 448 的输出分辨率。TResNet 模型能够很好地扩大到高分辨率。即便是 TResNet-M 这种绝对较小紧凑的模型,在高分辨率输出的 ImageNet 上也能够达到 83.2% 的 top-1 准确率。
与 EfficientNet 模型的比拟
沿着 top-1 准确度曲线,TResNet 模型比 EfficientNet 模型提供更好的推理速度准确度和训练速度准确度衡量。
迁徙学习
TResNet 在迁徙学习数据集上与最先进模型的比拟(仅基于 ImageNet 的迁徙学习后果)应用 ImageNet 预训练,并对模型进行了 80 个 epoch 的微调。TResNet 在 4 个数据集中的 3 个数据集上超过或匹配了最先进的精度,GPU 推理速度进步了 8-15 倍。
基于 TResNet 的解决方案显著优于之前 MSCOCO 多标签数据集的顶级解决方案,将已知 SOTA 从 83.7 mAP 大幅提高到 86.4 mAP。
应用 FCOS 作为指标检测器,TResNet-M 在这个指标检测工作上的体现优于 ResNet50,将 COCO mAP 得分从 42.8 进步到 44.0。
论文
[2021 WACV] TResNet: High Performance GPU-Dedicated Architecture
https://avoid.overfit.cn/post/d032d7b8ca65463b95c70fc4950a6e1a
作者:Sik-Ho Tsang