1 Backbone
近期YOLO6,PP-YOLOE等算法都改进了CSPNet的骨干网络,基于RepVGG的思想设计了可重参数化的骨干网络,让模型在推理上具有更高效的性能。我们沿用了这一思想,利用YOLO6的EfficientRep代替YOLOX原来的CSPDarkNet-53骨干网络。
2 Neck
在更换了骨干网络的基础上,我们对Neck部分分别进行了两方面的探究。
1、ASSF:基于对PAN输出特征维度变换后基于SE-Attention特征融合的特征增强,大幅提升参数量和精度,部分降低推理速度。具体思想如下图。
ASSF-Sim : 我们选取了参数量更低的特征融合实现,用较少的参数量(ASFF:5M -> ASFF-Sim:380K)来保留了84%的精度精度提升(+0.98map->+0.85map)。然而,这一改进会让推理速度变慢,未来我们会针对这个OP实现对应的Plugin完成推理加速。参考YOLO5中的Fcous层的设计,PAI-EasyCV利用切片操作进行特征通道的增加和特征图的缩小。同时,利用求平均操作进行通道的压缩,基于这种实现的ASFF,我们简单区分为ASFF-Sim。我们进行特征图统一的核心操作(通道扩展和通道压缩)如下:
2、GSNeck :基于DW Conv 对Neck信息融合,降低Neck参数量,轻微提升精度,也会会降低推理速度。采用DWConv降低参数量是一种常用技巧,在YOLOX中,GSconv设计了一种新型的轻量级的卷积用来减少模型的参数和计算量。为了解决Depth-wise Separable Convolution (DSC)在计算时通道信息分离的弊端,GSConv(如下图所示)采用shuffle的方式将标准卷积(SC)和DSC得到的特征图进行融合,使得SC的输出完全融合到DSC中。
此外,GSConv原文指出,如果在整个网络都使用GSconv,则会大大加深网络的深度,降低模型的推理速度,而仅在通道信息维度最大,空间信息维度最小的Neck处使用GSConv是一种更优的选择。我们在YOLOX中利用GSConv优化模型,特别的我们采用了两种方案分别进行实验(fig4: 仅将Neck的部分用GSConv,fig3: Neck的所有模块均使用GSConv):
3 Head
参考PPYOLOE,我们同样考虑利用TOOD算法中的Task-aligned predictor中的注意力机制(T-Head)分别对分类和回归特征进行增强。如下图所示,特征先通过解耦头的stem层(1x1)进行通道压缩,接着由通过堆叠卷积层得到中间的特征层,再分别对分类和回归分支利用注意力机制进行特征的增强,来解耦两个任务。
此外,我们利用RepVGGBlock分别优化inter_conv,cls_conv/reg_conv层。实验结果表明用RepVGGBlock实现inter_conv层会带来性能上的下降,而RepVGGBlock实现的cls_conv/reg_conv层与原始卷积层在stack较大时效果相当,在stack比较小时,RepVGGBlock能起到优化作用。
4 YOLOX-PAI推理优化
PAI-Blade 是一个用于模型加速的简单且强大的推理优化框架。它基于 在许多优化技术上,例如 Blade Graph Optimizer、TensorRT、PAI-TAO(Tensor Accelerator and Optimizer)等。 PAI-刀片 将自动搜索最佳方法 优化输入模型。因此,没有模型部署专业知识的人也可以使用 PAI-Blade 来优化推理过程。我们整合使用 PAI-Blade 在 EasyCV 中,以便用户可以获取 只需更改导出配置即可实现高效模型。使用PAI-Blade优化模型推理速度,简化对模型的推理加速(TensorRT/编译优化)开发流程。PAI-Blade遵循易用性,鲁棒性和高性能为原则,将模型的部署优化进行高度封装,设计了统一简单的API,在完成Blade环境安装后,用户可以在不了解ONNX、TensorRT、编译优化等技术细节的条件下,通过简单的代码调用方便的实现对模型的高性能部署。
5 PAI-EasyCV Predictor
针对使用PAI-EasyCV训练的YoloX-PAI 模型,用户可以使用EasyCV自带的导出(export)功能得到优化后的模型,并使用 EasyCV Predictor 进行端到端的推理。 该导出功能对检测模型进行了如下优化:
- 使用PAI-Blade优化模型推理速度,简化对模型的推理加速(TensorRT/编译优化)开发流程。
- 支持EasyCV配置TorchScript/PAI-Blade对图像前处理、模型推理、图像后处理分别优化,供用户灵活使用
- 支持Predictor 结构端到端的模型推理优化,简化图片预测过程。
6 PAI-EasyCV Export
根据不同的模型配置,我们在单卡V100上测试YOLOX-s所有配置下模型的端到端推理性能 (1000次推理的平均值):
我们比较了三种loss的特征模长分布 分别是Softmax ArcFace MagFace,三个图的横坐标表示样本特征的难易程度。可以看出softmax的特征模长和样本难易有相对较弱的关系。其实早期在L2softmax有发现softmax的模长和质量有一定正向关系,但是归一化模长在L2softmax和后续工作都发现能大幅度提高识别性能,因此后来的识别loss里面都选择弃用模长。ArcFace 虽然有特征的难易程度和模长存在一条下界但是我们可以看到在简单样本那分布了各种模长的特征。这也验证了之前提到的ArcFace在训练过程中只考虑类间距离,类内并无约束所以会使得easy case 的模长分布比较离散。(c)是MagFace特征模长和样本难易程度有非常明显的正相关性。这也充分验证了我们利用模长来衡量图片质量的可行性。表明我们MagFace利用模长来设计loss,期望难样本在类边缘简单样本在类中心是有效的。