(CVPR-2023)通过有效的时空特征融合进行多模态步态识别

news2024/10/5 22:24:08

通过有效的时空特征融合进行多模态步态识别

paper题目:Multi-modal Gait Recognition via Effective Spatial-Temporal Feature Fusion

paper是北航发表在CVPR 2023的工作

paper地址

Abstract

步态识别是一种生物识别技术,通过步行模式识别人。基于剪影的方法和基于骨架的方法是两种最流行的方法。但是剪影数据容易受到衣服遮挡的影响,骨架数据缺乏体型信息。为了获得更稳健、更全面的步态识别表示,我们提出了一种基于 transformer 的步态识别框架,称为 MMGaitFormer,它有效地融合和聚合了来自骨架和轮廓的时空信息。具体来说,空间融合模块(SFM)和时间融合模块(TFM)分别被提出用于有效的空间级和时间级特征融合。 SFM进行细粒度的身体部位空间融合,通过attention机制引导轮廓各部位、骨架各关节对齐。 TFM 通过循环位置嵌入 (CPE) 执行时间建模,并融合两种模式的时间信息。实验表明,我们的 MMGaitFormer 在流行的步态数据集上实现了最先进的性能。对于 CASIAB 中最具挑战性的“CL”(即穿着不同衣服行走)条件,我们的方法达到了 94.8% 的 rank-1 准确率,大大优于最先进的单模态方法。

1. Introduction

步态识别是一种通过步行模式识别人的生物识别技术,是远距离识别系统中最有前途的基于视频的生物识别技术之一。然而,执行可靠的步态识别仍然具有挑战性,因为它的性能受到许多复杂因素的严重影响,包括服装、携带条件、交叉视图等。为了缓解这些问题,已经提出了各种方法。基于外观和基于模型的方法是基于视频的步态识别的两种最流行的方法。基于外观(即基于轮廓)的方法 [5、9、14、19、27] 依赖于从原始视频帧中分割出来的二进制人体轮廓图像,以消除外部因素的影响。他们利用卷积神经网络 (CNN) 提取时空特征并实现了最先进的性能。基于模型的方法 [2,16,17,23] 考虑身体的基本物理结构,并以更易于理解的模型表达步态。最近的基于模型的方法是基于骨架的,其中它们用通过姿势估计模型从视频中获得的骨架来表示步态。凭借清晰而稳健的骨架表示,与基于外观的方法相比,最近的基于骨架的方法甚至可以显示出有竞争力的结果。

尽管基于剪影和基于骨架的方法都有其优点,但我们认为步态信息的两种输入表示的不完整性限制了这些方法的进一步改进。如图1(a)所示,虽然轮廓保留了大部分身体形状信息,但当身体区域重叠时会出现自遮蔽问题。此外,当服装条件发生变化时,如图1(b)所示,服装遮蔽会显着改变外部身体形状。然而,骨架仅保留内部身体结构信息,有效解决了服装遮挡和自遮挡问题,但完全忽略了可区分的身体形状信息,导致性能不佳。因此,我们可以观察到轮廓保留了外部身体形状信息并省略了一些身体结构线索,而骨骼保留了内部身体结构信息。两种数据模态互为补充,它们的结合有望更全面地表征步态。

图1

图 1. CASIA-B 步态数据集中受试者在正常行走 (a) 和穿着不同衣服行走 (b) 的不同时间步长的不同步态表示的比较。每行从上到下分别描绘了与剪影图像相同的帧,以及 2D 骨架姿势,即骨架和剪影的组合。结合剪影和骨骼的互补优势,有望成为更全面的步态表征。

受上述观察的启发,为了获得用于识别的稳健和全面的步态表示,我们提出了一种基于 transformer 的步态识别框架,称为 MMGaitFormer,它有效地融合和聚合了来自骨架和轮廓的时空信息。准确地说,拟议的框架由三个阶段的四个主要模块组成。首先,分别通过分割和姿态估计方法从原始RGB视频中提取剪影序列和骨架序列。之后,我们将轮廓和骨架输入到独立的编码模块中,为每个模态提取独特的时空特征图。最后,我们分别提出了用于空间和时间特征融合的空间融合模块(SFM)和时间融合模块(TFM)。作为基于视频的识别任务,如何有效地从时空信息中提取具有鉴别力的步态特征是最关键的问题。在这项工作中,我们考虑了空间级别的细粒度融合和时间级别的精细对齐融合。在 SFM 中,我们设计了一个共同注意模块来实现轮廓和骨架之间的交互。具体来说,我们构建了称为细粒度身体部位融合 (FBPF) 的策略,以根据骨骼中的关节与轮廓中相应部位之间的先验位置关系,指导 SFM 进行细粒度特征融合学习。在 TFM 中,我们引入了用于精细对齐时间建模的嵌入建模操作,我们在其中设计了周期位置嵌入 (CPE) 以有效捕获步态周期特征并更好地为步态序列的时间信息建模。

所提出方法的主要贡献总结如下:(1)我们提出了一种有效且新颖的多模态步态识别框架,称为 MMGaitFormer,它利用由轮廓和骨架构建的更全面的步态表示,以实现更好的识别。 (2) 提出了一种基于共同注意的空间融合模块,利用每个骨架关节和每个轮廓部分的先验位置关系,对空间步态特征进行细粒度身体部位融合 (FBPF)。(3) 我们提出了一种用于时间级特征融合的新型时间融合模块,其中我们设计了循环位置嵌入 (CPE) 来模拟任意长度步态序列的时间关系。实验表明,我们的 MMGaitFormer 在流行的步态数据集上实现了最先进的性能。对于 CASIAB [26] 中最具挑战性的条件(即穿着不同的衣服行走),我们的方法达到了 94.8% 的 rank-1 准确率,大大优于最先进的单模态方法( +11.2% 准确度提升)。

2. Related work

基于外观的方法依赖于从原始图像中提取的二进制人体轮廓图像。大多数最近的方法直接将步态视为一系列轮廓。这些方法 [5、6、9、18、20] 遵循类似的管道,即在帧级别使用设计良好的网络提取空间特征,然后使用时空聚合模块获得步态表示。例如,GaitPart [9] 设计了一个微动捕捉模块(MCM)模块来模拟局部微动特征。 GaitGL [20] 提出了一个 3D CNN 网络来同时聚合局部时空信息。 GaitTransformer [6] 提出了用于步态时间建模的多时间尺度转换器 (MTST)。尽管基于剪影的方法取得了最先进的性能,但剪影数据不可避免地会遇到服装遮挡和自遮挡的问题,限制了其进一步改进。

基于模型的方法考虑身体的基本物理结构,并在更易于理解的模型中表达步态 [2、16、17]。最近基于模型的方法通常将骨架作为原始输入数据,从带有姿势估计模型的原始视频中提取。 PoseGait [17] 利用人类先验知识设计姿势特征,并使用 CNN 提取特征表示以进行识别。 GaitGraph [23] 基于图卷积网络(GCN)从人体二维关节中提取步态信息,并取得了有竞争力的结果。虽然基于骨架的方法对视图和外观变化具有鲁棒性,但骨架数据包含的身体形状信息少于剪影图像。

集成深度、多传感器和视频数据的多模态步态识别 [4、7、13] 方法在早期研究中显示出识别性能的改进。然而,完全依赖视频数据的同质多模态方法尚未得到充分探索,现有方法 [15, 21, 25] 仍然存在关键问题:(1)简单地连接两种模态的最终全局特征不能有效捕获细粒度的空间信息。 (2) 两种模态序列的时间信息没有得到充分利用,如何有效融合它们的时间特征仍然是一个悬而未决的问题。受 Transformer [24] 在多模式学习中取得的显着成功的启发,我们提出了一种基于 Transformer 的方法,该方法利用两种互补的数据模式,即轮廓和骨架,进行全面的步态识别。

3. Method

在本节中,我们将描述 MMGaitFormer 的技术细节。在第 3.1 节中,我们概述了我们的方法。在第 3.2 节中,我们讨论了 SiEM 和 SkEM 的设计动机。在第 3.3 节中,我们介绍了我们提出的空间融合模块,介绍如何通过细粒度身体部位融合 (FBPF) 来整合骨架信息和轮廓信息。在第 3.4 节中,我们详细阐述了我们提出的时间融合模块,介绍如何使用循环位置嵌入 (CPE) 来建模和融合两种模态序列的时间信息。

3.1. Pipeline


图2

图 2. 我们的 MMGaitFormer 的管道。在预处理阶段,分别通过分割方法和姿态估计方法从原始RGB视频中提取轮廓序列和骨架序列。在编码阶段,我们将输入的轮廓和骨架分别输入到轮廓编码模块 (SiEM) 和骨架编码模块 (SkEM) 中,以学习时空特征图。在融合阶段,提出了空间融合模块(SFM)和时间融合模块(TFM),分别用于有效的细粒度空间和精细对齐的时间特征融合。 ATT表示cross-attention block,两个ATT形成一个co-attention结构进行特征融合。 TFM 中的嵌入建模 (EM) 用于时间建模。单独的全连接层 (SFC) 用于编码和融合阶段的特征映射。

为了有效地获取、处理和融合两种模态的步态表示,我们提出了一个有效且新颖的框架,称为 MMGaitFormer,它有效地融合了两种模态的互补时空信息,同时保留了每种模态的独特辨别特征。所提出的多模态步态识别框架的流程如图 2 所示。

在预处理阶段,将从原始步态视频中离线获得两种类型的步态表示。一种是通过分割方法提取的剪影序列 S ∈ R C 1 s × T 1 s × H 1 × W 1 S \in \mathbb{R}^{C_1^s \times T_1^s \times H_1 \times W_1} SRC1s×T1s×H1×W1,其中 C 1 C_1 C1为通道数, T 1 s T_1^s T1s为剪影序列的长度, ( H 1 , W 1 ) \left(H_1, W_1\right) (H1,W1)为图像每个帧的大小。另一个输入是由姿势估计模型 [10, 22] 提取的骨架序列。骨架序列在结构上可以用 A ∈ R N 1 × N 1 A \in \mathbb{R}^{N_1 \times N_1} ARN1×N1描述,在特征上可以用 K ∈ R C 1 k × T 1 k × N 1 K \in \mathbb{R}^{C_1^k \times T_1^k \times N_1} KRC1k×T1k×N1描述,其中 C 1 k C_1^k C1k是通道数, T 1 k T_1^k T1k是序列的长度 N 1 N_1 N1为关节数。

在编码阶段,给定轮廓 S S S和骨架 K K K的序列,然后从轮廓编码模块(SiEM)中提取特征映射 F s ∈ R C 2 s × T 2 s × H 2 F_s \in \mathbb{R}^{C_2^s \times T_2^s \times H_2} FsRC2s×T2s×H2 F k ∈ R C 2 k × T 2 k × N 2 F_k \in \mathbb{R}^{C_2^k \times T_2^k \times N_2} FkRC2k×T2k×N2和骨架编码模块(SkEM),分别为了学习每个步态表示的独特时空信息.

在融合阶段,这些特征图被送入两个分支:(1)空间融合模块使用共同注意结构以细粒度融合每个轮廓部分和每个骨架节点,并获得空间特征表示 Y s Y_s Ys。 (2) Temporal Fusion Module通过Embedding Modeling对时态关系进行建模,融合每个模态的长时特征信息用于时态特征表示 Y t Y_t Yt。我们连接 Y s Y_s Ys Y t Y_t Yt作为步态序列的最终特征表示 Y Y Y

最后,我们选择一个组合损失来训练所提出的网络,包括融合损失 L fuse  L_{\text {fuse }} Lfuse 、轮廓损失 L sil  L_{\text {sil }} Lsil 和骨架损失 L ske  L_{\text {ske }} Lske 。总损失定义为 L = L fuse  + L sil  + L ske  L=L_{\text {fuse }}+L_{\text {sil }}+L_{\text {ske }} L=Lfuse +Lsil +Lske 。我们使用单独的 Batch All 三元组损失 [12] 作为损失函数。

3.2. Silhouette and Skeleton Encoding Module


动机。两种模态表示的数据结构差异太大,很难在数据层面直接融合。因此,我们设计了独立的编码模块来捕获每个模态的独特判别信息,并增强后续融合的时空特征表示。为了加快模型收敛速度,我们专门进行了剪影损失 L s i l L_{s i l} Lsil和骨架损失 L s k e L_{s k e} Lske来分别监督每个模态特征的学习。

操作。受 GaitGL [19] 和 GaitGraph [23] 的启发,我们设计了 SiEM 网络和 SkEM 网络。 SiEM 网络由 3D CNN 块 [20]、最大池化层和微动捕捉模块 (MCM) [9] 组成。对于 SkEM,我们引入了图卷积网络 (GCN) 以从骨架图序列中提取时空步态特征。最后一个block的输出通道设置为128,与SiEM的输出相同,方便后续的融合处理。我们框架中的 SiEM 和 SkEM 也可以替换为任何步态识别网络。 SiEM 和 SkEM 的更复杂架构可能会带来更可观的性能提升,但这不是所提出方法的优先考虑。因此,SiEM 和 SkEM 可以被视为我们方法的基线。

3.3. Spatial Fusion Module


动机。在这项工作的同时,个别方法 [21、25] 也开始通过融合多种步态模式来探索更强大的特征。然而,如图3(a)所示,这些方法具有相对简单的融合方式,并通过级联操作专注于全局特征级别的融合[25]。这种融合操作缺乏可解释性和灵活性,也缺乏对人体先验空间信息的利用。此外,这些方法通常依赖于每个模态的预训练模型,这使得它们更像是集成模型而不是多模态模型。为了解决这些问题,我们提出了一种基于共同注意的融合模块,如图 5(a)所示,它采用注意机制(即 Fine-grained Body Parts Fusion),如图3(b)所示。基于注意力的学习结构也使该方法更加灵活,允许端到端训练而不依赖于每个模态的预训练模型。

精细的身体部位融合。如图4(a)所示,人体区域可分为头部、躯干和腿部三部分,人体步态的不同身体部位在行走过程中具有不同的形状和运动模式。受上述观察的启发,我们认为空间特征融合应该是细粒度的,并提出了一种简单但有效的策略,以利用人类先验知识实现更全面的细粒度空间特征融合。我们通过构造注意力掩码 m s S m_s^S msS m k S m_k^S mkS来限制轮廓和骨架特征以仅计算与相应身体部位的交叉注意力,如图 4(b)所示。一方面,各个身体部位之间的融合有效地利用了人体的先验知识,因此更具可解释性。另一方面,受限注意力计算可以将计算复杂度降低一半,有效降低过拟合的风险。

在这项工作中,我们在轮廓和骨架之间建立了一个简单的映射关系,以构建如图 4 (b) 所示的预定义注意掩码。特征嵌入 f s S f_s^S fsS的上四分之一 (0-1/4)、中半部分 (1/4-3/4) 和下四分之一 (3/41) 代表头部、躯干和腿部的轮廓特征分别。同理,骨骼节点向量也同样分为头部( f k S f_k^S fkS中鼻子、眼睛、耳朵的节点特征)、躯干(肩、肘、腕、臀)、腿(膝、踝)三个区域). m s S m_s^S msS m k S m_k^S mkS互为转置。

空间共同注意聚合。 co-attention fusion 模块使轮廓和骨骼之间的交互成为可能,它在轮廓部分和骨骼关节之间建立各种空间关系,以利用两种数据模式的互补优势,为识别提供更稳健和全面的步态特征表示。相较于单独的crossattention modules,co-attention structure可以更好的整合skeleton和silhouette的互补优势。并且通过为受限的注意力计算构造注意力掩码,在提高可解释性的同时,降低了基于 Transforbased 方法的过度拟合风险。

操作。如图 5 (a) 所示,共同注意模块包括交错的多头交叉注意块。在这项工作中,我们的交叉注意块遵循 ViT 的 [8] 多头注意结构。对于特征映射 F s ∈ R C 2 s × T 2 s × H 2 F_s \in \mathbb{R}^{C_2^s \times T_2^s \times H_2} FsRC2s×T2s×H2 F k ∈ R C 2 k × T 2 k × N 2 F_k \in \mathbb{R}^{C_2^k \times T_2^k \times N_2} FkRC2k×T2k×N2,在时间轴上使用最大池化得到空间特征嵌入 f s S ∈ R C 3 × H 2 f_s^S \in \mathbb{R}^{C_3 \times H_2} fsSRC3×H2 f k S ∈ R C 3 × N 2 f_k^S \in \mathbb{R}^{C_3 \times N_2} fkSRC3×N2。然后将这些特征嵌入输入到注意结构中以进行互补信息融合,随后是前馈网络 (FFN) 层以生成空间特征表示 Y s Y_s Ys

3.4. Temporal Fusion Module


动机。作为基于视频的识别任务,步态帧之间的时间关系包含对识别至关重要的独特生物信息。为了更好地利用两种模态的步态序列的时间信息,我们提出了一种基于注意力的时间融合模块 (TFM) 来聚合两种模态的时间特征。此外,如图 4(a) 所示,步态是一个周期性的对称过程。因此,我们提出了循环位置嵌入来更好地建模和对齐两个模态序列的时间信息。

循环位置嵌入。注意机制无法区分输入特征序列的位置信息。如图6所示,对于现有的视觉转换器方法[8],使用与输入序列相同长度的位置嵌入来指示输入标记的顺序。然而,这种方法限制了 transformer 只能从固定长度的步态序列中提取时空信息。针对这个缺点,我们提出了Cycle Position Embedding (CPE),表示为 P s = { p i ∣ i = 1 , … , s } P_s=\left\{p_i \mid i=1, \ldots, s\right\} Ps={pii=1,,s} s s s是位置嵌入的循环大小。我们重复位置嵌入,直到它与特征嵌入的长度相同,以处理任何大小的序列。一方面,位置嵌入的重复过程模拟了步态周期过程,这是一种更有效的顺序建模步态周期的方法。并且可以根据步态周期中的帧数可解释地设置周期 s s s的大小。另一方面,通过限制可学习参数的数量进一步降低了过度拟合的风险,有助于所提出的基于 Transformer 的模型更好地收敛。

此外,两个序列中的相同帧都使用相同的位置嵌入来执行,以进行精细对齐的时间建模。我们为每个模态添加了一系列特征嵌入,其中包含可学习的类嵌入(表示为 C L S s T C L S_s^T CLSsT C L S k T C L S_k^T CLSkT),其在注意块输出处的状态用作相应模态的时间特征表示。

时间共同注意聚合。 TFM 的网络结构如图 5(b)所示。与 SFM 类似,我们还设计了一个共同注意模块来融合和聚合两个模态的时间信息。具体来说,两种模态的时间特征差异很大,因此我们使用两个独立的 FFN 层来分别映射两种模态的独特时间特征。

操作 对于特征映射 F s ∈ R C 2 s × T 2 s × H 2 F_s \in \mathbb{R}^{C_2^s \times T_2^s \times H_2} FsRC2s×T2s×H2 F k ∈ R C 2 k × T 2 k × N 2 F_k \in \mathbb{R}^{C_2^k \times T_2^k \times N_2} FkRC2k×T2k×N2,在空间轴上使用均值池化得到时间特征嵌入 f s T ∈ R C 3 × T 2 s f_s^T \in \mathbb{R}^{C_3 \times T_2^s} fsTRC3×T2s f k T ∈ R C 3 × T 2 k f_k^T \in \mathbb{R}^{C_3 \times T_2^k} fkTRC3×T2k。嵌入建模操作应用于这些特征嵌入以进行时间建模。然后将这些特征嵌入输入到共同注意结构中进行特征融合和增强,并获得时间融合特征表示 Y t Y_t Yt

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

指针 --- 进阶

先看目录,看你知道多少 目录 1.字符指针 2.指针数组 3.数组指针 4.数组传参和指针传参 5.函数指针 6.函数指针数组 7.指向函数指针数组的指针 8.回调函数 什么是指针,我们在之前的《指针》章节已经接触过了,我们知道了指针的概念: 1…

软件测试——功能测试,使用Java,IDEA,Selenium进行web自动化测试

视频地址:03-web元素定位ID_哔哩哔哩_bilibili p1.下载jdk,maven,idea p2.配置java-selenium环境正式开始: (1)创建代码: (2)第一次运行会报错:要下载东西 (3&…

如何设计一个过压保护电路

有时候在电源输入处我们希望当电源的输入电压超过允许的最大值后电源与后级电路就自动断开,防止输入电压过高而损坏后级电路。 具有这种功能的电路叫做过压保护电路,英文简称叫OVP。 现在大家看到的就是一个典型的过压保护电压电路,主要包含…

(一)springboot实战——为什么是springboot?

前言 为什么是springboot?江湖夜雨,传说依旧,不懂springboot一技之长,如何混迹java圈,本节内容我们介绍一下spring的一些基本特性。尤其是springboot3的基本特性,使得我们更好的理解springboot3。 正文 …

【vue3】07-vue组件之间的通信-父子互传-事件总线

文章目录 Vue的组件嵌套Vue组件化-组件间通信父子组件之间通信非父子组件间的通信 Vue的组件嵌套 前面我们是将所有的逻辑放到一个App.vue中: 在之前的案例中,我们只是创建了一个组件App;如果我们一个应用程序将所有的逻辑都放在一个组件中,那么这个组…

linux下一次复制cp多个文件(含scp命令)

linux cp 参数说明 -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。 -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。 -f:覆盖已经存在的目…

实训笔记6.5

实训笔记 6.5一、座右铭二、上周回顾Java基本语法1、Java的安装和环境变量的配置2、Java的标识符、关键字和保留字3、Java中的变量和常量、字面量4、数据类型5、运算符6、流程控制7、数组8、JVM内存图9、面向对象的两大概念-类和对象 三、类的组成3.1 属性的声明和使用3.1.1 属…

扩散模型之DDPM

扩散模型之DDPM 文章前置生成模型总结 Design of DDPM正向加噪过程反向去噪过程 文章前置 最原文链接(英文):What are Diffusion Models? 原文链接:Diffusion扩散模型大白话讲解,看完还不懂?不可能 原文链…

第10章 对象和类

第10章 对象和类 10.1 过程性编程和面相对象编程10.2 抽象和类10.2.1 类型是什么10.2.2 C中的类10.2.3 实现类成员函数10.2.4 使用类 10.1 过程性编程和面相对象编程 采用OOP方法时,首先从用户的角度考虑对象——描述对象所需的数据以及描述用户与数据交互所需的操…

【蓝桥刷题】备战国赛——异或三角

蓝桥杯2021国赛真题——异或三角 🚀 每日一题,冲刺国赛 🚀 题目导航: 异或三角 🎇思路:数位 d p dp dp d f s dfs dfs 思维 🔱思路分析: ✅数理基础: 按位异或&am…

(2017,AdaIN)用自适应实例归一化进行实时的任意风格迁移

Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization 公众号:EDPJ 目录 ​​​​​​​0. 摘要 1. 简介 2. 相关工作 3. 背景 3.1 批量归一化(Batch Normalization,BN) 3.2 实例归一化&#xff…

入驻京东直播间、成功借壳上市,交个朋友和时间“交朋友”

交个朋友一直走在“交朋友”的路上。 5月31日晚,交个朋友正式入驻京东直播间,首播销售额超1.5亿元,直播热度榜达人榜第一名,累计访问人次超1700万。据了解,京东618期间,除了日常直播外,交个朋友…

java并发编程:可见性、原子性、有序性三大特性详解

文章目录 可见性导致可见性的原因线程交叉执行重排序结合线程交叉执行共享变量更新后没有及时更新 如何解决可见性问题 原子性出现原子性问题的原因如何解决原子性问题 有序性导致有序性的原因如何解决有序性问题 总结 可见性 内存可见性,指的是线程之间的可见性&am…

IPv6NAT-PT实验:IPv4和IPv6地址转换的配置和验证

IPv6NAT-PT实验:IPv4和IPv6地址转换的配置和验证 【实验目的】 熟悉IPv6NAT-PT的概念。 掌握静态IPv6NAT-PT的配置 掌握动态IPv6NAT-PT的配置。 验证配置。 【实验拓扑】 设备参数如下表所示。 设备 接口 IP地址 子网掩码 默认网关 R1 S0/0 192.168.12…

2023HW护网红队必备工具总结

一、信息收集 1、AppInfoScanner 一款适用于以HVV行动/红队/渗透测试团队为场景的移动端(Android、iOS、WEB、H5、静态网站)信息收集扫描工具,可以帮助渗透测试工程师、红队成员快速收集到移动端或者静态WEB站点中关键的资产信息并提供基本的信息输出,如&#xff…

Java设计模式—模板方法模式

前言:模板方法模式是模板模式的一个具体实现,它定义了一个抽象类,其中包含一个模板方法和若干个基本方法。其中模板方法定义了算法骨架,而基本方法则由子类来实现。因此,模板方法在定义算法的结构方面提供了支持&#…

springMvc 解决 multipart/form-data 方式提交请求 不能获取非文件类型参数的问题和指定springmvc获取静态资源路径

问题: RequestMapping(value "/test",method RequestMethod.POST)ResponseBodypublic String test(String name,String id,MultipartFile file){System.out.println(name);System.out.println(id);System.out.println(file.getOriginalFilename());ret…

onnx模型的修改与调试demo

主要参考: 模型部署入门教程(五):ONNX 模型的修改与调试 第五章:ONNX 模型的修改与调试 使用netron 可视化模型 读写onnx 构造onnx 创建一个描述线性函数 output axb 的onnx模型。 需要两个节点,第一个…

造轮子--自己封装一个 start

背景 都说不要造轮子,但是青柠认为,有的时候,造个轮子,更有助于清楚详细的业务逻辑,所以咱也自己写一个轮子,搞个系统开发。大体思路就是先搭建基础框架,然后细写业务逻辑,会涵盖主…

图解HTTP书籍学习2

确保Web安全的HTTPS HTTP的缺点 ●通信使用明文(不加密),内容可能会被窃听 ●不验证通信方的身份,因此有可能遭遇伪装 ●无法证明报文的完整性,所以有可能已遭篡改 加密处理防止被窃听 通信的加密 一种方式就是…