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

《SegFace: Face Segmentation of Long-Tail Classes》论文分享(侵删)

author={Kartik Narayan and Vibashan VS and Vishal M. Patel}

原文链接:[2412.08647] SegFace: Face Segmentation of Long-Tail Classes

摘要

        人脸解析是指将人脸语义分割为眼睛、鼻子、头发等关键面部区域。它是各种高级应用程序的先决条件,包括人脸编辑、人脸交换和面部化妆,这些应用程序通常需要对眼镜、帽子、耳环和项链等类别进行分割遮罩。这些不常出现的类称为长尾类,而长尾类被称为头类的频繁出现的类所掩盖。现有的方法,主要是基于CNN的,在训练过程中倾向于由头部类支配,导致长尾类的次优表示。以往的研究大多忽略了长尾类分割性能差的问题。为了解决这个问题,我们提出了一种简单有效的SegFace方法,它使用了一个轻量级的基于转换器的模型,该模型利用了可学习的类特定令牌。Transformer解码器利用类特定的令牌,允许每个令牌集中于其对应的类,从而实现每个类的独立建模。所提出的方法改善了长尾类的性能,从而提高了整体性能。据我们所知,SegFace是第一个使用Transformer模型进行人脸解析的工作。此外,我们的方法可适用于低计算边缘设备,达到95.96 FPS。我们进行了大量的实验,证明SegFace的性能显著优于之前的最先进模型,在CelebAMask-HQ数据集和LaPa数据集上分别获得了88.96(+2.82)和93.03(+0.65)的平均F1分数。

一、介绍

        人脸解析是一项语义分割任务,涉及为人脸图像分配像素级标签以区分关键的面部区域,例如眼睛,鼻子,头发和耳朵。不同面部区域的识别对于各种应用至关重要,包括面部交换(Xu等人,2022),面部编辑(Lee等人,2020 a),面部生成(Zhang,Rao和Agrawala 2023),面部完成(Li等人,2017)和面部化妆(Wan等人,2022)。长尾类是那些在数据集中不经常出现的类。现有的人脸解析数据集(Lee et al. 2020 a)由这些长尾类组成,这些长尾类大多是眼镜、项链、帽子和耳环等配饰,因为并非所有的人脸都具有这些物品。我们不能期望在当前甚至未来的面部解析数据集中,所有类别都有相同的表示,因为某些面部属性,如头发,鼻子和眼睛,自然比耳环和项链等配饰更常见。此外,很难收集不太频繁出现的类的样本。此外,用于人脸分割的详细注释,特别是对于不太常见或较小的人脸特征,是劳动密集型和昂贵的。

        自从语义分割中的深度学习出现以来(Long、Shelhamer和Darrell 2015),许多研究都集中在解决人脸分割问题上。几项工作(Guo et al. 2018; Zhou,Hu,and Zhang 2015; Lin et al. 2021)利用深度卷积神经网络的学习潜力来实现有前途的人脸分割性能。AGRNet(Te et al. 2021)介绍了一种自适应图表示方法,该方法通过将每个组件表示为顶点并将每个顶点关联起来,同时还将图像边缘作为优化解析结果的前提,来学习和推理面部组件。类似地,EAGRNet(Te et al. 2020)通过对非局部区域进行推理来扩展这种方法,以捕获不同面部组件之间的全局依赖性。最近,FaRL(Zheng et al. 2022 b)探索了在大型图像-文本人脸数据集上进行预训练,以提高下游任务的性能,证明其预训练的权重优于基于ImageNet的权重(Deng et al. 2009)。DML-CSR(Zheng et al. 2022 a)利用多任务模型进行人脸解析、边缘检测和类别边缘检测,并结合动态双图卷积网络来解决空间不一致性和噪声标签的循环自我调节。最近的FP-LIIF(Sarkar et al. 2023)利用了人脸的结构一致性,使用了一个轻量级的局部隐式函数网络,具有简单的卷积编码器-像素解码器架构,以其小参数大小和高FPS而闻名,使其成为低计算设备的理想选择。尽管取得了这些进步,但大多数先前的工作都集中在特定的挑战上,例如改善面部组件之间的相关性,增强头发分割,处理噪声标签以及优化推理速度。然而,他们经常忽略长尾类性能的关键问题,导致长尾类的结果不理想(参见图1)。

图1:建议的SegFace利用了一个轻量级的Transformer解码器,具有可学习的类特定令牌。每个类与令牌的关联使得每个类能够独立建模,这提高了长尾类的分割性能,而长尾类在现有方法中通常表现不佳。蓝线表示从CelebAMask-HQ训练集中随机选择的图像中存在类的概率。SegFace显著提升了长尾类的分割性能(+7.9,+21.2),从而在人脸解析性能方面建立了新的最先进水平。

        为了克服这个问题,我们提出了SegFace,这是一种系统的方法,可以提高长尾类的分割性能。这些类别在数据集中通常代表性不足,通常包括耳环和项链等配饰,而头部类别更常见,包括面部和头发等区域。在面部图像中,像眼睛、嘴巴和配饰(长尾类)这样的区域自然小于整体面部和头发区域(头部类)。仅使用模型的最终单尺度特征进行面部分割可能会导致细节丢失,因为面部特征出现在不同的尺度上。我们的方法利用Swin Transformer主干来提取多个尺度的特征,有助于减轻不同人脸区域之间的尺度差异。多尺度特征提取可以有效地捕捉细节和更大的结构,帮助模型捕捉面部的全局背景。我们使用MLP融合多尺度特征以获得融合特征,然后将其输入到SegFace解码器。轻量级的Transformer解码器利用可学习的类特定标记,每个标记与特定的类相关联。我们采用融合的功能和可学习的令牌之间的交叉注意,使每个令牌提取类特定的信息融合的功能。这种设计允许令牌专门关注其相应的类,促进所有类的独立建模,并缓解训练期间主导头部类掩盖长尾类的问题。

我们的工作的主要贡献如下:

·我们引入了一个轻量级的Transformer解码器,具有可学习的类特定令牌,确保每个令牌专用于特定的类,从而实现类的独立建模。该设计有效地解决了现有方法中普遍存在的长尾类分割性能差的挑战。

·我们的多尺度特征提取和MLP融合策略,结合利用可学习的类特定令牌的Transformer解码器,减轻了训练期间头类的主导地位,并增强了长尾类的特征表示。

·SegFace在LaPa数据集(平均F1得分为93.03)和CelebAMask-HQ数据集(平均F1得分为88.96)上建立了最先进的性能。此外,我们的模型可以通过简单地交换与MobileNetV 3骨干的骨干快速推理。移动的版本在CelebAMask-HQ数据集上的平均F1得分为87.91,FPS为95.96。

二、相关工作

2.1面部解析

        早期的人脸解析方法采用了诸如范例(Smith et al. 2013),概率索引图(Scheffler and Odobez 2011),Gabor滤波器(Hernanal-Matamoros et al. 2015)和低秩分解(Guo and Qi 2015)等技术。自从深度学习兴起以来,已经提出了许多基于深度卷积网络的方法用于人脸分割(Warrell和Prince 2009; Khan,Mauro和Leonardi 2015; Liang et al. 2015; Lin et al. 2019; Liu et al. 2017)。最近,AGRNet(Te et al. 2021)和EAGRNet(Te et al. 2020)提出了基于图形表示的方法,这些方法将不同的面部组件关联起来,并利用边缘信息进行解析。DML-CSR(Zheng et al. 2022 a)探索了多任务学习,并引入了动态双图卷积网络来解决空间不一致性和循环自我调节问题,以解决噪声标签的存在。基于局部的方法与我们的工作最相似,旨在通过为不同的面部区域训练单独的模型来单独预测每个面部部分。(Luo,Wang和Tang 2012)利用分层方法分别解析每个组件,而(Zhou,Hu和Zhang 2015)建议使用多个CNN,这些CNN以不同的尺度获取输入,通过有效整合本地和上下文信息的互连层融合它们。然而,现有的基于本地的方法未能受益于共享骨干网和联合优化,导致次优性能。SegFace通过使用可学习的类特定令牌独立地建模所有类来解决这个问题,同时仍然受益于从共享骨干中提取的多尺度融合特征。

2.2Transformers

        基于变换器的模型,如ViT(Dosovitskiy et al. 2020)和DETR(Carion et al. 2020),通过利用注意力机制来捕获图像中的长期依赖性和全局上下文,已经证明了它们在分割任务中的有效性。Segformer(Xie et al. 2021)和SETR(Zheng et al. 2021)是值得注意的工作,它们表明transformer在一般分割任务中的表现优于传统的CNN。然而,变压器在人脸分割中的应用仍然相对欠探索,尽管他们的潜在优势。面部分割提出了独特的挑战,例如需要精确的边界检测和对面部特征细微变化的敏感性,而传统CNN已经有效地解决了这些问题。然而,最近基于transformer的分割网络,如Mask2Former(Cheng,Schwing和Kirillov 2022)和SAM(Kirillov et al. 2023),在捕获全局和细粒度上下文方面显示出有希望的结果,从而实现更准确的分割。这些模型利用了自注意和交叉注意机制,这些机制可以被视为计算所有输入的加权平均值的非局部均值运算。因此,每个类别的输入都是独立计算和平均的,允许模型选择性地关注相关特征,而不受空间限制。这导致了一个更丰富的,上下文化的表示,这可以显着有利于长尾视觉关系的理解。

三、 Proposed Work

图二:所提出的架构,SegFace,通过基于transformer的方法增强长尾类的性能,解决了人脸分割问题。具体而言,多尺度特征首先从图像编码器中提取,然后使用MLP融合模块进行融合以形成人脸令牌。这些标记,沿着类特定标记,经历自我注意、脸对标记和标记对脸交叉注意操作,精炼类和脸标记以增强类特定特征。最后,将放大的面部标记和学习的类标记相结合,以产生每个面部区域的分割图。

        人脸由不同的区域组成,包括鼻子、眼睛、嘴巴以及耳环和项链等配饰。在人脸分割中,这些区域被视为不同的类别,其在规模和出现频率上有所不同。诸如头发和鼻子之类的类自然地更频繁地出现在面部图像中,并且被称为头部类。相比之下,可能不存在于每个人脸图像中的附件被称为长尾类,并且在人脸分割数据集中代表性不足。我们计算数据集中每个类的频率,并确定类出现在CelebAMask-HQ数据集的人脸图像中的概率。如图1所示,头类出现在图像中的概率约为1.0,而长尾类的概率为0.26和0.05。在分析当前的人脸分割方法时,我们观察到它们在长尾类上的表现往往很差。我们的目标是提高长尾类的分割性能,从而提高整体人脸分割性能。

        给定一批人脸图像I ∈ RB×H×W×3,由N个类别组成,其中B是批量大小,而H和W分别表示图像的高度和宽度。SegFace提取多尺度特征G = {Gi| 1 ≤ i ≤ 4}从图像编码器Eθ的中间层。然后,使用MLP融合模块f * 融合这些特征以获得面部标记F。脸部标记连同它们对应的位置编码沿着和可学习的类特定标记T = {Ti| 1 ≤ i ≤ N},由轻量级SegFace解码器g通过自注意和交叉注意操作进行处理,从而产生学习的类标记F T和更新的面部标记F′。更新的面部标记然后使用放大模块hα被放大,并且在标记已经通过MLP之后与学习的类标记WST逐元素相乘,以获得最终分割图S = {Si| 1 ≤ i ≤ N},其中Si ∈ RB×1×H×W,表示每个类别的分割图。整个过程如下:

这里,Si是第i类的输出分割图。我们利用这些分割图来计算损失。我们使用交叉熵损失沿着和骰子损失来训练完整的流水线,如图2所示。最终损失函数可以给出为:

3.1多尺度特征提取

        我们进行多尺度特征提取,以解决不同的人脸区域之间的规模差异的问题。这种方法有效地捕捉了精细的细节和较大的结构,有助于获得面部的全面全局背景,并更好地处理面部组件的不同大小和形状。从图像编码器Eθ中提取多尺度特征。设输入图像的批次为I ∈ RB×H×W×3,其中B是批次大小,H和W是图像的高度和宽度。编码器从多个层中提取特征:

        这里,Gi表示从编码器的第i层提取的特征图,Ci是第i个特征图中的通道的数量,Hi和Wi分别表示第i个特征图的高度和宽度。从编码器中提取的分层特征有助于捕获粗粒度到细粒度的表示,使其适用于分割较小的类,这些类通常是长尾类。

3.2 MLP融合

我们使用MLP融合模块fθ执行多尺度特征聚合,以获得将被传递到SegFace解码器的面部令牌。在该模块中,多尺度特征G = {Gi| 1 ≤ i ≤ 4}由单独的MLP处理,每个MLP对应于不同的尺度,以使通道尺寸对于融合一致。每个MLP将其对应的Gi变换为具有均匀通道数C′的特征映射G′ i,如下:G′ i = MLPi(Gi),其中G′ i ∈ RB×C′×Hi×Wi。然后使用双线性插值对所得到的特征图G′ i进行上采样以匹配第一特征图G′ 1的空间分辨率,表示为G′ i = Interp(G′ i),其中G′ i ∈ RB×C′×H1×W1,H1 ∈ {1,2,3,4}。这些上采样的多尺度特征G "i沿通道维度沿着连接以形成统一的特征图。最后,这个连接的特征映射通过单个卷积层,将信道维度降低到C′。

该融合特征图F表示最终的多尺度面部标记,其作为SegFace解码器的输入给出。

3.3 SegFace解码器

        SegFace解码器旨在独立地对每个类进行建模,同时使用可学习的类特定令牌实现它们之间的交互。设T = Ti ∈ R1×D| 1 ≤ i ≤ N表示这些标记,其中N是类的数量,D是嵌入维数(这里,D = 256)。这些标记附加有位置编码,并对应于各种面部组件,例如背景,面部,眼睛,鼻子和其他特征。解码器包括三个主要组件:1)类-标记自注意,2)类-标记到面部-标记交叉注意,以及3)面部-标记到类-标记交叉注意。通过Transformer解码器中的自注意和交叉注意操作,引导令牌关注特定于类的特征,并促进不同面部区域之间的交互。

类令牌自我注意力:该组件通过允许每个类别令牌Ti关注所有其他类别令牌来促进面部的不同区域之间的交互。对于每个类令牌Ti,操作被定义为:

其中SelfAttention表示多头自注意操作,Q、K和V分别表示查询、键和值。每个类令牌对应于一个特定的类,SelfAttention操作使模型能够学习不同面部区域的结构和位置之间的相关性。

类令牌到面部令牌的交叉自注意:在该组件中,每个类令牌T′ i关注融合的面部令牌F,便于提取类特定信息并实现类的独立建模。更新后的类令牌RNTTi计算如下:

其中CrossAttention表示交叉注意操作。这种机制确保了长尾类在训练过程中不会被掩盖,因为每个类都与一个令牌相关联,该令牌提取专门用于分割长尾类的相关特征。

面令牌到类令牌交叉注意:在这个组件中,融合的面部标记会返回到学习的类标记,用类特定信息来细化面部表示。精细化的面部标记F '计算如下:

该组件通过调整特征提取和融合模块的训练来指导它们,以确保提取的特征富含特定于类的信息。

3.4 Output Head

输出头的作用是从学习的类特定标记和更新的面部标记生成最终的分割图。使用包括转置卷积操作的小网络hα来放大面部令牌F′。放大增加了面部标记的分辨率以匹配原始图像大小。形式上,这可以定义为U = hα(F′),其中U ∈ RB×C′×H×W是放大后的人脸标记嵌入,C′是放大后的降低的嵌入维数。最后,学习到的类特定令牌是|1 ≤ i ≤ N}通过MLP,然后与放大的面部标记逐元素相乘,以产生最终的分割图:

其中,⊙表示逐元素相乘,Si ∈ RB×1×H×W表示第i个类的分割图。最后的输出是一组分割图S = {Si| 1 ≤ i ≤ N},其中每个Si对应于特定的面部分量,有效地将输入面部图像分割成其相应的区域。

四、实验

我们通过改变主干(Swin,Swin V2,ResNet 101,MobileNetV 3,EfficientNet)和输入分辨率(64,96,128,192,224,256,448,512)来训练SegFace。这些模型使用AdamW优化器优化了300个epoch,初始学习率为1 e −4,权重衰减为1 e −5。我们采用了gamma值为0.1的步长LR调度器,这将学习速率在epoch 80和200处降低了0.1倍。在LaPa和CelebAMask-HQ数据集上使用32个批次大小进行训练,在Helen数据集上使用16个批次大小。我们没有对CelebAMask-HQ和Helen数据集进行任何增强。对于LaPa数据集,我们应用了随机旋转[-30,30],随机缩放[0.5,3]和随机平移[-20px,20 px],沿着RoI tanh扭曲(Lin et al. 2019),以确保网络专注于面部区域。对于骰子损失和交叉熵损失,λ1和λ2值分别设定为0.5。我们的方法使用类的F1得分,平均F1得分和平均IoU与其他基线进行了评估,所有指标都排除了背景类。

图3:定性比较突出了我们的方法SegFace与DML-CSR相比的上级性能。在(a)中,SegFace有效地分割了耳环和项链等长尾类以及头发和脖子等头部类。在(B)中,它在涉及多个面部、类似人类的特征、光线不足和遮挡的具有挑战性的场景中也表现出色,其中DML-CSR很难做到。

定性结果:我们在图3中说明了我们提出的方法与其他基线的定性比较。从图3(a)[列1,2,3]中,我们验证了SegFace能够分割长尾类,如耳环和项链,与现有的最先进的方法DML-CSR相比要好得多。这证明了所提出的Transformer解码器与可学习的特定于任务的查询的有效性。它通过将每个标记与特定的类相关联,实现了对所有类的独立建模。在这种设计中,令牌可以专门关注该类,并学习利用融合的特征进行分割。此外,从图3(a)[第4,5列]中,我们观察到所提出的方法在头发和颈部等头部类别上也表现得更好。如图3(B)[列1,2]所示,LaPa数据集上的结果表明,在附近存在多个人脸或类似人类的特征的情况下,DML-CSR难以进行人脸分割。我们通过结合RoI Tanh Warping(Lin et al. 2019)来缓解这个问题,以确保模型在执行分割时专注于面部区域。从图3(B)[第3、4列]可以看出,DML-CSR在具有挑战性的光照条件下表现不佳,而在图3(B)[第5列]中,它与遮挡作斗争。SegFace的性能优于DML-CSR,即使在这些复杂的场景中也能够准确地分割面部区域。

图4:(a)特定于类的标记分割了它们对应的类,展示了每个类的独立建模。(b)噪声地面实况与SegFace预测的比较

相关文章:

《SegFace: Face Segmentation of Long-Tail Classes》论文分享(侵删)

author{Kartik Narayan and Vibashan VS and Vishal M. Patel} 原文链接:[2412.08647] SegFace: Face Segmentation of Long-Tail Classes 摘要 人脸解析是指将人脸语义分割为眼睛、鼻子、头发等关键面部区域。它是各种高级应用程序的先决条件,包括人脸…...

Android AOSP系统裁记录

Android 系统裁剪是指根据需求移除不必要的组件和功能,以优化系统性能、减少存储占用或满足特定设备需求。以下是 Android 系统裁剪的基本步骤: 1. 准备环境 操作系统:推荐使用 Ubuntu 或 macOS。 工具: Android SDK Android N…...

音乐游戏Dance Dance Revolution(DDR)模拟器

文章目录 (一)Dance Dance Revolution(1.1)基本情况(1.2)机体 (二)模拟器(2.1)主程序(2.2)模拟器主题 (三)曲谱…...

Lua的table(表)

Lua表的基本概念 Lua中的表(table)是一种多功能数据结构,可以用作数组、字典、集合等。表是Lua中唯一的数据结构机制,其他数据结构如数组、列表、队列等都可以通过表来实现。 表的实现 Lua的表由两部分组成: 数组部分…...

ZT36 小红和小紫的取素因子游戏

描述 小红和小紫拿到了一个正整数x,她们每次可以选择x的一个因子k(k>1),把x除以k,但要求k必须是素数。小红先手,谁先不能操作谁输。假设两人都足够聪明,最终谁取得胜利? 共进行t次游戏。 输入描述&…...

C# 使用 Newtonsoft.Json 序列化和反序列化对象实例

Newtonsoft.Json(也被称为 Json.NET)是一个广泛使用的用于在 C# 中进行 JSON 序列化和反序列化的开源库。下面将详细介绍如何使用它来序列化和反序列化对象。 1. 安装 Newtonsoft.Json 如果你使用的是 Visual Studio,可以通过 NuGet 包管理…...

用 AI 工具提升 UX/UI 设计效率:从研究到原型

—————————————————— 用 AI 工具提升 UX/UI 设计效率:从研究到原型 开篇引言: 在 UX/UI 设计领域,效率与创意之间的平衡一直是设计师们追求的目标。随着 AI 工具的崛起,设计师们不仅能更快地完成任务&#xff0c…...

操作系统知识点12

1.在操作系统的结构设计中,采用层次结构的操作系统其最大优点是把整体问题局部化 2.非特权指令是指操作系统和用户均可以使用的指令 3.向处理器发出的中断信号称为中断请求 4.轮转法RR是单纯基于时间片考虑的 5.当进程处于就绪状态时,表示进程已获得…...

FASIONAD:自适应反馈的类人自动驾驶中快速和慢速思维融合系统

24年11月来自清华、早稻田大学、明尼苏达大学、多伦多大学、厦门大学马来西亚分校、电子科大(成都)、智平方科技和河南润泰数字科技的论文“FASIONAD : FAst and Slow FusION Thinking Systems for Human-Like Autonomous Driving with Adaptive Feedbac…...

Redis7——基础篇(八)

前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 基础篇: Redis(一)Redis(二)Redis(三)Redis&#x…...

nvm安装

1.下载安装包 从官网下载https://github.com/nvm-sh/nvm/releases 这里下的是nvm-0.40.1.tar.gz 2.解压 tar -zxvf nvm-0.40.1.tar.gz 3. 修改配置文件 vi ~/.bashrc 在最后一行添加如下内容 export NVM_DIR"/usr/local/nvm-0.40.1"[ -s "$NVM…...

基于vue框架的游戏博客网站设计iw282(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能:用户,博客信息,资源共享,游戏视频,游戏照片 开题报告内容 基于FlaskVue框架的游戏博客网站设计开题报告 一、项目背景与意义 随着互联网技术的飞速发展和游戏产业的不断壮大,游戏玩家对游戏资讯、攻略、评测等内容的需求日…...

spring MVC执行流程

详细的项目结构 src ├── main │ ├── java │ │ ├── com.example │ │ │ ├── config │ │ │ │ └── SpringMvcInitializer.java // 配置 DispatcherServlet │ │ │ │ └── SpringConfig.java // Sprin…...

递归遍历目录 和 普通文件的复制 [Java EE]

递归遍历目录 首先 先列出当前目录所包含的内容 File[] files currentDir.listFiles();if (files null || files.length 0) {// 若是空目录或非法目录, 则直接返回return;} 然后 遍历列出的文件, 分情况两种讨论 for (File f: files) {// 加个日志, 方便查看程序执行情…...

如何在docker上部署java服务

目录结构 首先 Dockerfile FROM bladex/alpine-java:openjdk17_cn_slimMAINTAINER admin@rsz.comENV TZ=Asia/ShanghaiRUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneRUN mkdir -p /xhWORKDIR /xhEXPOSE 8106ADD ./blade-system.…...

Machine Learning 初探

前置知识 pandas 读取文件:read_csv查看信息 describe:查看整体信息,包括每列的平均值、最大最小值、标准差等head:输出头部几行数据columns:输出所有列名loc:查询数据,或是根据索引取对应的数…...

GESP2024年12月认证C++三级( 第三部分编程题(1)数字替换)

参考程序&#xff1a; #include <iostream> #include <vector> #include <algorithm> using namespace std; int a[100010]; // 定义一个数组a&#xff0c;用于存储序列A&#xff0c;数组大小为100010 int main() {int n, k; // 定义变量n和k&#xff0c;…...

IDEA-插件开发踩坑记录-第六坑-UAST依赖问题

背景 简要说明&#xff1a; UAST – Unified Abstract Syntax Tree UAST (Unified Abstract Syntax Tree) is an abstraction layer on the PSI of different programming languages targeting the JVM (Java Virtual Machine). It provides a unified API for working with co…...

单片机总结【GPIO/TIM/IIC/SPI/UART】

一、GPIO 1、概念 通用输入输出口&#xff1b;开发者可以根据自己的需求将其配置为输入或输出模式&#xff0c;以实现与外部设备进行数据交互、控制外部设备等功能。简单来说&#xff0c;GPIO 就像是计算机或微控制器与外部世界沟通的 “桥梁”。 2、工作模式 工作模式性质特…...

信号和槽

connect(信号发送者&#xff0c;发送的信号&#xff0c;信号接收者&#xff0c;信号的处理); 信号函数和槽函数的参数必须是一样的&#xff0c;但信号的参数可以多余槽函数的参数&#xff08;前面的参数类型必须一致&#xff09; 是控件和控件间的信号传递&#xff0c;这两个…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...