文章目录
- 年三十
- Abstract
- Introduction
- PeleeNet:一个高效的特征提取网络
- 架构
- 消融实验
- 数据集
- 不同设计选择对性能的影响
- 在ImageNet ILSVRC 2012上的结果
- 真实设备上的速度
- Pelee:实时目标检测系统
- Overview
- 在VOC 2007上的结果
- 不同设计选择的影响
- 与其他框架的比较
- 真实设备上的速度
- 在COCO上的结果
- Conclusion
原文链接
源代码
年三十
Abstract
由现实问题出发:在计算能力和内存资源有限的移动设备上运行卷积神经网络(CNN)模型的需求日益增加,对高效模型设计进行研究
指出此前提出的高效体系结构存在的问题:如MobileNet、ShuffleNet和MobileNetV2等严重依赖于深度可分离卷积,这在大多数深度学习框架中缺乏有效的实现,而将高效模型与快速目标检测算法相结合的研究很少
基于此,作者提出了一种用传统卷积来构建的高效的PeleeNet架构
在ImageNet ILSVRC 2012数据集上,我们提出的PeleeNet实现了更高的精度,速度比NVIDIA TX2上的MobileNet和MobileNetV2快1.8倍以上。同时,PeleeNet只有MobileNet模型大小的66%。然后,我们将PeleeNet与单镜头多盒检测器(Single Shot MultiBox Detector, SSD)方法相结合,提出了一种实时目标检测系统Pelee,并对结构进行了优化,以提高速度。我们提出的检测系统名为Pelee,在PAS- CAL VOC2007上达到76.4%的mAP(平均精度),在MS COCO数据集上达到22.4 mAP,在iPhone 8上达到23.6 FPS,在NVIDIA TX2上达到125 FPS。COCO的结果优于YOLOv2,考虑到更高的精度,13.6倍的计算成本和11.3倍的模型尺寸
Introduction
人们对在严格限制内存和计算预算的情况下运行高质量的CNN模型越来越感兴趣。重复:近几年提出了一些新颖的架构,然而它们严重依赖于深度可分离卷积,缺乏有效的实现。同时,将高效模型与快速目标检测算法相结合的研究很少。
本研究尝试为图像分类任务和目标检测任务探索一种高效的CNN架构设计
主要贡献如下:
We propose a variant of DenseNet Huang et al. (2016a) architecture called PeleeNet for mobile devices.
-
我们提出了一种专为移动设备设计的DenseNet Huang等人(2016a)变体架构,称为PeleeNet
PeleeNet的一些关键特性是:• 双向致密层
受GoogLeNet(2015)的启发,我们使用双向密集层来获得不同规模的感受野。该层的一侧使用3x3的内核大小,另一侧是使用两个堆叠的3x3卷积来学习大型目标的视觉模式
• Stem Block
在Inception-v4(2017)和DSOD(2017)的激励下,我们在第一致密层之前设计了一个高效的Stem块。Stem Block可以有效地提高特征表达能力,而不会增加太多的计算成本,优于其他更昂贵的方法(例如增加第一卷积层的通道数或提高增长率)
• 瓶颈层的动态通道数
另一个亮点是瓶颈层中的通道数量根据输入形状而变化,而不是像原来的DenseNet那样固定的4倍增长率。在DenseNet中,我们观察到,对于前几个密集层,瓶颈通道的数量远远大于其输入通道的数量,这意味着对于这些层,瓶颈层增加了计算成本,而不是降低了成本• 过渡层没有压缩
我们的实验表明,DenseNet提出的压缩因子对特征表达式有损害。在过渡层中,我们总是保持输出通道的数量与输入通道的数量相同• 复合函数
为了提高实际速度,我们使用传统的后激活(卷积-批处理归一化-Relu)作为我们的复合函数,而不是DenseNet中使用的预激活(卷积+Relu+BN)。
对于后激活,可以在推理阶段将所有批处理归一化层与卷积层合并,大大加快了推理速度。为了补偿这种变化对精度造成的负面影响,我们使用了浅而宽的网络结构。我们还在最后一个密集块之后增加了1x1卷积层,以获得更强的表示能力
2. 我们对SSD的网络架构进行了速度加速优化,然后将其与PeleeNet相结合
我们提出的系统名为Pelee,在PASCAL VOC 2007上实现了76.4%的mAP,在COCO上实现了22.4的mAP。它在准确性、速度和模型大小方面优于YOLOv2 。为平衡速度和准确性而提出的主要改进包括:
• 特征映射选择
我们以一种不同于原始SSD的方式构建目标检测网络,精心选择了5个尺度特征映射(19 × 19、10 × 10、5 × 5、3 × 3和1 × 1)。为了减少计算成本,我们没有使用38 × 38特征映射。
• 残差预测块
我们遵循Lee等人(2017)提出的设计思想,鼓励特征沿着特征提取网络传递(特征重用)。对于用于检测的每个特征映射,我们在进行预测之前构建了一个残差He等(2016)块(ResBlock)
• 用于预测的小卷积核
残差预测块使我们能够应用1x1卷积核来预测类别分数和框偏移量。我们的实验表明,使用1x1核的模型与使用3x3核的模型的精度几乎相同。然而,1x1内核减少了21.5%的计算成本
- 我们在NVIDIA TX2嵌入式平台和iPhone 8上对不同的高效分类模型和不同的单阶段目标检测方法进行了基准测试(这也算?)
PeleeNet:一个高效的特征提取网络
架构
我们提出的PeleeNet的体系结构如下表1所示,四级结构是大型模型设计中常用的结构形式。ShuffleNet 使用三阶段结构,并在每个阶段开始时缩小特征图的大小。尽管这可以有效地降低计算成本,但我们认为早期特征对于视觉任务非常重要,过早减小特征映射大小会损害表征能力。因此,我们仍然保持四阶段结构。前两个阶段的层数被特别控制在一个可接受的范围内
消融实验
数据集
我们为消融研究建立了一个定制的斯坦福犬数据集。Stanford Dogs的数据集包含来自世界各地的120个品种的狗的图像。该数据集使用来自ImageNet的图像和注释构建,用于细粒度图像分类任务。我们认为用于这类任务的数据集足够复杂,足以评估网络架构的性能。然而,在最初的斯坦福狗数据集中,只有14580张训练图像,每个类大约120张图像,这不足以从头开始训练模型。我们没有使用原始的斯坦福狗,而是根据斯坦福狗使用的ImageNet模型构建了ILSVRC 2012的子集。训练数据和验证数据都是从ILSVRC 2012数据集中精确复制的。本数据集的内容:
• 类别数量:120
• 训练图像数量:150,466
• 验证图像数量:6,000
不同设计选择对性能的影响
我们建立了一个类似DenseNet的网络,称为DenseNet-41作为我们的基线模型,它和最初的DenseNet有两个不同:
-
第一个卷积层的通道数改为24而不是64,卷积核大小也由77改为33
-
调整每个密集块的层数以满足计算预算
本节中的所有模型都是由PyTorch训练的,小批量大小为256,epoch为120。我们在ILSVRC 2012上遵循ResNet中使用的大多数训练设置和超参数。
表2显示了各种设计选择对性能的影响。可以看到的是后激活降低了精度,但最后仍然采用是为了减少计算成本,提高速度
在ImageNet ILSVRC 2012上的结果
PeleeNet是由PyTorch训练的,在两个gpu上的小批处理大小为512,该模型是用余弦学习率退火计划训练的
初始学习率设置为0.25,总次数为120 epoch。然后,对模型进行微调,初始学习率为5e-3,共20 epoch。其他超参数与斯坦福狗数据集上使用的参数相同
余弦学习率退火:
表示学习率以余弦形状衰减(epoch t (t <= 120)的学习率设为0.5∗lr∗(cos(π∗t/120) + 1)。
从表三可以看出:PeleeNet计算成本低,模型小,精度略不如NASNet-A
真实设备上的速度
计算FLOPs(乘法累加的个数)被广泛用于衡量计算成本。然而,它不能取代在真实设备上的速度测试,因为还有许多其他因素可能会影响实际的时间成本,例如缓存、I/O、硬件优化等。本节将对高效机型在iPhone 8和NVIDIA TX2嵌入式平台上的性能进行评估。速度是通过处理100张图片的平均时间来计算的。我们对100张图片分别进行10次处理,取平均时间
从表4可以看出,在TX2上,PeleeNet比mobilenet和MobileNetV2要快得多。虽然MobileNetV2以300 FLOPs达到了很高的精度,但该模型的实际速度比569 FLOPs的MobileNet慢。
使用半精度浮点数(FP16)代替单精度浮点数(FP32)是一种被广泛使用的加速深度学习推理的方法。如图5所示,PeleeNet在FP16模式下的运行速度是FP32模式下的1.8倍。相比之下,使用深度可分离卷积构建的网络很难从TX2半精度(FP16)推理引擎中获益,例如:在FP16模式下运行的MobileNet和MobileNetV2的速度与在FP32模式下运行的速度几乎相同
在iPhone 8上,PeleeNet在小输入维度上比MobileNet慢,但在大输入维度上比MobileNet快。iPhone上的不利结果可能有两个原因:第一个原因与基于apple Metal API构建的CoreML有关。Metal是一个3D图形API,最初不是为cnn设计的。它只能保存4个通道的数据(最初用于保存RGBA数据)。高级API必须将通道分成4个切片,并缓存每个切片的结果。与传统的卷积相比,可分离卷积从这种机制中获益更多。第二个原因是PeleeNet的体系结构,PeleeNet以多分支和窄通道风格构建,具有113个卷积层。我们最初的设计被FLOPs计数误导,并且涉及不必要的复杂性
Pelee:实时目标检测系统
Overview
本节介绍了目标检测系统及针对SSD的优化。我们优化的主要目的是在可接受的精度下提高速度。除了上一小节提出的高校特征提取网络,我们还构建了一个有别于SSD的目标检测网络,并精心选择了一组5个比例的特征图。
同时,对于每个用于检测的特征映射,我们先构建残差块,然后再进行预测。我们还使用小卷积核来预测对象类别和边界框位置,以减少计算成本(Introduction中有介绍),此外,我们使用完全不同的训练超参数。
虽然这些贡献可能看起来很小,但我们注意到最终系统在PASCAL VOC2007上实现了70.9%的mAP,在MS COCO数据集上实现了22.4 mAP。COCO的结果优于YOLOv2,考虑到更高的精度,13.6倍的计算成本和11.3倍的模型尺寸。
我们的系统中用于预测的特征地图有5种尺度:19 × 19、10 × 10、5 × 5、3 × 3和1 × 1。我们没有使用38 x 38的特征地图层,以确保在速度和精度之间达到平衡**。19x19特征图被组合成两个不同比例的默认框,其他4个特征图被组合成一个比例的默认框**。
在VOC 2007上的结果
我们的目标检测系统基于SSD的源代码,批量大小设置为32,最初将学习率设置为0.005,然后分别在80k和100k迭代时降低10倍。总迭代次数为120K
不同设计选择的影响
从下表我们可以看到残差预测块可以有效地提高预测精度。使用1x1核进行预测的模型与使用3x3核进行预测的模型的精度几乎相同,然而,1x1核减少了21.5%的计算成本和33.9%的模型大小,使用38*38的特征输入虽然能提升精度,但带来了过高的计算成本
与其他框架的比较
从表8我们可以看到Pelee不论丛计算成本、模型大小还是mAP都取得了非常不错的结果
真实设备上的速度
然后,我们在实际设备上评估了Pelee的实际推理速度。通过基准工具处理100张图像的平均时间计算速度。这个时间包括图像预处理时间,但不包括后处理部分(解码边界框和执行非最大抑制)的时间。通常,后处理是在CPU上完成的,它可以与在移动GPU上执行的其他部分异步执行。因此,实际速度应该非常接近我们的测试结果。
尽管在Pelee中使用残差预测块增加了计算成本,但Pelee的实际运行速度仍优于MobileNet,在FP16模式下尤其明显
在COCO上的结果
Pelee不仅比SSD+MobileNet更准确,而且在mAP[0.5:0.95]和mAP0.75上也比YOLOv2 更准确。与此同时,Pelee的速度比YOLOv2快3.7倍,模型尺寸比YOLOv2小11.3倍
总的来说,Pelee在速度和精度之间取得了最佳权衡
Conclusion
深度可分离卷积并不是建立高效模型的唯一方法,我们提出的PeleeNet和Pelee使用常规卷积构建,并在ILSVRC 2012, VOC 2007和COCO上取得了令人信服的结果
通过将高效的架构设计与移动GPU和硬件指定的优化运行库相结合,我们能够对移动设备上的图像分类和目标检测任务进行实时预测。例如,我们提出的目标检测系统Pelee在iPhone 8上可以运行23.6 FPS,在NVIDIA TX2上可以运行125 FPS,并且精度很高