论文阅读笔记 | 目标检测算法——PP-YOLO

本文涉及的产品
文件存储 NAS,50GB 3个月
简介: 论文阅读笔记 | 目标检测算法——PP-YOLO

paper:PP-YOLO: An Effective and Efficient Implementation of Object Detector

code:https://github.com/PaddlePaddle/PaddleDetection

image.png

摘要:

在实际应用中,由于硬件的限制,往往需要牺牲精度来保证探测器的推断速度。因此,必须考虑目标探测器的有效性和效率之间的平衡。paper的目标不是提出一个新的检测模型,而是实现一个具有相对平衡的有效性和效率,可以直接应用于实际应用场景的目标检测器。

考虑到YOLOv3在实践中的广泛应用,作者开发了一种基于YOLOv3的新的物体检测器。主要尝试结合现有的各种技巧,在几乎不增加模型参数和FLOPs的数量,在保证速度几乎不变的情况下,达到尽可能提高探测器精度的目的。

如果不熟悉YOLOv3(或者是yolo系列),可以查看以下资料:

1. 目标检测算法——YOLOv1

2. 目标检测算法——YOLOv2

3. 目标检测算法——YOLOv3

4. 目标检测算法——YOLOv4


1. Introduction


对于yolo系列的目标基础网络,从yolov1到yolov3,结构有巨大的改变。而yolov4是在yolov3的基础上,添加了许多的技巧。本文同样是基于yolov3,提出了pp-yolo,同样的添加了许多技巧。这些技巧在不增加推断时间的情况下,可以提高模型的准确性。


PP-YOLO与YOLOv4不同,没有探索不同的骨干网络和数据增强方法,也没有使用NAS搜索超参数。在PP-YOLO中,骨干网络使用ResNet,数据增强使用MixUp。其中,使用ResNet的一个原因是使用得较广,而且各种深度学习框架都针对ResNet系列进行了深度优化,在实际部署时更加方便,在实际中推断速度也会更好。另外的一个原因是,骨干网络与数据增强都属于是额外的独立因素,许多研究都进行在骨王网络与数据增强中,所以其与技巧无关。使用NAS搜索超参数通常会消耗更多的计算能力,因此在每个新场景中通常没有条件使用NAS执行超参数搜索。为此,在PP-YOLO中的参数遵循着YOLOv3。(所以,其实如果换一个更有效的backbone,增加多种数据增强与NAS搜索,PP-YOLO的效果可能会更好)

当然,一些技巧不能直接使用,稍加修改在所难免,而且添加技巧的位置也需要细致考虑。所以这篇文章更像是一个配方,告诉如何一步一步地构建更好的检测器。PP-YOLO模型比YOLOv4的速度还要快,精度也更高。

image.png


2. Related Work


这个部分再讲述了一些目标检测的发展史。从双阶段的目标检测到单阶段的目标检测,从anchor-based到anchor-free,而anchor-free又发展了Anchor-point based检测与Keypoint based检测两个分支。


3. PP-YOLO


首先对YOLOv3的详细结构进行了修改,并引入了一个修改后的版本,将骨干替换为ResNet50-vd-dcn,作为本文的基本基线。然后介绍一些技巧,这些技巧可以在几乎不损失效率的情况下提高YOLOv3的性能。


3.1 Architecture

PP-YOLO结构如下图所示:

image.png

为了简洁起见,省略了激活层,细节描述见下面的内容。


3.1.1 Backbone

将ResNet50-vd替换了原来的DarkNet-53主干,但是直接替换会损害性能,所以需要用可变形的卷积层替换ResNet50-vd中的一些卷积层。DCN本身不会显著增加模型中的参数和FLOPs的数量,但是在实践中过多的DCN层会大大增加推断时间。所以,为了平衡精度与速度,只对最后阶段的3x3卷积层替换为DCN。

关于DCN的细节可以参考:目标检测算法——DCN(可变形卷积网络)


3.1.2 Detection Neck

image.png


3.1.3 Detection Head

YOLOv3的检测头比较简单,包括两层卷积层。首先是一个3x3的卷积层,然后是一个1x1的卷积层得到最终的预测,每个最终预测的输出channels为:3 × ( K + 5 ) ,其中的K表示类别数目。

可以注意到这里的输出channels的倍数是乘上了一个3的,这里表示每个最终预测图上的每个位置都与三个不同的锚相关联。对与这3组的每一组锚框,前K表示K个类别,随着4个是边界框参数,最后一个是置信度。在进行分类和定位时,分别采用交叉熵损失和L1损失。对象损失用于监督对象评分,该评分用于识别是否存在对象。

这里的回归设置与YOLOv3的相同的。YOLOv3中为每一层的特征层设置了3中不同大小尺度的锚框尺寸,所以这里会乘上一个3.


3.2 Selection of Tricks

对于很多的技巧其实不能直接使用在YOLOv3结构上的,所以需要对结构进行适当调整。

3.2.1 Larger Batch Size

采用更大的批量可以提高训练的稳定性,取得更好的效果。这里我们将训练批数从64调整为192,并相应地调整训练计划和学习率。

3.2.2 EMA

在训练模型时,保持训练参数平均移动往往有益于训练更优的模型, 使用平均参数评估有时会产生比最终训练值更好的结果。 指数平均移动是深度学习中常用到的优化方法,由于在训练深度学习模型时,模型权重在最后几步可能会在最优点处徘徊。EMA的思路是取最后几步的平均值作为最后的结果,从而增加模型的鲁棒性。公式为:

image.png

其中,λ 表示衰减因子,一般赋值为λ = 0.9998

3.2.3 DropBlock

DropBlock操作是对整个局部区域进行删减丢弃,是一种结构化的DropOut。与原论文不同的是,只将DropBlock应用到FPN中,因为作者发现将DropBlock添加到骨干网络中会导致性能下降。

DropBlock的具体注入点在图2中用“三角形”标记。

3.2.4 IoU Loss

边界盒回归是目标检测的关键步骤。在YOLOv3中,包围盒回归采用L1损失。它不是为mAP评估指标量身定制的,mAP评估指标强烈依赖于Intersection over Union (IoU)。为解决这一问题,有人提出了IoU损失和其他变体,如CIoU损失和GIoU损失。

与YOLOv4不同,作者这里没有直接用IoU loss代替L1-loss,而是增加了另一个分支来计算IoU loss。然后发现各种各样的IoU损失的改进是相似的,所以作者选择了最基本的IoU损失。

3.2.5 IoU Aware

在YOLOv3中,将分类概率和目标得分相乘作为最终检测置信度,其中这没有考虑到定位精度。

为了处理这个问题,论文中引入一个IoU预测分支。在训练过程中,使用感知IoU损失来训练这个分支。在推理阶段,最后的分类置信度由分类概率、目标分数和IoU值乘积得到。

最终的检测置信度然后用作后续NMS的输入。

3.2.6 Grid Sensitive

Grid Sensitive是YOLOv4引入的一种有效的技巧。当我们解码包围盒中心x和y的坐标时,在原始YOLOv3中可以通过下面的两个公式获得:

image.png


3.2.7 Matrix NMS

Matrix NMS是由Soft-NMS驱动的,它将其他检测分数衰减为它们重叠的单调递减函数,优点是可以并行实现。


3.2.8 CoordConv

CoordConv的提出是为了解决经典卷积神经网络无法感知坐标信息的问题。CoordConv在普通卷积的基础上添加两个通道分别表示横向和纵向的位置,用于给卷积操作提供自身位置信息。CoordConv使得网络可以具备完全或部分平移不变性。


3.2.9 SPP

SPP结构可以实现让网络能够适应不同尺度的图像输入,避免对图片进行裁剪或者缩放,导致位置信息丢失。详细可以查看yolov4的Bag of specials。


3.2.10 Better Pretrain Model

在ImageNet上使用分类精度更高的预训练模型可以获得更好的检测性能


4. Result


  • 技巧带来的精度提升:

image.png

  • 与SOTA的对比:

image.png

总结:

paper基于百度的一个深度学习框架PaddlePaddle,在yolov3的基础上,增加了许多技巧提出pp-yolo使得其在精度与速度上都超多了当时的SOTA。

相关实践学习
基于ECS和NAS搭建个人网盘
本场景主要介绍如何基于ECS和NAS快速搭建个人网盘。
阿里云文件存储 NAS 使用教程
阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例、HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。 产品详情:https://www.aliyun.com/product/nas
目录
相关文章
|
3月前
|
机器学习/深度学习 人工智能 JSON
这个AI把arXiv变成代码工厂,快速复现顶会算法!Paper2Code:AI论文自动转代码神器,多智能体框架颠覆科研复现
Paper2Code是由韩国科学技术院与DeepAuto.ai联合开发的多智能体框架,通过规划、分析和代码生成三阶段流程,将机器学习论文自动转化为可执行代码仓库,显著提升科研复现效率。
341 19
这个AI把arXiv变成代码工厂,快速复现顶会算法!Paper2Code:AI论文自动转代码神器,多智能体框架颠覆科研复现
|
5月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
145 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
|
1月前
|
机器学习/深度学习 监控 算法
面向办公室屏幕监控系统的改进型四叉树屏幕变化检测算法研究
本文提出一种改进型四叉树数据结构模型,用于优化办公室屏幕监控系统。通过动态阈值调节、变化优先级索引及增量更新策略,显著降低计算复杂度并提升实时响应能力。实验表明,该算法在典型企业环境中将屏幕变化检测效率提升40%以上,同时减少资源消耗。其应用场景涵盖安全审计、工作效能分析及远程协作优化等,未来可结合深度学习实现更智能化的功能。
37 0
|
4月前
|
机器学习/深度学习 存储 算法
基于MobileNet深度学习网络的活体人脸识别检测算法matlab仿真
本内容主要介绍一种基于MobileNet深度学习网络的活体人脸识别检测技术及MQAM调制类型识别方法。完整程序运行效果无水印,需使用Matlab2022a版本。核心代码包含详细中文注释与操作视频。理论概述中提到,传统人脸识别易受非活体攻击影响,而MobileNet通过轻量化的深度可分离卷积结构,在保证准确性的同时提升检测效率。活体人脸与非活体在纹理和光照上存在显著差异,MobileNet可有效提取人脸高级特征,为无线通信领域提供先进的调制类型识别方案。
|
5月前
|
机器学习/深度学习 算法 安全
基于深度学习的路面裂缝检测算法matlab仿真
本项目基于YOLOv2算法实现高效的路面裂缝检测,使用Matlab 2022a开发。完整程序运行效果无水印,核心代码配有详细中文注释及操作视频。通过深度学习技术,将目标检测转化为回归问题,直接预测裂缝位置和类别,大幅提升检测效率与准确性。适用于实时检测任务,确保道路安全维护。 简介涵盖了算法理论、数据集准备、网络训练及检测过程,采用Darknet-19卷积神经网络结构,结合随机梯度下降算法进行训练。
|
4月前
|
机器学习/深度学习 数据采集 算法
基于yolov2和googlenet网络的疲劳驾驶检测算法matlab仿真
本内容展示了基于深度学习的疲劳驾驶检测算法,包括算法运行效果预览(无水印)、Matlab 2022a 软件版本说明、部分核心程序(完整版含中文注释与操作视频)。理论部分详细阐述了疲劳检测原理,通过对比疲劳与正常状态下的特征差异,结合深度学习模型提取驾驶员面部特征变化。具体流程包括数据收集、预处理、模型训练与评估,使用数学公式描述损失函数和推理过程。课题基于 YOLOv2 和 GoogleNet,先用 YOLOv2 定位驾驶员面部区域,再由 GoogleNet 分析特征判断疲劳状态,提供高准确率与鲁棒性的检测方法。
|
5月前
|
机器学习/深度学习 人工智能 运维
[ICDE2024]多正常模式感知的频域异常检测算法MACE
[ICDE2024]多正常模式感知的频域异常检测算法MACE
|
7月前
|
机器学习/深度学习 自然语言处理 算法
调研180多篇论文,这篇综述终于把大模型做算法设计理清了
《A Systematic Survey on Large Language Models for Algorithm Design》综述了过去三年大型语言模型(LLMs)在算法设计中的应用。LLMs通过自然语言处理技术,助力生成、优化和验证算法,在优化、机器学习、数学推理等领域展现出广泛应用前景。尽管存在资源需求高、结果不确定等挑战,LLMs仍为算法设计带来新机遇。论文地址:https://arxiv.org/abs/2410.14716。
232 14
|
8月前
|
机器学习/深度学习 监控 算法
基于反光衣和检测算法的应用探索
本文探讨了利用机器学习和计算机视觉技术进行反光衣检测的方法,涵盖图像预处理、目标检测与分类、特征提取等关键技术。通过YOLOv5等模型的训练与优化,展示了实现高效反光衣识别的完整流程,旨在提升智能检测系统的性能,应用于交通安全、工地监控等领域。
|
9月前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。

热门文章

最新文章