当前位置: 首页 > news >正文

PP-YOLO: An Effective and Efficient Implementation of Object Detector(2020.8)


文章目录

  • Abstract
  • 1. Introduction
    • 先介绍了一堆前人的work
    • 自己的work
    • expect
  • 2. Related Work
    • 先介绍别人的work
    • 与我们的区别
  • 3.Method
    • 3.1. Architecture
      • Backbone
      • Detection Neck
      • Detection Head
    • 3.2. Selection of Tricks
      • Larger Batch Size
      • EMA
      • DropBlock
      • IoULoss
      • IoU Aware
      • Grid Sensitive
      • Matrix NMS
      • CoordConv
      • SPP
      • Better Pretrain Model
  • 4. Experiment
  • 5. Conclusions

原文链接
源代码

Abstract

目标检测是计算机视觉研究的重要领域之一,在各种实际场景中起着至关重要的作用。在实际应用中,由于硬件的限制,往往需要牺牲精度来保证检测器的推断速度。因此,必须考虑目标检测器的有效性和效率之间的平衡
本文的目标是实现一种可以直接应用于实际应用场景的效果和效率相对平衡的目标检测器,而不是提出一种新的检测模型
鉴于YOLOv3在实际中得到了广泛的应用,我们开发了一种基于YOLOv3的新型目标检测器。我们主要尝试结合现有的各种几乎不增加模型参数和FLOPs数量的技巧,以达到在保证速度几乎不变的情况下尽可能提高检测器精度的目的
由于本文所有的实验都是基于PaddlePaddle进行的,所以我们称之为PP- YOLO。通过结合多种技巧,PP-YOLO可以在效率(45.2% mAP)和效率(72.9 FPS)之间取得更好的平衡,超过了现有的最先进的探测器,如EfficientDet和YOLOv4

1. Introduction

先介绍了一堆前人的work

自己的work

本文介绍了一种基于PaddlePaddle的改进YOLOv3模型(PP-YOLO),添加了一些几乎不会增加推断时间的技巧来提高模型的整体性能( bag of freebies)
与YOLOv4不同,我们没有探索不同的骨干网络和数据增强方法,也没有使用NAS搜索超参数
对于骨干网,我们直接使用最常见的ResNet[13]作为PP-YOLO的骨干网
对于数据增强,我们直接使用了最基本的MixUp[43]
一个原因是ResNet的使用更加广泛,各种深度学习框架都针对ResNet系列进行了深度优化,在实际部署中会更加方便,在实践中会有更好的推断速度
另一个原因是主干网的替换和数据扩充是相对独立的因素,与本文讨论的技巧几乎无关
用NAS搜索超参数通常会消耗更多的计算能力,因此通常没有条件在每个新场景中使用NAS执行超参数搜索
因此,我们仍然使用YOLOv3[32]后面手动设置的参数

expect

本文的重点是如何将一些不影响效率的有效技巧叠加起来,从而获得更好的性能
本文并不打算介绍一种新的目标检测器,它更像是一个食谱,告诉你如何一步一步地制造一个更好的检测器。我们发现了一些对YOLOv3检测器有效的技巧,可以节省开发人员的试错时间。最终的PP-YOLO模型将COCO上的mAP从43.5%提高到45.2%,速度比YOLOv4快

2. Related Work

先介绍别人的work

近两年来,人们提出了大量新的无锚法,它们可以分为两种类型
基于锚点的检测器基于锚点而不是锚盒进行对象边界盒回归,包括FSAF[49]、FCOS[36]、FoveaBox[17]、SAPD[48]
基于关键点的检测器将目标检测重新定义为关键点局部化问题,包括CornerNet[19]、CenterNet[8]、ExtremeNet[47]和RepPoint[40]
无锚方法打破了手工锚的限制,显示出极端物体尺度和宽高比[16]的巨大潜力
YOLO系列探测器[30,31,32,1]由于其优异的有效性和高效性,在实践中得到了广泛的应用
YOLOv4讨论了大量的技巧,包括许多不会增加推理时间的“bag of freebies”,以及一些少量增加推理成本但能显著提高目标检测精度的“特价包”。YOLOv4极大地提高了YOLOv3[32]的有效性和效率

与我们的区别

本文也是基于YOLOv3模型开发的,也探索了很多技巧。与YOLOV4不同的是,我们没有探索一些被广泛研究的部分,如数据增强和骨干。本文讨论的许多技巧与YOLOV4不同,技巧的详细实现也不同

3.Method

基于单阶段锚点的检测器通常由主干网、检测颈部(典型的特征金字塔网络(FPN))和用于目标分类和定位的检测头部组成。它们也是大多数基于锚点的一级无锚探测器中常见的元件。我们首先对YOLOv3的详细结构进行了修改,并引入了一个修改版本,将主干替换为ResNet50-vd-dcn,作为本文的基本基线。然后我们介绍了一堆技巧,可以提高YOLOv3的性能,几乎不损失效率

3.1. Architecture


YOLOv3的整体架构如图2所示

Backbone

在原始的YOLOv3[32]中,首先使用DarkNet-53提取不同尺度的特征图,我们在PP-YOLO中用ResNet50-vd取代了原来的主干DarkNet-53。考虑直接用ResNet50-vd替代DarkNet-53会影响YOLOv3探测器的性能。我们用可变形的卷积层替换了ResNet50-vd中的一些卷积层
为了平衡效率和有效性,我们只在最后阶段用DCNs替换3 × 3卷积层。我们将这个修改后的主干命名为ResNet50-vd-dcn,并将第3,4和5阶段的输出命名为c3, c4, c5

Detection Neck

使用FPN[21]构建特征映射之间具有横向连接的特征金字塔。特征映射c3、c4、c5输入到FPN模块,我们将金字塔层1的输出特征映射表示为pl,其中在我们的实验中l = 3,4,5。对于尺寸为W × H的输入图像,p1的分辨率为W/2的l次方 × H/2的l次方

Detection Head

YOLOv3的检测头非常简单,它由两个卷积层组成,采用3×3卷积层和1×1卷积层进行最终预测。每个最终预测的输出通道为3(K + 5),其中K为类数。每个最终预测图上的每个位置都与三个不同的锚相关联。对于每个锚点,前K个通道是K类的概率预测。以下4个通道是对边界框定位的预测,最后一个通道是客观性评分的预测。对于分类和定位,分别采用交叉熵损失和L1损失。对象损失[32]用于监督对象得分,该分数用于识别是否存在对象

3.2. Selection of Tricks

本文并没有提出一种新的检测方法,而只是着重于结合现有的技巧来实现一个有效和高效的检测器。由于许多技巧不能直接应用于YOLOv3,我们需要根据它的结构进行调整

Larger Batch Size

使用更大的批大小可以提高训练的稳定性,得到更好的结果。这里我们将训练批大小从64个更改为192个,并相应地调整训练计划和学习率

EMA

在训练模型时,保持训练参数的移动平均线通常是有益的。使用平均参数的评估有时会产生比最终训练值[35]好得多的结果。指数移动平均线(EMA)使用指数衰减计算训练参数的移动平均线。对于每个参数W,我们维持一个shadow参数

其中λ是衰减。我们采用衰减λ为0.9998的EMA,并使用阴影参数Wema进行评估

DropBlock

与原论文不同的是,我们只在FPN中应用DropBlock,因为我们发现在骨干网络中添加DropBlock会导致性能下降。DropBlock的详细注入点在图2中用“三角形”标记

IoULoss

边界盒回归是目标检测的关键步骤。在YOLOv3中,采用L1损失进行边界盒回归。它不适合mAP评估度量,它强烈地依赖于交联(IoU)。为了解决这一问题,已经提出了IoU损失和其他变化,如CIoU损失和GIoU损失[46,34]。与YOLOv4不同的是,我们没有直接用IoU损失代替L1损失,我们增加了一个分支来计算IoU损失。我们发现各种IoU损失的改进是相似的,所以我们选择了最基本的IoU损耗

IoU Aware

在YOLOv3中,分类概率和客观得分相乘作为最终检测置信度,不考虑定位精度。为了解决这一问题增加了IoU预测分支来衡量定位的准确性。在训练过程中,采用IoU感知损失训练IoU预测分支。在推理过程中,将预测的IoU与分类概率和客观评分相乘,计算出与定位精度更相关的最终检测置信度。然后将最终检测置信度用作后续NMS的输入。IoU感知分支会增加额外的计算成本。但是,只增加了0.01%的参数个数和0.0001%的flop,几乎可以忽略不计

Grid Sensitive

网格敏感是YOLOv4引入的一种有效的技巧。当我们解码边界框中心x和y的坐标时,在原始的YOLOv3中,我们可以得到它们

其中σ是s型函数,gx和gy是整数,s是比例因子

显然,x和y不能完全等于s·g x或s·(g x + 1),这使得很难预测刚刚位于网格边界上的边界框的中心。我们可以解决这个问题,把方程变成

其中,本文将α设为1.05。这使得模型更容易准确地预测网格边界上的边界框中心。GridSensitive增加的FLOPs非常小,完全可以忽略

Matrix NMS

矩阵NMS是由软NMS驱动的,它将其他检测分数作为它们重叠的单调递减函数来衰减。但是,这个过程像传统的贪心NMS一样是顺序的,不能并行实现。Matrix NMS从另一个角度看待这个过程,并以并行的方式实现它。因此,矩阵网管比传统网管速度更快,不会带来任何效率损失

CoordConv

CoordConv,它的工作原理是通过使用额外的坐标通道让卷积访问自己的输入坐标。CoordConv允许网络学习完全的平移不变性或不同程度的平移依赖性。考虑到CoordConv将在卷积层中增加两个输入通道,因此将增加一些参数和FLOPs。为了尽可能减少效率的损失,我们不改变骨干中的卷积层,只将FPN中的1x1卷积层和检测头中的第1卷积层替换为CoordConv。CoordConv的详细注入点在图2中用“菱形”标记

SPP

空间金字塔池(SPP)是由He等人首先提出的。SPP将SPM集成到CNN中,使用最大池化操作代替 bag-of-word操作。YOLOv4通过连接内核大小为k × k的最大池输出来应用SPP模块,其中k = {1,5,9,13}, stride = 1。在这种设计下,较大的k × k最大池化有效地增加了骨干特征的接受场。具体而言,SPP仅应用于图2中带有“星号”标记的顶部特征图。SPP本身不引入任何参数,但接下来的卷积层的输入通道数量会增加。因此,大约2%的额外参数和1%的额外flop被引入

Better Pretrain Model

在ImageNet上使用分类精度更高的预训练模型可以获得更好的检测性能。这里我们使用蒸馏的ResNet50-vd模型作为预训练模型[29]。这显然不影响检测器的效率

4. Experiment


5. Conclusions

文介绍了一种基于PaddlePaddle的目标检测器的新实现,称为PP-YOLO
PP- YOLO比其他最先进的探测器(如EfficientDet和YOLOv4)更快(FPS)和更准确(COCO mAP)
在本文中,我们探索了许多技巧,并展示了如何在YOLOv3检测器上组合这些技巧并演示了它们的有效性
我们希望本文能够帮助开发人员和研究人员节省探索时间,并在实际应用中获得更好的性能

相关文章:

PP-YOLO: An Effective and Efficient Implementation of Object Detector(2020.8)

文章目录 Abstract1. Introduction先介绍了一堆前人的work自己的workexpect 2. Related Work先介绍别人的work与我们的区别 3.Method3.1. ArchitectureBackboneDetection NeckDetection Head 3.2. Selection of TricksLarger Batch SizeEMADropBlockIoULossIoU AwareGrid Sensi…...

4、创建第一个鸿蒙应用

一、创建项目 此处以空模板为例来创建一个鸿蒙应用。在创建项目前请保持网页的畅通。 1、在欢迎页面点击“Create Project”。 2、左侧默认为“Application”,在“Template Market”中选择空模板(Empty Ability),点击“Next” 3…...

Docker - DockerFile

Docker - DockerFile DockerFile 描述 dockerfile 是用来构建docker镜像的文件!命令参数脚本! 构建步骤: 编写一个dockerfile 文件docker build 构建成为一个镜像docker run 运行脚本docker push 发布镜像(dockerhub&#xff0…...

2311rust模式匹配

原文 在Rust中混合匹配,改变和移动 结构模式匹配:极大的改进了C或Java风格的switch语句. Match包含命令式和函数式编程风格:可继续使用break语句,赋值等,不必面向表达式. 按需匹配"借用"或"移动",:Rust鼓励开发者仔细考虑所有权和借用.设计匹配时仅支持…...

Linux系统软件安装方式

Linux系统软件安装方式 1. 绿色安装2. yum安装3. rpm安装3.1 rpm常用命令 4. 源码安装4.1 安装依赖包4.2 执行configure脚本4.3 编译、安装4.4 安装4.5 操作nginx4.6 创建服务器 1. 绿色安装 Compressed Archive压缩文档包,如Java软件的压缩文档包,只需…...

React + Antd 自定义Select选择框 全选、清空功能

实现代码 import React, { useState, useEffect } from react; import { Select, Space, Divider, Button } from antd;export default function AllSelect (props) {const {fieldNames, // 自定义节点labbel、value、options、grouLabeloptions, // 数据化配置选项内容&#…...

阿里云国际站:应用实时监控服务

文章目录 一、阿里云应用实时监控服务的概念 二、阿里云应用实时监控服务的优势 三、阿里云应用实时监控服务的功能 四、写在最后 一、阿里云应用实时监控服务的概念 应用实时监控服务 (Application Real-Time Monitoring Service) 作为一款云原生可观测产品平台&#xff…...

专题知识点-二叉树-(非常有意义的一篇文章)

这里写目录标题 二叉树的基础知识知识点一(二叉树性质 )树与二叉树的相互转换二叉树的遍历层次优先遍历树的深度和广度优先遍历中序线索二叉树二叉树相关遍历代码顺序存储和链式存储二叉树的遍历二叉树的相关例题左右两边表达式求值求树的深度找数找第k个数二叉树非递归遍历代码…...

多路数据写入DDR3/DDR4的两种方法

1.官方IP实现; 2.手写Axi 仲裁器。...

3 分钟看完 NVIDIA GPU 架构及演进

近期随着 AI 市场的爆发式增长,作为 AI 背后技术的核心之一 GPU(图形处理器)的价格也水涨船高。GPU 在人工智能中发挥着巨大的重要,特别是在计算和数据处理方面。目前生产 GPU 主流厂商其实并不多,主要就是 NVIDIA、AM…...

SMART PLC 和S7-1200PLC MODBUSTCP通信速度测试

SMART PLC MODBUSTCP通信详细介绍请参看下面文章链接: S7-200SMART PLC ModbusTCP通信(多服务器多从站轮询)_matlab sumilink 多个modbustcp读写_RXXW_Dor的博客-CSDN博客文章浏览阅读6.4k次,点赞5次,收藏10次。MBUS_CLIENT作为MODBUS TCP客户端通过S7-200 SMART CPU上的…...

C++文件操作知识点总结

文件流操作文本文件 文件流 在 C 中&#xff0c;对文件的操作是通过 stream 的子类 fstream&#xff08; file stream &#xff09;来实现的&#xff0c;所以&#xff0c;要用这种方式操作文件&#xff0c;就必须加入头文件<fstream>&#xff0c;代码如下&#xff1a; …...

开发vue3 UI组件库,并且发布到NPM

目录 1.创建vue3工程 2.创建package文件 3.编写组件&#xff0c;并且导出 4.编写package.json 5.npm账号注册登录并发布 6.从npm安装使用 7.注意事项 1.创建vue3工程 &#xff08;1&#xff09;初始化Vue项目 cnpm create vite &#xff08;2&#xff09;进入文件夹…...

雷达测角原理、测角精度、测角分辨率以及3DFFT角度估计算法汇总

1.角度测量方法 依据&#xff1a;电磁波的直线传播和雷达天线的方向性。 分类&#xff1a;振幅法测角、相位法测角 1.1 相位法测角 相位法测角利用多个天线所接收回波信号之间的相位差进行测角。如下图所示&#xff1b; 图 1 设在θ方向有一远区目标&#xff0c;则到达接收点…...

金财数科无代码开发平台:轻松实现电商、CRM、广告推广系统的集成连接

连接与集成&#xff1a;挖掘电商平台的潜力 金财数科是一家领先的信息技术公司&#xff0c;专注于利用前沿技术如互联网、人工智能、大数据和区块链等&#xff0c;为传统财税信息化方案和产品提供升级改造&#xff0c;并打造新一代智能财税SaaS平台。我们的目标是帮助企业通过…...

JavaWeb篇_09——Tomcat运行过程以及Servlet继承结构

Tomcat运行过程 用户访问localhost:8888/test/helloword.do&#xff0c;请求被发送到Tomcat&#xff0c;被监听8888端口并处理 HTTP/1.1 协议的Connector获得。Connector把该请求交给它所在的Service的Engine来处理&#xff0c;并等待Engine的回应。Engine获得请求localhost/t…...

Python中的异常与错误处理

一、基础知识 1、一个try语句支持多个except子句&#xff0c;但请记得将更精确的异常类型放在前面。 2、try语句的else分支会在没有异常时执行&#xff0c;因此它可以用来替代标记变量&#xff08;flag变量&#xff09;。 3、不带任何参数的raise语句会直接重复抛出当前异常。…...

sqli-labs关卡16(基于post提交的双引号加括号闭合的布尔盲注)通关思路

文章目录 前言一、回顾上一关知识点二、靶场第十六关通关思路1、判断注入点2、猜数据库长度3、猜数据库名字4、猜表名长度5、猜表名名字6、猜列名长度7、猜列名名字8、猜数据长度9、猜数据名字 总结 前言 此文章只用于学习和反思巩固sql注入知识&#xff0c;禁止用于做非法攻击…...

2.5k的ChatGPT-Java版SDK升级1.1.2-beta0支持GPT-4V、Dall-e-3模型、ToolCalls、微调Job、TTS...

1、项目简介 Chatgpt-Java是OpenAI官方Api的Java SDK&#xff0c;可以快速接入项目使用。支持OpenAI官方全部接口。 目前收获将2500star&#x1f31f;。 开源地址&#xff1a;https://github.com/Grt1228/chatgpt-java官方文档&#xff1a;https://chatgpt-java.unfbx.com/最…...

k8s二进制(ETCD的部署安装)

角色ip组件k8s-master192.168.11.169kube-apiserver,kube-controller-manager,kube-scheduler,etcdk8s-node1192.168.11.164kubelet,kube-proxy,docker,etcdk8s-node2192.168.11.166kubelet,kube-proxy,docker,etcd 1、为etcd签发证书 1、证书的下载(任意机器上执行都可以) …...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...