YOLO在升级 | PP-YOLO v2开源致敬YOLOV4携带Tricks又准又快地归来(附论文与源码)...
点击上方“3D视觉工坊”,选择“星标”干货第一时间送达表现SOTA!AP和速度的综合性能优于YOLOv5、EfficientDet等网络,其中一版本可达50.3%AP,50.3 FPS!代...
点击上方“3D视觉工坊”,选择“星标”
干货第一时间送达
表现SOTA!AP和速度的综合性能优于YOLOv5、EfficientDet等网络,其中一版本可达50.3%AP,50.3 FPS!代码刚刚开源!
作者单位:百度, 早稻田大学
1 简介
为了解决效率和性能这两个问题,本文全面评估了一系列现有改进,以提高PP-YOLO的性能,同时几乎保持推理时间不变。本文将分析一系列改进,并通过增量消融研究从经验上评估它们对最终模型性能的影响。
通过结合多项有效的改进,在COCO2017上将PP-YOLO的性能从45.9%mAP提升到49.5%mAP。称之为PP-YOLOv2。
在速度方面,PP-YOLOv2在640x640输入尺寸下以68.9FPS的速度运行。具有TensorRT,FP16精度和Batch=1的Paddle推理引擎进一步提高了PP-YOLOv2的推理速度,达到了106.5 FPS。这样的性能超过了具有大致相同数量的参数(即YOLOv4-CSP,YOLOv5l)的现有目标检测器。此外,带有ResNet101的PP-YOLOv2在COCO2017测试开发上达到了50.3%的mAP。
2 PP-YOLO回顾
2.1 Pre-Processing
应用从 分布中采样的权重MixUp,其中 。
然后,RandomColorDistortion, RandomExpand,RandCrop和RandomFlip以0.5的概率依次应用。
将RGB通道分别减去0.485、0.456、0.406、0.229、0.224、0.225进行归一化处理。
最后,输入大小从[320,352,384,416,448,480,512,544,576,608]均匀抽取。
2.2 Baseline Model
Baseline Model是PP-YOLO,它是YOLOv3的一个增强版本。具体来说,它首先取代ResNet50-vd的BackBone。之后增加了10个几乎可以在不损失效率的情况下提高YOLOv3性能的技巧,如Deformable Conv、SSLD、CoordConv、DropBlock、SPP等。
2.3 Training Schedule
在COCO train2017上,使用随机梯度下降(SGD)对网络进行500K迭代训练,使用分布在8上的96张图像的小批量训练gpu。学习率从0线性增加到4K迭代时为0.005,分别在400K和450K迭代时除以10。Weight decay设为0.0005,动量设为0.9。最后采用梯度裁剪来稳定训练过程。
3 PP-YOLO v2改进点
3.1 Path Aggregation Network
在不同尺度下检测任务是目标检测的一个基本挑战。在实践中,作者开发了一个检测neck,用于构建所有尺度的高级语义特征map。在本文中PP-YOLO采用FPN来组成自底向上的Path。
最近,一些FPN的变体被提出以提高金字塔表征的能力。例如,BiFPN,PAN,RFP等。我们遵循PAN的设计来聚合自顶向下的信息。PAN的详细结构如图2所示。
def pan_module(self, input, filter_list, name=None):
for i in range(1, len(input)):
ch_out = input[i].shape[1] // 2
conv_left = self._conv_bn(
input[i],
ch_out=ch_out,
filter_size=1,
stride=1,
padding=0,
name=name + '.{}.left'.format(i))
ch_out = input[i - 1].shape[1] // 2
conv_right = self._conv_bn(
input[i - 1],
ch_out=ch_out,
filter_size=1,
stride=1,
padding=0,
name=name + '.{}.right'.format(i))
conv_right = self._upsample(conv_right)
pan_out = fluid.layers.concat([conv_left, conv_right], axis=1)
ch_list = [pan_out.shape[1] // 2 * k for k in [1, 2, 1, 2, 1]]
input[i] = self.stack_conv(
pan_out,
ch_list=ch_list,
filter_list=filter_list,
name=name + '.stack_conv.{}'.format(i))
return input
3.2 Mish Activation Function
其实Mish激活函数已在YOLOv4、YOLOv5等中被证明是有效的。Backbone采用mish激活函数。然而,作者更喜欢使用预先训练的参数,因为有一个强大的模型(在ImageNet上达到了82.4%的top-1精度)。
为了保持Backbone不变,作者将mish激活函数应用于检测neck而不是Backbone。
def mish(x):
return x * paddle.tanh(F.softplus(x))
3.3 Larger Input Size
增加输入大小可以扩大目标被感知面积。这样,小尺度的物体信息将比以前更容易被保存。因此,性能将得到提高。
然而,更大的输入大小会占用更多的内存。要应用这个技巧需要减少Batch Size。更具体地说,将Batch Size从每个GPU24张图像减少到每个GPU12张图像,并将最大输入大小从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。以下是IoU aware loss:
其中t为锚点与ground-truth-bounding box之间的IoU,p为IoU aware branch的原始输出,
为sigmoid激活函数。注意,只计算阳性样本的IoU aware loss。通过替换损失函数IoU aware branch比以前更好。
@register
@serializable
class IouAwareLoss(IouLoss):
"""
iou aware loss, see https://arxiv.org/abs/1912.05992
Args:
loss_weight (float): iou aware loss weight, default is 1.0
max_height (int): max height of input to support random shape input
max_width (int): max width of input to support random shape input
"""
def __init__(self, loss_weight=1.0, giou=False, diou=False, ciou=False):
super(IouAwareLoss, self).__init__(
loss_weight=loss_weight, giou=giou, diou=diou, ciou=ciou)
def __call__(self, ioup, pbox, gbox):
iou = bbox_iou(
pbox, gbox, giou=self.giou, diou=self.diou, ciou=self.ciou)
iou.stop_gradient = True
loss_iou_aware = F.binary_cross_entropy_with_logits(
ioup, iou, reduction='none')
loss_iou_aware = loss_iou_aware * self.loss_weight
return loss_iou_aware
4 不确定Work的Tricks
这里就简单列举一下吧!具体的分析大家去看论文即可:
Cosine Learning Rate Decay
Backbone Parameter Freezing
SiLU Activation Function
5 实验
5.1 Ablation Studies
可以看出这些Trick的加入对于推理时间虽然有所下降,但是影响并不是非常的大,但是mAP提升是很明显的。
5.2 SOTA对比
6 参考
[1].PP-YOLOv2: A Practical Object Detector
[2].https://github.com/PaddlePaddle/PaddleDetection
本文仅做学术分享,如有侵权,请联系删文。
下载1
在「3D视觉工坊」公众号后台回复:3D视觉,即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。
下载2
在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总,即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。
下载3
在「3D视觉工坊」公众号后台回复:相机标定,即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配,即可下载独家立体匹配学习课件与视频网址。
重磅!3DCVer-学术论文写作投稿 交流群已成立
扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。
同时也可申请加入我们的细分方向交流群,目前主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。
一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。
▲长按加微信群或投稿
▲长按关注公众号
3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、orb-slam3等视频课程)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款
圈里有高质量教程资料、可答疑解惑、助你高效解决问题
觉得有用,麻烦给个赞和在看~
更多推荐
所有评论(0)