YOLOv3有哪些优化策略

序言

距离YOLOv3的发布已经快两年了,虽然在这两年里面虽然涌现了很多优秀的框架,但是毫无疑问的是,在工业界目标检测中,YOLOv3仍然很受CV爱好者们的喜爱,尽管新框架检测精度和速度不断提高,但是多数情况下是为了刷榜,并没有像YOLOv3一样普遍受众,这也是为什么距离发布已经快过去两年了,YOLOv3还是这么受爱好者们青睐的原因,不过近日作者在推特上宣布不再从事深度学习视觉领域的研究,这也意味着也许YOLO就此绝代,不会在有YOLOv4出现了,说实话还是很令人痛心的。

本篇文章主要是给出了一些YOLOv3的优化策略,当然不一定很全面,只是提供一下优化思路而已。

才说到yolo要绝版,结果v4又出来了,直接去看v4吧。。。各种tricks满天飞,大型优化调参现场,这篇文章随便看看就好了…

一、YOLOv3的不足之处

要优化改进一个模型,就必须要了解到它不足的地方,YOLOv3虽然说是一款速度兼精度已经非常优秀的框架,但是还是免不了存在以下问题:

  1. 召回率不足;
  2. 定位不够准确;
  3. 模型在实际应用场景中的达不到实时性要求。

针对以上存在的问题,提出以下优化思路:更轻量级更快和更高的准确率和recall

二、优化策略

1. 更轻量级更快:

1.1 更换YOLOv3的backbone

YOLOv3默认的backbone是darknet53,虽然darknet53在精度和速度上相比于ResNet-101和ResNet-152要好,但是在一些特定的场景下,对于精度要求没这么高的、目标数目少等情况下,我们可以更换更轻量级的网络来作为它的backbone,可以尝试使用V2版本的darknet19或者Mobilenet系列和ShuffleNet系列的轻量级网络来满足模型的实时性要求。

1.2 提升训练速度

在训练YOLOv3时,通常我们会选择使用预训练好的模型进行迁移学习,这在微调的时候就存在一个问题,训练一开始就结束了。因为预训练模型在Imagenet上训练过了,设置的迭代次数应该是远大于cfg中的max_batch或者其他参数,所以刚开始训练就达到了截停的条件。如果不做fine-tuning,没有好的初始化又很难训练出好的模型。这时候可以选择只提取前面固定层的参数作为初始化权重,例如使用darknet19作为backbone,只提取darknet19的前面的1~39层参数;得到的darkent19.conv.40可以作为修改的yolov3-darknet19网络的初始化模型。

/darknet partial cfg/darknet19.cfg darknet19.weights darknet19.conv.40 40

如果想对要对模型进一步调整的话还可以尝试模型压缩、剪枝、蒸馏等技术。

2. 提升准确率和召回率:

2.1 对anchor进行重新聚类

在YOLOv3中,默认的anchor是从COCO数据集上聚类而来,然而在实际需求中,不一定适用,可以针对任务的不同,重新聚类新的anchor;

2.2 调整损失函数

YOLO是作为单阶段的检测器,免不了要面对类别不不平衡的问题,在V3的原文中说到作者使用了focal loss后mAP反而下降了两个百分点,但是并不证明focal loss在YOLOv3中是无用的,也很有可能是作者用错了地方,参考知乎上大神们的讨论关于YOLOv3使用focal loss mAP反而下降,还可以尝试其他的平衡类别不平衡的函数GHM(focal loss的改进版)等;

2.3 加入Gaussian loss

其实就是Gaussian YOLOv3这篇文章,文章的大致思路是对预测框的不确定性加入了Gaussian模型进行建模。在通过置信度筛选完目标区域后,对预测框进行回归,这时候只能通过NMS来筛选预测框,并没有确切的指标来衡量筛选后的预测框是否准确,作者通过引入Gaussian模型,可以对预测框的不确定性指进行衡量,在精度上有着非常不错的提升;

2.4 使用GIOU、DIOU代替IOU

这个就不再阐述了,感兴趣的可以去了解三者的差别,网上有很多文章;

2.5 可以使用效率更优的网络作为backbone

例如EfficientNet、HRNet、Res2Net等。

2.6 新的特征融合方式ASFF:

这篇论文才采用了新的特征融合方式,取得了非常大的效果,链接跳转 一种新的特征融合的方式ASFF 直接贴出效果图,可以说是全方面的提升,训练技巧集大成者,论文思想很简单,实现效果好。
在这里插入图片描述

如果有更好的优化方向,可以在评论区留言,一起探讨,有错误的地方,也希望能够指正。

  • 11
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: YOLOv5是一个流行的目标检测算法,它已经有一些优化算法可以用来提高其性能。其中一些优化算法包括: 1. CSPDarknet:这是YOLOv5使用的深度神经网络架构,通过使用CSP (cross stage partial)连接来减少了模型的计算复杂度,并提高了模型的精度。 2. Swish Activation Function:这是一种新型激活函数,它在YOLOv5中被用于替代传统的ReLU函数,从而提高了模型的精度。 3. PANet Feature Aggregation:这是一种特征融合技术,它通过将不同尺度的特征图组合在一起,从而提高了模型的精度和鲁棒性。 4. DropBlock Regularization:这是一种新型的正则化方法,它可以防止模型过拟合并提高模型的泛化性能。 5. Soft-NMS:这是一种新型的非极大值抑制方法,它可以在保持模型精度的同时,减少检测结果的重复性。 这些优化算法可以帮助YOLOv5在准确率和速度方面实现更好的表现。 ### 回答2: YOLOV5是一种高效的目标检测算法,它通过一系列的优化算法来提高检测性能。以下是YOLOV5中常用的优化算法: 1. 非极大值抑制(Non-Maximum Suppression,NMS):在目标检测中,模型可能会生成大量的候选框,NMS算法可以去除重复的候选框,只保留最具代表性的框,从而提高检测的准确性和效率。 2. 类别预测器替换:YOLOV5中使用了类别预测器替换策略,即使用较大和较小的预测器对不同大小的目标进行检测。这样可以提高对小目标的检测效果,同时节省了计算资源。 3. 自适应模型压缩:为了在不同硬件平台上实现高效的目标检测,YOLOV5使用了自适应模型压缩算法。通过选择合适的模型压缩比例,可以在保持检测准确性的同时,减少模型的大小和计算量。 4. 优化的损失函数:YOLOV5中采用了一种优化的损失函数,即Focal Loss。该损失函数可以有效地解决目标检测中类别不平衡的问题,提高对难样本的检测能力。 5. 冻结层训练:为了加快模型训练的速度,YOLOV5中采用了冻结层训练策略。即将一部分卷积层的参数固定,在初始阶段只训练最后几层。这样可以减少训练时间和计算资源的消耗。 综上所述,YOLOV5采用了非极大值抑制、类别预测器替换、自适应模型压缩、优化的损失函数和冻结层训练等优化算法来提高其性能。这些算法的应用使得YOLOV5在目标检测任务中具有更好的准确性和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值