CVT-SLR: Contrastive Visual-Textual Transformation for Sign Language Recognition with Variational Alignment

论文地址https://arxiv.org/abs/2303.05725#:~:text=CVT-SLR%3A%20Contrastive%20Visual-Textual%20Transformation%20for%20Sign%20Language%20Recognition,task%20that%20annotates%20sign%20videos%20as%20textual%20glosses.

摘要

手语识别(SLR)是一种弱监督任务,它将手语视频注释为文本注释。近年来的研究表明,由于缺乏大规模可用的符号数据集而导致的训练不足成为单反识别的主要瓶颈。因此,大多数手语识别作品采用了预训练的视觉模块,并开发了两种主流解决方案。多流架构扩展了多线索视觉特征,产生了当前的SOTA性能,但需要复杂的设计,并可能引入潜在的噪声。另外,先进的单线索手语识别框架使用明确的视觉和文本模态之间的跨模态对齐,简单有效,可能与多线索框架竞争。在这项工作中,我们提出了一种新的视觉-文本对比单反转换,CVT-SLR,以充分探索视觉和语言模态的预训练知识。在单线索跨模态对齐框架的基础上,我们提出了一种预训练上下文知识的变分自编码器(VAE),同时引入了完整的预训练语言模块。VAE隐含地将视觉和文本模式对齐,同时受益于作为传统上下文模块的预训练上下文知识。同时,设计了一种对比跨模态对齐算法,显式增强了一致性约束。在公共数据集(PHOENIX-2014和PHOENIX-2014T)上进行的大量实验表明,我们提出的CVT-SLR方法始终优于现有的单线索方法,甚至优于SOTA多线索方法。源代码和模型https://github.com/binbinjiang/CVT- SLR

1 引言

手语作为一种特殊的视觉自然语言,是聋人群体的主要交流媒介[19]。随着深度学习的发展[1,17,25,39,42],手语识别(SLR)已经成为一项多模态任务,旨在将手语视频注释为文本符号。然而,SLR的一个重大困境是缺乏公开可用的手语数据集。例如,最常用的PHOENIX-2014[23]和PHOENIX-2014T[2]数据集仅包含约10K对符号视频和注释,远远不能像典型的视觉语言跨模态任务那样训练出具有完全监督的鲁棒手语识别系统[34]。因此,容易导致训练不足或过拟合问题的数据限制是手语识别任务的主要瓶颈。
弱监督手语识别的发展见证了大部分改进工作集中在视觉模块上(例如CNN)[9,10,15,29,32,33]。从人类行为的一般领域转移预训练的视觉网络成为缓解低资源限制的共识。主流的多流单反框架用多线索视觉信息扩展了预训练的视觉模块[3,22,24,43,48,50],包括独立流中的全局特征和区域特征,如手和脸。该方法的理论支持来自于手语语言学,手语利用多种互补的渠道(如手部形状、面部表情)来传达信息[3]。多线索机制本质上利用了对关键信息的注意力,从而产生了当前的SOTA性能。然而,多线索框架是复杂的(例如,裁剪多个区域,需要更多的参数),并且多个流的融合可能会引入额外的潜在噪声。
另一种主流的高级解决方案是单线索跨模态对齐框架[15,28],其中包括一个预训练的视觉模块,然后是一个上下文模块(例如,RNN, LSTM, Transformer)和一个基于连接主义时间分类(Connectionist Temporal Classification, CTC)[14]的用于生成光泽的对齐模块,如图1 (a)所示。显式跨模态对齐约束进一步改善了特征交互[15,28,38]。这可以被视为两种不同模态之间的一种一致性[50],促进视觉模块从上下文模块学习长期时间信息[13,37]。跨模态对齐框架简单有效,具有与多线索对齐框架竞争的潜力。尽管具有预训练视觉模块的复杂多线索架构具有先进的性能,但跨模态一致性在实际应用中是一种更优雅的设计。它还暗示了先验语境语言知识的潜力,这一点被现有的手语识别研究所忽视。

图1所示。(a)具有明确的跨模态对齐的先进单线索手语识别框架;(b)我们提出的具有显式跨模态对齐和隐式自编码器对齐的单线索单反框架。这两个框架都使用了预训练的视觉特征。但是我们的框架使用了自动编码器模块来取代主流的上下文模块,它不仅包含上下文模块的功能,而且可以引入完整的预训练语言知识和隐式的跨模态对齐。为了最大限度地保留完整的预训练语言参数和迁移的视觉特征,引入了视频光泽适配器。

在这项工作中,我们提出了一种新的视觉文本转换框架,称为CVTSLR,以充分探索视觉和语言模式的预训练知识,如图1 (b)所示。基于单线索跨模态对齐框架,CVT-SLR保留了预训练的视觉模块,但用变分自编码器(VAE)取代了传统的上下文模块。由于使用了完整的编码器-解码器架构,因此VAE负责基于伪翻译任务学习预训练的上下文知识,同时引入完整的预训练语言模块。此外,由于自编码器的形式,VAE保持了输入和输出模态的一致性,发挥了隐式的跨模态对准作用。此外,受对比学习的启发[4 - 6,34],我们引入了一种对比对齐算法,该算法同时关注正样本和负样本,以增强显式的跨模态一致性约束。在公共数据集PHOENIX-2014和PHOENIX2014T上进行的大量定量实验证明了所提出的CVT-SLR框架的先进性。通过消融研究和定性分析,验证了引入预训练语言知识和新的一致性约束机制的有效性。我们的主要贡献如下:
•提出了一种新的基于视觉文本转换的单反框架,该框架首次引入了完全预训练的语言知识,并为其他跨模态任务提供了新的方法。
•针对跨模态一致性约束提出了新的对齐方法:a)利用自编码器的特殊属性来隐式对齐视觉和文本模态;B)引入显式对比跨模态对齐方法。
•提出的单线索手语识别框架不仅大大优于现有的单线索基线,甚至超过了SOTA多线索基线。

2 相关工作

SLR任务一般分为三类[19]:手指拼写识别[18,30,31],孤立单词识别[26,40,41,49]和连续符号句子识别[8,11,12
,29,33]。早期,手语识别主要集中在词汇级任务上,如拼写识别和孤立词识别。目前,较为实用的连续符号句子识别任务已成为手语研究的主流。在本研究中,手语识别(SLR)特指连续符号句子识别。
最近的手语识别研究[8,11,15,29]是基于特征提取、识别和对齐这三个方面进行总结的。特征提取主要由视觉模块和上下文模块组成。视觉模块编码短期空间信息,而语境模块编码长期语境信息。基于提取的特征,分类器可以得到一个后验概率进行识别。校准模块需要在夹子和光泽之间找到适当的校准,以确保准确的训练程序。
一些研究通过纳入多线索信息扩展了常见的单反框架[22,24,43,44,48]。多线索特征主要包括手的形状、面部表情、嘴巴和姿势的信息。目前的SOTA单反工作是基于多线索机制,如C2SLR[50]。最近,一些研究表明,虽然只考虑单线索特征,但显式地强制视觉和文本模块之间的一致性也可以获得相当的性能。例如,VAC[28]将视觉模块和文本模块分别视为学生和教师,并实现了知识升华,使视觉和文本模态对齐。同样,SMKD[15]通过在不同模态之间进一步共享分类器来实现知识转移。注意,SMKD是当前的SOTA单线索方法。
值得一提的是,神经手语翻译[2,3,7,46]是另一种流行的手语任务。作为区别,神经手语翻译任务旨在将手语视频转换为等效的口语翻译,进一步关注语义关系并调整语序[2],而SLR任务仅在帧顺序上将手语视频注释为注释序列。

方法

如图2所示,我们的培训管道大致分为两个步骤。第一步是预训练一个VAE网络作为文本模块。步骤2是将现成的视觉模块(通常是在Kinetics/ImageNet上训练的公开可用的CNN)和预训练的文本模块从步骤1转移到CVT-SLR框架中。视频光泽度适配器用于连接这两个预训练模块。

3.1 文本模型预训练

我们的VAE模型是一种非对称编码器-解码器架构,其中编码器由自关注层组成,解码器由Bi-LSTM层组成,如图2顶部所示。为了仅基于PHOENIX-14训练集(不包括开发集和测试集)的gloss数据对我们提出的SLR框架的VAE进行预训练,我们构建了一个伪翻译任务,即gloss,该任务使V AE能够学习上下文语义知识。形式上,假设编码器的输入光泽度记为G,解码器的生成光泽度记为G *。
**后验自注意力编码器。**我们使用神经逼近和再参数化[21,35]技术来近似后验自注意力编码器,以生成后验分布qφ(z|G),其中φ表示编码器的变分参数。其中,qφ(z|G)为对角高斯分布N(µ,diag(σ2)),用两个单层MLPs分别参数化均值µ和方差σ2,分别为:

是标准高斯噪声,且表示与元素相关的产品。
生成式Bi-LSTM解码器。给定连续潜变量z,则由z生成的翻译目标G *为:

其中,θ表示生成式Bi-LSTM解码器的参数,pθ(G∗|z)是对解码器估计的生成过程进行建模的条件分布。
**变分优化。**生成模型pθ(G∗,z)和后验推理模型qφ(z|G)以端到端的方式紧密结合,我们可以应用标准的反向传播来优化变分下界的梯度:

其中KL表示Kullback-Leibler散度,先验pθ(z)表示标准高斯分布。实际上,Eq.(3)的第一个KL项可以写成:

由于我们的主要目标是一个gloss翻译任务,我们使用交叉熵损失来最大化生成gloss概率,作为Eq.(3)的第二项:

因此,文本模型预训练的总体优化目标是LKL和Lgloss2gloss的联合损失,为:

3.2 训练CVT-SLR框架

3.2.1 训练管道

在CVT-SLR框架中,我们通过video-gloss适配器依次连接预训练的视觉CNN模块和预训练的文本VAE模块,如图2所示。选择预训练的ResNet18模型[17]作为分帧特征提取器,在大规模人类动作数据集上进行训练。对于V AE模块,虽然在第1步的重参数化过程中引入了高斯噪声,但在第2步将V AE迁移到单反框架后,我们没有添加任何噪声。这样,VAE的再参数化模块退化为两个共同的线性层,即在式(1)中去掉。
形式上,给定一个T帧RGB的符号视频,视觉模块由2D-CNN层堆叠和全局平均池化层组成,首先提取空间特征在这里插入图片描述
。然后文本模块进一步提取时间特征。最后,对齐模块利用CTC计算基于时间特征s的光泽标签序列的条件概率,其中是生成的具有N个光泽的符号光泽序列。在视觉模块和文本模块之间使用共享分类器分别生成空间概率和时间概率。提出的对比跨模态对齐算法进一步增强了不同模态之间的一致性。

3.2.2 Video-Gloss适配器

为了最大限度地保留预训练的视觉和文本知识,我们使用视频-光泽适配器连接时空特征,如图2所示。视频丢失适配器简单地实现为具有两个隐藏层的完全连接的MLP。我们将CNN输出概率作为适配器的输入,其中使用预训练VAE[7]的预训练词嵌入的权重初始化最终的完全连接层。
由于在步骤1的文本模型预训练过程中,输入和输出都是同一文本形式,因此在步骤2中,V AE被转移到CVT-SLR框架后,起到了隐式的跨模态对齐作用,接近于一致性的效果。因此,视频丢失适配器本质上是激活空间和时间模态之间一致性的中介。

3.2.3 CTC对齐

由于手势视频的时空性质,光泽具有一对多映射到视频帧,但共享相同的顺序。与口语文本不同,连续的光泽注释与手势视频的时间顺序一致。具体来说,对于输入符号视频F和相应生成的光泽序列G,我们使用CTC通过边缘化所有可能的F到G对齐来计算

其中π表示一条路径,B为g对应的所有可行路径的集合,概率p(π|F)由文本模块计算。CTC损失可表示为:
:
其中G *为基础真光序列。

3.2.4 对比对齐

调整视觉和文本模式有助于提高手语识别[28]。为了强制跨模态的对齐约束,我们提出了对比对齐损失。此外,共享分类器也被用作视觉和文本特征之间的改进技术[15]。

表1。PHOENIX-14数据集上的性能比较(%)。DEL/INS:删除错误和插入错误。每组的最佳结果和SOTA基线用粗体和下划线标记。

在以往的手语识别研究中,跨模态对齐只关注正样本[15,48]。受对比学习[5,16,45]的启发,我们在同一个小批量中构建正、负样本,并实现对比跨模态对齐方法,以确保相似特征更近,不同特征更远。令CNN归一化的空间特征为, VAE归一化的时间特征为,其中B为样本数。然后我们首先计算对矩阵为:

对矩阵(记为P)为例,P[i, j](0≤i, j < B)表示第i批视觉特征与第j批文本特征之间的相似度值。来自相同输入实例的视觉和文本特征为正样本,来自其他不同输入实例的特征为负样本。因此,在矩阵P中,对角线相似值来自正样本对,其余值来自负样本对。为了使损失计算易于微分,我们将正对和负对的计算转化为二元分类任务[34]。值i对应于矩阵P的第i行是一个积极的标签。因此,P对应的标签为labels ={0,1,···,i,···,B},则与相关的对比对齐损失为:

类似地,V2Spair时空对齐损失为:

因此,完全对比对准损失为:

总的来说,CVT-SLR的目标是联合优化CTC损耗Lctc和对比对准损耗Lalign为:

4 实验

4.1 设置

数据集。我们使用PHOENIX-2014[23]和PHOENIX2014T[2]作为数据集,其中提供了RGB视频及其相应的注释。PHOENIX-2014是一个关于天气预报的德国手语识别数据集,词汇量为1081,分为三个部分:5672训练实例,验证实例540个,测试实例629个。PHOENIX-2014T是PHOENIX-2014的扩展,词汇量为1,085,也分为三个部分:7,096个用于训练,519个用于验证,642个用于测试。
评价指标。单词错误率(WER)是评估单反性能最广泛使用的指标,它衡量与参考句子相比,识别句子中必要的插入、替换和删除的数量。WER是一个编辑距离,表示替换(#sub)、插入(#ins)和删除(#del)将预测的句子转换为引用序列(#reference)的最少操作次数:

实现细节。视频被调整为256 × 256,然后裁剪为224 × 224。在单反训练中,我们使用随机裁剪和水平翻转(50%)来增强数据。在手语识别测试中,我们只采用中心裁剪。光束搜索用于光泽度生成。我们的可视化模块具有与[15]相同的配置。V AE模块依次包含两个4个头的多头自注意层和两个2 × 512维隐藏状态的Bi-LSTM层。使用Adam[20]优化器预训练我们的vae网络,batch size为16,初始学习率为1e-4。使用AdamW[27]优化器训练我们的单反框架,批大小为8,学习率为1e-4,权重衰减为1e-4。使用1个NVIDIA A100 80GB GPU

4.2 主要结果

表1和表2显示了我们对两组不同基线的比较,其中组1包括单线索基线,组2包括多线索基线。表示我们训练过的CVT-SLR框架,它只有两个变量,“VAE”和“Contra”。其中,“w/o (w/) V AE”表示无(with)预训练参数转移的CVTSLR框架中的VAE模块,“w/o (w/) Contra”表示无(with)对比对齐损失的CVT-SLR框架训练。
对PHOENIX-14的评价表1显示了我们的方法与PHOENIX-14上其他方法的比较。我们的单线索CVT-SLR (our4)在开发集和测试集上的最佳WER分数分别为19.8%和20.1%。在第1组(Ours4 vs. SMKD)中,Ours4在基于视频的单线索方法中表现最佳。此外,在没有使用额外线索的情况下,我们的CVT-SLR在第2组使用额外线索(即多线索方法)训练的模型中取得了最好的结果(our4 vs. C2SLR)。
从组3的组内比较中,我们发现既没有迁移预训练的V AE参数也没有使用对比对齐约束的情况Ours1表现最差。尽管如此,相对于其他群体,它仍然表现良好。在Ours1的基础上,CVT-SLR框架只配置预训练的VAE参数(Ours2)或对比对准约束(Ours3)也可以获得增益,预训练的VAE带来的增益更明显(+0.9%/+1.1% vs +0.7%/
+0.7%)。总体而言,第3组的研究表明,来自预训练文本模块的先验语言知识和通过跨模态对齐的对比约束对我们的单反框架都起着重要的增强作用。
对PHOENIX-14T的评价在表2中,我们评估了PHOENIX-14T上的CVT-SLR。我们可以看到,我们的最优模型(our4)在这个数据集中也达到了最佳的表现(开发集:19.4%,测试集:20.3%)与第1组(our4 vs. SMKD)相比,仅基于视频/单一线索信息。值得一提的是,SOTA单线索方法(SMKD)在PHOENIX-14T上的工作未能超越多线索基线。我们的CVT-SLR弥补了他们的缺点,同时在该数据集的第2组中优于SOTA多线索基线(our4 vs. C2SLR)。
与PHOENIX-14T上的组3比较,观察到的结论与PHOENIX-14上的结论大致相同,即预训练的文本模块和提出的对比对齐约束对我们的CVT-SLR框架都有有益的影响。但预训练文本模块在PHOENIX-14T上的增益比PHOENIX-14上更显著(+1.7%/+1.6% vs.+0.9%/+1.1%),表明先前的语言知识对该数据集更有利。

表2。在PHOENIX14T数据集上的性能比较(%)。每组的最佳结果和SOTA基线分别用粗体和下划线标记

4.3 消融实验

我们在我们的框架中研究了所提出的预训练模块和对齐损失权值的有效性。

4.3.1 预训练模块

为了说明预训练模块在CVT-SLR框架中的重要性,我们在PHOENIX-14上对预训练的视觉模块(CNN模块)和预训练的文本模块(VAE模块)进行了消融研究,如表3所示。
总的来说,两个预训练模块都是有用的。比较#1和#3,我们发现预训练的视觉特征对性能的影响更大,这与我们保留预训练的视觉知识的原因是一致的。令人惊讶的是,比较#1和#2,我们发现没有视觉模块的预训练参数,即只使用预训练的文本模块,我们的CVT-SLR性能也大大提高。值得注意的是,这是一个新的观察,没有在以前的单反作品广泛探索。这些对比表明,预训练的VAE模块已经学习到足够的语言知识来提高单反任务。比较3和4进一步证实了这一点。
为了验证预训练模块对训练收敛速度的有效性,表3对应的训练损失曲线如图3所示。具体来说,比较#1和#2(或#3和#4),配置预训练的文本模块可以促进更快的收敛并更早地达到稳定状态。同样,比较#1和#3(或#2和#4),与预训练的文本模块相比,预训练的视觉模块可以加快收敛速度。从损失曲线可以看出,收敛程度与WER评分的最终评价绩效呈正相关。

表3。预训练模块在PHOENIX-14上的消融研究(Pre-Visual:预训练的视觉模块,Pre-Language:预训练的文本模块)。最好的结果被加粗。

图3。预训练模块消融研究对应的训练损失曲线见表3。

4.3.2 对齐损失权重

利用CTC损失和对比对准损失共同优化CVT-SLR识别光泽的训练。为了探讨损耗权重的影响,我们对不同CTC损耗权重和提出的对比对准损耗进行了消融研究,如表4所示。为简单起见,我们将CTC损失的权重设置为固定值1.0。在表4中,没有对比对齐损失(weight=0)的#1在最优配置(#2,#3)下比具有对比对齐的模型表现得更差,这也说明了所建议的对比对齐的增益效应。如表4中的#2-#5所示,我们将对齐损失的权重从1.0增加到1000.0。当对比损失的权重增加时,性能开始上升,权重值为10.0时达到峰值。随着权重的增加,该值大于10.0,性能反而开始下降。这项消融研究表明了所提出的对比对准的重要作用。通过平衡CTC损耗和对比对准损耗之间的权重,使模型达到最优性能。

图4。在PHOENIX-14测试集上,有四个跨模态对齐矩阵(左)、显著性映射(中)和生成的光泽(右)的示例。跨模态对齐矩阵显示了视觉和文本特征之间的对齐,而显著性地图显示了手势上最高的激活区域。

4.4. 定性分析

我们从PHOENIX-14测试集中随机抽取4个样本进行定性分析。每个示例显示一个对齐矩阵、一系列显著性映射和生成的光泽,如图4所示。对齐矩阵显示了视觉和文本特征之间的对齐关系,而显著性图显示了最高的激活。

**跨模态对齐矩阵的可视化。**从图4中的这四个对齐矩阵可以看出,参考和推断的光泽几乎相同,WER分数也很低,性能也比较完美。因此,对齐矩阵的高亮区域集中在对角线附近,这意味着我们的对比对齐算法在对齐视觉和文本特征方面起着至关重要的作用。
**可视化的显著性地图。**我们使用GradCAM[36]将标识视频帧的关键部分可视化,如图4所示。结果表明,对于较好的推断,显著性图中的显著空间特征主要集中在面部和手部区域。这一观察结果与手语知识一致[3,19],手语主要依靠手的形状和面部表情来传递信息。

5 结论

在这项工作中,我们提出了一种新的视觉文本对比转换框架,称为CVT SLR,通过充分探索视觉和语言模态的预训练知识,进一步缓解了训练不足的问题。我们首次通过基于VAE的预训练文本模块将先验语言知识引入到单线索CVT-SLR中。此外,我们还提出了跨模态一致性约束的新方法。一种方法利用自动编码器的属性来隐式地对齐视觉和文本模式。而另一种方法引入了对比的跨模态对齐,以实现显式一致性。为了证明所提出的CVT-SLR框架,进行了大量的定量实验和定性分析,表明我们的单线索CVT-SLR不仅大大优于单线索基线,而且优于SOTA多线索方法。
总的来说,我们希望我们的CVT-SLR可以激发单反社区从新的方面挖掘预训练模块,设计一个更有效的单反框架用于实际使用。在未来的工作中,我们计划引入大规模的预训练语言模型来指导文本模块学习,并进一步探索先验语境语言知识在单反任务中的潜力。

CVT-SLR: Contrastive Visual-Textual Transformation for Sign Language Recognition with Variational Al相关推荐

  1. Spatial-Temporal Multi-Cue Network for Continuous Sign Language Recognition

    论文解读与个人理解(欢迎小伙伴们指正):Spatial-Temporal Multi-Cue Network for Continuous Sign Language Recognition Abst ...

  2. wp7开发实例:Baby Sign Language

    These days, it's quite common for parents to teach their babies a limited amount of sign language be ...

  3. 论文阅读(三):Text2Sign: Towards Sign Language Production using Neural Machine Translation and GAN

    Abstract 概述:我们提出了一种新的方法,利用最近的发展神经机器翻译(NMT),生成对抗性网络(GANs)和运动生成来生成手语.我们的系统能够从口语句子中生成手语视频.与当前依赖于大量注释数据的 ...

  4. 论文阅读 【CVPR-2022】 A Simple Multi-Modality Transfer Learning Baseline for Sign Language Translation

    论文阅读 [CVPR-2022] A Simple Multi-Modality Transfer Learning Baseline for Sign Language Translation st ...

  5. 论文阅读(一):Hierarchical LSTM for Sign Language Translation

    Abstract SLT (Sign Language Translation) 手语翻译 CTC (Connectionist temporal classification) 连接主义时间分类 l ...

  6. 【CVPR2019】论文完整列表一

    CVPR 2019 Paper list No.1-1000 ?CVPR2019 完整列表二 论文题目与链接 Finding Task-Relevant Features for Few-Shot L ...

  7. ECCV2022论文列表(中英对照)

    Paper ID Paper Title 论文标题 8 Learning Uncoupled-Modulation CVAE for 3D Action-Conditioned Human Motio ...

  8. CVPR2019论文题目中文列表

    英文题目 中文题目   Finding Task-Relevant Features for Few-Shot Learning by Category Traversal 少镜头学习中用类别遍历法寻 ...

  9. (九:2020.08.27)CVPR 2019 追踪之论文纲要(译)

    CVPR 2019 追踪之论文纲要(修正于2020.08.28) 讲在前面 论文目录 讲在前面 论坛很多博客都对论文做了总结和分类,但就医学领域而言,对这些论文的筛选信息显然需要更加精细的把控,所以自 ...

最新文章

  1. 教你如何实现c#文件上传下载功能
  2. canvas实现半圆环形进度条
  3. “云计算的前世今生·从阿里看云计算”内蒙古师范大学刘晨旭博士专题报告会顺利召开...
  4. python运行原理_Python线程池及其原理和使用(超级详细)
  5. C语言 const 修饰变量 - C语言零基础入门教程
  6. mysql 游标的简单_mysql 简单游标
  7. idea一直在 downloading plugins for ... 失败
  8. 【写作技巧】毕业论文写作资料搜索库大全
  9. 牛客练习赛20:D. 最短路2
  10. python中else与if的匹配原则是什么_if-else语句中,if和else的配对原则各是什么
  11. linux系统连接实验室服务器步骤详解
  12. Windows内核的基本概念
  13. 向对话框传递数据DialogBoxParam;获取对话框返回的数据DialogBox;EndDialog;强制转换;
  14. matlab 画散点图后添加趋势线
  15. wwwscan目录扫描器的逆向分析
  16. Python快速下载M3U8电影
  17. TiDB学习笔记(七)-数据库系统优化
  18. Python使用rawpy获取相机图像的原始RAW数据
  19. 国产即时通讯软件如何选型?
  20. 3D赛车游戏架构设计

热门文章

  1. 2022年医院三基考试护理考试模拟试题卷及答案
  2. Flash钓鱼->CS上线(免杀过火绒、360等)
  3. KMP算法详解 转帖
  4. 避免每逢佳节胖三斤,我们一起来引体向上
  5. 利用Python将视频转为字符动画
  6. The guard slid out of the room and Anna prepared for work. cheap kobe 8
  7. vue之table表格的合并
  8. jQuery学习:日期控件 layui -laydate
  9. 拆解搜狗:AI护城河与生态进化论
  10. JSP与ASP.Net之间的Session值共享