《YOLO5Face: Why Reinventing a Face Detector》为什么要重塑人脸检测器论文阅读

正好周末的时间天气也不错出去走走精神不错,回来读一篇论文这个论文之前查资料的时候看到的但是没有完整看下,今天正好花点时间整体看一下,下面是我自己阅读过程中使用翻译软件结合自己理解的阅读记录,感兴趣的话可以看下,当然也可以自行阅读原论文即可。

原论文《YOLO5Face: Why Reinventing a Face Detector》在这里,如下所示:

另外今天突然发现百度翻译打开后升级了,如下所示:

居然现在可以直接输入axXiv论文地址链接进行翻译了,如下:

我果断试了一下:

可能任务比较多吧,感觉还是比较慢的,等待一会后就翻译出来了:

因为这是网址进行翻译的,所以不支持使用逐句对照功能,感觉翻译的结果差强人意吧,有很多部分都没有进行翻译,也有部分翻译明显出错了。

闲话就说到这里,接下来是正文。

                              《YOLO5Face:为什么要重新设计人脸检测器》

摘要——近年来,卷积神经网络在人脸检测方面取得了巨大进展。虽然许多人脸检测器使用指定用于人脸检测的设计,但我们将人脸检测视为一般的对象检测任务。我们实现了一个基于YOLOv5对象检测器的人脸检测器,并将其称为YOLO5Face。我们在其中添加了一个五点里程碑回归头,并使用Wing损失函数。我们设计了不同型号尺寸的探测器,从实现最佳性能的大型号到在嵌入式或移动设备上进行实时检测的超小型型号。在WiderFace数据集上的实验结果表明,我们的人脸检测器可以在几乎所有的Easy、Medium和Hard子集中实现最先进的性能,超过了更复杂的指定人脸检测器。

关键词——人脸检测、卷积神经网络、YOLO、实时、嵌入式设备、物体检测

I.简介

人脸检测是一项非常重要的计算机视觉任务。自从深度学习,特别是卷积神经网络(CNN)被用于这项任务以来,已经取得了巨大的进展。人脸检测作为人脸识别、验证、跟踪、比对、表情分析等众多任务的第一步,吸引了学术界和行业的大量研究和发展。多年来,人脸检测的性能显著提高。关于人脸检测的调查,请参考基准结果[1]、[2]。从不同的角度来看,这个领域有很多方法。研究方向包括CNN网络的设计、损失函数、数据增强和训练策略。例如,在YOLOv4论文中,作者探索了所有这些研究方向,并提出了基于网络架构优化、免费赠品袋选择和特价包选择的YOLOv4对象检测器[3]。

在我们的方法中,我们将人脸检测视为一个通用的对象检测任务。我们与TinaFace[4]有着相同的直觉。从直觉上看,脸是一个物体。正如TinaFace[4]中所讨论的,从数据的角度来看,人脸的特性,如姿势、比例、遮挡、照明、模糊等,也存在于其他对象中。面部的独特特性,如表情和化妆,也可以对应于对象的扭曲和颜色。地标看起来很特别,但也不是独一无二的。它们只是物体的关键点。例如,在车牌检测中,也使用地标。在对象预测头中添加里程碑式回归非常简单。然后从人脸检测所面临的多尺度、小人脸和密集场景等挑战来看,它们都存在于通用对象检测中。因此,人脸检测只是一般对象检测的一个子任务。

在本文中,我们遵循这种直觉,在YOLOv5对象检测器[5]的基础上设计了一种人脸检测器。针对不同的复杂性和应用,我们修改了人脸检测的设计,考虑了大人脸、小人脸和地标监督。我们的目标是为不同的应用程序提供一系列模型,从获得最佳性能的非常复杂的模型到在嵌入式或移动设备上获得性能和速度最佳折衷的非常简单的模型。

我们的主要贡献总结如下:

•我们将YOLOV5物体探测器[5]重新设计为人脸探测器,并将其称为YOLO5Face。我们对网络进行了关键修改,以提高平均精度(mAP)和速度方面的性能。这些修改的细节将在第三节中介绍。

•我们设计了一系列不同型号尺寸的型号,从大型型号到中型型号,再到超小型型号,以满足不同应用的需求。除了YOLOv5[5]中使用的主干之外,我们还实现了一个基于ShuffleNetV2[6]的主干,它为移动设备提供了最先进的(SOTA)性能和快速。

•我们在WiderFace[1]数据集上评估我们的模型。在VGA分辨率的图像上,我们几乎所有的型号都实现了SOTA的性能和快速。这证明了我们的目标,正如本文所声称的那样,我们不需要重新发明人脸检测器,因为YOLO5Face可以实现这一目标。

二、相关工作

A.目标检测

通用对象检测旨在定位和分类给定图像中的预定义对象。在使用深度CNN之前,传统的人脸检测使用手工制作的特征,如HAAR、HOG、LBP、SIFT、DPM、ACF等。Viola和Jones[7]的开创性工作引入了积分图像来计算类HAAR特征。有关使用手工制作功能进行人脸检测的调查,请参阅[8]、[9]。由于深度CNN在许多机器学习任务中显示出其强大的功能,因此人脸检测主要由深度CNN方法控制。有两级和一级物体探测器。典型的两阶段方法是RCNN家族,包括RCNN[10]、快速RCNN[11]、更快的RCNN[12]、掩码RCNN[13]、级联RCNN[14]。

两级目标检测器具有非常好的性能,但存在延迟长和速度慢的问题。为了克服这一问题,对单级目标探测器进行了研究。典型的一级网络包括SSD[15]、YOLO[3]、[5]、[16]-[18]。其他对象检测网络包括FPN[19]、MMDetection[20]、EfficientDet[21]、transformer(DETR)[22]、Centernet[23]、[24]等。

B.人脸检测

人脸检测的研究沿袭了一般的目标检测方法。在最受欢迎和最具挑战性的人脸检测基准WiderFace数据集[1]发布后,人脸检测迅速发展,主要关注尺度、姿态、遮挡、表情、化妆、照明、模糊等极端和真实的变化问题。为了检测小人脸,人们提出了许多方法来解决这些问题,特别是尺度、上下文、锚点等问题。这些方法包括MTCNN[25]、FaceBox[26]、S3FD[27]、DSFD[28]、RetinaFace[29]、RefineFace[30]以及最新的ASFD[31]、MaskFace[32]、TinaFace[4]、MogFace[33]和SCRFD[34]。有关流行的人脸检测器的列表,读者可以参考WiderFace网站

2.值得注意的是,这些人脸检测器中的一些探索了人脸的独特特征,另一些只是用于人脸检测的通用对象检测器。以RetinaFace[29]为例,它使用地标(2D和3D)回归来帮助监督人脸检测,而TinaFace[4]只是一个通用的对象检测器。

C.YOLO

YOLO于2015年首次出现[16],是一种与流行的两阶段方法不同的方法。它将目标检测视为回归问题,而不是分类问题。它使用单个神经网络来执行检测对象的所有关键阶段。因此,它不仅实现了非常好的检测性能,而且实现了实时速度。此外,它具有良好的泛化能力,可以很容易地训练来检测不同的对象。在接下来的五年里,YOLO算法已经升级到五个版本,其中包含了来自物体检测社区的许多创新想法。前三个版本——YOLOv1[16]、YOLOv2[17]、YOLOv3[18]是由原始YOLO算法的作者开发的。在这三个版本中,YOLOv3[18]是一个里程碑,通过引入多尺度特征(FPN)[19]、更好的骨干网络(Darknet53),并用二进制交叉熵损失取代Softmax分类损失,在性能和速度上都有了很大的改进。2020年初,在YOLO的原始作者退出研究领域后,YOLOv4[3]由另一个研究团队发布。该团队在YOLOv3[18]算法的几乎所有方面都探索了许多选项,包括主干,以及他们所说的bags of freebies和bags of specials。它在Tesla V100上以65 FPS的实时速度实现了MS COCO数据集43.5%的AP(65.7%的AP50)。一个月后,YOLOv5[5]由另一个不同的研究团队发布。在算法方面,YOLOv5[5]没有太多创新。该团队没有发表论文。这些带来了一些关于它是否应该被称为YOLOv5的争议。然而,由于其显著减小了模型大小、更快的速度和与YOLOv4[3]相似的性能,以及在Python(Pytorch)中的完整实现,它受到了对象检测社区的欢迎。

III、 yolo5人脸检测器

在本节中,我们介绍了我们在YOLOv5中进行的关键修改,并使其成为人脸检测器YOLO5Face。

A.网络架构

我们使用YOLOv5对象检测器[5]作为基线,并对其进行人脸检测优化。我们介绍了一些指定用于检测小人脸和大人脸的修改。我们的YOLO5人脸检测器的网络架构如图所示。1。它由骨干、颈部和头部组成。在YOLOv5中,使用了一种名为CSPNet[5]的新设计的主干网。在颈部,SPP[35]和PAN[36]用于聚合特征。在头部,回归和都使用了分类。

在图1(a)中,描述了整个网络架构。在图1(b)中,定义了一个称为CBS的关键块,它由Conv层、BN层和SILU[37]激活函数组成。此CBS块用于许多其他块中。在图1(c)中,显示了头部的输出标签,包括边界框(bbox)、置信度(conf)、分类(cls)和五点地标。地标是我们对YOLOv5的补充,使其成为具有地标输出的人脸检测器。如果没有地标,最后一个尺寸16应该是6。请注意,P3的输出尺寸80*80*16,P4的输出尺寸40*40*16,P5的输出尺寸20*20*16和可选P6的输出规格10*10*16适用于每个锚点。实际尺寸应乘以

通过锚的数量。在图1(d)中,显示了Stem结构[38],用于替换YOLOv5中的原始Focus层。将Stem块引入YOLOv5进行人脸检测是我们的创新之一。在图1(e)中,显示了CSP块(C3)。该区块的灵感来源于DenseNet[39]。然而,不是在一些CNN层之后添加完整的输入和输出,而是将输入分为两半。一半通过CBS块,即多个瓶颈块,如图所示。1(f),然后是另一个Conv层。另一半通过Conv层,然后将两者连接起来,然后是另一个CBS块。图1(g)显示了SPP块[35]。在这个块中,YOLOv5中的三个内核大小13x13、9x9、5x5在我们的人脸检测器中被修改为7x7、5x5、3x3。这已被证明是提高人脸检测性能的创新之一。请注意,我们只考虑VGA分辨率的输入图像。更准确地说,输入图像的较长边缘被缩放到640,并且较短边缘被相应地缩放。较短的边缘也被调整为SPP块的最大步幅的倍数。例如,当不使用P6时,较短的边需要是32的倍数;当使用P6时,较短的边缘需要64的倍数。

B.关键修改总结

主要修改总结如下。

•我们在YOLOv5网络中添加了一个landmark回归头。Wing loss[40]被用作其损失函数。这使得人脸检测器更加有用,因为landmark在许多应用中都有使用。landmark位置更准确。这种额外的监督有助于人脸检测器的准确性。

•我们将YOLOv5[5]的Focus层替换为Stem块结构[38]。它提高了网络的泛化能力,在不降低性能的同时降低了计算复杂度。

•我们更改SPP块[35],并使用较小的内核。它使YOLOv5更适合于人脸检测,并提高了检测精度。

•我们添加了一个步长为64的P6输出块。它提高了检测大人脸的能力。这是一个容易被许多研究人员忽视的项目,因为他们的重点更多地放在小脸的检测上。

•我们发现,一些通用对象检测的数据增强方法不适用于人脸检测,包括上下翻转和Mosaic。取消上下翻转可以提高性能。当使用小图像时,马赛克增强[3]会降低性能。但是,当忽略小面积脸部时,效果很好。随机裁剪有助于提高性能。

•我们基于ShuffleNetV2[6]设计了两款超轻量模型。这种主干网与CSP网络非常不同。这些型号都是超小型的,同时实现了嵌入式或移动设备的SOTA性能。

C.Landmark 回归

Landmark 是人脸的重要特征。它们可以用于人脸对齐、人脸识别、人脸表情分析、年龄分析等。传统的Landmark 由68个点组成。在MTCN[25]中,它们被简化为5点。从那时起,五点Landmark 在人脸识别中被广泛使用。Landmark 的质量影响人脸对齐和人脸识别的质量。一般的物体探测器不包括Landmark 。将其添加为回归头非常简单。因此,我们将其添加到YOLO5Face中。Landmark 输出将在将人脸图像发送到人脸识别网络之前用于对齐人脸图像。Landmark回归的一般损失函数是L2、L1或平滑L1。MTCNN[25]使用L2损失函数。然而,发现这些损失函数对小误差不敏感。为了克服这个问题,提出了Wing-loss40],

D.Stem 块结构

我们使用类似于[38]的Stem 块。Stem 块如图1(d)所示。有了这个干块,我们在输入图像的第一个空间下采样中实现了步幅=2,并增加了通道的数量。有了这个干块,计算复杂度只会略有增加,同时确保了强大的表示能力。

E.具有较小内核的SPP

在转发到颈部的特征聚合块之前,YOLO5主干的输出特征图被发送到额外的SPP块[35],以增加感受野并分离出最重要的特征。与许多包含仅接受特定维度的输入图像的完全连接层的CNN模型不同,SPP旨在生成固定大小的输出,而与输入大小无关。此外,SPP还通过汇集其自身的多尺度版本来帮助提取重要特征。

在YOLO5中,使用了三种内核大小13x13,9x9,5x5[5]。我们将它们修改为使用更小尺寸的7x7、5x5和3x3内核。这些较小的内核有助于更容易地检测小人脸,并提高整体人脸检测性能。

F.P6输出块

YOLO目标探测器的主干有很多层。随着层次的加深,特征变得越来越抽象,特征图的空间分辨率因下采样而降低,这导致空间信息和细粒度特征的损失。为了保留这些细粒度特征,在YOLOv3[18]中引入了FPN[19]。在FPN[19]中,细粒度特征从低层到高层需要很长的路径。为了克服这个问题,PAN被提出沿着FPN中使用的自上而下的路径添加自下而上的增强路径。此外,在特征图与横向架构的连接中,逐元素相加操作被级联取代。在FPN中,对象预测是在不同的尺度水平上独立完成的,这不利用来自其他特征图的信息,并且可能产生重复的预测。在PAN[36]中,通过使用(感兴趣区域)ROI对齐和全连接层与元素最大运算来融合自下而上扩充金字塔的输出特征图。在YOLOv5中,PAN输出特征图中有三个输出块,称为P3、P4、P5,分别对应于80x80x16、40x40x16、20x20x16,步长分别为8、16、32。在YOLO5Face中,我们添加了一个额外的P6输出块,其特征图为10x10x16,步长为64。这种修改特别有助于检测大人脸。虽然几乎所有的人脸检测器都专注于改进小人脸的检测,但大人脸的检测很容易被忽视。我们通过添加P6输出块来填补这个空缺。

G.ShuffleNetV2作为骨干

ShuffleNet[44]是一种用于移动设备的高效CNN。关键块称为ShuffleNet块。它利用了两种新的运算,逐点群卷积和信道混洗,在保持精度的同时大大降低了计算成本。ShuffleNetv2[44]是ShuffleNet的改进版本。它借用了类似于DenseNet[39]的快捷方式网络架构,并且将按元素添加改为级联,类似于YOLOv5[5]中PAN[36]的更改。但与DenseNet不同的是,ShuffleNetV2不进行密集的级联,并且在级联之后,使用信道混洗来混合特征。这使得ShuffleNetV2成为一个超级快速的网络。我们在YOLOv5中使用ShuffleNetV2作为骨干,并实现了超小型人脸检测器YOLOv5n-face和YOLOv0.5n-face。

IV、 实验

A.数据集

WiderFace数据集[1]是最大的人脸检测数据集,包含32203张图像和393703张人脸。由于其尺度、姿势、遮挡、表情、照明和事件的多样性,它接近现实,非常具有挑战性的在每个事件类别中,整个数据集按50%/10%/40%的比例划分为训练/验证/测试集。此外,每个子集被定义为三个难度级别:简单、中等和难。正如它的名字所表明的,hard子集是最具挑战性的。因此,hard子集的性能最好地反映了人脸检测器的有效性。除非另有说明,本工作使用WiderFace数据集[1]。在YOLO5Face landmark和对齐的人脸识别中,使用Webface数据集[45]。FDDB数据集[46]用于测试,以证明我们的模型在跨域数据集上的性能。

B.实施细节

我们使用YOLOv5-4.0代码库[5]作为起点,并实现我们在PyTorch中前面描述的所有修改。使用SGD优化器。初始学习率为1E-2,最终学习率为2E-5,权重衰减为5E-3。在前三个升温时期使用了0.8的动量。之后,动量变为0.937。该训练运行了250个时期,批量大小为64。λL=0.5通过排气搜索进行优化。已实现的模型。我们实现了一系列人脸检测器模型,如表I所示。在模型的名称中,最后一个后缀6意味着它在SPP中有P6输出块。这些模型都使用YOLOv4 CSPNet作为骨干,具有不同的深度和宽度倍数,在表I中表示为D和W。此外,我们实现了两个超小型模型,YOLOv5n和YOLOvn0.5,它们使用ShuffleNetv2和ShuffleNetv2-0.5[6]作为骨干。除主干外,所有其他主要区块,包括主干区块、SPP、PAN,均与较大型号相同。表III列出了所有这些模型的参数数量和失败次数,以与现有方法进行比较。

C.消融研究

在本小节中,我们介绍了YOLO5Face中修改的效果。在本研究中,我们使用YOLO5s模型。我们使用WiderFace[1]验证数据集,并使用mAP作为性能指标。stem块与Focus层。stem块[38]和Focus层的mAP性能列于表II的第一个面板中。还列出了参数的数量和触发器的数量。从结果中我们可以看出,stem块在易亚组、中亚组和硬亚组上分别将mAP提高了0.57%、0.33%和0.23%。具有较小尺寸内核的SPP。SPP[35]内核大小(7x7,5x5,3x3)和原始内核大小(13x13,9x9,5x5)的mAP性能列于表II的第二个面板中。从结果中我们可以看出,较小的内核大小在易子集、中等子集和硬子集上分别将mAP提高了0.9%、1.49%和1.41%。改进比stem块的改进更大[38]。P6输出块。表II的第三个面板中列出了添加P6输出块的mAP性能。从结果中我们可以看出,P6嵌段在易子集、中子集和硬子集上分别将mAP提高了0.98%、1.09%和-0.02%。表II的第四个面板列出了几种数据增强方法的数据增强性能结果。从结果中我们可以看出,忽略小脸,随机裁剪有助于Easy和Medium数据集中的mAP,而Mosaic[3]有助于Hard数据集中的mAP。正如我们之前所解释的,Mosaic必须忽略小面,否则性能会急剧下降。请注意,在这些实验中,网络配置不是增量的。然而,在每组实验中,两个网络的基线是相同的,以使比较公平。例如,在SPP实验中,除了内核大小不同之外,所有其他设置都是相同的。

D.YOLO5人脸识别

landmark对于人脸识别的准确性至关重要。在RetinaFace[29]中,使用估计的landmark坐标与其地面实况之间的MSE以及人脸识别精度来评估地标的准确性。结果表明,RetinaFace比旧的MTCN[25]具有更好的标志。在这项工作中,我们还使用人脸识别来评估YOLO5面的地标的准确性。我们使用Webface测试数据集,这是最大的人脸数据集,具有4M个身份/260M个人脸,并清理了2M个身份/42M个人脸[45]。该数据集用于ICCV2021蒙面人脸识别(MFR)挑战[48]。在该挑战中,包括掩蔽面部图像和标准面部图像,并且使用假匹配率(FMR)=1E-5的度量假不匹配率(FNMR)。MFR的FNMR*0.25加上标准人脸识别的FNMR*0.75组合作为最终度量。默认情况下,RetinaFace[49]用作数据集上的人脸检测器。我们在这个数据集上将YOLO5Face与RetinaFace进行了比较。我们使用以Resnet124[41]为骨干的ArcFace[50]框架。在Glint360k数据集[51]上训练的两个模型的提取特征被连接为基线模型。我们用YOLO5Face替换RetinaFace。我们测试了两个模型,一个小型模型YOLOv5s和一个中型模型YOLOv5m。更多详细信息请参见[52]。结果列于表IV中。

从结果中,我们看到我们的小型和中型模型都优于RetinaFace[29]。此外,我们注意到WiderFace数据集中的大人脸图像非常少,因此我们将多任务人脸数据集[47]中的一些大人脸图像添加到YOLO5Face训练数据集中。我们发现这种技术提高了人脸识别的性能。如图3所示,是使用RetinaFace[29]和我们的YOLOv5m检测到的一些Webface[45]人脸和地标。在大姿势的人脸上,我们可以从视觉上观察到我们的地标更准确,这在我们的人脸识别结果中得到了证明,如表IV所示。

E.YOLO5Face on WiderFace数据集

我们将YOLO5Face与WiderFace数据集上的许多现有人脸检测器进行了比较。结果列于表III中,其中突出显示了之前的SOTA结果和我们的最佳结果。我们首先观察参数数量大于3M且触发器数量大于5G的相对较大模型的性能。所有现有方法在Easy子集上实现了94.27-96.06%的mAP,在Medium子集上实现91.9-94.92%,在Hard子集上实现71.39-85.29%的mAP。最近发布的SCRFD[34]在所有子集中都实现了最佳性能。我们的YOLO5Face(YOLOv5x6)在三个子集上分别实现了96.67%、95.08%和86.55%。我们在所有Easy、Medium和Hard子集上都实现了SOTA性能。

接下来,我们来看看参数数量小于2M、触发器数量小于3G的超小型模型的性能。所有现有方法在Easy子集上实现了76.17-93.78%的mAP,在Medium子集上实现57.17-92.16%,在Hard子集上实现24.18-77.87%。同样,SCRFD[34]在所有子集中实现了最佳性能。我们的YOLO5Face(YOLOv5n)在三个子集上分别达到93.61%、91.54%和80.53%。我们的人脸检测器在Easy和Medium子集上的性能比SCRFD[34]稍差。然而,在Hard子集上,我们的人脸检测器领先2.66%。此外,我们最小的型号YOLOv5n0.5具有良好的性能,甚至其型号尺寸要小得多。我们的YOLO5人脸检测器和竞争对手的精确召回(PR)曲线如图所示

2.领先的竞争对手包括DFS[53]、ISRN[54]、VIM-FD[55]、DSFD[28]、PyramidBox++[56]、SRN[57]、PyramideBox[58]等。有关WiderFace[1]验证和测试数据集上的竞争对手及其结果的完整列表,请参阅[2]。在验证数据集的结果中,我们的YOLOv5x6人脸检测器在Easy、Medium和Hard子集上分别实现了96.9%、96.0%和91.6%的mAP,超过了之前的SOTA 0.0%、0.1%和0.4%。在测试数据集的结果中,我们的YOLOv5x6人脸检测器在Easy、Medium和Hard子集上分别实现了95.8%、94.9%和90.5%的mAP,与之前的SOTA相比分别有1.1%、1.0%和0.7%的差距。请注意,在这些评估中,我们只使用多个量表和左右翻转,而没有使用其他测试时间增加(TTA)方法。我们的重点更多地放在VGA输入图像上,在那里我们实现了SOTA在几乎所有条件下。

F.YOLO5 FDDB数据集上的面

FDDB数据集[46]是一个小型数据集,在2845张图像中注释了5171张人脸。为了证明我们的YOLO5Face在跨域数据集上的性能,我们在FDDB数据集上对其进行了测试,而无需对其进行再训练。表4列出了当假阳性数量为1000时,真阳性率(TPR)的性能。请注意,RefineFace[30]中指出,FDDB的注释遗漏了许多面。为了达到0.9911的性能,RefineFace修改了FDDB注释。在我们的评估中,我们使用了原始的FDDB注释,没有进行任何修改。RetinaFace[29]未在FDDB数据集上进行评估。

V.结论

在本文中,我们提出了基于YOLOv5对象检测器[5]的YOLO5Face。我们实施了八个模型。最大型号YOLOv5l6和超小型型号YOLOv5n在WiderFace[1]验证的Easy、Medium和Hard子集上都实现了接近或超过SOTA的性能。这证明了我们YOLO5Face在实现最佳性能和快速运行方面的有效性。自从我们开源代码以来,许多应用程序和移动应用程序都是基于我们的设计开发的,并取得了令人印象深刻的性能。

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

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

相关文章

知识图谱 | 2023年图书馆学、情报学CSSCI期刊论文主题透视

数据来源 检索平台来源期刊年份有效数据中国知网大学图书馆学报国家图书馆学刊情报科学情报理论与实践情报学报情报杂志情报资料工作数据分析与知识发现图书馆建设图书馆论坛图书馆学研究图书馆杂志图书情报工作图书情报知识图书与情报现代情报信息资源管理学报中国图书馆学报2…

性能测试高阶内容:了解TPS和RT之间关系

引言 在开始今天的内容讲解之前,我们应该回顾一下,在我的全链路压测专栏中的第一篇,我就已经介绍了当前的性能测试在互联网企业中的重要性,已经性能在互联网行业中的占比是多少。 这个时候是不是会有同学问我, 你已经…

JVM-1

目录 1.基础知识 1.栈 2.本地方法栈 3.程序计数器 4.堆 5.方法区 6.JVM内存可见性 2.虚拟机类加载机制 1.加载 2.验证 3.准备 4.解析 5.初始化 6.使用 7.卸载 1.基础知识 JVM内存模型(5种):栈,本地方法栈&#xff…

Java项目:44 ssm003在线医疗服务系统+jsp(含文档)

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 主要功能 前台登录: 注册用户:用户名、密码、姓名、联系电话 注册医生:医生工号、密码、医生姓名、职称、联系电话…

【Python】专栏文章索引

为了方便 快速定位 和 便于文章间的相互引用等 作为一个快速准确的导航工具 Python 目录: (一)装饰器函数 (二)牛客网—软件开发-Python专项练习 (三)time模块

数据结构与算法第三套试卷

1.删除链表节点 **分析:**首先用指针变量q指向结点A的后继结点B,然后将结点B的值复制到结点A中,最后删除结点B。 2.时间复杂度的计算 **分析:**当涉及嵌套循环的时候,我们可以直接分析内层循环即可,看内…

猫头虎分享已解决Bug || 批处理错误:BatchJobFailure, ProcessingDelay

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

太阳辐射环境模拟系统系统

太阳辐射环境模拟系统是一种高度专业化的设备,用于模拟太阳光的全谱段辐射,包括紫外线、可见光和红外线。这种系统的核心功能是在实验室条件下复制太阳的辐射条件,以评估材料、产品或设备在实际太阳辐射影响下的性能和耐久性。 应用领域&…

“比特币深夜冲破7万美元”!华尔街押注比特币:究竟是牛市墙头草,还是加密真信徒?

比特币ETF,使此次加密牛市与以往的繁荣、萧条周期截然不同。以往的周期往往由热衷风险的投机者以及最终崩盘的加密项目所驱动,例如无实物资产支持的加密货币借贷,以及一地鸡毛的ICO热潮。而现在,传统金融已经与加密世界联姻&#…

前端手册-实现挂坠灯笼效果

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…

专题一 - 双指针 - leetcode 202. 快乐数 | 简单难度

leetcode 202. 快乐数 leetcode 202. 快乐数 | 简单难度1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现4. 知识与收获 leetcode 202. 快乐数 | 简单难度 1. 题目详情 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」…

linux守护程序

概述 周末还要加班写代码&#xff0c;偷个懒发个刚刚写的守护进程&#xff0c;有一个小bug懒得处理&#xff0c;急着要用&#xff0c;发出来记录一下成果。 守护程序 网上很多介绍的&#xff0c;大家有兴趣自己去查查 上酸菜 #include <stdio.h> #include <stdli…

代码随想录刷题笔记-Day32

1. 最大子序和 53. 最大子数组和https://leetcode.cn/problems/maximum-subarray/ 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组&#xff1a;是数组中的一个连续…

Java学习笔记NO.18

T1.理工超市 &#xff08;1&#xff09;题目描述 编写一个程序&#xff0c;设计理工超市功能菜单并完成注册和登录功能的实现。显示完菜单后&#xff0c;提示用户输入菜单项序号。当用户输入<注册>和<登录>菜单序号时模拟完成注册和登录功能&#xff0c;最后提示…

多态的原理

通过监视可以发现&#xff0c;基类和子类的虚表指针指向的是不同的虚表&#xff08;监视窗口可以证实&#xff09;&#xff0c;而且虚表里面的函数地址也是不一样的。这就符合我们的预期了&#xff0c;因为多态的调用的时候&#xff0c;就是通过虚表指针去找到对应虚表里面的虚…

蓝桥杯练习系统(算法训练)ALGO-981 过河马

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 在那个过河卒逃过了马的控制以超级超级多的走法走到了终点之后&#xff0c;这匹马表示它不开心了……   于是&#xff0c…

[2024-03-09 19:55:01] [42000][1067] Invalid default value for ‘create_time‘【报错】

这个错误可能是因为你的 MySQL 数据库版本不支持 CURRENT_TIMESTAMP 作为默认值。在一些早期版本中&#xff0c;MySQL 对 TIMESTAMP 类型字段的默认值设置有限制&#xff0c;只允许使用特定的常量值&#xff08;如 0000-00-00 00:00:00 或 CURRENT_TIMESTAMP()&#xff09;。如…

王道机试C++第 4 章 字符串:字符串内容续写几个小程序 Day30

统计字符 习题描述 统计一个给定字符串中指定的字符出现的次数。 输入描述&#xff1a; 测试输入包含若干测试用例&#xff0c;每个测试用例包含2行&#xff0c;第1行为一个长度不超过5的字符串&#xff0c;第2行为一个长度不超过80的字符串。注意这里的字符串包含空格&…

浅述字典攻击

一、前言 字典攻击是一种常见的密码破解方法&#xff0c;它使用预先编制的字典文件作为攻击字典&#xff0c;通过尝试猜测密码的方式来破解密码。下面是一个关于字典攻击的博客&#xff0c;希望能够为您了解字典攻击提供帮助。 二、字典攻击概述 字典攻击是一种密码破解方法&…

poetry库:依赖管理和打包工具

这个工具是在群里看见别人说好用的&#xff0c;所以了解一下。 1.poetry初始 官网&#xff1a;https://python-poetry.org/ 项目仓库&#xff1a;https://github.com/python-poetry 或 https://github.com/python-poetry/poetry 教程&#xff1a;https://python-poetry.org/…