【第9篇】YOLOX,2024年最新Python开发者必须收藏的8个开源库

2.1 YOLOX-DarkNet53


我们选择 YOLOv3 [25] 和 Darknet53 作为我们的基线。在接下来的部分中,我们将逐步介绍 YOLOX 中的整个系统设计。

实现细节 我们的训练设置从基线到我们的最终模型基本一致。我们在 COCO train2017 [17] 上训练模型总共 300 个 epochs,其中 5 个 epochs 预热。我们使用随机梯度下降 (SGD) 进行训练。我们使用 lr×BatchSize/64(线性缩放 [8])的学习率,初始 lr = 0.01 和余弦 lr 计划。权重衰减为 0.0005,SGD 动量为 0.9。对于典型的 8-GPU 设备,批处理大小默认为 128。其他批量大小包括单 GPU 训练也运行良好。输入大小从 448 到 832 均匀绘制,步长为 32。本报告中的 FPS 和延迟都是在单个 Tesla V100 上以 FP16 精度和batch = 1 测量的。

image-20210809124013666

YOLOv3 基线 我们的基线采用了 DarkNet53 主干和 SPP 层的架构,在一些论文中称为 YOLOv3-SPP [1, 7]。与原始实现 [25] 相比,我们略微更改了一些训练策略,添加了 EMA 权重更新、余弦 lr 计划、IoU 损失和 IoU 感知分支。我们使用 BCE 损失来训练 cls 和 obj 分支,使用 IoU 损失来训练 reg 分支。这些通用训练技巧与 YOLOX 的关键改进是正交的,因此我们将它们放在基线上。此外,我们只进行 RandomHorizontalFlip、ColorJitter 和 multi-scale 进行数据增强,而放弃 RandomResizedCrop 策略,因为我们发现 RandomResizedCrop 与计划的马赛克增强有点重叠。通过这些改进,我们的基线在 COCO val 上实现了 38.5% 的 AP,如表 2 所示。

解耦头 在目标检测中,分类和回归任务之间的冲突是一个众所周知的问题 [27, 34]。因此,用于分类和定位的解耦头广泛用于大多数一级和二级检测器 [16, 29, 35, 34]。然而,随着 YOLO 系列的主干和特征金字塔(例如,FPN [13]、PAN [20])不断发展,它们的检测头保持耦合,如图 2 所示。 我们的两个分析实验表明耦合检测头可能会损害性能。 1)。将YOLO的头部换成解耦的头部大大提高了收敛速度,如图3.2)。解耦头对于 YOLO 的端到端版本是必不可少的(将在下面描述)。从 Tab 可以看出。如图 1 所示,耦合头的端到端属性降低了 4.2% AP,而解耦头的降低降低到 0.8% AP。因此,我们将 YOLO 检测头替换为一个 lite 解耦头,如图 2 所示。具体来说,它包含一个 1×1 conv 层以减少通道维度,然后是两个分别具有两个 3×3 conv 层的平行分支。我们在表 2 中报告了 V100 上 batch=1 的推理时间,并且 lite 解耦头带来了额外的 1.1 ms(11.6 ms vs 10.5 ms)。

强大的数据增强我们将 Mosaic 和 MixUp 添加到我们的增强策略中以提高 YOLOX 的性能。 Mosaic 是 Ultralytics-YOLOv32 提出的一种有效的增强策略。然后它被广泛用于 YOLOv4 [1]、YOLOv5 [7] 和其他检测器 [3]。 MixUp [10] 最初是为图像分类任务设计的,但后来在 BoF [38] 中进行了修改,用于对象检测训练。我们在我们的模型中采用 MixUp 和 Mosaic 实现,并在最后 15 个 epoch 中关闭它,在 Tab 中实现了 42.0% 的 AP。 2. 使用强数据增强后,我们发现 ImageNet 预训练不再有用,因此我们从头开始训练以下所有模型。

image-20210809124103495

无锚点 YOLOv4 [1] 和 YOLOv5 [7] 都遵循 YOLOv3 [25] 的原始基于锚的管道。然而,锚点机制有许多已知的问题。首先,为了达到最优的检测性能,需要在训练前进行聚类分析,确定一组最优的anchors。那些聚集的锚点是特定于域的并且不太通用。其次,锚点机制增加了检测头的复杂性,以及每张图像的预测数量。在某些边缘 AI 系统上,在设备之间(例如,从 NPU 到 CPU)移动如此大量的预测可能会成为整体延迟方面的潜在瓶颈。

无锚点检测器 [29, 40, 14] 在过去两年发展迅速。这些工作表明,无锚检测器的性能可以与基于锚的检测器相提并论。 Anchor-free 机制显着减少了需要启发式调整和许多技巧(例如,Anchor Clustering [24]、Grid Sensitive [11])的设计参数的数量,以获得良好的性能,使检测器,尤其是其训练和解码阶段,相当简单 [29]。

将 YOLO 切换为无锚方式非常简单。我们将每个位置的预测从 3 减少到 1,并使它们直接预测四个值,即网格左上角的两个偏移量,以及预测框的高度和宽度。我们将每个对象的中心位置指定为正样本并预先定义一个尺度范围,如 [29] 中所做的那样,为每个对象指定 FPN 级别。这种修改降低了检测器的参数和 GFLOPs,使其速度更快,但获得了更好的性能 - 42.9% AP,如表 2 所示。

image-20210809123926329

Multi positives 为了与YOLOv3的分配规则一致,上述anchor-free版本为每个对象只选择一个正样本(中心位置)同时忽略其他高质量的预测。 然而,优化那些高质量的预测也可能带来有益的梯度,这可能会缓解训练过程中正/负采样的极端不平衡。 我们简单地将中心 3×3 区域指定为正区域,在 FCOS [29] 中也称为“中心采样”。 检测器的性能提高到表 2 中的 45.0% AP,已经超过了目前 Ultralytics-YOLOv3 的最佳实践(44.3% AP)。

SimOTA 高级标签分配是近年来物体检测的另一个重要进展。 基于我们自己的研究 OTA [4],我们总结了高级标签分配的四个关键见解:1)损失/质量意识。2) 中心优先。3)每个ground-truth的动态正锚数量4(缩写为动态top-k)。4) 全球视野。 OTA 满足上述所有四个规则,因此我们选择它作为候选标签分配策略。

具体来说,OTA [4] 从全局角度分析标签分配,并将分配过程制定为最优传输 (OT) 问题,在当前分配策略中产生 SOTA 性能 [12, 41, 36, 22, 37]。 然而,在实践中我们发现通过 Sinkhorn-Knopp 算法解决 OT 问题会带来 25% 的额外训练时间,这对于训练 300 个 epoch 来说是相当昂贵的。 因此,我们将其简化为动态 top-k 策略,命名为 SimOTA,以获得近似解。

我们在这里简单介绍一下 SimOTA。 SimOTA 首先计算成对匹配度,由每个预测-gt 对的成本 [4, 5,12, 2] 或质量 [33] 表示。例如,在 SimOTA 中,gt gi 和预测 pj 之间的成本计算如下:

image-20210809125102140

其中 λ 是平衡系数。 L i j c l s L_{ij}^{cls} Lijcls​和 L i j r e g L_{ij}^{reg} Lijreg​ 是 g t g_{t} gt​ g i g_{i} gi​ 和预测 p i p_{i} pi​ 之间的分类损失和回归损失。然后,对于 g t g_{t} gt​ g i g_{i} gi​,我们选择固定中心区域内成本最低的前k个预测作为其正样本。最后,这些正预测的相应网格被指定为正,而其余的网格是负。请注意,k 值因不同的真实情况而异。更多细节请参考 OTA [4] 中的动态 k 估计策略。 SimOTA 不仅减少了训练时间,而且避免了 SinkhornKnopp 算法中额外的求解器超参数。如表 2 所示,SimOTA 将检测器从 45.0% AP 提升到 47.3% AP,比 SOTA ultralytics-YOLOv3 高 3.0% AP,显示了高级分配策略的威力。

端到端 YOLO 我们按照 [39] 添加两个额外的卷积层、一对一标签分配和停止梯度。这些使检测器能够以端到端的方式执行,但会略微降低性能和推理速度,如表 2 中所列。因此,我们将其作为一个可选模块,不涉及我们的最终模型。

2.2 其他骨干


除了 DarkNet53,我们还在其他不同大小的主干上测试了 YOLOX,其中 YOLOX 相对于所有相应的对应物实现了一致的改进。

image-20210809130300228

YOLOv5 中修改的 CSPNet 为了公平比较,我们采用了精确的 YOLOv5 主干,包括修改后的 CSPNet [31]、SiLU 激活和 PAN [19] 头。 我们也遵循其缩放规则来生产 YOLOXS、YOLOX-M、YOLOX-L 和 YOLOX-X 模型。 与表 3 中的 YOLOv5 相比,我们的模型持续改进了 ∼3.0% 到 ∼1.0% AP,仅增加了边际时间(来自解耦头)。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

在这里插入图片描述

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中…(img-SxWI3Uvf-1712767058148)]

  • 43
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k-means是一种常用的聚类算法,它可以对数据进行分组并根据它们的特征进行分类。k-means python开源是一种用于实现k-means算法的工具,它可以帮助开发者Python环境下快速地实现聚类分析。 在Python中,有许多优秀的开源可以用于实现k-means算法,如scikit-learn、numpy、pandas等。这些提供了丰富的聚类分析工具和函数,可以帮助开发者高效地进行数据分析和聚类。 k-means python开源通常提供了以下功能: 1. 数据预处理:可以对数据进行处理,包括数据清洗、缺失值填充、数据标准化等操作,以便进行聚类分析。 2. k-means算法实现:包括k-means++、k-means||等改进的k-means算法实现,在数据量大的情况下能够提高算法的效率和准确性。 3. 聚类结果可视化:可以将聚类结果可视化,以便开发者对聚类分析结果进行直观的理解和分析。 使用k-means python开源进行聚类分析有许多优势,例如: - 开发者可以通过调用现有的函数和工具快速得到聚类分析的结果,节省了编写复杂算法的时间和精力。 - 开源通常经过了大量的验证和测试,可以保证算法的准确性和稳定性。 - 可以方便地与其他python进行整合,进行数据处理、可视化等操作。 总之,利用k-means python开源可以帮助开发者高效地进行聚类分析,并且可以更好地理解数据的结构和特征,为后续的数据处理和分析提供基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值