Pelee: A Real-Time Object Detection System on Mobile Devices(CVPR 2019)


文章目录

  • 年三十
  • 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.

  1. 我们提出了一种专为移动设备设计的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%的计算成本

  1. 我们在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,并且精度很高

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/230087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下使用HTTP进行数据传输的代码实例

在Linux系统中&#xff0c;HTTP协议是一种广泛使用的应用层协议&#xff0c;用于在网络中传输数据。下面是一个使用Python的requests库在Linux下进行HTTP数据传输的代码实例。 python复制代码 import requests # 发送HTTP GET请求 response requests.get("h…

C++面试宝典第6题:访问数组和联合体元素

题目 阅读下面的代码段,并给出程序的输出。 (1)访问数组元素。 int a[] = {61, 62, 63, 64, 65, 66}; int *p = (int *)(&a + 1); printf("%d, %d\n", *(a + 1), *(p - 1)); (2)访问联合体元素。 union {short i;char x[2]; }a;a.x[0] = 10; a.x[1] = 1; …

YOLOv5改进 | 卷积篇 | SPD-Conv空间深度转换卷积(高效空间编码技术)

一、本文介绍 本文给大家带来的改进内容是SPD-Conv&#xff08;空间深度转换卷积&#xff09;技术。SPD-Conv是一种创新的空间编码技术&#xff0c;它通过更有效地处理图像数据来改善深度学习模型的表现。SPD-Conv的基本概念&#xff1a;它是一种将图像空间信息转换为深度信息…

Java_常见算法

一、常见算法 1.1 认识算法 接下来&#xff0c;我们认识一下什么是算法。算法其实是解决某个实际问题的过程和方法。比如百度地图给你规划路径&#xff0c;计算最优路径的过程就需要用到算法。再比如你在抖音上刷视频时&#xff0c;它会根据你的喜好给你推荐你喜欢看的视频&a…

Eolink Apikit 如何进行 Websocket 接口测试?

什么是 websocket &#xff1f; WebSocket 是 HTML5 下一种新的协议&#xff08;websocket协议本质上是一个基于 tcp 的协议&#xff09;。 它实现了浏览器与服务器全双工通信&#xff0c;能更好的节省服务器资源和带宽并达到实时通讯的目的 Websocket 是一个持久化的协议。…

qemu 虚拟机

文章目录 一、参考资料二、QEMU调试参数三、QEMU 命令 一、参考资料 # 查询 qemu 包 apt list | grep qemu# 查询已安装的 qemu 包 apt list --installed | grep qemu # 查询 qemu 版本 qemu-img -V # 安装 sudo apt-get install qemu-system-arm qemu-system-mips qemu-syste…

惯性导航基础知识学习----01惯性器件相关

&#x1f308;武汉大学惯性导航课程合集是入门惯导的精品课程~ 作为导航路上的鼠鼠我&#xff0c;要开始学习惯性导航了~ 需要达到的要求是大致了解惯导的原理等~ 后期会陆续更新惯导相关的知识和笔记等~ &#x1f42c; 本blog为 武汉大学惯性导航课程 的记录~ 感谢团队提供的开…

verilog基础语法-计数器

概述&#xff1a; 计数器是FPGA开发中最常用的电路&#xff0c;列如通讯中记录时钟个数&#xff0c;跑马灯中时间记录&#xff0c;存储器中地址的控制等等。本节给出向上计数器&#xff0c;上下计数器以及双向计数器案例。 内容 1. 向上计数器 2.向下计数器 3.向上向下计数…

gitee的学习

1.git下载 下载地址&#xff1a;https://git-scm.com/ 2.建立远程仓库 访问&#xff1a;gitee.com 在此网站上创建 3.本地操作 在本地找一个任意文件&#xff0c;克隆git 执行命令&#xff1a;git clone https://gitee.com/beijing-jiaxin-times_0/test_zsx_cang_ku.git …

【算法刷题】Day19

文章目录 1. 山脉数组的峰顶索引题干&#xff1a;算法原理&#xff1a;代码&#xff1a; 2. 寻找峰值题干&#xff1a;算法原理&#xff1a;1. 暴力解法2. 二分查找 代码&#xff1a; 3. 下降路径最小和题干&#xff1a;算法原理&#xff1a;1. 状态表示2.状态转移方程3. 初始化…

vue写了这么久了您是否知道:为什么data属性是一个函数而不是一个对象?

一、实例和组件定义data的区别 vue实例的时候定义data属性既可以是一个对象&#xff0c;也可以是一个函数 const app new Vue({el:"#app",// 对象格式data:{foo:"foo"},// 函数格式data(){return {foo:"foo"}} })组件中定义data属性&#xff…

BM61 矩阵最长递增路径

题目 矩阵最长递增路径 给定一个 n 行 m 列矩阵 matrix &#xff0c;矩阵内所有数均为非负整数。 你需要在矩阵中找到一条最长路径&#xff0c;使这条路径上的元素是递增的。并输出这条最长路径的长度。 这个路径必须满足以下条件&#xff1a; 1. 对于每个单元格&#xff0c;你…

风速预测(六)基于Pytorch的EMD-CNN-GRU并行模型

目录 前言 1 风速数据EMD分解与可视化 1.1 导入数据 1.2 EMD分解 2 数据集制作与预处理 2.1 先划分数据集&#xff0c;按照8&#xff1a;2划分训练集和测试集 2.2 设置滑动窗口大小为96&#xff0c;制作数据集 3 基于Pytorch的EMD-CNN-GRU并行模型预测 3.1 数据加载&a…

初识Dubbo学习,一文掌握Dubbo基础知识文集(3)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

Ubuntu-报错

Hadoop-Eclipse-java&#xff1a;耽误进度的几个报错 错误1&#xff1a;桥接模式与NAT模式相互切换后导致两种模式都不能访问互联网&#xff08;1&#xff09;具体错误&#xff1a;&#xff08;2&#xff09;错误原因&#xff1a;&#xff08;3&#xff09;解决方案&#xff1a…

Redis设计与实现之订阅与发布

目录 一、 订阅与发布 1、 频道的订阅与信息发送 2、订阅频道 3、发送信息到频道 4、 退订频道 5、模式的订阅与信息发送 ​编辑 6、 订阅模式 7、 发送信息到模式 8、 退订模式 三、订阅消息断连 1、如果订阅者断开连接了&#xff0c;再次连接会不会丢失之前发布的消…

股票价格预测 | Python实现基于Stacked-LSTM的股票预测模型,可预测未来(keras)

文章目录 效果一览文章概述模型描述源码设计效果一览 文章概述 以股票价格预测为例,基于Stacked-LSTM的股票预测模型(keras),可预测未来。 模型描述 LSTM 用于处理序列数据,如时间序列、文本和音频。相对于传统的RNN,LSTM更擅长捕获长期依赖关系,

tomcat错误

Error running Tomcat8: Address localhost:1099 is already in use window环境&#xff0c;打开cmd netstat -ano | findstr :1099发现对应PID为24732 结束PID taskkill /PID 24732 /F

MATLAB图像处理技巧

MATLAB图片处理------动态绘图 1. 动态绘图2. XXXXX 1. 动态绘图 主要用到四个函数&#xff0c;分别为getframe、frame2im、rgb2ind以及imwrite&#xff1a; 1.getframe&#xff1a;获取当前绘图窗口的图片作为影片帧&#xff1b; 2.frame2im&#xff1a;从单个影片帧 F 返回索…

Redis Set类型

集合类型也是保存多个字符串类型的元素的&#xff0c;但和列表类型不同的是&#xff0c;集合中 1&#xff09;元素之间是无序的 2&#xff09;元素不允许重复 一个集合中最多可以存储2的32次方个元素。Redis 除了支持集合内的增删查改操作&#xff0c;同时还支持多个集合取交…