『论文阅读|2024 WACV 多目标跟踪Deep-EloU|纯中文版』

论文题目: Iterative Scale-Up ExpansionIoU and Deep Features Association for Multi-Object Tracking in Sports

论文特点: 作者提出了一种迭代扩展的 ExpansionIoU 和深度特征关联方法Deep-EIoU,用于体育场景中的多目标跟踪,旨在解决非线性、不规则运动、相似外观的在线短时多目标跟踪问题,实验表明,提出的方法对于提高跟踪鲁棒性是有效的,缺点就是该方法目前仅适用于短时跟踪,可能无法解决目标短暂消失入镜重识别问题,实时性较差。

论文下载链接: https://arxiv.org/abs/2306.13074。

摘要

基于深度学习的目标跟踪算法推动了多目标跟踪算法的显著进步。然而,目前的跟踪方法主要关注行人或车辆这类简单、规则的运动模式。这就为运动员等非线性、不规则运动目标的跟踪算法留下了空白。此外,当物体运动违反卡尔曼滤波器的线性假设时,在最近的跟踪算法中依赖卡尔曼滤波器就会出现问题。为了克服这些问题,Huang等人提出了一种新颖的在线鲁棒多目标跟踪方法,名为ExpansionIoU (Deep-EIoU),主要用于运动场景的多目标跟踪。与传统方法不同的是,放弃了卡尔曼滤波器的使用,而是利用迭代扩展 ExpansionIoU 和深度特征来实现运动场景中的鲁棒跟踪。这种方法无需采用更强大的检测器就能实现卓越的跟踪性能,同时还能保持在线跟踪过程。提出的方法在跟踪不规则运动物体方面效果显著,在 SportsMOT 数据集上获得了 77.2% 的 HOTA 分数,在 SoccerNet-Tracking 数据集上获得了 85.4% 的 HOTA 分数。在涵盖各种运动场景的各种大规模多目标跟踪基准测试中,该方法的表现优于之前所有最先进的跟踪器。代码和模型可在 https://github.com/hsiangwei0903/Deep-EIoU 上获取。

1 引言(Introduction)

多目标跟踪(MOT)是一项基本的计算机视觉任务,旨在跟踪视频中的多个物体,并在每一帧中对其进行定位。最近的大多数跟踪算法 [33, 1, 28, 4],主要侧重于行人或车辆跟踪,在公共基准测试中取得了巨大进步 [19, 8, 11]。然而,这些最先进的算法在难度较高的数据集上,尤其是那些包含体育场景的数据集上表现不佳[7, 6, 36]。鉴于自动战术分析和运动员运动统计(包括跑步距离和移动速度)等应用对体育分析的需求日益增长,体育多目标跟踪领域需要更多关注。

与行人或车辆的多目标跟踪不同,运动场景中的 MOT 具有更高的难度,由于多种原因,包括如图 2 所示的运动场景中高强度运动造成的严重遮挡、如图 3 所示的同队球员之间因球衣颜色相同而产生的相似外观,以及一些运动动作(如篮球中的交叉步、足球中的滑铲或排球中的扣球)造成的不可预测运动。由于上述原因,以往利用外观-运动融合[34, 28]或单纯基于运动[33, 5, 4]方法的跟踪器在体育场景中的几个主要 MOT 基准[6, 7]上难以进行稳健跟踪。 alt alt

为了解决这些问题,在本文中提出了一种新颖、稳健的在线多目标跟踪算法,专门针对具有不规则和不可预测运动的物体而设计。实验结果表明,该算法能在跟踪过程中有效处理运动员的不规则和不可预测运动。在两个大型公共基准测试[7]中,该算法的性能优于所有跟踪算法,而且在保持算法在线的同时,没有引入额外的计算损失。因此,在本文中提出了三个主要贡献:

  • 提出了一种简单而有效名为 ExpansionIoU 的新型关联方法,以专门应对体育跟踪中的挑战,可用于跟踪具有不规则运动和相似外观的物体。

  • 提出的迭代扩展 ExpansionIoU 进一步利用了深度特征关联,可用于体育场景中稳健的多目标跟踪。

  • 所提出的方法在 SportsMOT [7] 数据集上实现了 77.2 HOTA,在 SoccerNet-Tracking 数据集 [6] 上实现了 85.4 HOTA,大大优于之前所有的跟踪算法。 alt

2 相关工作(Related Work)

2.1 基于卡尔曼滤波器的多目标跟踪算法(Multi-Object Tracking using Kalman Filter)

现有的大多数跟踪算法 [33, 4, 5, 28, 35, 30, 14, 12, 13, 29] 都采用卡尔曼滤波 [15] 作为物体运动建模的方法。卡尔曼滤波器可将物体运动视为一个线性动态系统,并可根据物体在前几帧的运动情况预测其下一帧的位置。卡尔曼滤波器在多个公共基准测试中展示出了多目标跟踪的有效性 [19, 8, 23]。然而,由于卡尔曼滤波器的线性运动和高斯噪声假设,卡尔曼滤波器可能无法跟踪非线性运动的物体。基于这个原因,OC-SORT [5] 提出了几种方法,包括以观测为中心的重新更新,在跟踪过程中修改卡尔曼滤波器的参数,防止在未跟踪物体时误差累积。该方法在多个公共数据集上展示出跟踪不规则运动物体的有效性[23, 7]。

2.2 基于定位的多目标跟踪算法(Location-based Multi-Object Tracking)

在高帧率输入视频序列中,由于帧率较高,物体在帧间的位置偏移相对较小,因此位置信息成为帧间关联的可靠线索。有几种方法[22, 14]利用边界框距离作为边界框关联的损失,而最近的一些工作[31]则利用不同的 IoU 计算方法,包括 GIoU [20]、DIoU [38] 和 BIoU [31],来进行帧间边界框关联,这些方法在多目标跟踪中也展示出了有效性。

2.3 基于外观的多目标跟踪(Appearance-based Multi-Object Tracking)

随着近年来物体 ReID 模型[39]和训练技巧[17]的发展和改进,许多跟踪算法都将 ReID 纳入了关联过程。有些方法使用联合检测和嵌入架构 [35, 27],同时进行检测和物体嵌入,以实现实时跟踪。而其他方法[28, 1]则应用其他独立的 ReID 模型来提取检测的嵌入特征进行关联。基于外观的跟踪方法通过额外的外观线索来提高跟踪的鲁棒性,但有时外观线索可能会因为一些原因而不可靠,这些原因包括遮挡、被跟踪物体之间的外观相似、物体旋转或光照条件导致的外观变化等。

2.4 体育运动中的多目标跟踪(Multi-Object Tracking in Sports)

在团队运动中,人们对球员在比赛中的动作进行了大量监控研究。这种监测不仅能自动记录比赛统计数据,还能让体育分析人员从视频场景理解的角度获得全面信息。与行人的 MOT 不同[19],体育场景中的 MOT 具有更高的挑战性,原因包括目标的运动速度更快、不规则,同队球员的外观相似,以及体育运动的激烈特点导致的更严重的遮挡问题。最近的大多数体育运动中的移动定位方法都采用了通过检测进行跟踪的模式,并整合了一个重新识别网络来生成用于关联的嵌入特征。

Vats 等人[25] 结合球队分类和球员识别方法,提高了曲棍球的跟踪性能。同样,Yang 等人[32] 和 Maglo 等人[18] 的研究表明,通过定位场地和球员,足球的跟踪结果可以更加准确。此外,Sang ̈ uesa 等人[21] 利用人体姿势信息和动作作为嵌入特征来增强篮球运动员的跟踪。Huang 等人[14] 则结合 OC-SORT [5] 和基于外观的后处理技术,对篮球、排球和足球等多种运动场景进行跟踪[7]。

3 提出的方法(Proposed Methods)

alt

提出的方法遵循经典的 "跟踪-检测 "范式,无需使用未来信息也能实现在线跟踪。首先在每个输入帧上应用目标检测器 YOLOX,然后根据提取的外观特征之间的 相似性 以及小轨迹和检测之间的 ExpansionIoU 等几条线索进行关联。在得到关联损失后,采用匈牙利算法来获得小轨迹和检测之间的最佳匹配。

3.1 基于外观的关联(Appearance-based Association)

外观相似度是帧间物体关联的有力线索,相似度可以通过外观特征之间的余弦相似度来计算,也可以用来过滤掉一些不可能的关联。根据余弦相似度可以直接得到外观关联的损失Cost_A,计算公式如下:

这里,a 和 b 分别是小轨迹的外观特征和检测的外观特征。余弦相似度越高,表示外观相似度越高,余弦相似度越低,表示小轨迹的外观和检测的外观不同。

3.2 与 ExpansionIoU 关联(Association with ExpansionIoU)

受之前利用扩展边界框进行关联来处理运动员的快速和不规则运动的工作[31]的启发,提出了一种在大运动量和非线性运动下进行跟踪的鲁棒关联方法ExpansionIoU(EIoU)。与之前的工作 [31]不同,发现在关联过程中进一步扩大边界框可以显著降低在运动员跟踪中获得更好的性能。传统的 IoU 一直是基于位置的跟踪方法的基石,但它往往缺乏灵活性,当跟踪器和检测边界框在相邻帧之间共享较小的 IoU 或没有 IoU 时,无法顾及物体的大运动量。EIoU 通过修改边界框的尺寸、扩大其宽度和高度以及考虑更广泛的物体关系来解决这一局限性,从而恢复体育场景中运动量大的物体的关联性。边界框的扩展由扩展尺度 E 控制,给定一个高度为 h、宽度为 w 的原始边界框,可以计算出扩展长度 h⋆和 w⋆,如下所示:

原始边界框根据扩展长度进行扩展。将原始边界框的左上角和右下角坐标分别表示为 (t, l),(b, r),可以得出扩展边界框的坐标为 :

扩展后的边界框进一步用于计算小轨迹和检测对之间的 IoU,注意扩展同时应用于小轨迹的最后一帧检测和检测器的新检测,计算出的 EIoU 用于相邻帧之间的匈牙利关联。扩展边界框的操作不会改变几个重要的对象信息,如边界框中心、长宽比或外观特征。通过简单地扩展搜索空间,可以关联常见的目标快速移动时,尤其是在体育比赛中那些IoU 较小或没有 IoU 的小轨迹和检测结果。

3.3 置信度分数感知匹配(Confidence Score Aware Matching)

根据 ByteTrack [33],在匹配过程中会给高置信度分数的检测赋予更高的权重。高分检测通常意味着较少的遮挡,因此更有可能保留更可靠的外观特征。因此,第一阶段的高分检测匹配基于外观和 ExpansionIoU 的关联损失,记为 Cstage1。第一阶段的匹配建立在几轮迭代关联的基础上,并逐步扩大扩展规模,这将在第 3.4 节中讨论。在低分检测的第二轮匹配中,只使用 ExpansionIoU,损失记为 Cstage2。

在第一匹配阶段,放弃了之前几项研究中使用的 IoU-ReID 加权损失法 [34,28],其中损失是外观损失 CA 和 IoU 损失 CIoU 的加权和:

相反,作者采用与 BoT-SORT [1] 类似的策略来处理基于外观的关联。更具体地说,首先通过设置外观和ExpansionIoU(EIoU)的损失阈值来过滤掉一些不可能的关联。如果其中一个损失大于相应的阈值,则调整后的外观损失 C ˆ A 设为 1,否则 C ˆ A 设为其外观损失CA 的一半。最后,第一阶段的最终关联损失 Cstage1 设为外观损失 C ˆ A 和 EIoU 损失 CEIoU 的最小值。 τA 和 τEIoU 表示损失过滤器的阈值,可以将外观成本 C ˆ A 写成:

第一阶段匹配的最终损失 Cstage1 将是调整后的外观损失 C ˆ A 与 EIoU 损失 CEIoU 之间的最小值。

而第二匹配阶段 Cstage2 的关联损失将只使用 EIoU 损失 CEIoU。

3.4 迭代扩展ExpansionIoU(Iterative Scale-Up ExpansionIoU)

正如之前使用扩展边界框进行关联的工作[31]所示,边界框的扩展量是跟踪过程中一个关键而敏感的超参数,跟踪器的性能在很大程度上会受到超参数选择的影响。在现实世界中,有几个因素可能会限制我们调整扩展尺度并提高跟踪性能,其中包括:1)在线跟踪要求。运动员跟踪系统的一个常见要求是系统需要在线运行,在这种情况下,通过实验调整扩展尺度和调整性能是不可能的。2) 无法获取测试数据。在现实世界中,往往无法获得测试数据的真实值,这就不可能找到完美的关联扩展尺度。基于上述原因,作者提出了一种新颖的迭代扩展 ExpansionIoU 关联阶段来实现鲁棒跟踪,实验结果表明,在不进行任何参数调整的情况下,该算法可以在公共基准上始终保持 SOTA 性能。在跟踪过程中,作者选择基于逐渐增大的 Et 来迭代进行 EIoU 关联,而不是对最佳扩展尺度 E 进行超参数调整。在每次扩展迭代中,当前迭代的扩展尺度 Et 可由以下公式得出:

其中,E_initial是初始扩展尺度,λ 表示迭代扩展过程的步长,t 代表迭代次数,从 0 开始。 通过这种方法,可以先对扩展尺度较高的轨迹和探测对进行关联,然后逐步搜索重叠面积较小的轨迹和探测对,从而增强关联过程的鲁棒性。需要注意的是,迭代扩展过程只适用于高分检测关联,一旦迭代次数达到总迭代次数 t_total,高分检测关联就会停止,跟踪器将进入低分检测关联阶段。

4 实验和结果(Experiments and Results)

alt

4.1 数据集(Dataset)

alt

在两个大型多体育项目球员跟踪数据集(即 SportsMOT [7] 和 SoccerNet-Tracking [6])上对跟踪算法进行了评估。

SportsMOT 包含 240 个视频序列,超过 150K 个帧和 160 多万个边界框,收集自篮球、足球和排球等 3 种不同的运动项目。与 MOT 数据集 [19, 8]不同,SportsMOT 具有更高的难度,包括1) 目标的快速和不规则运动;2) 更大的摄像机运动;3) 同一球队球员的相似外观。

SoccerNet-Tracking 是一个大规模的多目标跟踪数据集,由 201 个足球比赛序列组成。每个序列长度为 30 秒。该数据集包含 225,375 个帧,3,645,661 个注释边界框和 5,009 个轨迹。与 仅关注体育运动员在球场上的跟踪情况的SportsMOT 不同,SoccerNet 的跟踪目标包含多个对象类别,包括普通球员、守门员、裁判和足球。

4.2 检测器(Detector)

作者选择 YOLOX [10] 作为目标检测器,以实现实时和高精度的检测性能。现有的几个跟踪器 [33, 5, 1, 31] 也采用了 YOLOX 作为检测器,这也使得这些跟踪器与作者的跟踪器之间的比较更加公平。作者使用 YOLOX 官方 GitHub 仓库提供的 COCO 预训练 YOLOX-X 模型[10],并使用 SportsMOT 训练集和验证集对该模型进一步微调。 epochs设置为80,输入图像大小为 1440 × 800,数据增强包括 Mosaic 和 Mixup。使用权重衰减为 5 × 10-4 和动量为 0.9 的 SGD 优化器。带有1 epoch的加热和余弦退火计划的初始学习率为 10-3,这与 ByteTrack [33] 的训练步骤相同。至于SoccerNet-Tracking 数据集,由于该数据集提供了oracle detections,为了进行公平比较并侧重于跟踪,直接使用该数据集提供的oracle detetions对所有跟踪器进行评估。

4.3 ReID模型(ReID模型)

对于运动员再识别(ReID),作者使用 OSNet [39] 中提出的全尺度特征学习。统一的聚合门融合了不同尺度的特征,增强了人员ReID 的能力。

SportsMOT 用于 SportsMOT 数据集实验的 ReID 训练数据是基于原始的 SportsMOT 数据集构建的,作者根据每个球员的边界框的标注真实值对其进行裁剪。采样数据集包括 31279 张训练图像、133 张查询图像和 1025 张图库图像。

SoccerNet-Tracking 作者从 SoccerNet-Tracking 训练集中抽取 ReID 训练数据,从随机抽样的视频中为每个球员随机选取 100 个真实值边界框,其中 65 个用作训练图像,10 个用作查询图像,25 个用作图库图像。采样的 ReID 数据包含 7,085 张训练图像、1,090 张查询图像和 2,725 张图库图像,共随机选择了 109 个身份。

训练细节 作者使用 Market-1501 数据集[37]中的预训练模型,并根据上述每个抽样体育 ReID 数据集进一步微调模型,最终为这两个数据集建立两个 ReID 模型。每个模型训练 60 个epochs,使用带有交叉熵损失的Adam优化器,初始学习率为 3 × 10-4。所有实验均在单个 Nvidia RTX 4080 GPU 上进行。

4.4 跟踪设置(Tracking Setting)

高分检测的阈值为 0.6,而置信度在 0.6 和 0.1 之间的检测将被视为低分检测,其余置信度低于 0.1 的检测将被过滤。损失过滤阈值 τA 和 τEIoU 分别设为 0.25 和 0.5。作者还取消了检测边界框中的长宽比限制,因为体育场景中可能会出现球员躺在地上的情况,这与 MOT 数据集中大多数行人站立和行走的情况不同。对于高分检测关联,将扩展尺度 E_initial 的初始值设为 0.7,步长 λ 为 0.1,迭代总次数t_total为2。低分检测关联的扩展尺度 E 为 0.7,未匹配检测的扩展尺度 E 为 0.5。保留丢失轨迹的最大帧数为 60 帧。跟踪结束后,应用线性插值来提高最终跟踪性能。

4.5 评估指标(Evaluation Metrics)

MOTA [2] 通常被用作多目标跟踪任务的评估指标,但 MOTA 主要关注的是检测性能而非关联精度。最近,为了在检测性能和关联性能之间取得平衡,越来越多的公共基准开始使用 HOTA [16] 作为主要评估指标。在对 SportsMOT 数据集进行评估时,作者采用了 HOTA、MOTA、IDF1 和其他相关指标 [3] 进行比较。而对于 SoccerNet,采用 HOTA 指标以及相关的 DetA 和 AssA 指标,因为只有这些指标是由评估服务器提供的。

4.6 性能(Performance)

作者在两个大型体育场景多目标跟踪数据集SportsMOT 和 SoccerNetTracking 数据集上将他们的跟踪算法与之前已有的跟踪器进行了比较。所有实验均在一个 Nvidia RTX 4080 GPU 上运行,跟踪结果在数据集的官方评估服务器上进行评估。

SportsMOT 如表 2 所示,提出的 Deep-EIoU 在 HOTA 中达到 77.2,在 IDF1 中达到 79.8,在 AssA 中达到 67.7。性能达到了最先进的水平,优于之前所有的跟踪器,同时还保持了在线跟踪过程,展示了算法在体育场景中多目标跟踪的有效性。 alt

SoccerNet 为了关注跟踪性能并进行公平比较,所有评估方法都使用了由 SoccerNet-Tracking 数据集 [6] 提供的 oracle 检测。作者提出的方法的性能见表 3。方法在 HOTA、AssA 和 DetA 中的性能分别达到了 85.443、73.567 和 99.236,远远超过了几种最先进的在线跟踪算法。DeepSORT 和 ByteTrack 的性能报告来自最初的 SoccerNet-Tracking 论文[6]。Deep-EIoU 在各种大规模体育运动员跟踪数据集中的优异表现证明了作者的算法在体育多目标跟踪中的有效性。 alt

4.7 Deep-EIoU消融实验研究(Ablation Studies on Deep-EIoU)

在实验中,Deep-EIoU 在 SportsMOT 测试集上以不同的设置进行了评估,包括是否在跟踪过程中加入外观(ReID)、使用迭代扩展边界框扩展以及使用线性插值作为后处理。如表 4 所示,在加入基于外观关联的 ReID 模型后,Deep-EIoU 的 HOTA 提升了 3.8,这表明虽然运动员之间具有相似的外观,但在运动场景中以外观为线索进行追踪仍然非常重要。通过迭代扩展过程(ISU),逐步扩展的边界框可以首先与 EIoU 较高的小轨迹和检测建立关联,从而也提高了跟踪性能,需要注意的是,迭代扩展过程结合了更大的跟踪缓冲区,与行人跟踪的默认设置 30 不同,由于体育场景的遮挡特性更强,使用了 60。最后,按照大多数在线跟踪算法[33, 5],还加入了线性插值(LI)作为提高最终跟踪性能的策略。 alt

4.8 初始扩展尺度的鲁棒性(Robustness to initial expansion scale)

为了证明方法的有效性和鲁棒性,作者在迭代扩展过程中根据不同的初始扩展尺度进行了实验。将初始扩展尺度从 0.2 改为 0.8。图 5 中的实验结果表明,由于迭代扩展过程可以增强鲁棒性,并且无需调整任何参数即可实现 SOTA 性能,因此仍然可以在不同的初始扩展尺度下实现 SOTA 性能。这证明了方法在现实世界中的有效性,因为现实世界中往往没有真实值,跟踪参数也无法调整。 alt

4.9 基于卡尔曼滤波器的跟踪器上的ExpansionIoU(ExpansionIoU on Kalman filter-based tracker)

为了测试 ExpansionIoU 对基于卡尔曼滤波器的跟踪器的影响,作者还通过直接集成卡尔曼滤波器和 ExpansionIoU 实现了几个版本的方法。在实施过程中,在ExpansionIoU 之后的跟踪过程中,将对卡尔曼滤波器的预测和检测结果进行扩展。表 5 中的实验结果表明,将 IoU 直接替换为 EIoU 后,这两种基于卡尔曼滤波器的经典跟踪器在 HOTA、AssA 和 DetA 中的性能都有很大程度的提高。这表明,ExpansionIoU 也可以作为基于卡尔曼滤波器的跟踪器的即插即用技巧来提高跟踪性能。 alt

4.10 局限性(Limitation)

虽然作者的算法为体育场景中的在线多目标跟踪提供了一个强大而实用的解决方案,但它也有其局限性,包括缺乏离线后处理轨迹细化方法。这种方法可能涉及后处理方法[14]或强内存缓冲区[26],这对于处理体育运动员临时退出和重新进入摄像机视野的边缘情况非常有价值。值得注意的是,未来探索和整合离线细化技术有可能提高整体性能,并将方法的适用范围扩展到短期跟踪场景之外。

Deep-EIoU 的另一个问题是,与基于运动的跟踪器相比,它的运行速度相对较慢。尽管性能大幅提升,但基于外观的逐个检测跟踪框架(涉及检测器和 ReID 模型)的集成带来了额外的计算成本。目前的 DeepEIoU 管道在单个 Nvidia RTX 4080 GPU 上可达到约 14.6 FPS,与基于运动的跟踪器相比速度较慢。值得注意的是,过渡到更轻便的探测器和 ReID 模式有可能大大提高运行速度。

5 总结

在本文中,提出了 Deep-EIoU,一种迭代扩展的 ExpansionIoU 和深度特征关联方法,用于体育场景中的多目标跟踪。在包括 SportsMOT 和 SoccerNet-Tracking 在内的两个大规模多目标运动选手跟踪数据集上取得了极具竞争力的性能。该方法成功地解决了体育场景中多目标跟踪过程中不规则运动的难题,并在很大程度上优于之前的跟踪算法。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/343605.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

选现货白银投资划不划算?

可以肯定的是选择现货白银投资是划算的,但投资者需要有足够的知识和经验,以及对市场的敏锐观察力。只有这样,投资者才能在现货白银投资中获取收益。在投资市场上,白银作为一种特殊的投资品种,一直以来都备受投资者们的…

macOS跨进程通信: TCP Socket 创建实例

macOS跨进程通信: TCP Socket 创建实例 一: 简介 Socket 是 网络传输的抽象概念。 一般我们常用的有Tcp Socket和 UDP Scoket, 和类Unix 系统(包括Mac)独有的 Unix Domain Socket(UDS)。 Tcp Socket 能够…

东莞UG逆向建模设计汽车内外饰出stp图抄数3d造型建模代画图服务

汽车内外饰三维扫描及逆向建模是一项复杂且技术性强的工程。它涉及到使用高精度的三维扫描仪对汽车内外饰进行全面、细致的扫描,获取其精确的三维数据。这个过程中,需要确保扫描的环境、光线、角度等因素对扫描结果的影响最小化,以保证获取的…

【测试开发八股文】算法

1、栈和队列 1)栈:先进后出;队列:先进先出 2)如何用栈实现队列? 分析:两个栈,栈1负责入队,栈2负责出队 改进点:出队时,栈2出队后,可不…

python基础——线程

线程的使用 from threading import Thread import time def func(i):print("start{}".format(i))time.sleep(1)print("end{}".format(i)) for i in range(10):Thread(targetfunc,args(i,)).start() 守护线程的使用 主进程结束时,守护线程不会…

常用芯片学习——HC244芯片

HC573 三态输出八路缓冲器|线路驱动器 使用说明 SNx4HC244 八路缓冲器和线路驱动器专门设计用于提高三态存储器地址驱动器、时钟驱动器以及总线导向接收器和发送器的性能和密度。SNx4HC244 器件配备两个具有独立输出使能 (OE) 输入的 4 位缓冲器和驱动器。当 OE 为低电平时&a…

1. Matplotlib的Figure基础概念

1. Matplotlib的Figure基础概念 一 **角色和作用**二 **类比:**三 **基本使用示例** Matplotlib是一个用于绘制二维图形的Python库,广泛应用于数据可视化领域。其灵活性和强大的功能使得用户能够轻松创建各种类型的图表,包括折线图、散点图、…

node 第二十二天 mongoDB最新版7.x安装教程

学习服务端其实就是学习数据库, 就web这一条线而言, 客户端的学习就是学习浏览器, 而服务端的学习就是学习数据库(当然还有服务器) 为什么学习mongoDB mongoDB是非关系型数据库(not only sql) 基本上补全了mysql的缺陷, 当然也缺失了部分mysql的优势. 当然, 非大型应用的业务场…

linux中文件锁定--flock命令

在Linux操作系统中,flock是一个用于文件锁定的命令。文件锁定是一种机制,用于在多任务和多用户环境中管理对共享资源(如文件)的访问。flock允许你在代码中设置锁,以确保在任何给定时刻只有一个进程可以访问被锁定的文件…

leetcode—— 腐烂的橘子

腐烂的橘子 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到…

Leetcode刷题(二十八)

找出字符串中第一个匹配项的下标(Easy) 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返…

数据链路层流量控制与传输层流量控制对比

目录 一.数据链路层 1.停止等待协议 无差错情况: 有差错情况: 2.滑动窗口协议 (1)后退N帧协议(GBN) (2)选择重传协议(SR) 二.传输层 1.传输层的可靠…

Github2024-01-23 开源项目日报 Top9

根据Github Trendings的统计,今日(2024-01-23统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3Go项目2TypeScript项目2Dart项目1Jupyter Notebook项目1 gpt4free 语言模型集合改进计划 创建周期…

基于 LangChain 框架,向量数据库如何创建、读取、更新、删除(CRUD)

RAG是目前大语言模型从工具走向生产力实践的最热门的方式,它可以实现从海量的文本数据中检索相关的信息,并用于生成高质量的文本输出。 而聊到RAG,我们就很难避开使用RAG的基础设施-向量数据库 今天我将带领大家,以最为基础的CRU…

安装miniconda、tensorflow、libcudnn

目录 安装miniconda 安装tensorflow 安装 libcudnn 安装miniconda wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && bash Miniconda3-latest-Linux-x86_64.sh 安装tensorflow tensorflow官网,查看版本对应 https:…

Linux——进程程序替换

进程程序替换 文章目录 进程程序替换1. 进程程序替换的基本概念2. exec系列函数2.1 是否带p2.1.1 execl()2.1.2 execlp() 2.2 是否带e2.2.1 execle() 2.3 l或v2.3.1 execvp() 2.4 返回值 3. 注意点 本章思维导图: 注:本章思维导图对应的 .xmind和 .png…

万界星空科技注塑行业MES解决方案

注塑行业是一个具有发展潜力的行业,随着人们对物质生活的质量要求越来越高,日用品、医疗保健、汽车工业以及建筑等行业对注塑制品的需求量日益增长。注塑企业提供的多种多样的塑料产品已深入到经济生活的各个领域,为国家经济的各个部门包括轻…

yolov8 opencv dnn部署自己的模型

源码地址 本人使用的opencv c github代码,代码作者非本人 使用github源码结合自己导出的onnx模型推理自己的视频 推理条件 windows 10 Visual Studio 2019 Nvidia GeForce GTX 1070 opencv4.7.0 (opencv4.5.5在别的地方看到不支持yolov8的推理,所以只使用opencv…

四、Flask学习之JavaScript

四、Flask学习之JavaScript JavaScript,作为一种前端脚本语言,赋予网页生动的交互性和动态性。通过它,开发者能够操作DOM(文档对象模型)实现页面元素的动态改变、响应用户事件,并借助AJAX技术实现异步数据…

【极数系列】Flink项目入门搭建(03)

【极数系列】Flink项目入门搭建(03) 引言 gitee地址:https://gitee.com/shawsongyue/aurora.git 源码直接下载可运行,模块:aurora_flink Flink 版本:1.18.0 Jdk 版本:11 1.创建mavenx项目 2.…
最新文章