当前位置: 首页 > 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、证书的下载(任意机器上执行都可以) …...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...