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

《DSL-FIQA》论文翻译

《DSL-FIQA: Assessing Facial Image Quality Via Dual-Set Degradation Learning and Landmark-Guided Transformer》

原文链接:DSL-FIQA: Assessing Facial Image Quality via Dual-Set Degradation Learning and Landmark-Guided Transformer | IEEE Conference Publication | IEEE Xplore

author={Wei-Ting Chen and Gurunandan Krishnan and Qiang Gao and Sy-Yen Kuo and Sizhuo Ma and Jian Wang}

一、摘要

        通用人脸图像质量评估(Generic Face Image Quality Assessment,GFIQA)对人脸图像的感知质量进行评估,这对于改进图像恢复算法和为后续任务选择高质量的人脸图像至关重要。我们提出了一种新的基于变换的方法GFIQA,这是由两个独特的机制。首先,“双集合退化表示学习”(DSL)机制使用具有合成和真实的退化的面部图像来将退化与内容解耦,从而确保对真实世界场景的可推广性。这种自监督方法在全局范围内学习退化特征,为在退化学习中使用局部补丁信息的传统方法提供了一种鲁棒的替代方案。其次,我们的Transformer利用面部标志来强调面部图像的视觉突出部分,以评估其感知质量。我们还介绍了一个平衡和多样化的综合通用人脸IQA(CGFIQA-40 k)数据集的40 K图像精心设计,以克服偏见,特别是肤色和性别代表的不平衡,在现有的数据集。广泛的分析和评估表明,我们的方法的鲁棒性,标志着一个显着的改进,比以前的方法。

二、介绍

        在数字时代,人脸图像在我们的视觉体验中扮演着核心角色,需要一个强大的度量来评估其感知质量。该指标不仅对于评估和提高人脸恢复算法的性能至关重要,而且对于确保生成模型的训练数据集的质量也至关重要[24,51]。设计一个有效的人脸图像质量评估指标提出了重大挑战。人脸的内在复杂性,以细微的视觉特征和表情为特征,极大地影响了感知质量[59]。此外,由于许可的面部图像的有限可用性和主观评估中固有的模糊性,获得诸如平均意见分数(MOS)的主观分数是困难的。除了这些挑战之外,口罩和配件造成的面部遮挡也给评估过程增加了另一层复杂性。面部以细微的视觉特征和表情为特征,极大地影响了感知质量[59]。此外,由于许可的面部图像的有限可用性和主观评估中固有的模糊性,获得诸如平均意见分数(MOS)的主观分数是困难的。除了这些挑战之外,口罩和配件造成的面部遮挡也给评估过程增加了另一层复杂性。

        几十年来,对一般图像的图像质量评估(IQA)[14,28,35,66,71]或一般IQA(GIQA)的研究已经证明了各种通用IQA数据集的可靠性能[15,19,33,47,57,67]。然而,当这些方法应用于人脸时,它们往往忽略了人脸固有的独特特征和微妙之处,使得它们对人脸图像的效果较差。

        另一个研究重点是生物特征人脸质量评估(BFIQA)[1,3,18,32,44,50,54,65],其目标是确保给定人脸图像的质量,以实现稳健的生物特征识别。虽然可识别性是通过包括面部特有的因素(如清晰度、姿势和照明)来实现的,但它并不能保证对感知退化的准确评估。

        [59]向前迈出了一大步,它清楚地定义了通用人脸IQA(GFIQA)的问题:GFIQA专门关注人脸图像的感知质量,而不是BFIQA。他们的方法利用预先训练的生成模型(StyleGAN2 [26])从输入图像中提取潜码,然后将其用作质量评估的参考。虽然他们的方法显示出有前途的预测性能,但当输入图像的拍摄角度[59]或质量[46]与StyleGAN2训练数据显著偏离时,其有效性就会降低,从而限制了其对现实世界场景的适用性和准确性。

        此外,受[64]的启发,我们利用面部图像质量与嘴和眼睛等突出面部成分之间的强相关性。我们结合地标检测来定位并将其作为模型的输入。这个额外的模块允许我们的模型自主学习关注这些关键的面部组件,并了解它们与面部感知质量的相关性,这有助于预测区域置信度图,该图聚合了整个面部的局部质量评估。

        GFIQA-20 k [59]和PIQ 23 [5]等现有数据集大小有限或分布不平衡。为了弥补这一差距,我们引入了综合通用人脸IQA数据集(CGFIQA-40 k),该数据集包含40 K图像,在性别和肤色方面具有更平衡的多样性。我们还包括面部遮挡的面部图像。我们相信这个数据集将是一个宝贵的资源,以燃料和激励未来的研究。

        总结一下,我们的贡献如下:

        我们设计了一个专门为GFIQA设计的基于transformer的方法,预测人脸图像的感知分数。

        我们提出了“双集合退化表示学习”(DSL),这是一种用于全局学习退化特征的自监督方法。该方法有效地从合成和自然退化图像中捕获全局退化表示,增强了退化特征的学习过程。

        我们通过集成面部标志检测来增强模型对突出面部组件的关注,从而实现整体质量评估,自适应地聚合整个面部的局部质量评估。

        我们构建了综合通用人脸IQA数据集(CGFIQA-40 k),这是一个40 K人脸图像的集合,旨在提供性别和肤色方面的全面和平衡的表示。

三、Related Work

3.1

        人脸图像质量评估(FIQA)的最新工作可以分为两个主要分支[64]:BFIQA和GFIQA。BFIQA起源于生物识别研究,专注于识别系统的人脸图像质量。另一方面,GFIQA涵盖了更广泛的范围,专注于图像质量的感知退化。

        生物识别人脸图像质量评估(BFIQA):BFIQA评估人脸图像的质量,用于生物识别应用,如人脸识别,通常基于既定标准评估图像[17,53,56]。该领域的最新进展是围绕基于学习的策略,通过识别系统的性能评估质量[2,3,6,37,62]。一些研究采用了手动标记,使用一组预定义的特征作为二进制约束[74],而其他研究则研究了图像质量的主观方面[1]。然而,当强调感知质量时,采用BFIQA方法并不能提供最佳性能,这将在结果部分中演示。

        通用人脸图像质量评估(GFIQA):GFIQA是最近定义的任务[59,64],它优先考虑人脸图像中的感知退化。像Chahine等人[5]这样的倡议强调了社会媒体驱动的肖像摄影的相关性,尽管他们的PIQ 23数据集仍然受到限制。Su et al. [59]用更大的GFIQA-20 k数据集弥补了这一差距,但它在多样性方面福尔斯不足,缺乏长尾样本和平衡的表示。他们的基于先验的生成方法虽然有效,但却难以处理非标准图像,显示出StyleGAN 2依赖模型的局限性[25]。这证明了更全面的数据集和强大的GFIQA解决方案的必要性。

3.2

        常规图像质量评估传统的常规图像质量评估(GIQA)[7,14]方法,如BRISQUE [39]、NIQE [40]和DIIVINE [41],是建立在传统统计模型的基础上的,这些方法在大小受限的数据集上工作良好,但在复杂的真实世界图像上却面临着局限性。深度学习的出现催生了突破性的GIQA方法。RAPIQUE [63]和DB-CNN [69]在适应性和准确性方面树立了新的标准。在基于变换器的模型中,包括MUSIQ [29]和MANIQA [66],还发现了进一步的创新,预测精度得到了显著提高。该领域通过CONTRIQUE [35]的自我监督范式和Zhang et al.'s [71]视觉语言多任务学习。Saha等人[52]以一种无监督的方式独特地整合了低级和高级特征,强调了感知相关的质量特征。

        然而,这些进步对人脸图像的适用性是有争议的,因为它们经常忽略对感知质量特别重要的面部特征,这表明以面部为中心的质量评估模型的探索已经成熟。

图2.概述了我们提出的模型。该模型包含核心GFIQA网络、退化提取网络和地标检测网络。在我们的方法中,人脸图像被裁剪成几个小块,以符合预先训练的ViT特征提取器的输入大小要求(参见第第3.1段)。然后,对每个补丁进行单独处理,并对它们的平均意见得分(MOS)进行平均,以确定最终的质量得分。为了在图中清楚起见,没有示出将图像分割成小块。

图3.双集退化表示学习(DSL)图解。在左边,利用两个唯一的图像集描述了对比优化的过程。提取退化表示,随后进行软邻近映射(SPM)计算和对比优化,迫使退化编码器集中学习特定的退化特征。右侧强调了我们方法的双向特征,突出了通过对比学习识别和理解图像退化的综合策略。

四、Proposed Method

4.1模型概述

特征提取与优化: 图像首先通过预训练的Vision Transformer (ViT) [11]进行特征提取 [66],随后通过通道注意力模块(Channel Attention Block)[20]强化相关通道之间的依赖关系。接着,利用Swin Transformer模块 [34]对这些特征进行优化,以捕捉图像中的细微细节。

退化特征提取: 同时,一个专门的模块用于识别并分离图像中的感知退化特征,为图像质量退化提供细致入微的表征。

特征整合与质量评估: 提取的退化特征与Swin Transformer的输出通过Transformer解码器进行整合。这种整合使用了一种基于Stable Diffusion [49]的跨注意力机制,增强了模型对退化特征的敏感性。整合后的特征被输入到两个MLP分支中:

  1. 第一个分支预测区域置信度。
  2. 第二个分支估计区域质量得分。

最终,这些输出通过加权求和得出图像的整体质量评分。

基于关键点的引导机制: 一个关键点检测网络用于识别面部的关键点,帮助评估区域置信度,并确保重要的面部特征能够提升最终的质量评分。

在核心GFIQA网络的训练过程中,关键点和退化模块保持固定状态,充分利用其预训练的知识。值得注意的是,我们避免对输入图像进行尺寸调整以适应预训练ViT的固定输入尺寸,因为这种调整可能会扭曲质量预测 [29]。相反,我们将图像裁剪为多个部分,分别对每个部分进行处理,并对结果的MOS(主观意见分数)预测值进行平均,以生成统一的图像质量评分。这种方法保持了图像的原始尺寸,从而确保了感知质量评估的准确性。

在以下小节中,我们重点介绍了模型设计中的主要技术贡献:退化特征提取模块和基于关键点的引导机制。

4.2.自监督双集退化表示学习

在介绍我们提出的方法之前,我们简要概述了现有的基于块的退化学习方法。

4.2.1基于补丁的退化学习

        现有的退化提取方法([21,52,73])假设来自相同图像的补丁共享相似的退化以进行对比学习。在该框架中,从同一图像中提取的块是正样本,而从不同图像中提取的块是负样本。补丁被编码为查询、正样本和负样本的退化表示(x、x+和x−)。对比损失函数被设计为增强x和x+之间的相似性以及x和x−之间的相异性,其由下式给出:

        其中N是负样本的数量,θ是温度超参数。

        然而,由于照明、局部运动、散焦和其他因素,图像上均匀退化的假设并不总是成立。例如,在图像中有可能具有具有静态背景的移动面部,这意味着只有一些补丁遭受运动模糊。这种过于简化的假设往往会导致退化学习的次优和不一致的结果。

4.2.2 Our Solution

        为了弥补这一差距,我们提出了双集退化表示学习(DSL),它考虑了整个人脸图像。为了使这种具有挑战性的设置与对比学习方法兼容,我们仔细构建了两组图像S和R,每组图像在退化学习过程中具有独特的目的,如图3所示。

        集合S由从单个高质量人脸图像导出的图像集合组成,每个图像经历不同类型的合成降级,包括但不限于模糊、噪声、抖动、JPEG压缩和极端光照条件。这个集合充当一个受控的环境,允许深入探索针对恒定内容的各种降级。

        相比之下,集合R包含来自GFIQA数据集的图像汇编,每个图像在真实世界退化时具有不同的内容。这个集合反映了现实退化的不可预测性和多样性,这是很难用合成数据建模的。

        形式上,设{S}={S1,...,Sm}和数学{R}={r1,...,rn},其中m和n分别表示保护数学{S}和保护数学{R}中的像数。来自两个集合的每个图像通过由具有权重z的退化提取模块定义的函数ψ映射到其退化表示:

        受[48,58]的启发,我们引入了一种称为软邻近映射的机制:对于来自S的给定图像si,我们将其表示映射到表示的线性组合,如下所示:

        其中,ψ(si)表示ψ(si)的软邻近映射。sim(.,.)表示两个表示之间的相似性。在我们的实现中,我们使用L2距离作为我们的相似性度量。为简洁起见省略了z。

        这种结构允许我们定义对比学习的积极和消极对。直观地,降级表示sj(si)应该被吸引到其自己的软邻近映射sj(si),而任何其他表示sj(sj)(其中j = i)应该从该软邻近映射中被排斥,因为si和sj通过集合S的专用构造而具有不同的降级。所以,我们要做的是:[43]

        该损失函数利用了在 {S}中图像共享相同内容但降级不同的性质,与 {R}形成对比,后者在两个方面都有所不同。通过将提取的退化表示绘制得更接近其对应的软邻近映射并使其与其他软邻近映射保持距离,退化提取模块被训练以学习独立于图像内容的全局退化表示。

        此外,自我监督的双集对比学习策略对于理解各种退化,特别是在现实世界的场景中是必不可少的。这种方法是至关重要的,因为它涉及到从真实世界的图像中准确提取退化表示,以近似合成集合{S}中的退化表示。仅在合成集合\mathcal {S}上采用对比学习来捕获退化模式是可行的:正对由具有相同退化的图像组成,负对由其他图像组成。然而,这种天真的方法并不能很好地推广到现实世界的图像。相比之下,我们的双集设计可以将具有可控退化的合成集和具有现实退化的现实世界集的优点结合在一起,从而实现更好的泛化。

        请注意,{S}和{R}的角色是对称的:正如我们利用\mathcal {S}的表示来寻找\mathcal {R}中的对应特征一样,根据经验,我们发现反过来也是可行的和有信息的。因此,我们将降解提取损失LDE定义为双向损失:

        这种双向损失加强了合成集和真实世界集之间的相互学习和对齐,确保了对现实退化的全面理解和表示。此外,值得一提的是,集合{S}中的高质量图像在每次迭代中都被重新采样,其中该图像经历不同强度的随机合成退化。同时,集合 {R}中的图像也在每次迭代中随机重新采样。

        总之,DSL摆脱了整个图像上的补丁退化的均匀性假设,以进行退化学习。相反,它依赖于两组构建的图像之间的软邻近映射来计算对比度损失,这允许更精确的退化表示(这种机制在精神上与[42]类似)。此外,由于考虑了整个图像,DSL可以捕获每个图像特有的退化的整体视图,进一步提高性能。

4.3. Landmark-guided GFIQA

        人脸图像在图像处理中具有独特的挑战性。这是因为人眼对面部伪影特别敏感,提高了细微质量评估的重要性[64]。因此,设计一种不平等对待每个像素的方法是很重要的;它应该承认显著面部特征的感知意义。此外,如SEC所述。3.1,考虑到我们的网络将人脸裁剪成各种补丁来计算平均MOS分数,至关重要的是提供地标信息,以给出每个补丁覆盖的人脸部分的空间背景,确保整体和感知一致的评估。

        如图2所示,我们的方法首先使用现有的关键点检测算法(例如,3DMM模型[12])来识别面部的关键点。受神经辐射场(NeRF)[38]的启发,我们对这些关键点标识符应用了位置编码。通过对原始标识符应用一系列正弦函数,位置编码增强了网络的表征能力,使其能够捕捉和学习与每个关键点标识符相关的更复杂的关系和模式。

        经过编码的信息随后与由Transformer解码器处理的特征连接起来,输入到区域置信度分支。人类视觉系统对高频细节(通常与面部关键点相关,例如眼睛、鼻子和嘴巴)特别敏感。将这些基于关键点的信息提供给置信度头,可以生成更精确的置信度图,突出人类在感知中自然优先关注的区域。

        在我们的方法中,我们有意避免将关键点的坐标(如图像中的(x, y))作为位置进行编码,因为这在学习过程中可能引入歧义,尤其是在面部未对齐或图像被裁剪为多个小块的情况下。在这些情况下,特定坐标可能在不同的训练样本中与不同的面部特征不一致,从而混淆学习过程。为避免这一问题,我们的网络对每个关键面部特征采用固定的编码方案,为每个关键特征分配一个唯一的标识符,而不考虑其在图像中的位置。这种方法特别适合于我们的ViT架构,因为ViT从输入图像中裁剪固定大小的部分,可能只捕获面部的一部分。

        鉴于GFIQA中遇到的退化种类繁多,现成的关键点检测器在退化严重的图像上通常表现较差。我们观察到,对现有的关键点检测器(如[9, 22, 27])在退化图像上进行微调,可以显著提高关键点检测的准确性。

        综上所述,通过采用基于关键点的引导线索,我们的方法在每个裁剪部分内都能保持对关键面部特征的持续关注,从而有效地鼓励模型在聚合区域质量评分时专注于显著的面部特征。

4.4. Loss Functions

降级编码器

        退化编码器是通过优化等式(1)和(2)分别训练的。(六)、训练完成后,在训练核心GFIQA网络时,它将保持固定。

GFIQA网络

        为了测量预测MOS与实际情况之间的差异,我们采用了Charbonnier损失[31](Lchar),定义为:

        其中,{p}是预测的MOS,p是地面真实MOS, 是一个小常数,以确保可微性。

        与现有的GIQA [29,52,66]或GFIQA [59]模型通常依赖于L2损失不同,我们选择Charbonnier损失,因为它对离群值不太敏感,在GFIQA的背景下,离群值可能来自罕见的面部质量下降,数据集注释差异或模型在训练期间预测的偶尔极端分数。通过提高对离群值的鲁棒性,我们的模型更符合人类的感知判断。

五. Comprehensive Generic Face IQA Dataset

        现有的GFIQA模型通常在PIQ23 [5]和GFIQA-20k [59]数据集上进行评估。尽管PIQ23包含了多种野外图像(in-the-wild images)且面部未经裁剪,但其数据集规模有限,难以有效训练稳健的模型。此外,这两个数据集在性别肤色分布上都存在偏差。这种不均衡可能在模型训练过程中引入偏差,从而降低模型在面部图像质量评估任务中的性能和可靠性。已有研究[4, 8, 30, 55]表明,这种数据分布的不平衡对各种与面部相关的应用的模型性能有显著的负面影响。

        为了解决这些问题,我们提出了一个名为**综合通用面部图像质量评估数据集(CGFIQA-40k)**的新数据集。该数据集包含约40K张图像,每张分辨率为512x512。每张图像由20位标注员进行标注,每位标注员平均花费约30秒进行评分。从最初的40,000张图像中,我们筛选出了一小部分内容不可用或标注不完整的图像,最终获得了39,312张有效图像。此数据集专为肤色、性别和面部遮挡(如口罩、配饰)分布多样性而设计,提供了丰富的面部图像集合。

        

表1.数据集的体型、肤色和性别分布比较。肤色分为浅色(菲茨帕特里克量表[13] I-II)、中度(菲茨帕特里克量表III-IV)和深色(菲茨帕特里克量表V-VI)。

        表1中展示了我们数据集与现有GFIQA数据集的对比概述。我们希望此数据集能为GFIQA提供更全面的基准,推动最新方法的泛化和稳健性发展。

相关文章:

《DSL-FIQA》论文翻译

《DSL-FIQA: Assessing Facial Image Quality Via Dual-Set Degradation Learning and Landmark-Guided Transformer》 原文链接:DSL-FIQA: Assessing Facial Image Quality via Dual-Set Degradation Learning and Landmark-Guided Transformer | IEEE Conference…...

【Linux网络编程】第四弹---构建UDP服务器与字典翻译系统:源码结构与关键组件解析

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、UdpServer.hpp 1.1、函数对象声明 1.2、Server类基本结构 1.3、构造函数 1.4、Start() 2、Dict.hpp…...

【人工智能】人工智能,深度学习与人工神经网络

人工智能 人工智能一、定义与核心要素二、主要方法与技术三、应用领域四、发展前景与挑战五、分类六、研究目标与价值 深度学习定义与核心思想网络结构工作原理关键技术与模型应用领域发展与挑战 人工神经网络一、定义与原理二、基本特性三、网络结构四、工作原理五、应用领域六…...

嵌入式系统应用-LVGL的应用-平衡球游戏 part2

平衡球游戏 part2 4 mpu60504.1 mpu6050 介绍4.2 电路图4.3 驱动代码编写 5 游戏界面移植5.1 移植源文件5.2 添加头文件 6 参数移植6.1 4 mpu6050 4.1 mpu6050 介绍 MPU6050是一款由InvenSense公司生产的加速度计和陀螺仪传感器,广泛应用于消费电子、机器人等领域…...

Linux网络编程之---多线程实现并发服务器

下面我们来使用tcp集合多线程实现并发服务器 一.服务端 #include <stdio.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <pthread.h>typedef struct sockinfo {char ip[16];unsigne…...

架构师的英文:Architect

中文版 软件架构师 的英文是 “Software Architect”。 Software: 软件Architect: 架构师&#xff0c;通常指的是设计和规划某种系统或结构的人。 Software Architect 通常负责软件系统的整体设计、技术选型、架构规划&#xff0c;确保系统的可扩展性、可维护性和高效性等。…...

量化交易系统开发-实时行情自动化交易-8.7.文华平台

19年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下来会对于文华平台介绍。 文华财经…...

【前端】JavaScript 中的创建对象模式要点

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;对象属性值中的引号规则&#x1f4af;对象属性换行与尾随逗号的使用&#x1f4af;工厂模式&#xff1a;灵活高效的对象创建&#x1f4af;自定义构造函数&#xff1a;通过…...

鸿蒙NEXT元服务:论如何免费快速上架作品

【引言】天下武功&#xff0c;唯快不破。 本文讨论如何免费且以最快速度上架自己的作品。 作者以自己从零开始到提交发布审核一共俩小时的操作流程分享给大家作参考。 【1】立项选择 结论&#xff1a;元服务&#xff0c;单机&#xff0c;工具类&#xff08;非游戏&#xff…...

hive3.1.3安装及基本例子

前提要安装好hadoop环境和mysql。 1、下载并解压 https://archive.apache.org/dist/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz 下载bin包到/app/src中。 cd /app/src/ tar zxvf apache-hive-3.1.3-bin.tar.gz mv apache-hive-3.1.3-bin /app/hive2、配置path nano /etc…...

【设计模式】工厂方法模式 在java中的应用

文章目录 1. 引言工厂方法模式的定义 2. 工厂方法模式的核心概念工厂方法模式的目的和原理与其他创建型模式的比较&#xff08;如简单工厂和抽象工厂&#xff09; 3. Java中工厂方法模式的实现基本的工厂方法模式结构示例代码&#xff1a;创建不同类型的日志记录器 4. 工厂方法…...

【热门主题】000079 服务器虚拟化:开启高效计算新时代

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【热…...

软考高项经验分享:我的备考之路与实战心得

软考&#xff0c;尤其是信息系统项目管理师&#xff08;高项&#xff09;考试&#xff0c;对于众多追求职业提升与专业认可的人士来说&#xff0c;是一场充满挑战与机遇的征程。我在当年参加软考高项的经历&#xff0c;可谓是一波三折&#xff0c;其中既有成功的喜悦&#xff0…...

【小白学机器学习38】用np.random 生成各种随机数,随机数数组/序列

目录 0 总结 np.random() 的一些点 1 用np.random.random() 生成[0,1) 区间内的随机数 2 生成指定范围内的随机整数/数组 np.random.randint() 3 用np.random.choice()生成指定数组范围内的随机数 3.1 np.random.choice(array6) 3.2 np.random.choice(array6) &#xff0…...

Scala的数组匹配模式

package Test32//匹配&#xff1a;数组&#xff1a;元素的个数 元素的特征 object Test4 {def main(args: Array[String]): Unit {val arr1 Array(1, 2, 3)val arr2 Array(0, 2, 3)val arr3 Array(1, 2, 3, 4)val arr4 Array(-1, 1, 2, 3, 4)val b: Any arr1b match {ca…...

力扣【算法学习day.50】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…...

C 语言学习的经典书籍有哪些?

学习C语言的理由 C语言是一种程席设计语言&#xff0c;它是由美国AT&T公司贝尔实验室的Dennis Ritchie于1972年发明的。C语言之所以流行&#xff0c;是因为它简单易用。学习C语言的几个理由如下&#xff1a; (1)C、C#和Java使用一种被称为面向对象程序设计(0bject-Orient…...

数据结构——栈

目录 栈的介绍 一、栈的基本概念 1.1 栈的定义 1.2 栈的常见基本操作 二、栈的顺序存储结构 2.1 栈的顺序储存 2.2 顺序栈 2.3 共享栈 三、栈的链式储存结构 3.1 链栈 3.2 链栈的进出栈操作 四、栈的应用 4.1实现斐波那契数列 一、栈的基本概念 1.1 栈的定义 栈…...

开发系统准备与开发环境配置总结

开发前系统配置及环境搭建 系统配置0 Github打不开、速度慢怎么办1 WSL、Linux、Ubuntu、Docker都是什么鬼2 在Windows下安装WSL和Ubuntu3 配置MySQL4 配置Redis并启动服务5 Docker&#xff08;Windows和Ubuntu下&#xff09;6 Nginx 系统配置 你好&#xff01; 这是你第一次使…...

bash: jstack: command not found【jps、jstack、jmap、jstats 命令不生效解决】

JVM 系列文章传送门 初识 JVM&#xff08;Java 虚拟机&#xff09; 深入理解 JVM&#xff08;Java 虚拟机&#xff09; 一文搞懂 JVM 垃圾回收&#xff08;JVM GC&#xff09; 深入理解 JVM 垃圾回收算法 一文搞懂 JVM 垃圾收集器 JVM 调优相关参数 JVM 场景面试题【强烈…...

两数之和问题——c语言

声明&#xff1a; 以下是我在leetcode上面刷题的两数之和问题&#xff0c;如涉及侵权马上删除文章 声明&#xff1a;本文主要用作技术分享&#xff0c;所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险&#xff0c;并遵循相关法律…...

《沉积与特提斯地质》

《沉积与特提斯地质》为中国地质调查局主管&#xff0c;中国地质调查局成都地质调查中心&#xff08;西南地质科技创新中心&#xff09;主办的地学类学术期刊。 《沉积与特提斯地质》创刊于1981年&#xff0c;创刊名为《岩相古地理研究与编图通讯》&#xff0c;后更名为《岩相…...

全面解析 C++ STL 中的 set 和 map

C 标准模板库&#xff08;STL&#xff09;中的关联式容器以其强大的功能和高效性成为开发者解决复杂数据组织问题的重要工具。其中&#xff0c;set 和 map 是最常用的两类关联容器。本篇博客将从基本特性、底层实现、用法详解、高级案例以及性能优化等多个角度&#xff0c;详细…...

【RL Application】语义分割中的强化学习方法

&#x1f4e2;本篇文章是博主强化学习&#xff08;RL&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…...

MySql:Centos7安装MySql

目录 安装之前&#xff0c;清除MySql残留文件 下载MySql的官方yum源 安装MySql 服务 MySql配置 常见问题 本次安装基于Centos7&#xff0c;平台为云服务器&#xff0c;由XShell软件演示。 注意&#xff0c;请将用户切换为Root用户。 安装之前&#xff0c;清除MySql残留文…...

数据结构-散列函数的构造方法

一.数字关键词 关键词存储应该尽可能的离散 直接定址法:利用线性函数,例如上面的例子,h(key)key-1990,key1990&#xff0c;这个就被存放在0的位置 数字分析法:关键字可能有很到位组成,每一位变化可能都不一样&#xff0c;有的位是不变的,就是说不同的对象这一位都是一样的,有的…...

MySQL:DDL数据定义语言

DDL(Data Definition Language)&#xff0c;数据定义语言 对数据库的常用操作 查看所有数据库 语法&#xff1a;show databases; 创建数据库 dbname&#xff1a;用户自己定义的数据库名称。 语法&#xff1a;create database [if not exists] dbname [charsetutf8]; 切换…...

【落羽的落羽 C语言篇】指针·之其五

文章目录 一、冒泡排序二、qsort排序1. qsort使用指南2.回调函数3. qsort函数的模拟实现 一、冒泡排序 冒泡排序的核心思想就是&#xff1a;两两相邻的元素进行比较和交换。 现在&#xff0c;我们想编写一个函数&#xff0c;使它能够运用冒泡排序的原理&#xff0c;由小到大排…...

Java程序员最新场景面试题总结

上周&#xff0c;在与部门业务伙伴&#xff08;BP&#xff09;的交谈中&#xff0c;我了解到当前求职市场的一个显著现象&#xff1a;她在招聘平台上发布的初级后端岗位每日吸引了超过500份简历的投递。这一现象凸显了Java后端岗位竞争的激烈程度&#xff0c;尤其是在这个技术日…...

平衡性能与隐私:解读Google的服务器端标记

在当前数字化时代&#xff0c;企业需要深入洞察用户行为&#xff0c;以提高网站转化率。然而&#xff0c;随着用户对隐私保护的期待日益提高以及相关法规的收紧&#xff0c;如何兼顾性能与隐私成为了一大挑战。为了解决这一问题&#xff0c;Google推出了服务器端标记&#xff0…...

在云上怎么样让环境更加安全?

随着云计算的普及&#xff0c;越来越多的企业和组织将其应用迁移到云端。在这个过程中&#xff0c;安全性成为了一个不可忽视的重要因素。华为云作为全球领先的云服务提供商&#xff0c;致力于为用户提供安全可靠的云环境。本文九河云将探讨在华为云上如何增强环境的安全性。 …...

分布式实验一

Socket编程作业&#xff1a; 在Linux系统上&#xff0c;用C编两个程序&#xff1a;Client和Server。两个进程间利用socket进行TCP通信。 要求&#xff1a; Server进程运行后&#xff0c;输出本进程所在主机IP地址以及正在监听的端口号&#xff1b; Client进程运行后&#xff0c…...

网络安全防护指南

网络安全防护指南 网络安全是指保护网络系统中的硬件、软件及数据不受偶然或恶意原因而遭到破坏、更改或泄露&#xff0c;确保网络系统连续可靠地正常运行。随着互联网的普及和技术的发展&#xff0c;网络安全问题日益严峻&#xff0c;对个人、企业和国家都构成了巨大威胁。因…...

DreamCamera2相机预览变形的处理

最近遇到一个问题&#xff0c;相机更换了摄像头后&#xff0c;发现人像角度顺时针旋转了90度&#xff0c;待人像角度正常后&#xff0c;发现 预览时图像有挤压变形&#xff0c;最终解决。在此记录 一人像角度的修改 先放示意图 设备预览人像角度如图1所示&#xff0c;顺时针旋…...

【Go 基础】channel

Go 基础 channel 什么是channel&#xff0c;为什么它可以做到线程安全 Go 的设计思想就是&#xff1a;不要通过共享内存来通信&#xff0c;而是通过通信来共享内存。 前者就是传统的加锁&#xff0c;后者就是 channel。也即&#xff0c;channel 的主要目的就是在多任务间传递…...

长安汽车嵌入式面试题及参考答案

数据结构中的堆栈和编程中的堆栈有什么区别&#xff1f; 在数据结构中&#xff0c;堆栈是一种抽象的数据类型。它遵循后进先出&#xff08;LIFO&#xff09;的原则。从操作角度来看&#xff0c;有入栈&#xff08;push&#xff09;和出栈&#xff08;pop&#xff09;操作。例如…...

理解Linux的select、poll 和 epoll:从原理到应用场景

I/O 多路复用并不是什么新东西&#xff0c;select 早在 1983 年就出现了&#xff0c;poll 在 1997 年&#xff0c;epoll 是 2002 年的产物。面试题总爱问“多路复用多厉害&#xff1f;”其实它就是把轮询的锅甩给了操作系统&#xff0c;而操作系统不过是用 CPU 指令帮你完成事件…...

(一)Linux下安装NVIDIA驱动(操作记录)

目录 一、查看CUDA版本 1.输入nvidia-smi&#xff0c;查看驱动支持的最大CUDA版本&#xff0c;这里是11.6 2.输入nvcc --version&#xff0c;查看当前安装的CUDA版本&#xff0c;这里是11.3 二、卸载旧的NVIDIA驱动 1.卸载原有驱动 2.禁用nouveau&#xff08;必须&#x…...

二分法篇——于上下边界的扭转压缩间,窥见正解辉映之光(2)

前言 上篇介绍了二分法的相关原理并结合具体题目进行讲解运用&#xff0c;本篇将加大难度&#xff0c;进一步强化对二分法的掌握。 一. 寻找峰值 1.1 题目链接&#xff1a;https://leetcode.cn/problems/find-peak-element/description/ 1.2 题目分析: 题目要求返回数组内…...

移动机器人课程建图实验-ROSbug汇总

问题1描述 $ rosrun robot_state_publisher robot_state_publisher [ERROR] [1733131886.474757207]: [registerPublisher] Failed to contact master at [localhost:11311]. Retrying...解决方案 这个错误信息表明 robot_state_publisher 节点无法联系到 ROS master。通常&…...

记录vite关于tailwindcss4.0-bate4出现margin[m-*]、padding[p-*]无法生效的问题。

环境如下&#xff1a; vite:5.4.10 tailwindcss: 4.0.0-beta.4 tailwindcss/vite: 4.0.0-beta.4 4.0默认的样式优先级比较低 如果使用了一些reset的css文件 那么很多样式会失效 例如&#xff1a;reset.css中 html, body, ul, li, h1, h2, h3, h4, h5, h6, dl, dt, dd, ol, i…...

WPF+MVVM案例实战与特效(三十)- 封装一个系统日志显示控件

文章目录 1、运行效果2、日志控件封装1、文件创建2、DisplayLogPanel.xaml 代码3、DisplayLogPanel.cs 代码4、数据模型5、枚举类型3、自定义控件使用1、LogPanelWindow.xaml2、LogPanelViewModel.cs4、总结1、运行效果 2、日志控件封装 1、文件创建 打开 Wpf_Examples ,在 …...

redis中jedis和lettuce pool的区别,那个更好,使用范围更广

在 Redis 的 Java 客户端中,Jedis 和 Lettuce 是两种最常用的客户端库,它们都支持连接池(JedisPool 和 Lettuce Connection Pool),但在设计和特性上有显著差异。下面我将详细对比它们的特点,帮助你更好地选择适合的库。 1. 同步 vs 异步 Jedis:是一个 同步 的 Redis 客…...

调试openai 星河大模型的记录:用tcpdump和ngrep抓包

在调试esp32开发板连星河大模型的时候&#xff0c;用requests连星河&#xff0c;怎么也调不通&#xff0c;想通过抓包&#xff0c;看看openai和自己写的到底有啥不一样。 结论&#xff1a;抓包抓到的太多&#xff0c;而且ssl 已经把一些信息都处理过了&#xff0c;看不到报文的…...

树莓派明明安装了opencv和numpy,却找不到

当然不止树莓派&#xff0c;配置python环境都可能存在这个问题 可能是因为安装的 numpy 或者 opencv 版本与 Python 的包路径不匹配。下面是问题的常见原因及解决方法&#xff1a;【方法一和二优先考虑】 原因分析 多版本 Python 环境冲突&#xff1a; 树莓派上可能有多个版本…...

【C++boost::asio网络编程】有关异步读写api的笔记

异步读写api 异步写操作async_write_someasync_send 异步读操作async_read_someasync_receive 定义一个Session类&#xff0c;主要是为了服务端专门为客户端服务创建的管理类 class Session { public:Session(std::shared_ptr<asio::ip::tcp::socket> socket);void Conn…...

github仓库自动同步到gitee

Github Actions是Github推出的自动化CI/CD的功能&#xff0c;我们将使用Github Actions让Github仓库同步到Gitee 同步的原理是利用 SSH 公私钥配对的方式拉取 Github 仓库的代码并推送到 Gitee 仓库中&#xff0c;所以我们需要以下几个步骤 生成 SSH 公私钥添加公钥添加私钥配…...

详解LinkedList中的底层实现

1.LinkedList的构造器 无参构造器 /*** Constructs an empty list.*/ public LinkedList() { } 构造Collection: 只要是 Collection 下的实现类都可以被 LinkedList 构造 // ? extends E: 只要是E的子类及E类型的类都可以使用 public LinkedList(Collection<? extends …...

HTML5动漫主题网站 天空之城 10页 html+css+设计报告成品项目模版

&#x1f4c2;文章目录 一、&#x1f4d4;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站演示 五、⚙️网站代码 &#x1f9f1;HTML结构代码 &#x1f492;CSS样式代码 六、&#x1f527;完整源码下载 七、&#x1f4e3;更多 一、&#…...

【VSCode】如何修改左侧资源管理器字体大小

方法一 左下角的“设置”—> 选择“窗口” —> 找到 Zoom Level,一般1、2效果就挺大的&#xff0c;可以设置小数0.5、负数-1等&#xff0c;具体设置说明见下图&#xff1a; 这个有一点不好的是&#xff0c;不仅仅资源管理器字体变化&#xff0c;整个VSCode界面会跟着变…...