编辑:Happy
首发: AIWalker公众号
来源: GPU端精度最高速度最快的强悍担当:GENet
日期:2020-06-27
【Happy导语】该文是阿里巴巴提出了一种GPU端高效&高精度网路架构设计新方案。不同于之前的MobileNet、EfficientNet以及RegNet等网络采用相同的模块构建整个网络,该文对不同阶段的模块进行分析并得出这样的结论:在网络的low-level阶段采用BasicBlock,而在high-level阶段采用Bottleneck/InvertedResidualBlock可以最大化的利用GPU并得到更快的推理速度与模型精度。Happy建议对网络架构有兴趣的朋友可以仔细看一下原文,文末附论文下载链接。
在工业界大多算法均是基于GPU进行推理,这就要求AI算法不仅应当具有高识别率,同时还要具有更低的推理延迟。尽管已有诸多研究尝试优化深度模型的架构以进行更有效的推理,然而它们并未充分利用现代GPU的架构进行快速推理,从而导致了次优性能。
为解决上述问题,作者在大量实验研究的基础上提出了一种GPU端高效网络设计的通用范式,该设计范式促使作者仅需要采用简单而轻量的NAS方法即可得到高效且高精度的GPU端网络架构。基于所设计的网络架构设计范式,作者提出了一类GPU端高效的网络,称之为GENet。
作者在多个GPU平台与推理引擎下对所得到的网络进行了充分的评估,所提方法不仅在ImageNet上取得了不低于81.3%的top1精度,而且在GPU端比EfficientNet快6.4倍。与此同时,所提方法同样优于其他效率高于EfficientNet的SOTA方法。
该文的主要贡献有如下:
在这部分内容中,我们将主要介绍一下如何一步步得到所提网络架构设计空间。首先介绍一下主流网络中常用的三种基本模块,然后对其推理速度进行了分析,最后基于实验分析得出网络架构设计空间范式。
上图a给出了目前网络架构设计中的主流架构(ResNet、ResNeSt、EfficientNet、RegNet、MobileNet等等均采用了类似的架构体系)形态,这也是该文的架构形态。
作者将该架构形态称之为MasterNet,它的每个阶段称之为Super-Block,每个Super-Block由同类型的多个BasicBlock构成,每个BasicBlock由深度、宽度以及stride等参数进行描述。一般而言,Super-Block的第一个模块采用stride=2进行特征下采样,后续模块采用stride=1的模式。而MasterNet的第一层是一个stride=2的stem模块;MasterNet的最后为GAPHead模块(它包含一个全局均值池化与一个全连接层,用于分类)。现有研究已经证实:上述网络架构形态足以得到GPU端的高性能低延迟的网络架构。而不同网络架构的关键区别在于BasicBlock的差异。而这也是本文的关注重点。
在BasicBlock方面,作者考虑了三种类型的模块(见上图b),分别如下:
上图c则给出了上述模块嵌入到残差模块中的示意图以及stride=2时的模块示意图。
作者对上述三个模块在GPU端的推理速度进行可控实验分析,所有耗时实验均重复30次,剔除10最低与最高后进行平均统计。作者在NVIDIA V100硬件平台下采用FP16精度和分辨率进行实验。不同角度的实验分析如下。
受启发于上述分析,作者尝试对不同阶段的卷积进行分析。主要针对ResNet18和ResNet34两个网络进行了分析,因ResNet50等更深网路采用的BL-Block故而被排出在外。第三个网络是作者手动设计的网络,称之为ProfilingNet132.三个网络均在ImageNet数据集上训练360epoch。
下图给出了不同阶段最后一个卷积核的奇异值分布,注:奇异值进行了归一化处理。从图中可以看出:high-level的奇异值衰减的更快,这也就意味着:应当在网络的low-level阶段采用XX-Block,而在网络的high-level阶段采用BL/DW-Block以最大化GPU推理效率。
前述实验给出了本文的核心:GPU端高效网络设计范式。作者基于该先验信息设计GPU端高效网络。作者首先采用手动方式设计MasterNet,然后将其作为LLR-NAS的初始网络并进行优化。
为得到一个好的初始化架构,作者设计了20个网络。所有网络均具有0.34ms推理延迟(注:BatchSize=64,这也是ResNet50、EfficientNet的推理延迟)。作者在ImageNet上分别对这20个网络训练120epoch。对于BL-Block,作者固定;对于DW-Block,作者固定。实验结果见下表,注:这里仅提供了4个最佳。
注:上表第一列表示网络ID,第二列表示模块类型(C表示常规卷、X表示XX-Block,B表示BL-Block,D表示DW-Block),第三列表示不同阶段的模块数,第四列表示不同阶段的通道数,第五列表示不同阶段的stride信息,最后一列表示模型的精度。表中结果验证了前述分析结论,最佳的模型均为low-level阶段采用XX-Block,在high-level采用BL/DW-Block。
作者选用Net1作为初始MasterNet,需要注意的是MasterNet的参数配置对应并不大,因为后面作者将采用NAS进行最终模型的搜索。当然Net2与Net3也是MasterNet的不错选择。
作者提出采用NAS方式搜索MasterNet的结构,所用的NAS称之为LLR-NAS。假设MasterNet包含M的Super-Block,每个Super-Block可以参数化为(分别表示深度、通道数以及模块类型),除了模块类型外,作者将不同核尺寸和参数的模块视作不同的模块类型。
LLR-NAS的流程如下:
与此同时,作者在不同分辨率输入下采用上述伪梯度进行最佳网络架构搜索,所选择的架构在对应分辨率下进行训练,最终选择训练后具有最佳精度的模型作为对应分辨率下的最有模型。注:作者分别设置延迟耗时为0.34/0.2/0.1三种约束得到了GENet-Large/GENet-normal/GENet-light。
在该部分内容中,作者对比了ResNet、EfficientNet、MnasNet、MobileNetV2、DNANet、DFNet、OFANet以及RegNet等网络架构。
在ImageNet数据集上对比了模型精度,在LLR-NAS阶段,随机从训练集中采样50000样本作为验证集。每个SuperBlock以0.01学习率,BatchSize=256微调30epoch,卷积核尺寸可调空间,输入分辨率可调空间,参数r的可调空间分别为(对应BL-Block)和(对应DW-Block),LLR-NAS阶段在24V100GPU上训练60小时。而最终的模型训练480epoch,同时采用了标签平滑、mixup、random-erase、AutoAugment等训练技巧。
上表给出了GENet在不同约束下的网络架构配置信息,可以看到其中的DW-Block搜索的参数,这与EfficientNet中的完全不同。对比GENet的三种不同配置,可以看到:GENet-large网络提升high-level阶段的深度而降低了low-level阶段的深度。最后两行还给出了不同配置模型的FLOPs与分辨率输入。
为评估所得到的网络在GPU端的推理速度,作者考虑了三种配置:(1) NVIDIA V100-FP16(大多论文中常用配置);(2) NVIDIA T4-FP16+TensorRT(推理端评测);(3) NVIDIA T4-INT8+TensorRT(推理端评测,采用TensorRT内置量化工具进行INT8量化)。不同模型的精度与耗时见上图,可以看到:GENet以明显优势优于其他网络。在相同推理速度下,GENet-large以5.0%的指标优于EfficientNet-B0,达到了81.3%的精度且比EfficientNet-B3更快。尽管GENet是针对V100而优化得到的,但它对于T4GPU同样高效,这侧面表明了GENet跨GPU平台的迁移性能。
上表给出了不同网络在相似精度下的推理延迟对比,可以看到:(1) 更高精度时,GENet的优势更明显。(2) 除了EfficientNet-B3与GENet-large外,其他网络均无法达到超过81%的指标。(3) 在T4+TensorRT+INT8配置(工业界常见配置)下,GENet-large以6.4倍的速度快于EfficientNet-B3,GENet-normal以6.8倍速度快于EfficientNet-B2,以4.2倍速度u快于OFANet。不同硬件下的精度与速度对比见下面三个图。
阿里巴巴的研究员提出了一类针对GPU的高效网络架构设计空间,结合该设计空间于半自动NAS技术得到了GPU端高效网络GENet。GENet倾向于在low-level阶段使用全卷积,而在high-level阶段使用深度分离卷积或者Bottleneck结构。
最后作者通过实验证实了所提网络架构设计空间的优异性能,在具有高精度的同时还具有高推理速度,你说气人不气人。