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

简介: 论文阅读笔记 | 目标检测算法——PP-YOLOv2

paper:PP-YOLOv2: A Practical Object Detector

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

image.png

摘要:

在PP-YOLO的基础上再进行了改进,提高精度的同时几乎保持推断时间不变。作者分析了一系列改进,并通过增量消融实验来实证评估它们对最终模型性能的影响。最后PP-YOLOv2取得了更佳的性能(49.5%mAP)-速度(69FPS)均衡,并优于YOLOv4与YOLOv5。

PP-YOLO阅读笔记:目标检测算法——PP-YOLO


1. Introduction


在各种实际应用中,不仅计算资源有限,而且软件支持不足,所以双阶段的目标检测进行的非常缓慢。所以如何在保持推理速度的同时提高YOLOv3的有效性是实际应用中的一个关键问题。为了同时满足这两个问题,作者添加了一些改进,这些改进几乎不会增加推断时间,从而提高PP-YOLO的整体性能。

image.png


2. Revisit PP-YOLO


2.1 Pre-Processing

应用从B e t a ( α , β ) )分布中采样的权重MixUp,其中α = 1.5 , β = 1.5 。

然后RandomColorDistortion、RandomExpand、RandCrop、RandomFlip以0.5的概率依次应用。

然后对RGB通道进行归一化处理。

最后,输入大小从[320,352,384,416,448,480,512,544,576,608]均匀抽取。


2.2 Baseline Model

基准模型是PP-YOLO,其是YOLOv3的改进版本,首先使用ResNet50-vd对YOLOv3的backbone进行替换,随后使用了10个技巧来提升性能。

具体查看:论文阅读笔记 | 目标检测算法——PP-YOLO


2.3 Training Schedule

在COCOtrain2017上,使用随机梯度下降(SGD)对网络进行训练,使用分布在8个gpu上的96张图像的小批量进行500K迭代。学习率在4K迭代时从0线性增加到0.005,在400K和450K迭代时分别除以10。重量衰减设为0.0005,动量设为0.9。采用梯度裁剪来稳定训练过程。


3. Selection of Refinements


PP-YOLOv2大致结构如图所示:

image.png


3.1 Path Aggregation Network

使用PAN代替FPN,多了一个自顶向下的信息汇集,之前多次提及,这里不再重复。


3.2 Mish Activation Function

Mish激活函数在YOLOv4、YOLOv5等多种实际的探测器中被证明是有效的。它们在骨干中采用mish激活功能。然而,作者更喜欢使用预先训练的参数,因为有一个强大的模型,在ImageNet上达到82.4%的top-1精度。为了保持主干不变,我们将mish激活函数应用于检测颈部而不是主干。


3.3 Larger Input Size

增加输入尺寸会扩大对象的面积。因此,小范围的目标信息将比以前更容易保存。因此,性能将得到提高。但是,较大的图像输入尺寸会占用更多的内存。要应用这个技巧,我们需要减少Batchsize。更具体地说,我们将Batchsize从每GPU 24张图像减少到每GPU 12张图像,并将最大输入尺寸从608扩大到768。

输入大小从[320、352、384、416、448、480、512、544、576、608、640、672、704、736、768]均匀绘制。


3.4 IoU Aware Branch

在PP-YOLO中,IoU aware loss采用的是软权重格式(soft weight format),与初衷不一致。因此作者采用软标签格式(soft label format)。公式为:

image.png

其中t表示锚点和它匹配的ground-truth边界框之间的IoU,p是IoU感知分支的原始输出。ps:仅仅正样本的IoU损失进行了计算

IoU注意力的提出由来:

在YOLOv3中,将分类概率和目标得分相乘作为最终检测置信度,其中这没有考虑到定位精度。为了处理这个问题,论文中引入一个IoU预测分支。在训练过程中,使用感知IoU损失来训练这个分支。在推理阶段,最后的分类置信度由分类概率、目标分数和IoU值乘积得到。最终的检测置信度然后用作后续NMS的输入。


4. Other try


作者其实还尝试了其他的一些消融实验,但是没有效果,所以最后也没有使用这些技巧,这里还是记录一下比较好。


4.1 Cosine Learning Rate Decay

与线性步进学习率衰减不同,余弦学习率衰减是学习率的指数衰减。不过其对初始学习率、热身步数、结束学习率等超参数敏感,所以没有看见其对COCOtrain2017有一个积极影响。(但是对COCOminitrain产生了积极的作用)


4.2 Backbone Parameter Freezing

在对下游任务进行ImageNet预训练参数的微调时,通常会在前两个阶段冻结参数。然后这里同样是对COCOminitrain有效而对COCOtrain2017无效。

不一致现象的一个可能原因是两个训练集的大小不同,COCO minitrain2017是COCOtrain2017的五分之一。在小数据集上训练的参数的泛化能力可能比预先训练的参数差。


4.3 SiLU Activation Function

同样的SiLU,对COCOminitrain有效而对COCOtrain2017无效。所以使用Mish而不是SiLU。


5. Result


  • 消融实验,各个在PP-YOLOv2中各个技巧带来的提升:

image.png

  • 与SOTA的对比:

image.png

总结:

本文介绍了PP-YOLO的一些更新,形成了一个高性能的对象检测器PPYOLOv2。PP-YOLOv2比其他著名的探测器(如YOLOv4和YOLOv5)在速度和精度上取得了更好的平衡。在本文中,我们探索了一些技巧,并展示了如何将这些技巧结合到PPYOLO检测器上,并演示了它们的有效性。

总结,其实PP-YOLO系列几乎没有任何创新的,但通过实验结合技巧提升了检测性能。

目录
相关文章
|
1月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--希尔排序
数据结构与算法(Java篇)笔记--希尔排序
|
1月前
|
机器学习/深度学习 存储 算法
【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解
【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
1月前
|
机器学习/深度学习 算法 计算机视觉
|
9天前
|
文字识别 算法 计算机视觉
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
15 0
|
9天前
|
算法 数据可视化 数据挖掘
R语言社区主题检测算法应用案例
R语言社区主题检测算法应用案例
12 0
|
1月前
|
XML 机器学习/深度学习 算法
目标检测算法训练数据准备——Penn-Fudan数据集预处理实例说明(附代码)
目标检测算法训练数据准备——Penn-Fudan数据集预处理实例说明(附代码)
33 1
|
1月前
|
算法
m基于log-MPA检测算法的SCMA通信链路matlab误码率仿真
MATLAB 2022a仿真实现了稀疏码多址接入(SCMA)算法,该算法利用码本稀疏性实现多用户高效接入。每个用户从码本中选取码字发送,接收端采用Log-MPA算法进行多用户检测。由于MAP检测计算复杂度高,故采用Log-MPA降低复杂性。仿真展示了不同迭代次数(1, 5, 10, 30)对误码率(BER)的影响,通过比较各次迭代的BER曲线,研究算法性能与迭代次数的关系。
22 0
|
1月前
|
机器学习/深度学习 算法
m基于深度学习的64QAM调制解调系统相位检测和补偿算法matlab仿真
MATLAB 2022a仿真实现了基于深度学习的64QAM相位检测和补偿算法,有效应对通信中相位失真问题。通过DNN进行相位检测和补偿,降低解调错误。核心程序生成随机信号,模拟AWGN信道,比较了有无相位补偿的误码率,结果显示补偿能显著提升性能。
27 8