【目标检测】16、Pelee: A Real-Time Object Detection System on Mobile Devices

摘要

目前在计算能力和内存资源有限的移动设备上运行卷积神经网络模型的需求越来越大,这样一来就刺激了对高效模型的设计和研究。

MobileNet、ShuffleNet和MobileNetV2等高效的网络结构,然而这些模型高度依赖于深度可分离卷积网络,在很多深度学习框架中难以实施。

基于此,本文提出了一种有效的结构,名为PeleeNet,使用传统的卷积网络。

  • 在ImageNet ILSVRC 2012上,PeleeNet达到了很好的效果,且在NVIDIA TX2上比MobileNet 和 MobileNetV2 快1.8倍。
  • PeleeNet模型大小是MobileNet的66%
  • 本文提出了一个将PeleeNet和SSD结合起来的实时目标检测系统Pelee,在PASCAL VOC2007上的mAP达到了76.4%,MS COCO上的mAP达到了22.4,在NVIDIA TX2上进行实验,速度分别为8和125fps。
  • COCO上的结果比YOLOv2的精度要好,计算复杂度比其低13.6倍,模型大小低11.3倍。

1. 引言

在内存和计算受限的情况下高性能的运行CNN模型已经引起了人们的兴趣

目前也产生了很多新的结构,如MobileNets [1], ShuffleNet [2], NASNet-A [3], MobileNetV2 [4]。

这些结构的缺点: 高度基于深度可分离卷积,限制了实施

目前现有研究的盲点: 缺少有效模型和快速目标检测系统的结合

本文尝试将高效的CNN用于图像分类和目标检测任务,贡献点如下:

1)在移动端提出了DenseNet[7]变体结构——PeleeNet

PeleeNet借鉴了DenseNet的级联模式和主要步骤,被用于解决存储和计算能力受限的情况。

在斯坦福的Dogs[8]数据集上比DenseNet的准确率高5.05%,比MobileNet[1]高6.53%。

在ImageNet ILSVRC 2012 [9]上效果也很好,Top-1准确率为72.1%,比MobileNet高1.6%,且仅仅是MobileNet模型大小的66%

PeleeNet的主要结构:

  • Two-Way Dense Layer:

    灵感源于GoogLeNet[5],使用2路稠密层来获得不同尺度的感受野,一路使用3x3的卷积核,另一路使用两个堆叠的3x3卷积来学习大目标物体的视觉模式,结构如Fig.1(右)。
    在这里插入图片描述

  • Stem Block:

    灵感源于Inception-v4[10]和DSOD[11],在第一个稠密层之前设计一个有效的stem block,结构如Fig 2,该结构可以有效的提升特征表达能力且不会增加额外的计算开销,比其他的方法(增加通道或增加增长率)都要好。
    在这里插入图片描述

  • 瓶颈动态通道数

    另外一个有效的设计是,瓶颈层的通道数是根据输入形态可以动态调整的,而不是DenseNet中使用的固定的数量,是增长率的4倍。DenseNet中,前几个稠密层的瓶颈通道数比输入通道数多很多,这也意味着对这些层来说,瓶颈层增加了计算开销。

    为了维持结构的一致性,PeleeNet仍然给所有稠密层添加了瓶颈层,但是数量是依据输入形式而动态调整的,来保证通道数量不会超过输入通道数。

    本文的网络可以在减少28.5%的计算开销的同时,仅对准确率有微小的降低(Fig.3)
    在这里插入图片描述

  • 无压缩的传递层

    实验验证了DenseNet中提出的压缩因子会损害特征表达,本文保持transition layers的输出通道数和输入通道数相同。

  • Composite Function

    为了加速实际过程,本文使用“post-activation”(卷积-BN[12]-Relu)结构来作为composite function而不是DenseNet中使用的pre-activation。post-activation中,在推断阶段(inference stage)所有的BN层可以和卷积层合并,可以促进加速。为了弥补这个改变给准确度带来的负面影响,本文使用更浅更宽的网络结构,在最后一个dense block后添加一个1x1的卷积层来获得更强的特征表达能力。

2)优化SSD的网络结构来提升速度,并将优化后的SSD与PeleeNet进行结合

本文提出的系统叫Pelee,在PASCAL VOC [14] 2007上达到了76.4%的mAP,在COCO上达到了22.4%的mAP。在准确度、速度和模型小型上都超越了YOLOv2,权衡速度和准确度的要点如下:

  • 特征图选择:

和传统SSD的构建过程不同的目标检测网络,仔细的选择了5种不同尺度的特征图(19x19, 10x10, 5x5, 3x3, 1x1),为了减少计算复杂度,没有使用38x38的特征图。

  • 残差预测模块:

    本文使用[16]中提出的设计思想,鼓励特征沿着特征提取网络进行传递。对于每个用于检测的特征图,在预测之前建立一个残差块(Residual Block,ResBlock),结构如图Fig.4。

  • 用于预测的小的卷积核:

    残差预测块使得利用1x1卷积核来预测分类得分和b-box偏移量成为可能,实验展示出实验1x1卷积核的模型几乎和使用3x3的卷积核准确率相当,且1x1的卷积核将计算复杂度降低了21.5%。

在这里插入图片描述

3)提供了一种基准测试

针对NVIDIA TX2嵌入式平台和iPhone 8上不同的高效分类模型和不同的单阶段目标检测方法

2. PeleeNet:An Efficient Feature Extraction Network

2.1 结构

本文提出的PeleeNet结构如Table 1中所示,整个网络由一个stem block和四阶特征提取器构成。

除过最后一个阶段的每个阶段的最后一层都是步长为2的平均池化,四阶段结构是一般大型模型设计的通用结构。

ShuffleNet [2]使用三阶段的结构,并在每个阶段的开始都压缩了特征图大小,尽管这样可以提升计算速度,但是我们认为前面的阶段对视觉任务尤为重要,且过早的减小特征图大小会损坏特征表达能力,因此我们仍然使用四阶段结构,前两阶段的层数是专门控制在一个可接受的范围内的。

在这里插入图片描述

2.2 消融学习

2.2.1 数据集

我们将斯坦福的Dogs数据集进行了预处理来进行消融学习。

Stanford Dogs [8] dataset包含了来自全世界的120种不同的品种。该数据集利用图像和从ImageNet中的标记来建立的,用于细粒度图像的分类。

我们认为用于这类任务的数据集足够复杂,足以评估网络体系结构的性能。

但是,原始的Stanford Dogs数据集仅包含14580个训练图像,每类大概120张图像,数据集不够大以至于不能从最初开始训练模型。

我们没有使用原始数据集,而是根据Stanford Dogs中使用的ImageNet wnid构建了一个 ILSVRC 2012子集,

训练集和验证集都来源于ILSVRC 2012数据集,下文中,“Stanford Dogs”就表示ILSVRC 2012的子集。

  • 类别:120
  • 训练集个数:150466
  • 验证集个数:6000

2.2.2 不同设计方法的性能测试

我们建立了一个类似于DenseNet的网络——DenseNet-41作为基准模型。两个模型中有两点不同:

  • 第一个卷积层的参数(第一个卷积层有24个通道,而非64个,卷积核大小为3x3而非7x7)
  • 每个dense block的层数是根据计算预算来确定的

本节中的实验都是用PyTorch训练的,小批量大小为256,迭代120次,训练集和超参数都是用RestNet在ILSVRC 2012中的参数。

Table 2中展示了不同设计方式对性能的影响。结合了这些设计方式的PeleeNet在Stanford Dogs数据集上的准确率达到了79.25%,比DenseNet-41高4.24%,且计算开销更小。
在这里插入图片描述

2.3 在 ImageNet ILSVRC 2012上的结果

PeleeNet是在PyTorch上以两个GPU上且批量大小为512的情况下训练的。

学习率:初始值为0.18,迭代次数为120,cosine降速学习率,与[18,19]中相同

微调:初始学习率为0.005,迭代次数为20次,其他超参数都是和Stanford Dogs数据集相同

  • Cosine Learning Rate Annealing:

    学习率以cosine曲线的形式下降,也就是对于第 t ( t < = 120 ) t(t<=120) t(t<=120) 次迭代,学习率设置为:
    0.5 ∗ l r ∗ ( c o s ( π ∗ t / 120 ) + 1 ) 0.5 * lr * (cos(\pi * t/120)+1) 0.5lr(cos(πt/120)+1)

表3中展示了PeleeNet以更低的计算开销获得了比 MobileNet 和 ShuffleNet 更高的准确率,且模型大小不超过该两者的66%。PeleeNet的模型大小仅仅是VGG16的1/49。
在这里插入图片描述

2.4 实际设备上的速度

计算FLOPS(floating-point operations per second,每秒浮点运算次数)在判定网络的计算速度中应用的很多。

但是FLOPS不能测试在实际设备上的速度,因为实际中可能有很多因素都会影响实时速度,如缓存、I/O口、硬件设备等。

本节将在iPhone 8 和 NVIDIA TX2嵌入式平台上对该模型的性能进行测试。

速度的计算方式:对100张图像,处理10次,对时间求均值

Table 4中可以看出,PeleeNet 在TX2 上的运行速度比 MoibleNet 和 MobileNetV2 都快,尽管MobileNetV2在高准确率的情况下达到了300FLOPS的速度,但是实际的速度还是比MobileNet的569速度慢。
在这里插入图片描述
用半精度浮点数(FP16)代替单精度浮点数(FP32)是一种广泛使用的加速深度学习推理的方法,如图5所示,PeleeNet在FP16模式下比FP32模式下快1.8倍。

相比之下,利用深度可分离卷积建立的网络很难从TX2的半精度(FP16)中获益,MobileNet和MobileNetV2在FP16模式下的运行速度几乎与在FP32模式下相同。

iPhone 8上,当输入维数小时,PeleeNet比MobileNet速度慢,当输入维数较大时,PeleeNet比MobileNet速度快,原因有两个:

  • 第一个原因与CoreML有关,CoreML基于苹果的Metal API。Metal是一个3D图形API,最初并不是为CNNs设计的。它只能保存4个通道的数据(最初用于保存RGBA数据)。高级API必须将通道切分为4个,并缓存每个切片的结果。与传统的卷积方法相比,可分离卷积可以从这种机制中更多的获益。
  • 第二个原因是PeleeNet的结构,PeleeNet是由113个卷积层组成的多分支的窄通道结构,我们的设计被错误的FLOPS计数所误导,涉及到了一些不必要的复杂性。
    在这里插入图片描述
    在这里插入图片描述

3. Pelee:实时目标检测系统

3.1 概述

本节将介绍所构建的目标检测系统和优化SSD。

优化的主要目标:在对精度没有太大损失的情况下,提高速度

本文建立的目标检测系统:

  • 使用仔细选择的5个尺度的特征图来建立,不同于SSD,
  • 对于每个用于检测的特征图,都在预测之前添加一个残差块(Fig.4)
  • 使用较小的卷积核来预测类别和定位框来减小计算开销
  • 使用不同的训练超参数

上述改变看起来很小,但最终在PASCAL VOC2007上达到了70.9%的mAP,在COCO上达到了22.4的mAP。

在COCO上的效果超越了YOLOv2,且运行时间低13.6倍,模型大小低11.3倍。

用于预测的五个尺度的特征图大小分别为:19 x 19, 10 x 10, 5 x 5, 3 x 3 和1 x 1

不使用38x38大小的特征图的原因:确保速度和准确率上的折衷权衡

19x19的特征图:被合并到两个不同尺度的默认框中,其他四种大小的特征图都被结合到一个默认框的尺度中。

SSD和MobileNet合并时:Huang 等人 [6] 也没有使用38x38的特征图,但是使用了2x2的特征图来保证使用6种尺度的特征图来进行预测。
在这里插入图片描述

3.2 在VOC 2017上的结果

本文目标检测系统是基于SSD源码在Caffe上训练的。batch size为32,初始学习率为0.005,之后分别在迭代次数为80k和100k时,减小10%,总迭代次数为120次。

3.2.1 不同设计方法的效果

Table 7展示了不同设计方法获得的性能。

残差预测模块可以很有效的提高准确率,有残差模块的模型比没有残差模块的模型准确率高2.2%。

使用1x1大小的卷积核来进行预测的模型和使用3x3大小的卷积核来预测的模型效果基本相同,但1x1的卷积核将计算开销降低了21.5,%,将模型大小降低了33.9%。

在这里插入图片描述

3.2.2 与其他框架的对比

Table 8中可以看出:

  • Pelee的准确率比 Tiny YOLOv2的准确率高13.8%
  • 比SSD+MobileNet的准确率高2.9%
  • 在计算开销仅仅为YOLOv2-228的14.5%的情况下,准确率也比YOLOv2-228高
  • 在使用COCO trainval35k(section 3.3)且在07+12数据集上进行微调的情况下,Pelee达到了76.4%的mAP

在这里插入图片描述

3.2.3 实际设备中的速度

本节测试Pelee在实际设备中的速度,通过将在基准设备中进行100次处理的实际平均而获得,包括预处理的时间但不包括 post-processing时间(也就是解码b-box和实现NMS的时间)。

通常post-processing是在CPU上进行的,也就表示该步骤可以于其他在移动GPU上执行的模块异步进行。

尽管残差模块可以提高计算开销,但是Pelee在iPhone和TX2上以FP32模式运行,仍然比SSD+MobileNet快

Table 9中可以看出,Pelee在FP16模式下,比SSD+MobileNet 和SSD+MobileNetV2 都快。
在这里插入图片描述

3.3 COCO上的实验结果

模型在COCO的train+val数据集上训练(除过5000个minival),在test-dev2015上测试。批量大小为128,前70k次迭代实验学习率为0.01,中间10k次使用0.001,后面20k次实验0.0001。

Table 10呈现了test-dev的结果,Pelee不仅比SSD+MobileNet效果好,也比YOLOv2效果好,且Pelee比YOLOv2速度快3.7倍,比YOLOv2模型小11.3倍。

在这里插入图片描述

4. 总结

  • 可分离深度卷积网络并非建立有效模型的必须途径
  • 本文利用传统的卷积形式建立了PeleeNet和Pelee结构,并且在ILSVRC 2012, VOC 2007 和 COCO上取得了引人注目的成绩
  • 本文通过将有效的结构和移动GPU及特定硬件设备的结合,建立了一种在移动端上可以进行图像分类和目标检测的模型。
  • Pelee(本文目标检测系统),可以在iPhone 8上实现23.6FPS的速度,在NVIDIA TX2上实现了125FPS的速度,同时拥有高准确率。
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值