当前位置: 首页 > article >正文

Unified-IoU:用于高质量对象检测

摘要

https://arxiv.org/pdf/2408.06636
目标检测是计算机视觉领域的重要部分,而目标检测的效果直接由预测框的回归精度决定。作为模型训练的关键,交并比(IoU,Intersection over Union)极大地展示了当前预测框与真实框之间的差异。后续研究人员不断在IoU中加入更多考量因素,如中心距离、纵横比等。然而,仅仅细化几何差异存在上限;新的考量指标与IoU本身之间存在潜在联系,两者之间的直接加减可能导致“过度考量”的问题。基于此,我们提出了一种新的IoU损失函数,称为统一IoU(UIoU),它更关注于不同质量预测框之间的权重分配。具体来说,该损失函数以一种新颖的方式动态地将模型的注意力从低质量预测框转移到高质量预测框,以增强模型在高精度或密集型数据集上的检测性能,并在训练速度上实现平衡。我们的方法在多个数据集上取得了更好的性能,尤其是在高IoU阈值下,UIoU相比其他改进的IoU损失具有更显著的改进效果。我们的代码已公开可用,地址为:https://github.com/lxjdrifter/UIOU_files。

1 引言

边界框回归(Bounding Box Regression,BBR)模块是目标检测模型的重要组成部分[Felzenszwalb et al., 2010; Girshick et al., 2014; Ren et al., 2015; Wu et al., 2020; Beery et al., 2020; Pang et al., 2019; Gidaris and Komodakis, 2015],一个优秀且准确的边界框回归函数直接决定了目标定位的精确度。如果预测框的定位精度较差,则很容易导致目标的误检或漏检。边界框回归模块已被广泛应用于许多先进的目标检测器中,包括Mask R-CNN [He et al., 2017]、Cascade R-CNN [Cai and Vasconcelos, 2018]、YOLO [Redmon et al., 2015]等。因此,设计一个好的BBR损失函数是目标检测任务的关键。目前,BBR损失函数主要分为两大类:
基于回归的第一类BBR损失定义为 ℓ 2 \ell_{2} 2损失[Huang et al., 2015; Jie et al., 2016],它通过给定的像素将预测框和边界框的高度和宽度分别分为两部分,每个边界框的位置信息可以定义为一个四维向量:

x = ( x t , x b , x l , x r ) x=\left(x_{t}, x_{b}, x_{l}, x_{r}\right) x=(xt,xb,xl,xr)

其中, x t , x b , x l , x r x_{t}, x_{b}, x_{l}, x_{r} xt,xb,xl,xr可以理解为像素位置与边界框的上、下、左、右边界之间的距离。 ℓ 2 \ell_{2} 2损失可以计算为:

ℓ 2  loss  = ∥ x 1 − x 2 ∥ 2 2 \ell_{2} \text { loss }=\left\|x_{1}-x_{2}\right\|_{2}^{2} 2 loss =x1x222

其中, x 1 x_{1} x1表示预测框的四维向量, x 2 x_{2} x2表示真实框的四维向量。 ℓ 2 \ell_{2} 2损失对多个特征进行了归一化,结果都在0和1之间。然而,四维向量中的四个变量是相互独立的,忽略了边界之间的相关性。此外,该方法仅考虑像素与边界之间的距离,对边界框的大小没有限制,因此模型对小目标的定位性能较差[Yu et al., 2016; Rezatofighi et al., 2019]。

第二种BBR损失是IoU(Intersection over Union)损失[Yu et al., 2016]。将预测框定义为 P P P,真实框定义为 P g t P^{gt} Pgt,IoU损失的计算公式为:

IoU loss = 1 − P ∩ P g t P ∪ P g t 。 \text{IoU} \quad \text{loss} = 1 - \frac{P \cap P^{gt}}{P \cup P^{gt}} \text{。} IoUloss=1PPgtPPgt

上述两种BBR损失都是标准化的,但它们对边界框的尺度不敏感,仅关注几何尺度的问题,忽略了边界框的质量和难度。

在本文中,我们将模型的注意力集中在不同质量的锚框上,而不再修改边界框之间的几何度量规则。首先,我们提出了一种新的预测框动态加权方法。

通过缩小边界框,我们可以增大预测框和真实框(Ground Truth box)的IoU损失,这相当于给高质量的预测框赋予更多权重,从而实现模型对高质量预测框的关注效果。缩小边界框则产生相反的效果。其次,对于高质量的目标检测,我们希望模型能够关注高质量的锚框,但这会带来收敛速度慢的问题。为了平衡模型关注度和收敛速度之间的矛盾,我们设计了一个动态超参数“ratio”来调整边界框的缩放比例。具体来说,在训练初期,我们扩大边界框,这相当于减小高质量预测框的IoU损失,使模型关注低质量的锚框,从而加快收敛速度。在训练后期,我们缩小边界框,这相当于增大高质量预测框的IoU损失,从而使模型的注意力集中在高质量的锚框上。第三,受“Focal Loss”的启发[Lin et al., 2020],我们为边界框回归(BBR)损失设计了一种双重注意力机制,以进一步优化权重分配。最后,我们将上述所有创新点结合起来,设计了一种新的IoU损失函数,称为Unified-IoU(UIoU),以实现高质量的目标检测。为了验证我们提出的方法,我们与所有已知的改进方法(如GIoU [Rezatofighi et al., 2019]、CIoU [Zheng et al., 2019]、 α I o U \alpha \mathrm{IoU} αIoU [He et al., 2021]、EIoU [Zhang et al., 2021]、SIoU [Gevorgyan, 2022]、WIoU [Tong et al., 2023])进行了对比实验。多个数据集上的一致且显著的改进证明了我们的新UIoU损失函数的潜力。

本文的主要贡献如下:

  • 我们设计了一种新方法,在模型训练过程中动态地为不同质量的锚框分配权重。
  • 考虑到模型收敛速度与高质量检测之间的矛盾,我们提出了一种利用超参数“ratio”动态转移模型注意力的策略,该策略比原始方法具有更好的收敛速度和回归结果。
  • 借鉴“Focal Loss”的思想,我们为框回归损失设计了一种双重注意力机制,以进一步优化不同质量锚框的权重分配。
  • 结合上述创新点,我们设计了UIoU作为一种新的边界框回归损失函数。通过广泛的实验验证了所提方法的优越性,并在消融实验中验证了各项改进的性能。

2 相关工作

2.1 几何度量中的IoU损失

IoU损失是当前目标检测器中最有效的损失函数范式[Bochkovskiy et al., 2020; Wang et al., 2023; Tian et al., 2019; Tian et al., 2022; Long et al., 2020]。在IoU研究过程中,大量工作都集中在锚框和真实框的几何度量上。GIoU[Rezatofighi et al., 2019]解决了原始IoU中由于不重叠框导致的梯度消失问题,并引入了可以包含预测框 P P P和真实框 P g t P^{gt} Pgt的最小闭合形状 C C C,当两个框不重叠时,也能驱动预测框向真实框移动。然而,GIoU并没有解决两个框包含情况下的问题,此时GIoU退化为IoU。在GIoU的基础上,CIoU[Zheng et al., 2019]增加了对中心距离和边界框尺度的考虑,使目标框回归更加稳定,但它采用长宽比来衡量两个框之间的差异。如果预测框和真实框的长宽比相同,那么这一项的惩罚始终为0,这是不合理的。基于CIoU的惩罚项,EIoU[Zhang et al., 2021]消除了预测框和真实框长宽比的影响因素,并分别计算预测框和真实框的宽度和高度,以解决CIoU中存在的问题。SIoU[Gevorgyan, 2022]考虑了预测框和真实框之间向量的角度,并重新定义了角度惩罚度量,使预测框能够快速漂移到最近的轴上,然后只需返回一个坐标( X X X Y Y Y),从而有效减少了总自由度的数量。然而,SIoU需要为计算设置多个IoU阈值,并且这些阈值需要随着数据集和任务的不同而不断调整,这使得评估变得困难,且结果缺乏可信度。
在这里插入图片描述

在以上对IoU损失的改进中,它们都是对预测框和真实框几何度量的持续挖掘。虽然它们解决了IoU带来的问题,但导致了各项指标之间的过度耦合。例如,在IoU本身和中心距离之间,当我们保持其他项不变,减小中心距离时,IoU的最大概率也会发生变化,这导致了各项指标作用的模糊性。目前,IoU几何度量的优化几乎已经达到了极限,我们应该关注那些对边界框回归更有用的例子。

2.2 有效样本挖掘

在边界框回归(BBR)中存在大量的样本不平衡问题,低质量预测框的数量往往远多于高质量预测框,这导致低质量预测框在梯度更新中的影响过大[Pang et al., 2019; Zhang et al., 2020]。这样,训练出的模型在目标检测中会产生较大的边界框回归误差,特别是在面对密集数据集时,容易产生大量的漏检和误检。

不同的研究对锚框质量的定义有所不同。通常使用中心距离或IoU值来定义锚框的质量和权重因子,但有时这是错误的,如图1所示。 α IoU \alpha \text{IoU} αIoU[He et al., 2021]将现有的基于IoU的损失推广到一个新的幂IoU损失族,并通过单个幂参数 α \alpha α调整IoU损失中每个指标的权重。WIoU[Tong et al., 2023]基于中心距离和最小闭合形状 C C C以及非单调聚焦系数 β \beta β构造了一个权重因子 R W IoU R_{W \text{IoU}} RWIoU,以获得具有动态非单调焦点机制(FM)的损失函数。然而,这些方法只能增加高质量预测框的梯度,但不能抑制低质量预测框的异常梯度[Pang et al., 2019; Zhang et al., 2020],还存在模型收敛速度慢的问题。

Focal Loss[Lin et al., 2020]从“置信度”的角度解释了“有效样本”。它不是从IoU出发,而是依赖于预测框的分类难度。它认为大量容易分类的样本产生了过多的梯度,导致模型对难以分类的目标样本关注不足。然而,它仅适用于二分类任务,且超参数 γ \gamma γ α \alpha α的选择困难且效果不稳定。SSD[Liu et al., 2015]通过筛选负样本来防止网络的预测值接近负样本,即用于训练网络的负样本是提取出的负样本的子集。OHEM[Shrivastava et al., 2016]将其注意力从仅关注困难和负样本转移到所有困难样本上,包括正样本和负样本。这些方法只是简单地分配权重或过滤掉一些不满意的预测框,并没有完全适应不同训练阶段对不同质量锚框的需求。

3 方法

3.1 动机

对于单阶段检测器YOLO,当前边界框回归损失函数(IoU Loss)的改进主要集中在预测框与真实框(GT框)之间的偏差上,试图通过量化两个框之间差异的所有方面(如中心点距离、长宽比、中心点连线与x-y轴之间的角度等)来获得更准确的IoU值。我们认为这是低效的,因为这些关系量是相互耦合的,并且很难证明影响是由单个指标或少数几个指标决定的。

在一些对回归精度要求高或场景密集的情况下,高质量的目标检测需要高质量的边界框回归损失。我们不应只关注那些低质量的预测框并盲目地给予它们更多的权重。与以往工作不同,我们更加关注那些高质量的预测框,并设计了一种新的动态权重分配方法,称为“焦点框”(Focal Box)。结合“焦点损失”(Focal Loss)的思想,我们提出了UnifiedIoU作为一种新的损失函数。
在这里插入图片描述

3.2 焦点框

我们没有根据两个边界框的偏差来给损失值分配不同的权重,而是设计了一种方法来放大或缩小预测框和GT框,这同样实现了为不同质量的预测框分配不同权重的目的。这种方法的好处是无需对边界框进行任何冗余计算。在获得边界框的高度、宽度和中心点坐标后,可以按照一定比例放大或缩小其高度和宽度,如图2所示。

为了更直观地感受缩放引起的IoU变化,我们假设每个单元格的长度为5,两个边界框的初始IoU值为:

I o U ori = inter union = 5 × 5 10 × 10 + 10 × 10 − 5 × 5 = 0.143 IoU_{\text{ori}} = \frac{\text{inter}}{\text{union}} = \frac{5 \times 5}{10 \times 10 + 10 \times 10 - 5 \times 5} = 0.143 IoUori=unioninter=10×10+10×105×55×5=0.143

边界框缩小一次后的IoU值为:

I o U shr = inter union = 0 × 0 5 × 5 + 5 × 5 − 0 × 0 = 0 IoU_{\text{shr}} = \frac{\text{inter}}{\text{union}} = \frac{0 \times 0}{5 \times 5 + 5 \times 5 - 0 \times 0} = 0 IoUshr=unioninter=5×5+5×50×00×0=0

边界框放大两倍后的IoU值为:

I o U enl = inter union = 15 × 15 20 × 20 + 20 × 20 − 15 × 15 = 0.391 IoU_{\text{enl}} = \frac{\text{inter}}{\text{union}} = \frac{15 \times 15}{20 \times 20 + 20 \times 20 - 15 \times 15} = 0.391 IoUenl=unioninter=20×20+20×2015×1515×15=0.391

可以看出,在一定范围内,当缩小边界框时,其IoU值会降低,计算出的框损失会增加。当放大边界框时,其IoU值会增加,计算出的框损失会降低。
这种IoU的变化也与IoU本身的值有关。如图3所示,我们绘制了在中心点距离从20变化到0的过程中, I o U o r i IoU_{ori} IoUori I o U s h r IoU_{shr} IoUshr I o U e n l IoU_{enl} IoUenl的变化曲线。
在这里插入图片描述

从图3中不难看出,对于那些具有高IoU值的高质量预测框,边界框的缩小可以降低IoU值并放大框回归损失。而对于那些IoU值接近0的低质量预测框,边界框的缩小对IoU值几乎没有影响。相反,放大边界框会产生相反的效果。重要的是要注意,这种方法的目的并不是为了更全面地衡量预测框和GT框之间的偏差,而是为了放大预测框的框回归损失,从而获得更多的权重。

3.3 基于边界框注意力的退火策略

类似于训练过程中用于学习率的余弦退火策略[Loshchilov and Hutter, 2016],我们也使用这一思想来对边界框进行缩放。这是因为在训练初期,高质量预测框的数量很少,仅增加这些少数预测框的权重效果不大,但会降低收敛速度。因此,我们应该更加关注那些低质量的预测框,这符合普遍观点。然而,这种方式只能实现更快的收敛效果,在需要更高框回归精度的情况下,仅关注低质量预测框是不明智的。特别是在密集场景下,待检测对象之间存在大量重叠或遮挡。如果此时仍通过许多低质量预测框来训练框回归损失,则实际检测中将存在较大偏差,容易导致漏检或误检。

在上一小节中,我们已经看到,通过缩小边界框,我们可以增加框的回归损失,这相当于在当前训练过程中增加了高质量预测框的权重;类似地,通过放大边界框,我们也可以增加低质量预测框的权重,以实现更快的收敛。因此,我们设计了一种基于边界框注意力的退火策略:将动态超参数“ratio”定义为边界框的缩放倍数。在训练初期,我们采用放大边界框的方法,使模型关注低质量预测框,以使其更快收敛(ratio > 1)。在训练过程中,“ratio”逐渐减小,模型的注意力逐渐转向高质量预测框(ratio < 1)。

3.4 焦点损失

与我们的关注点不同,焦点损失(Focal Loss)[Lin et al., 2020]也给损失函数分配了不同的权重。焦点损失更愿意关注难以检测的样本,即置信度低的样本,而不是IoU值。我们采用了这一思想并进行了进一步优化。由于焦点损失是针对二分类任务提出的,在面对多分类问题,尤其是在使用YOLO时,我们简化了这一思想,并直接使用1与预测框置信度之差作为权重因子来乘以计算出的IoU。置信度较低的预测框将获得更多权重,这样我们就可以使模型更加关注那些难以推理的示例。

3.5 统一IoU(Unified-IoU)

我们通过将上述方法与YOLO现有的框回归损失函数相结合,设计了一种新的损失函数——统一IoU(Unified-IoU,简称UIoU)。该损失函数不仅考虑了预测框与真实框(GT box)之间的几何关系,还兼顾了IoU权重和置信度信息,充分利用了已知信息,因此我们称之为统一IoU(UIoU)。特别地,我们保留了YOLO中原始框回归损失的代码,包括GIoU、DIoU、CIoU等,这样可以简单地切换损失函数的计算方法,方便后续研究人员进行比较实验或进一步改进实验。

4 实验

4.1 数据集

为了验证我们提出的新损失函数的有效性,我们在两个常用的数据集上进行了实验:VOC2007 [Everingham et al., 2010]和COCO2017 [Lin et al., 2014]。此外,为了验证预测框检测质量的显著提升,我们还在密集数据集CityPersons [Zhang et al., 2017]上进行了测试。我们不仅关注mAP50(IoU阈值为0.5时的平均精度均值),还考察了更高IoU阈值下的mAP值。

4.2 超参数“ratio”的设计

如果在训练初期模型就关注高质量预测框,由于它们数量较少,模型会收敛得很慢,这会在一定训练轮次下影响检测精度。如图4所示,我们在训练VOC2007数据集时发现了这个问题。“Scaling_4”表示在计算损失时,我们将边界框放大了四倍。“Original”则表示我们将边界框放大了一倍,即不进行任何操作。当我们放大边界框时,模型更加关注大量的低质量预测框,从而更快地收敛,并通过较少的轮次达到更好的mAP50。稳定后,模型应逐渐将注意力转向高质量预测框,以训练更准确的框回归矩阵,提高物体的检测质量。
在这里插入图片描述

如前所述,我们设计了超参数“ratio”来动态调整模型对不同质量预测框的关注度,而“ratio”的值与当前训练轮次有关。我们将超参数“ratio”的初始值设置为2,以便在训练初期尽快达到一定的精度,并将“ratio”的结束值设置为0.5,以便在训练后期更加关注高质量预测框,提高最终的物体检测质量。

至于超参数“ratio”的减小模式,我们参考了学习率的余弦退火策略,并制定了三种减小模式。假设训练轮次为300,它们与训练轮次的关系如下:

线性下降策略:

ratio = − 0.005 × epoch + 2 \text{ratio} = -0.005 \times \text{epoch} + 2 ratio=0.005×epoch+2

余弦下降策略:

ratio = 0.75 × cos ⁡ ( π × epoch 300 ) + 1.25 \text{ratio} = 0.75 \times \cos\left(\frac{\pi \times \text{epoch}}{300}\right) + 1.25 ratio=0.75×cos(300π×epoch)+1.25

分数下降策略:

ratio = 200 epoch + 100 \text{ratio} = \frac{200}{\text{epoch} + 100} ratio=epoch+100200

在后续实验中,我们对这三种策略进行了实验,每种策略都有其优缺点,并且为了方便后续研究,我们在代码中展示了这三种策略。

4.3 在VOC2007和COCO2017数据集上的实验

VOC2007实验结果

我们在VOC2007数据集上进行了验证实验和丰富的比较测试,并使用不同IoU阈值下的mAP作为评价指标,以表征更高质量的物体检测。如表1所示,对于不同的IoU损失函数,模型训练轮次均为300。我们以YOLO广泛使用的CIoU损失函数为基准,并计算我们提出的UIoU损失相对于CIoU(基准)的提升比例。mAP5075(不同IoU阈值下6个mAP的平均值)=(mAP50 + mAP55 + … + mAP75)/ 6。
在这里插入图片描述

实验结果表明,我们提出的方法具有优越性,能够在IoU阈值较高时显著提高检测精度,这表明我们算法预测的边界框更准确,检测质量更高。此外,在训练过程中,我们还保持了低IoU阈值时的准确性,甚至略有提高。我们发现,对于不同的超参数“ratio”的衰减策略也会影响检测精度,这可能与模型从低质量预测框到高质量预测框的注意力转移速度有关。
COCO2017结果
在这里插入图片描述

我们在COCO2017数据集上进行了类似的实验,实验结果如表2所示。我们的方法在mAP上也取得了很大的提升。与基线CIoU损失函数相比,mAP50、mAP75、mAP95和mAP50-95分别提高了0.2%、0.8%、0.44%和0.5%,相对增长率分别为0.353%、2.00%、18.88%和1.34%。

实验结果表明,我们提出的新损失函数能够训练出更精确的目标检测模型,并且预测框的位置回归更加准确,这有利于物体的检测,特别是物体的高质量检测。

4.4 在CityPersons数据集上的实验

为了进行高质量的目标检测,我们在CityPersons数据集上进行了额外的实验。CityPersons数据集是CityScape的一个子集[Cordts et al., 2016],包含2,975张训练图像,500张验证图像和1,575张测试图像。每张图像中行人的平均数量为7,且存在大量物体相互遮挡的情况。对于这类密集的数据集,如果预测框的偏移量较大,很容易影响模型对附近另一个目标的检测,从而导致漏检。因此,该数据集对预测框的质量有非常高的要求,同时也能验证我们提出的损失函数的有效性。
在这里插入图片描述

如表3所示,我们的UIoU损失函数在CityPersons数据集上表现不佳,我们认为这可能是Focal Loss影响了我们的模型。在训练过程中,模型的置信度水平与预测框的质量之间存在一定的关系。当我们关注低置信度的难例时,也会更多地关注低质量的预测框,这在CityPersons这样的密集行人数据集中不再适用。因此,针对该数据集的训练,我们改进了Focal Loss,并应用了Focal Loss的反向思想,称为“Focal-inv”,并对此想法进行了验证性实验。

在这里插入图片描述

表3说明密集数据集面临的问题与常规数据集不同。密集数据集更注重高质量预测框的训练,模型应关注具有较大IoU值的简单预测框。如表3所示,IoU阈值越大,相对于CIoU(基线)的改进效果越明显,模型能够检测到更高质量的目标。图5展示了在CityPersons数据集下,使用不同IoU损失函数训练模型的检测效果。如图5(b)所示,使用原始“Focal Loss”思想的模型受到低质量样本梯度的很大影响,在检测中产生了许多额外的错误预测框。这个问题在密集数据集中会尤为突出,导致检测精度急剧下降。在图5©中,我们纠正了“关注难以预测的框”的观点,并采用了“Focal-inv”,这大大提高了边界框回归和置信度的准确性。

4.5 消融实验

为了进一步验证上述在密集数据集中关于Focal Loss的观点,并明确其他改进在模型训练过程中的效果,我们还在CityPersons数据集上进行了消融实验。如表4所示,我们研究了四种不同的情况:仅添加Focal Box、带有超参数“ratio”衰减策略的Focal Box、仅添加Focal Loss和仅添加Focal-inv。“仅添加Focal Box”意味着在训练过程中,边界框的缩减比例始终保持在0.5,模型始终关注高质量的预测框。Focal-inv是Focal Loss的反向思想,它关注更容易检测的对象。
在这里插入图片描述

表4中的实验结果展示了我们的改进的优势,并验证了我们的观点:以不同比例进行缩放可以改变模型对不同质量预测框的关注程度,减少边界框有助于模型更多地关注高质量的预测框,提高模型的高质量检测性能;使用超参数“ratio”动态调整缩放比例可以使模型更快地收敛,但会略微影响高质量检测效果。Focal Loss的思想不再适用于密集数据集。相反,密集数据集应关注更容易检测的对象,因为置信度与IoU损失之间存在相关性。我们改进的Focal-inv展示了更优越的高质量检测结果。

5 结论

在本文中,我们提出了一种为不同质量预测框分配权重的新方法。与以往方法不同,我们所分配的权重与当前预测框和真实框(Ground Truth, GT)的位置、大小以及其他系数动态相关,而不仅仅是乘以某个系数。在训练过程中,我们使用超参数“比例”来调整模型对不同质量预测框的关注程度,从而在训练速度和高质量对象检测之间达到平衡。最后,我们结合了“Focal Loss”的思想,并通过在密集数据集上的实验验证了改进后的“Focal-inv”的优越性。综合以上考虑,我们创新性地提出了一种统一交并比(Unified-IoU, UIoU),并在两个常用数据集VOC2007和COCO2017上进行了对比实验,证明了所提UIoU的有效性。

未来,我们将探索更高效的框回归损失函数,因为它们在深度学习任务中得到了广泛应用且具有重要意义。此外,作为一种高质量对象检测方法,我们将在更多密集数据集中展示UIoU的效果。


http://www.kler.cn/news/289016.html

相关文章:

  • 教你手机投屏到电视方法,用电视屏幕让家庭蛋糕制作更有趣
  • 数据结构-了解树和二叉树
  • 科研绘图系列:python语言聚类图(hclust plot)
  • mysql高级知识之集群
  • Ascend C算子开发(入门)—— 算子开发初体验
  • C++笔记---模板初阶
  • 论文速览【LLM】 —— 【ORLM】Training Large Language Models for Optimization Modeling
  • 多线程——创建
  • UDP广播、 组播通信
  • macos 使用port查询并安装python2, python3多版本, 设置默认python版本方法
  • 算法训练营|图论第8天 拓扑排序 dijkstra
  • 【笔试练习】深信服校园招聘c/c 软件开发H卷
  • 使用python导出Excel表格中的lua配置
  • 初识Linux · 有关makefile
  • 【Rust光年纪】化学计算不完全指南:Rust语言库全面解析
  • jenv 一款macos下的开源JAVA多版本环境安装管理切换工具
  • Swift concurrency 5 — async let的理解与使用
  • 聊聊随机测试和猴子测试
  • Python参数传递的艺术:解锁编程灵活性的秘密武器
  • uniapp写的一个年月日时分秒时间选择功能
  • 【数据结构初阶】——栈和队列
  • 求三元组中可能出现的最小距离
  • RabbitMQ练习(Routing)
  • 使用COAP和MQTT协议的多协议方法开发的用于机器人手术的自动医疗物联网系统
  • vue3+ts 实现模板表格文件下载~
  • pikachu文件包含漏洞靶场攻略
  • 密钥分发与公钥认证:保障网络通信的安全
  • MySQL入门学习-MySQL的连接查询
  • MySQL——事务与存储过程(二)存储过程的创建(4)光标的使用
  • 【Linux学习笔记】protobuf相关操作