VPCFormer:一个基于transformer的多视角指静脉识别模型和一个新基准

文章目录

  • VPCFormer:一个基于transformer的多视角指静脉识别模型和一个新基准
    • 总结
    • 摘要
    • 介绍
    • 相关工作
      • 单视角指静脉识别
      • 多视角指静脉识别
      • Transformer
    • 数据库
      • 基本信息
    • 方法
      • 总体结构
      • 静脉掩膜生成
      • VPC编码器
        • 视角内相关性的提取
        • 视角间相关关系提取
        • 输出融合
        • IFFN
        • 近邻感知模块(NPM)
      • patch嵌入和输出层
        • patch嵌入
        • 输出层
    • 实验
      • 实验设置
        • 单视角识别
        • 多视角识别
        • 闭集协议
        • 开集协议
        • 跨视角识别
      • 进一步实验和讨论
        • 多视角识别视角数的影响
        • 消融实验
        • 全局token的讨论
        • 位置编码的讨论

VPCFormer:一个基于transformer的多视角指静脉识别模型和一个新基准

论文:
VPCFormer: A transformer-based multi-view finger vein recognition model and a new benchmark

总结

摘要

现有的血管模式映射实际上把一个3D网络拓扑映射到一个2D平面,不可避免地导致3D特征损失和2D图像的拓扑模糊性。除此之外,基于单视角的方法在实践中对于手指旋转和平移十分敏感。为了解决这些问题,我们首先建立了一个基准通过建立多视角指静脉数据库,名为清华多视角指静脉3视角(THUMVFV-3V)数据库,收集了两期的数据。THUMVFV-3V提供了三种ROI包括统一的处理过程。进一步,我们提出了一种新的基于Transformer的模型血管模式受限编码器(VPC编码器)和近邻视角模块(NPMs)。特别地,VPC编码器结合一个新颖的静脉模式注意力模块(VPAM)和一个集成的前向网络(IFFN)。受跨视角血管有很强相关性的事实启发,我们设计了VPAM。在静脉掩膜的辅助下,VPAM经过精心设计,专门提取静脉图案之间的视图内和视图间相关性。更进一步,我们提出了IFFN来有效聚合VPAM中先前的注意力和内容信息。除此之外,NPM提出来捕捉单视角内的相关信息,增强最后多视角指静脉的表达。丰富实验表明我们的VPCFormer的相似性。

介绍

近年来,指静脉识别领域取得了巨大的进展。这些算法主要使用单视角图片进行识别,被持续的挑战困扰,例如,所拍摄的图像往往无法覆盖手指静脉的广阔区域,造成有限的身份信息。重要的是,因为真实指静脉在手指中像一个3D网络结构,当血管以单视角捕捉会丢失掉3D信息。进一步,单视角采集的指静脉图片内容受手指的旋转和平移影响大,因此导致表现差。多视角指静脉识别为什么能够解决上述问题的原因总结如下:(1)对于多视角指静脉图片,相邻视角间的视觉相关性大大提高了窃取静脉图案的难度,并减少了利用印刷静脉图案进行攻击的可能性(2)多视角图像相比单视角图像包含了更丰富的内容,例如位置变化,多角度可以互为参考,因此弥补单视角下的静脉信息限制(3)多视角图片可以在3D空间封装指静脉的结构信息。算法可以潜在地从这些多视图输入推断手指静脉的空间特征,从而增强特征的可辨别性和鲁棒性

我们在这个工作的贡献总结如下:

  • 我们提出里THUMVFV-3V数据库,一个多视角指静脉数据库。
  • 一个基于Transformer的网络
  • 相比于多种方法,VPCFormer在多视角指静脉识别上取得了最好的表现。

相关工作

单视角指静脉识别

huang13受ViT成功的启发提出里指静脉Transformer(FVT),使用一个金字塔结构来进行多层次的特征提取。

多视角指静脉识别

yang15应用多视角指纹表面和血管图片来生成点云用来识别,进一步,它们结合注意力机制到MVCNN来有效处理多视角输入。最近,19FV-LT应用了预训练的Transformer并堆叠三个块,结合一个局部信息矩阵,来提取多视角指静脉特征。

与上面提到的方法不同,我们的VPCFormer在静脉模式限制下提取了视角间和视角内的相关关系,捕捉了近邻内背景和血管间的相互关系。这个设计增强了模型提取多角度指静脉特征的效率。

Transformer

受到ViT和它的变种的启发,我们提出了VPCFormer,一个基于Transformer结构的模型,用来探索视角间和视角内的血管模式相关性。

数据库

基本信息

为了收集足够的样本,我们邀请了180名志愿者参与我们的数据获取过程。完整的收集过程分为最小间隔30天,最大间隔106天,平均45.8天的两个阶段。除此之外,171个对象参与全程,而另外9名缺席了第二次采集。所有对象提供双手的中指和无名指成像,每根手指6个样本,每个样本由三张不同角度的图片构成,总共18张图片。

排除掉过曝和不合适的,我们的THUMVFV-3V包含660类,总数23670张指静脉图片,并且数据集是性别均衡的。

在这里插入图片描述

预处理操作有四个步骤(1)手指边缘的粗检测(2)手指边界的细化(3)角度对齐(4)ROI生成,在图二我们给了一个预处理步骤的简要介绍。

在我们的THUMVFV-3V中,提供了三种ROI

  • ROI1:包含所有内容只做角度矫正。
  • ROI2:只包含手指区域,所有非手指区域被手指掩膜掩盖掉
  • ROI3:基于ROI2,手指区域沿着列方向对手指区域进行线性插值以扩展静脉区域,覆盖整个图像。最后resize到100 x 200

在这里插入图片描述

方法

总体结构

在这里插入图片描述

手指静脉图像中的背景变化受到沿着近红外光路的皮下组织厚度和脂肪含量变化的影响,多个视图的参与在不同视图背景之间的相关性中引入了复杂性和不可预测性。另一方面,相邻视角的血管模式,位于相同的空间区域,应该从视角中提取到强烈的相关性,尽管两个视角图片间存在视觉差别。因此,更应该考虑不同视角间的静脉模式相关性和不是那些背景间的。

在指静脉图像中,静脉和周围的背景联合影响成像结果,因此,不仅仅考虑不同视角模式间关系是至关重要的,也要考虑血管和背景间的局部相关性。

基于这些观察结果,我们提出里一个基于Transformer的模型,称为VPCFormer来进行多视角指静脉特征提取。VPCFormer主要由一些VPC编码器和NPM堆叠而成。具体来说,一个VPC编码器由一个VOAM和一个IFFN构成。通过引入血管掩膜,VPAM旨在增强血管信息间的交互通过视角间和视角内的注意力。IFFN用来有效聚合前面的注意力和内容信息。更进一步,NPM设计用来捕捉一个局部区域内的像素相关性。

给定一个多视角手指图片输入 { I i } i = 1 U \{I^{i}\}^U_{i=1} {Ii}i=1U U U U表示视角的数目。每个视角 I i I^i Ii被变换到数据token序列 X 0 i ∈ R H W p 2 × d X_0^i \in{\mathbb{R}^{\frac{HW}{p^2}\times d}} X0iRp2HW×d通过patch嵌入层,这里 p p p表示patch大小, H , W H,W H,W表示高宽, d d d表示token维度。对于第 l l l个VPC编码器,其第 i i i个视角的输出表达为 X l i X_l^i Xli。最后,VPCFormer提取了多视角指静脉特征 f f f来进行识别。

静脉掩膜生成

为了限制自注意力模块的注意力到静脉模式,有必要获取相应的静脉掩膜。

起初,我们需要获取血管模板来表示血管像素的位置。迄今为止,没有包含血管分割ground-truth的指静脉数据集存在。手工分割和标注不仅是费时费力,而且会对算法泛化性造成不好的影响。从先前的工作10获得灵感,可以使用一些现存算法的输出作为血管模板,缓和单方法的影响。采用四种可信赖的方法,LMC,Kumar,EMC和EIFNet,后者是唯一一个在THU-FVS上训练的。在融合步骤,采用一个多数投票机制:当一个像素被三个或更多的算法认证为血管点,那么就会被标注为血管,否则,标注为背景点。对于融合模板,血管点为1,背景点为0。

在这里插入图片描述

之后,由 H W p 2 \frac{HW}{p^2} p2HW元素组成指静脉掩膜。特别是,一个 p × p p\times p p×p的所有值被设为1方形掩膜应用。使用步长 p p p和血管模板进行卷积。卷积结果称为 M ^ \hat{M} M^,上面提到的操作表达为:
M ^ ( i , j ) = ∑ m = 0 p − 1 ∑ n = 0 p − 1 T ( p ⋅ i + m , p ⋅ j + n ) \hat{M}(i,j) = \sum_{m=0}^{p-1}\sum_{n=0}^{p-1}T(p\cdot i+m,p\cdot j+n) M^(i,j)=m=0p1n=0p1T(pi+m,pj+n)
T ( i , j ) T(i,j) T(i,j)表示位置 ( i , j ) (i,j) (i,j)的值。因此,静脉掩膜 M M M可以被计算为
M ( i , j ) = { 1 if  M ^ ( i , j ) ≥ ζ , 0 otherwise , \mathbf{M}(i,j)=\begin{cases}1&\text{if}\ \hat{\mathbf{M}}(i,j)\geq\zeta,\\0&\text{otherwise},\end{cases} M(i,j)={10if M^(i,j)ζ,otherwise,
ζ \zeta ζ是预先设定的阈值避免小数目血管像素造成的错误。

在这里插入图片描述

VPC编码器

虽然应用自注意力模块可以捕捉全局信息和长距离依赖,但是,直接应用这些模块到多视角输入,允许模型自动学习所有可能的长距离依赖是不合适的,因为受限于有限的训练样本和不同视角间背景的弱相关性,我们设计了基于多头自注意力的VPAM,来提取视角间和内的血管模式的相关关系。VPAM的整体结构如上图所示。

视角内相关性的提取

对于第 i i i个视角的数据token X i X^i Xi,相应的查询 Q i Q^i Qi,键值 K i K^i Ki和值 V i V^i Vi计算如下:
Q i = X i W q , K i = X i W k V i = X i W v \begin{aligned} Q^i &= X^iW_q,\\ K^i &=X^iW_k \\ V^i &= X^iW_v \end{aligned} QiKiVi=XiWq,=XiWk=XiWv
W q , W k W_q,W_k Wq,Wk W v W_v Wv d × d h e a d d\times d_{head} d×dhead维的可学习权重矩阵。基于这三个向量,第 i i i个视角的注意力分数矩阵 S i i S_{ii} Sii可以计算为 S i i = Q i ⋅ K i ⊤ S_{ii} = Q^{i}\cdot K^{i^{\top}} Sii=QiKi。为了限制模型注意力到血管模式,我们使用上乘的掩膜 M i M^i Mi来设置 S i i S_{ii} Sii的相关分数,将和背景token相关的相关分数设定为负无穷,即
S i i ~ = − ε ( 1 − M i ) + S i i \tilde{S_{ii}} = -\varepsilon(1-\mathbf{M}^i)+S_{ii} Sii~=ε(1Mi)+Sii
ε \varepsilon ε表示一个非常大的整数值,在这篇文章中, ε = 2 31 − 1 \varepsilon=2^{31}-1 ε=2311。接下来,我们使用 s o f t m a x softmax softmax S ~ i i \tilde{S}_{ii} S~ii转化为概率分布 P ~ i i \tilde{P}_{ii} P~ii:

P ~ i i = s o f t m a x ( S ~ i i d k ) \tilde{P}_{ii} = softmax(\frac{\tilde{S}_{ii}}{\sqrt{d_k}}) P~ii=softmax(dk S~ii)

d k d_k dk表示 K i K^{i} Ki的维度。在这里 P ~ i i \tilde{P}_{ii} P~ii只保留了在第 i i i个视角内的不同位置和血管模式间的相关信息,而忽略了和背景区域的联系。最终,基于概率分布 P ~ i i \tilde P_{ii} P~ii,视角内自注意力可以计算为

O i n t r a i = A t t e n t i o n ( Q i , K i , V i ) = P ~ i i ⋅ V i O_{intra}^i = Attention(Q^{i}, K^{i},V^{i}) = \tilde{P}_{ii}\cdot V^i Ointrai=Attention(Qi,Ki,Vi)=P~iiVi

视角间相关关系提取

提取视角间相关性的操作和视角内相似。对于来自两个视角的给定数据token X i X^i Xi X j X^j Xj,我们需要将来自视角 i i i的查询 Q i Q^i Qi和来自视角 j j j的键值 K j K^j Kj相乘来计算视角 i i i j j j不同位置的注意力分数。称为 S i j = Q i ⋅ K j ⊤ S_{ij} = Q^i\cdot K^{j^\top} Sij=QiKj。对于 S i j S_{ij} Sij的第 c c c行( S c ∗ S_{c*} Sc),主要表示 X i X^{i} Xi的第 c c c个token和 X j X^{j} Xj中所有token的注意力分数。类似地,我们需要限制视角 j j j的注意力区域。因此,通过使用视角 j j j​的血管掩膜来屏蔽模型对非血管区域的注意力

S i j ~ = − ε ( 1 − M j ) + S i j \tilde{S_{ij}} = -\varepsilon(1-\mathbf{M}^j)+S_{ij} Sij~=ε(1Mj)+Sij

在这里, S ~ c ∗ \tilde{S}_{c*} S~c表示和 X i X^i Xi的第 c c c个token和所有 X j X^j Xj的表示血管的token间的注意力分数。

就像之前着重提到的,视角间注意力的关键目标在于捕捉不同视角间包含血管模式的token的相关关系。显然,如果 X i X^i Xi的第 c c c个token表示背景区域, S ~ c ∗ \tilde{S}_{c*} S~c表示一个 X i X^{i} Xi中的背景token和所有 X j X^j Xj中的token的相关关系,阻止 X i X^i Xi背景token的相应注意力分数至关重要。然而,直接操作 S ~ i j \tilde{S}_{ij} S~ij会导致需要对 s o f t m a x softmax softmax输出做二外的操作,我们直接将 s o f t m a x softmax softmax概率分布的输出直接设置为
P ~ i j = ( M i ⋅ 1 ⊤ ) ⊙ s o f t m a x ( S ~ i j d k j ) \tilde{P}_{ij} = (M^i \cdot 1^\top)\odot softmax(\frac{\tilde{S}_{ij}}{\sqrt{d_{k^{j}}}}) P~ij=(Mi1)softmax(dkj S~ij)
⊙ \odot 是哈达玛积, 1 ∈ R H W p 2 × 1 1\in\mathbb{R}^{\frac{HW}{p^2}\times 1} 1Rp2HW×1表示一个元素全为1的列向量。在这里, P ~ i j \tilde{P}_{ij} P~ij专门保留了视角 i i i j j j血管token之间的联系。最后我们将视角间注意力操作的输出记为

O i n t e r i j = P ~ i j ⋅ V j O^{ij}_{inter} = \tilde{P}_{ij}\cdot{V}^{j} Ointerij=P~ijVj

输出融合

当我们获取了两种注意力输出 O i n t r a i O^{i}_{intra} Ointrai O i n t e r i j O^{ij}_{inter} Ointerij,我们直接将他们相加来获得VPAM最后的输出

O i = O i n t r a i + O i n t e r i j O^{i} = O^{i}_{intra} + O^{ij}_{inter} Oi=Ointrai+Ointerij

在这里插入图片描述

IFFN

在ViT,包裹行注意力信息的token会被送入两层MLP来增强特征学习。尽管如此,我们观察得出传统地前向网络(FFN)在指静脉特征提取任务上存在缺陷,因此造成显著的表现下降。

特别地,为了适应图像数据和更好组合前面的注意力,我们结合1x1卷积核地点卷积,和3x3卷积核地深度卷积。IFFN地具体结构如上图所示。

在IFFN,我们首先在空间上重新排列包含视角间和视角内注意力信息地token O i ′ ∈ R H W p 2 × d O^{i^{'}}\in\mathbb{R}^{\frac{HW}{p^2}\times d} OiRp2HW×d来获取视角特征映射 F i ∈ R d × H p × W p F^i \in{\mathbb{R}^{d\times \frac{H}{p}\times \frac{W}{p}}} FiRd×pH×pW。接下类,一个点卷积用来将通道从 d d d扩展为 4 d 4d 4d。这个技术增强了它在高维空间的表现能力。在这之后,我们应用一个深度卷积,在不显著增加参数数量的情况下增强注意力和内容信息。然后在通过一个点卷积将维度复原回 d d d

近邻感知模块(NPM)

为了补充模型捕捉局部近邻相关性的能力,提出了NPM。卷积操作天然拥有捕捉近邻内图像像素间相关性的能力。通过设置卷积核大小或者调整卷积层数调整这一能力。最后,我们提出了使用两层3x3卷积核的卷积层的NPM用来捕捉5x5近邻内的像素间相关性。为了减少参数量没有直接使用5x5卷积层。对于NPM的输入,来自各个视角的数据token被排列为空间结构映射图像网格,允许我们有效适应卷积操作

patch嵌入和输出层

patch嵌入

为了使用基于Transformer的模型处理,图像首先送入嵌入层,将每个不重叠的patch变成嵌入token嵌入。我们使用Visformer的patch嵌入来实现参数和表现的平衡。

输出层

在经过 L − 1 L-1 L1NPM和 L L LVPC编码器,得到所有视角的数据token, { X L i } i = 1 U \{X_L^i\}^U_{i=1} {XLi}i=1U。下一步是融合 { X L i } i = 1 U \{X_L^i\}^U_{i=1} {XLi}i=1U以全视角指静脉特征 f f f用来识别。特别地,对于第 i i i个视角,对于横跨 X l i X_l^i Xli的每个位置计算平均值来获得视角表达 f i f^{i} fi:

f i = 1 H W p 2 ∑ j = 1 H W p 2 x j i f^i=\frac{1}{\frac{HW}{p^2}}\sum_{j=1}^{\frac{HW}{p^2}}\mathbf{x}_j^i fi=p2HW1j=1p2HWxji

平均操作在保持全局信息的同时有助于减轻噪声的影响。为了将拼接的视角表达 [ f 1 , . . . , f u ] [f^1,...,f^u] [f1,...,fu]映射到目标特征空间,一个线性层被用来学习视角表达间的隐含关系最终获得多视角指静脉特征 f f f来进行识别。这个过程表达为

f = L i n e a r ( C o n c a t ( f 1 , . . . , f U ) ) f=Linear(Concat(f^1,...,f^U)) f=Linear(Concat(f1,...,fU))

在这里插入图片描述

对于提取到的特征,我们使用最近邻分类器,采用余弦相似度作为距离度量进行指静脉识别。

实验

实验设置

所有传统地方法在Matlab中实现,输入ROI顺序经过中值滤波和对比限制自适应直方图均衡。所有subspace方法在Matlab中实现,所有ROI reshape为64 下144没有额外的预处理。包含的深度学习方法通过移除最后的分类层和用circle loss替代softmax loss来裁剪用于特征提取。

单视角识别

在这里插入图片描述

三种基于方向性特征的传统方法视角间的性能损耗低,具有良好的鲁棒性

多视角识别
闭集协议

多视图指静脉识别是指同时使用来自不同视图的多个指静脉图像进行完整的身份验证。

在这里插入图片描述

开集协议

在这个部分,分配80%的类别(528)用于训练,剩下的20%(132)用于评估。更重要的是,评估涉及132个看不见的类,其中包括来自第一期的注册样本和来自第二会话的探测样本。

在这里插入图片描述

跨视角识别

在这里插入图片描述

即使是存在重叠区域的跨视角识别,基于深度学习的方法也可以提供可接受的结果。我们认为通过进一步的数据扩充,基于深度学习的方法可以在跨视角识别上获得持续提升。

进一步实验和讨论

多视角识别视角数的影响

在这里插入图片描述

因此,有必要明智地选择输入视图的数量,以在模型性能和模型复杂性之间取得最佳平衡。

消融实验

在这里插入图片描述

全局token的讨论

在ViT中,输入要在patch嵌入层之后拼接类别token,认为类别token可以起到全局表达的作用。只有类token用于特征提取或分类。而一些研究反对使用类别token,而建议在数据token上使用平均池化来获取全局特征。对于具体的基于多视角输入的研究,提出了视角token的概念。简单地说,视角标记只是从特定视图中提取信息,这可以被视为相应视图的特征。我们设计了以下策略:

  • 只有类token

类token的描述会打乱token序列的空间排列。因此,类别token不会进入NPM和IFFN的深度卷积层,也不会参与VPAM。为了促进类别和数据token之间的交换,我们引入了一个新的多头注意力模块在VPAM之后。MHSA操作只更新类别token而不更改数据token。最后,只有类别token被用于表达输出特征 f f f

  • 只有视角特征

类似的,加入视角token也会打乱数据token的空间排列。由于视角token只和相应视角内的数据token交互,通过增加额外的掩膜使视角token参与在VPAM的视角内自注意力。视角token前向传播方向如图12所示。通过在合适的位置分开视角和数据token,我们可以防止模型中任何数据token流的孙环。最后,所有视角token被直接拼接进入一个线性层。

在这里插入图片描述

  • 两种token

如上所述,视角token构成了每个单独视角的抽象,而类别token表达了一个全局特征。当结合这两种全局token时,我们保留了视角token的刘翔。除此之外,在VPAM后插入一个新的多头注意力,以特别促进所有视角token和类别token。

在这里插入图片描述

效果差可能是因为有限训练数据下提取不同全局信息的挑战。出乎意料地是,两种token的结合导致网络未能收敛,是ERR保持在50%。这个情况可能是因为视角token很难表达每个视角的全局信息。因此,类别token很难从视角token中获取全局信息。

位置编码的讨论

许多研究将Transformer结构和位置编码结合来捕获输入的空间信息。在实验中,我们调查了位置编码在VPCFormer中的作用。

因为输入是由多视角图片组合而成,我们提出两种策略A和B。

在这里插入图片描述

策略A:相同的正弦编码应用在每个视角的输入token,确保不同视角间同一的位置嵌入。

策略B:来自不同视角的token以视角顺序拼接在一起。这些token增加正弦位置编码之后再切分回原来的视角序列。在这种情况下,不同视角图片的位置编码是连续的。

结果显示提升很少,可能是因为卷积的引入使得网络继承了卷积建模局部特征的能力,导致位置编码效果下降。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员实用学习平台,必看榜!

只要卷不死,就往死里卷! 高中老师宣扬的励志鸡汤,仿佛走出了校园踏入社会仍然适用。 “出走半生,归来仍是少年。”emm....... 如今比麻花还卷的社会,学到老才能活到老啊~尤其咱们IT这么优胜劣汰的行业,自是…

性能测试百分百会问到且难度极高的面试题分享给大家,面试了16家公司,都有被问到!

今天给大家分享一波面试中经常被问到性能指标,希望能帮助大家,建议收藏~ 1、吞吐量 单位时间内,系统能够处理多少请求,吞吐量代表网络的流量,TPS越高,吞吐量越大,还包含了数据的吞…

Web常见标签属性

应用软件&#xff1a;c/s&#xff08;客户端与服务端&#xff09; b/s&#xff08;服务器与浏览器架构&#xff09;web前端&#xff1a;html5、css3、JavaScriptHtml5&#xff1a;超文本标记语言 超链接标签 语法规范<标签名> marquee 标签之间可以嵌套属性&#xff1a;…

第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-乘积尾零

solution 找末尾0的个数&#xff0c;即找有多少对2和5 >问题等价于寻找所给数据中&#xff0c;有多少个2和5的因子&#xff0c;较少出现的因子次数即为0的个数 #include <iostream> using namespace std; int main() {// 请在此输入您的代码printf("31");…

【机器学习300问】44、P-R曲线是如何权衡精确率和召回率的?

关于精确率和召回率的基础概念我已经写了两篇文章&#xff0c;如果友友还不知道这两个评估指标是什么&#xff0c;可以先移步去看看这两篇文章&#xff1a; 【机器学习300问】25、常见的模型评估指标有哪些&#xff1f;http://t.csdnimg.cn/JtuUO 总结一下这两个概念&a…

C语言动态内存管理

CSDN成就一亿技术人 目录 一.为什么要存在动态内存分配 二.动态内存函数 1.malloc和free 2.calloc 3.realloc 三.常见的动态内存错误 1.对NULL指针的解引用操作 2.对动态开辟空间的越界访问 3.对非动态开辟内存使用free释放 4.使用free释放一块动态开辟内存的一…

总结虚函数表机制——c++多态底层原理

前言&#xff1a; 前几天学了多态。 然后过去几天一直在测试多态的底层与机制。今天将多态的机制以及它的本质分享给受多态性质困扰的友友们。 本节内容只涉及多态的原理&#xff0c; 也就是那张虚表的规则&#xff0c;有点偏向底层。 本节不谈语法&#xff01;不谈语法&#x…

【MySQL】InnoDB引擎

逻辑结构 InnoDB存储引擎逻辑结构如图所示&#xff1a; Tablespace&#xff1a;表空间&#xff0c;一个数据库可以对应多个表空间。数据库中的每张表都有一个表空间&#xff0c;用来存放表记录、索引等数据。 Segment&#xff1a;段&#xff0c;表空间中有多个段&#xff0c…

R语言迅速计算多基因评分(PRS)

Polygenic Risk Scores in R 最朴素的理解PRS&#xff1a; GWAS分析结果中&#xff0c;有每个SNP的beta值、se值、P值&#xff0c;因为GWAS分析中将SNP变为0-1-2编码&#xff0c;所以这些显著的SNP的beta值&#xff0c;就可以用于预测。 比如&#xff1a;GWAS分析中&#xf…

iOS开发之SwiftUI

iOS开发之SwiftUI 在iOS开发中SwiftUI与Objective-C和Swift不同&#xff0c;它采用了声明式语法&#xff0c;相对而言SwiftUI声明式语法简化了界面开发过程&#xff0c;减少了代码量。 由于SwiftUI是Apple推出的界面开发框架&#xff0c;从iOS13开始引入&#xff0c;Apple使用…

成为创作者的第 730 天——创作纪念日

​​ 文章目录 &#x1f4e8; 官方致信&#x1f3af;我的第一篇文章&#x1f9e9; 机缘与成长 &#x1f3af; 成就&#x1f3af; 目标 &#x1f4e8; 官方致信 今天早上打开 CSDN 私信一看&#xff0c;看到了这一条消息&#xff0c;然后看了下日期。突然感慨到&#xff0c;是…

基于NetCoreServer的WebSocket客户端实现群播(学习笔记)

一、NetCoreServer介绍 超快速、低延迟的异步套接字服务器和客户端 C# .NET Core 库&#xff0c;支持 TCP、SSL、UDP、HTTP、HTTPS、WebSocket 协议和 10K 连接问题解决方案。 开源地址&#xff1a;https://github.com/chronoxor/NetCoreServer 支持&#xff1a; Example: TC…

Java中的代理模式(动态代理和静态代理)

代理模式 我们先了解一下代理模式&#xff1a; 在开发中&#xff0c;当我们要访问目标类时&#xff0c;不是直接访问目标类&#xff0c;而是访问器代理类。通过代理类调用目标类完成操作。简单来说就是&#xff1a;把直接访问变为间接访问。 这样做的最大好处就是&#xff1a…

基于Spring Boot网络相册设计与实现

摘 要 网络相册设计与实现的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品&#xff0c;体验高科技时代带给人们的方便&#xff0c;同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓&#xff0c;iOS相比较起来&am…

在微信小程序中或UniApp中自定义tabbar实现毛玻璃高斯模糊效果

backdrop-filter: blur(10px); 这一行代码表示将背景进行模糊处理&#xff0c;模糊程度为10像素。这会导致背景内容在这个元素后面呈现模糊效果。 background-color: rgb(255 255 255 / .32); 这一行代码表示设置元素的背景颜色为白色&#xff08;RGB值为0, 0, 0&#xff09;&a…

第八节:深入讲解SMB中的Http组件

一、概述 Http组作是SMB中的核心组件之一&#xff0c;在第七节中讲解了如何简洁的进行web程序部署和运行&#xff0c;这只是它的功能之一。在本节中&#xff0c;我们将介绍Http组件的重要属性。 二、请求头Request 1、支持方法 支持POST、GET、PUT、DELETE、OPTIONS等方法&a…

uniapp ios证书失效

前面是按照网上查找的方法 作者大大的地址 1、一个ios账户&#xff08;688付费版&#xff09; 2、登录 Apple Developer 3、创建Identifiers ps&#xff1a;创建时需继承苹果的sdk&#xff0c;只需要一个就行 点击continue再点击Register即可 4、创建.cer证书 &…

DP:斐波那契数列模型

创作不易&#xff0c;感谢三连支持 &#xff01; 斐波那契数列用于一维探索的单峰函数之中&#xff0c;用于求解最优值的方法。其主要优势为&#xff0c;在第一次迭代的时候求解两个函数值&#xff0c;之后每次迭代只需求解一次 。 一、第N个泰波那契数 . - 力扣&#xff08;…

AnyGo for Mac最新激活版:位置模拟软件打破地域限制

AnyGo for Mac&#xff0c;一款专为Mac用户打造的位置模拟软件&#xff0c;让您能够轻松打破地域限制&#xff0c;畅享无限可能。 软件下载&#xff1a;AnyGo for Mac v7.0.0最新激活版 通过AnyGo&#xff0c;您可以随时随地模拟出任何地理位置&#xff0c;无论是国内热门景点还…

Word2vec学习笔记

&#xff08;1&#xff09;NNLM模型&#xff08;神经网络语言模型&#xff09; 语言模型是一个单纯的、统一的、抽象的形式系统&#xff0c;语言客观事实经过语言模型的描述&#xff0c;比较适合于电子计算机进行自动处理&#xff0c;因而语言模型对于自然语言的信息处理具有重…