热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

EdgeYOLO学习笔记

EdgeYOLO学习笔记EdgeYOLO
EdgeYOLO学习笔记

EdgeYOLO: An Edge-Real-Time Object Detector

Abstract

本文基于最先进的YOLO框架,提出了一种高效、低复杂度、无锚的目标检测器,该检测器可以在边缘计算平台上实时实现。为了有效抑制训练过程中的过拟合,我们开发了一种增强的数据增强方法,并设计了混合随机损失函数来提高小目标的检测精度。在FCOS的启发下,提出了一种更轻、更高效的解耦磁头,在不损失精度的情况下提高了推理速度。我们的基线模型在MS COCO2017数据集中可以达到50.6% AP50:95和69.8% AP50的精度,在VisDrone2019-DET数据集中可以达到26.4% AP50:95和44.8% AP50的精度,在Nvidia Jetson AGX Xavier边缘计算设备上可以满足实时(FPS≥30)的要求。如图1所示,我们还为计算能力较低的边缘计算设备设计了更轻、参数更少的模型,也表现出了更好的性能。我们的源代码、超参数和模型权重都可以在https://github.com/LSH9832/edgeyolo上找到。

Key Words: Anchor-free, edge-real-time, object detector, hybrid random loss

image-20230227200808924

1 Introduction

随着计算硬件性能的不断提高,基于深度神经网络的计算机视觉技术在近十年得到了迅速发展,其中目标检测是自主智能系统[1]应用的重要组成部分。目前,主流的目标检测策略有两种。一种是以R-CNN系列[2,5]为代表的两阶段策略,另一种是以YOLO[9-11]为最流行的框架之一的一阶段策略。对于两阶段策略,在第一阶段采用启发式方法或区域建议生成方法获得多个候选盒,然后在第二阶段对这些候选盒进行筛选、分类和回归。单阶段策略以端到端的方式给出结果,其中目标检测问题转化为全局回归问题。全局回归不仅能够同时为多个候选框分配位置和类别,而且能够使模型更清晰地分离对象和背景。

在常见对象检测数据集(如MS COCO2017[3])上,使用两阶段策略的模型比使用一阶段策略的模型表现稍好。然而,由于两阶段框架的内在局限性,它远远不能满足传统计算设备上的实时性要求,在大多数高性能计算平台上也可能面临同样的情况。相比之下,单级目标检测器可以在实时指标和性能之间保持平衡。因此,它们更受到研究人员的关注,YOLO系列算法以高速迭代更新。从YOLOv1到YOLOv3[9-11]的更新主要是对底层框架结构的改进,之后的YOLO主流版本大多侧重于提高精度和推理速度。此外,他们的优化测试平台主要是具有高性能gpu的大型工作站。然而,他们最先进的模型通常在这些边缘计算设备上以令人不满意的低FPS运行。为此,一些研究人员提出了参数更少、结构更轻的网络结构,如MobileNet和ShuffleNet,以取代原有的骨干网,从而在移动设备和边缘设备上获得更好的实时性,但牺牲了一些精度。在本文中,我们的目标是设计一个具有良好精度的对象检测器,可以实时运行在边缘设备上。

本文的主要贡献如下:

i)设计了一种无锚目标检测器,该检测器可在MS COCO2017数据集上实时运行在边缘设备上,AP精度为50.6%;

ii)提出了一种更强大的数据增强方法,进一步保证了训练数据的数量和有效性;

iii)在我们的模型中使用可以重新参数化的结构,以减少推理时间;

iv)设计损失函数以提高对小目标的精度

2 Related Work


2.1 Anchor-free Object Detector

自YOLOv1问世以来,YOLO系列在实时目标检测领域长期处于领先地位。还有一些其他优秀的检测器,如SSD [4], FCOS[15]等。在测试目标检测任务中的FPS时,以往的研究大多只计算模型推断的时间成本,而一个完整的目标检测任务包含预处理、模型推断和后处理三个部分。由于预处理可以在视频流中完成,因此在计算目标检测的FPS时,需要考虑后处理的时间成本。在高性能GPU工作站或服务器上,预处理和后处理的时间只占很小的比例,而在边缘计算设备上,其延迟时间甚至是其十倍以上。因此,减少后处理计算可以显著提高边缘计算设备的速度。当使用基于锚点的策略时,后处理中的时间延迟几乎与每个网格单元的锚点数量成正比。基于锚的YOLO系列通常为每个网格单元分配3个锚。与基于锚点的检测框架相比,无锚点检测在后处理部分可以节省一半以上的时间

为了保证检测器在边缘计算设备上的实时性,我们选择构建一个基于无锚策略的目标检测器。目前无锚检测器主要有两种类型,一种是基于锚点的检测器,另一种是基于关键点的检测器。在本文中,我们采用了基于锚点的范式

2.2 Data Augmentation

数据增强是神经网络训练中一个重要的数据处理步骤。合理使用数据增强方法可以有效缓解模型过拟合。对于图像数据集,几何增强(随机裁剪、旋转、镜像、缩放等)和光度增强(HSV和亮度调整)通常应用于单个图像。这些基本增强方法通常用于多图像混合和拼接之前或之后。目前主流的数据增强技术,如Mosaic[18]、Mixup[7]、CopyPaste[17]等,通过不同的方法将多张图片的像素信息放在同一张图片中,丰富图像信息,降低过拟合概率。

如图2(b)所示,我们设计了一种更加灵活和强大的组合增强方法,进一步保证了输入数据的丰富性和有效性。

image-20230227201459581

2.3 Model Reduction

通过模型约简,降低了计算成本,可以有效提高模型推理速度。模型约简方法可分为有损约简和无损约简两类。有损缩减通常通过减少网络层数和信道数来构建更小的网络。无损缩减集成和耦合多个分支模块,通过重新参数化技术[25]构建更精简的等效模块。有损缩减通过牺牲精度来实现更快的速度,并且由于耦合结构容易降低训练效果,一般采用重参数化方法在模型训练完成后进行推理。

本文结合有损约简和无损约简方法,构建了多个不同大小的模型(如图1所示),拟合不同计算能力的边缘器件,加快了模型推断过程。

2.4 Decoupled Regression

从YOLOv1到YOLOv5[9 - 11,18,19],对于每个不同比例比的特征图,回归获得对象的位置、类别和置信度使用统一的卷积核集。一般来说,不同的任务如果关系密切,则使用相同的卷积核。然而,在数值逻辑中,对象的位置、置信度和类别之间的关系还不够密切。而且,相关实验证明,使用解耦的回归检测头[15,23]与直接统一所有任务的回归检测头相比,可以获得更好的结果,并且可以加速损失收敛。尽管如此,解耦的头部会带来额外的推断成本。作为改进,我们设计了一种更轻的解耦头,同时考虑了模型的推理速度和精度

2.5 Small Object Detecting Optimization

自目标检测研究开始以来,小目标检测问题一直受到广泛关注。随着物体在图像中的比例减少,用于表达物体的像素信息也会减少。大物体往往比小物体占用几十倍甚至上百倍的信息,小物体的检测精度往往明显低于大物体。而且,这种差距不能通过位图图像的属性来消除。此外,研究人员发现,在训练[14]时,小物体在总损失中所占的比例总是较小。

为了提高小目标的检测效果,以往的研究提出了以下方法:(a)复制小目标,并随机放置在图像的其他位置,以增加数据增强过程中小目标的训练数据样本,称为复制增强[14]。(b)对图像进行缩放和拼接,将原始图像中较大的物体放大为较小的物体。©损失函数通过增加小物体损失的比例[8],使其更加关注小物体。

由于使用方法(a)处理的图像存在尺度不匹配和背景不匹配的问题,我们仅参考方法(b)和方法©来优化训练过程。我们的数据增强中加入了缩放和拼接方法,并重新设计了损失函数,可以有效提高中小目标的检测和模型的整体精度。

3 Approach


3.1 Enhanced-Mosaic & Mixup

许多实时目标检测器在训练过程中使用Mosaic+Mixup策略进行数据增强,可以有效缓解训练过程中的过拟合情况。如图3(a)和(b)所示,有两种常见的组合方法,当数据集中的单幅图像有相对足够的标签时,它们表现良好。由于数据论证中的随机过程,在图3(a)中,当标签空间有响应时,数据加载器可能会提供没有有效对象的图像,这种情况的概率随着每张原始图像中标签数量的减少而增加

image-20230227202209213

我们设计了如图3©所示的数据增强结构。首先,我们对多组图像使用Mosaic方法,可以根据数据集中单张图片平均标签数量的丰富度来设置组数。然后,利用Mixup方法将最后的简单处理图像与这些经过马赛克处理的图像进行混合。在这些步骤中,我们最后一个图像的原始图像边界在变换后最终输出图像的边界内。这种数据增强方法有效地增加了图像的丰富度以缓解过拟合,并确保输出图像必须包含足够的有效信息

3.2 Lite-Decoupled Head

首先在FCOS[15]中提出了图4中的解耦头,然后应用于其他无锚目标探测器,如YOLOX[23]。最后几层采用解耦结构可以加快网络收敛速度,提高回归性能。

由于解耦头采用分支结构,导致额外的推理成本,因此提出了高效解耦头[20],其推理速度更快,将中间3×3卷积层数减少到只有一层,同时保持与输入特征图相同的较大通道数。然而,在我们的实验测试中,这种额外的推断成本随着通道和输入大小的增加而变得更加明显。因此,我们设计了一个更轻的解耦头部,具有更少的通道和卷积层。此外,我们将隐式表示层[24]添加到所有最后的卷积层,以获得更好的回归性能。采用重新参数化的方法,将隐式表示层集成到卷积层中,以降低推理成本。最后的卷积层盒和置信度回归也合并,使模型可以进行推理与高并行计算。

image-20230227202801046

3.3 Staged Loss Function

对于目标检测,损失函数一般可以写成如下形式

image-20230227202851079

其中Lcls、Liou、Lobj、L∆L_cls、L_iou、L_obj、L_∆LclsLiouLobjL为分类损失、IOU损失、对象损失和调控损失,α、λ、µ、ζα、λ、µ、ζαλµζ为超参数。在实验中,我们将训练过程分为三个阶段。

在第一阶段,我们采用一种最常见的损失函数配置:gIOU损失为IOU损失,分类损失和对象损失为平衡交叉熵损失,调节损失设为零。在最后几个支持数据增强的时代,培训过程进入了第二个阶段将分类损失和目标损失的损失函数替换为混合随机损失

image-20230227203220745

其中p代表预测结果,t代表ground truth, r是0到1之间的随机数。对于一个图像中的所有结果,我们有这个

image-20230227203237666

这表明小物体的精度和总精度之间有更好的平衡。第三阶段,我们关闭数据扩充,将L1损耗作为我们的调节损耗,将gIOU损耗替换为cIOU损耗。下一节将介绍更多细节。

4 Experiments

image-20230227203451501

image-20230227203500999

image-20230227203557556

image-20230227203618595

image-20230227203633847

image-20230227203646244

image-20230227203659493

5 Conclusion

我们提出了一种边缘实时无锚的一级检测器EdgeYOLO,其代表性结果如图5和图6所示。实验表明,EdgeYOLO可以在边缘设备上实时高精度运行,对小物体的检测能力得到了进一步提高。由于EdgeYOLO采用无锚结构,降低了设计复杂度和计算复杂度,在边缘设备上的部署更加友好。此外,我们相信该框架可以扩展到其他像素级识别任务,如实例分割。在未来的工作中,我们将进一步提高框架对小目标的检测精度,并对高效优化进行探索。


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
author-avatar
kingjade999
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有