用于人体行为识别的三维卷积神经网络

摘要:我们考虑在监控视频中自动识别人体行为。当前大多数方法是基于原始输入计算得到的复杂手工特征构建分类器。卷积神经网络(CNN)是一种可以直接作用于原始输入的深度模型。但是,此类模型目前仅限于处理2D输入。在本文中,我们开发了一种新的3D CNN动作识别模型。该模型通过执行3D卷积从空间和时间维度中提取特征,从而捕获在多个相邻帧中编码的运动信息。开发的模型从输入帧生成多个信息通道,最终的特征表示组合来自所有通道的信息。为了进一步提升性能,我们提出使用高级功能对输出进行规范化,并结合各种不同模型的预测。我们应用开发的模型来识别机场监控视频的真实环境中的人类行为,并且与基线方法相比,它们实现了卓越的性能。

关键字:深度学习,卷积神经网络,3D卷积,模型组合,动作识别

1.介绍

在真实环境下识别人体动作在各种各样的领域下获得了应用,包括智能视频监控、消费者属性、购物行为分析。然而,由于杂乱的背景、遮挡、观测点的变化等,准确的动作识别是一项较高的任务。因此,大多数已存的方法是对于任何环境下拍摄的视频有一个确定的假设(例如,小范围和观测点变化)。然而这种假设很少在实际环境中出现。此外,大多数这些方法遵循一个模式识别的传统模式,包含两步,第一步是从原始视频帧中计算复杂的手工特征,第二步是依赖于这些获得的特征学习分类。在真实世界的情景下,很难知道对于目前这个任务,哪个特征是重要的,而特征的选择与这个问题高度相关。特别是对于人体动作识别,不同的动作类别可能会因为其外表和运动模式,出现戏剧性的差异。

深度学习模型是机器学习的一个类别,它可以通过从低级别特征中建立高级别特征,从而学习到层级特征,因此特征的构建是一个自动的过程。这种学习机器可以通过任何一个监督或者非监督方法进行训练,并且在视觉目标识别、自然语言处理、自动分类任务、音频分类,脑 - 机交互,人类跟踪,图像恢复,去噪和分割任务上展示出竞争性的性能。卷积神经网络是一种深度模型,可训练的滤波器和与之相邻的pooling操作,交替地应用在原始输入图像上,产生一个越来越复杂的层级特征。已经证明,当使用合适的正则化训练时,CNN在视觉目标识别任务中,不依赖于手工特征,可以实现极好的性能。此外,CNN已经被证实,对于输入的特征变化相对来说不太敏感。

在自动特征构建上,作为一个有吸引力的深度模型,CNN主要应用于2D图像上。在这篇文章中,我们将CNN用于视频中的人体动作识别。在这个方向上的一个简单的方法就是,直接将视频帧作为静止图像,在独立的帧层级上用CNN进行动作识别。事实上,这种方法已经应用于胚胎发育的视频分析中。然而,这种方法并不能考虑编码在连续多帧之间的运动信息。为了有效的在视频分析中结合运动信息,我们提出,将3D卷积应用在CNN的卷积层中,因此可以捕捉时间和空间维度上有辨识的特征。我们展示出,通过在输入的同一位置上采用多个不同的卷积操作可以提取多种类别的特征。基于提出的3D卷积,可以设计不同的3DCNN架构用来分析视频数据。我们提出一种3DCNN架构,从相邻视频帧之间产生多通道信息,并且分别在每一个通道上执行卷积和下采样操作。最终的特征表示是通过多通道信息的结合获得的。CNN模型一个额外的优点是,由于其前向反馈的特性,识别阶段特别有效率。

我们在TREC Video Retrieval Evaluation (TRECVID)数据集上验证3DCNN模型。这个数据包含了在伦敦机场记录的有监督视频数据。我们构建了一个多模块事件检测系统,其中包括3DCNN作为一个模块,并且参与了监督事件检测的TRECVID 2009验证的三个任务。我们的系统在所有三个参与的动作类别(即CellToEar,ObjectPut和Pointing)上实现了最佳性能。为了对3DCNN模型提供独立的验证,我们在这篇文章中,在TRECVID 2008 development数据集上记录其性能。我们也提出了在KTH数据集上的结果作为发表,表示这个数据也是可用的。我们的实验展示出,在TRECVID数据集上,3DCNN模型比其他基线处理方法要做得好,并且在KTH数据上,没有依赖于手工特征,也实现了较好的性能,这些表明,和在TRECVID数据集上获得的一样,3DCNN模型在真实世界环境时更有效的。这个实验也提出了,对于大多数任务,3DCNN模型比基于帧的2DCNN明显做得更好。我们也观察了3DCNN和其他方法性能上的差异,当正训练样本的数量比较小时,这个差异更大。

这项工作的主要贡献可归纳如下:

  • 我们提出应用3D卷积运算从视频数据中提取空间和时间特征以进行动作识别。 这些3D特征提取器在空间和时间维度上操作,从而捕获视频流中的运动信息。
  • 我们开发了基于3D卷积特征提取器的3D卷积神经网络架构。该CNN架构从相邻视频帧生成多个信息信道,并在每个信道中分别执行卷积和子采样。最终的特征表示是通过组合所有频道的信息获得的。
  • 我们提出通过增加具有作为高级运动特征计算的辅助输出的模型来规范3D CNN模型。 我们进一步提出通过组合各种不同架构的输出来提高3D CNN模型的性能。
  • 我们在TRECVID 2008开发集上评估3D CNN模型,与基线方法和替代架构进行比较。实验结果表明,所提出的模型明显优于2D CNN架构和其他基线方法。

本文的其余部分组织如下:我们在第2节中描述了TRECVID动作识别系统中使用的3D卷积运算和3D CNN架构。第3节讨论了一些相关的动作识别工作。实验结果如下: TRECVID和KTH数据在第4节中报告。我们在第5节中总结了讨论。

2. 3D卷积神经网络

在2DCNN中,在卷积层上,2D卷积操作是在上一层特征图的局部邻域中抽取特征。然后应用一个添加的偏置值,将结果传给一个sigmoid函数。正式上,在位置(x,y),在第i层,第j个特征图上,其单位值表示为(x,y),并且由以下公式给定。

其中,tanh是一个双曲正切函数,bij是对于这个特征图的一个偏置值,m是一个i-1层特征图连接到当前特征图的集合的坐标,w(pqijm)是连接第m个特征图,在核位置(p,q)出的权值,Pi和Qi是核的高度和宽度。在下采样层,在前一层的特征图上,通过局部邻域的池化,减少特征图的分辨率,从而增加输入扭曲的不变性。一个CNN架构可以这样构建,通过一种交替的方式,堆叠多层卷积操作和下采样操作。CNN的参数,例如偏置值bij,核权重w(pqijm),通常采用监督或非监督的方法来训练。

2.1 3D卷积

在2DCNN中,卷积操作只是从空间维度上将其应用在2D特征图上计算特征。当处理视频分析问题时,需要捕捉编码在连续帧之间的动作信息。为了这个目的,我们提出,在CNN的卷积操作阶段,执行3D卷积操作来同时从时间和空间维度上捕捉特征。3D卷积操作是这样实现的:通过同时堆叠多个连续帧形成的立方体与一个3D核进行卷积。通过这个构建,卷积层上的特征图连接到了前一层的多个连续帧,从而捕捉动作信息。形式上,在第i层、第j个特征图的(x,y,z)位置上,值由以下公式给定:

其中,Ri表示3D核在时间维度上的大小,w(pqrijm)是连接到在前一层中,第m个特征图的核的第(p,q,r)的值。2D和3D卷积操作的对比可以见图1。

图1: 2D(a)和3D(b)卷积操作的对比。在b中,卷积核在时间维度上的大小是3。连接设置是颜色编码,因此共享权重是相同颜色。在3D卷积操作中,同样的3D核应用于输入视频中重叠的3D立方体中,来提取动作特征。

注意,一个3D卷积核只能从帧立方体中提取一个特征,因此核权重可以重复地应用于整个立方体。CNN的总体设计原理是,通过从相同的低层特征图集合中生成多种类型的特征,增加特征图的数量。类似于2D卷积操作的情况,可以通过这样来实现,在前一层的相同位置,与不同的核,采用多个3D卷积操作(图2)。

图2: 从连续帧中提取多个特征。多个3D卷积可以应用于连续帧中提取多个特征。在图1中,连接集合是以颜色编码的,因此共享权重是相同的颜色。注意,所有连接的6个集合没有共享权重,结果导致右边两个不同的特征图。

2.2 一个3DDNN架构

基于前面描述的3D卷积操作,可以设计不同的CNN架构。在下文中,我们描述一个3DCNN架构,用来处理TRECVID数据集上的人体动作识别。如图3展示的架构中,我们将以当前帧为中心的、大小为60x40的7帧图像作为3DCNN的输入。我们第一次采用一系列硬连线核的核,从输入帧中产生多个通道的信息。结果是在第二层中,有33个特征图,有5个不同的通道,包括灰度、横坐标梯度x、纵坐标梯度y、光流x、光流y。灰度通道包含了7个输入帧的灰度值。在梯度x和梯度y通道,是通过沿着水平方向和垂直方向,分别计算7个帧得到的。光流x和光流y通道,是光流场分别通过沿着水平方向和垂直方向,从相邻输入帧之间计算得到的。硬线层用来编码我们已知的特征上的内容,并且与随机初始化相比,这种形式与可以带来更好的性能。

图3: 关于人体动作识别的3DCNN架构。这个架构包含了1个硬线层、3个卷积层、2个下采样层、1个全连接层。详细描述在文本中给出。

接着,我们将3D卷积操作分别用在5个通道上。卷积核大小为7x7x3,7x7是空间维度,3是时间维度。为了提高特征图的数量,两个不同的卷积集用在每个位置上。这导致2个特征图在C2层上,会各自产生23个特征图。这个层包含了1480个训练参数。在最后的下采样层S3,我们采用2X2大小的滑动窗口应用于C2层的每一个特征图上。这导致了相同的特征图数量,但减少了空间上的分辨率。训练参数在这一层上是92个。下一个卷积层是C4,通过卷积核大小为7x7x6,分别在两个特征图的5个通道上做3D卷积操作。为了提高特征图的数量,我们在每一个位置分别采用3个不同的卷积核操作,这导致了C4层上6个不同特征图集合,每一个集合都包含13个特征图。这一层包含了3810个训练参数。下一层是S5,在C4层的每个特征图上。采用3x3的窗口进行下采样,这将导致相同的特征图数量,但其分辨率下降。这一层的训练参数是156。现在阶段,时间维度的大小相对来说较小(灰度、梯度x、梯度y共3个,光流x、光流y共2个),因此在这一层,我们只将卷积作用在空间维度上。卷积核的大小为7x4,因此输出特征图的大小减为1x1,其中的每一个都连接了S5层的所有的78个特征图,这将有289536个训练参数。

通过多层的卷积、下采样操作,7帧输入图像转换为捕捉了输入帧中的动作信息的128D特征向量。输出层包含了与动作数量相同单元数,每一个单元都连接了C6层的128个神经元。在这个设计中,本质上我们在128D特征向量上线性分类来进行动作识别。对于一个3个类别的动作识别问题,在输出层的训练参数有384个。在这个3DCNN模型上总的训练参数有295458个,所有这些参数都随机初始化,并且使用在线误差后向传播算法进行训练。我们设计并且验证了其他3DCNN架构,并且在不同阶段结合了多通道的信息,我们的结果表示出,这个架构给出了最好的性能。

2.3 模型规范化

由于随着输入窗口的大小增加需训练参数的数量也在增加,3D CNN模型的输入限制于少量连续视频帧。另一方面,许多人体行为跨越了许多帧。因此,期望编码高级运动信息到3D CNN模型中。为此,我们提出从大量帧中计算运动特征,并使用这些运动特征作为辅助输出来规范3D CNN模型(图4)。类似的想法已被用于图像分类任务[35],[36],[37],但其在行动识别中的表现尚不清楚。特别地,对于每个训练动作,我们生成特征向量,该特征向量将包含在输入帧立方体中的信息之外的长期动作信息编码到CNN。然后,我们鼓励CNN学习接近此功能的特征向量。这是通过将多个辅助输出单元连接到CNN的最后隐藏层并在训练期间将计算的特征向量嵌在辅助单元上来实现的。这将鼓励隐藏层信息接近高级运动特征。关于该方案的更多细节可以在[35],[36]和[37]中找到。在实验中,我们使用由在原始灰度图像和运动边缘历史图像(MEHI)[41]上计算的密集SIFT描述符[40]构造的词袋特征作为辅助特征。结果表明,这种正则化方案可以实现一定的性能改进。

2.4 模型组合

基于3D卷积运算,可以设计各种3D CNN架构。在本文考虑的架构中,2.2节中介绍的架构在TRECVID数据上产生了最佳性能。但是,对于其他数据集可能不是这种情况。为问题选择最佳架构具有挑战性,因为这取决于具体的应用。另一种方法是构建多个模型并将这些模型的输出结合起来进行预测[42],[43],[44]。该方案也被用于组合传统神经网络[45]。然而,尚未研究模型组合在卷积神经网络中用于动作识别的影响。在本文中,我们建议构建具有不同体系结构的多个3D CNN模型,从而从输入中捕获可能的补充信息。在预测阶段,输入被给予每个模型,然后组合这些模型的输出。实验结果表明,该模型组合方案在提高3D CNN模型在动作识别任务中的性能方面非常有效。

2.5 模型实现

本文的3D CNN模型用C++实现,它是属于NEC’s行为识别系统的一部分(具体见参考文献[2])。关于CNN具体的实现细节是基于原始CNN的(具体见参考文献[3][4])。所有的子采样层都是最大子采样。用于训练规则化模型的整体代价函数是由真实的行为类的误差和高层特征的辅助输入的代价项的线性加权得到。权值分别是1和0.005(经验值)。模型的所有参数都是随机初始化,然后通过随机diagonal Levenberg-Marquardt方法来优化训练。在这个方法中,先通过1千个随机采样的样本来得到一个近似Hessian矩阵的Gauss-Newton近似,然后使用它的对角项来决定每个参数的学习速率。

3、相关工作

CNN关于视觉识别,是属于生物学上启发的一个模型,其他变形也在这个家族中有所发展。受到视觉皮层组织的启发,一个简单的模型,称为HMAX,发展为视觉目标识别。在HMAX模型中,通过模板匹配和最大池化的交替应用,越来越复杂的特征层级被构建出来。特别地,在S1层,一个静止的输入图像,被一系列Gabor滤波器从多个方向和和缩放上首次分析。C1层,通过池化S1层maps的局部邻域,增加对输入扭曲的不变性。S2层,用一系列模板(在训练阶段随机的由C1的maps生成)比较C1层maps,来获得该层的maps。最终C2层上的特征表示是,在每个S2maps上,执行全局最大池化得到的。

经典的HMAX模型用来分析2D图像的。在(Jhuang et al., 2007)这个模型中,被延伸来识别视频数据中的动作。特别的,在HMAX模型中,S1层的Gabor滤波器被一些梯度和时空模块来替代,来捕捉动作信息。此外,(Mutch & Lowe, 2008)提出的对HMAX的一些修改,也并入到这个模型中。CNN和基于HMAX模型的一个主要差别是,CNN是一个完全可训练的系统,所有的参数都是基于训练数据可调整的,但是HMAX的所有模块包含了手工的连接和参数。

在文本和手写识别中,时滞的神经网络已经可以抽取时间特征。在(Kim et al.,2007)中,一个改进的CNN架构可以从视频数据中提取特征。此外除了识别任务,CNN也可用于3D图像修复问题上。

4、实验

我们在TRECVID 2008数据集和KTH数据集上验证了3DCNN对于人体动作识别的实验。

4.1 TRECVID数据上的动作识别

TRECVID 2008开发数据集包含了从伦敦Gatwick机场,从5个不同的摄像头,采集的49小时的视频,规格为720×57,25 fps。摄像头4拍摄的视频因为几乎没有事件发生在这个场景中而排除在外。在这个实验中,我们关注于3个动作类别(CellToEar, ObjectPut, and Pointing)。每个动作都采用一对多的方式分类,动作中产生的大量负样本不属于这3个类别。这个数据集收集了五天(20071101, 20071106, 20071107, 20071108, and 20071112)的数据,我们实验中统计的数据汇总在表1中。这个实验中使用的3DCNN模型在文章第二部分和图3中都有描述,训练迭代的次数是以单独的验证数据集调整的。

表1: 从TRECVID 2008 development数据集上抽取的每个类别样本的数量。展示了每个日期下样本中每个类别的的总体样本数目。

由于是在真实世界环境中记录的视频,并且每帧图像包含了多个人物,我们采用了人体检测器和检测驱动的跟踪器来定位人的头部。一些人体检测和跟踪的样本展示在图4中。基于检测和跟踪的结果,每个人都有一个边界框来执行动作的计算。3DCNN模型所需要的多帧图像的获取,是在当前帧以及相邻的前后帧,相同的位置下的边界框中提取得到的,这会得到一个包含动作的立方体。在我们的实验中,这个立方体的时间维度设置为7,已经证实(Schindler & Van Gool, 2008),5-7帧能够实现一个,与从整个视频序列中获得类似的性能。帧提取的步长为2步。假定当前帧是数字0,我们从数字为-6,-4,-2,0,2,4,6的帧中相同的位置提取边界盒。每一帧的边界盒都被缩放为60x40像素。

图5: 从左到右分别是摄像头1、2、3、5获得的人体检测和跟踪结果。

为了验证3DCNN模型的有效性,我们给出了基于帧的2DCNN模型的结果。此外,我们将3DCNN与另外两个基本方法相比较,其中采用了最先进的计算复杂手工特征的Bag-of-Words(BoW)模式。对于在3DCNN模型是使用的每个图像立方体,基于密集局部不变特征,我们构建了一个BoW特征。然后对每一个动作类别学习到了一对多的线性支持向量机。而且,我们从原始灰度图像或者动作边缘的历史图像(MEHI)中抽取了密集SIFT特征描述算子。原始灰度图像上的局部特征保存了外观信息,而MEHI图考虑的是形状和动作模式。在3DCNN模型中,从同一个立方体的7x7和16x16的局部图像块上,每隔6个像素计算SIFT描述算子。接着使用512Word的轻量化编码本来建立BoW特征。为了利用空间布局的信息,我们采用了与空间金字塔匹配(SPM)类似的方法,来划分成2x2、3x4大小的候选区,并且连接到他们的BoW特征。整个特征向量的维度是512x(2x2+3x4)=8192。我们将这种基于灰度图的方法称为SPM(cube、gray),依赖于MEHI的则成为SPM(cube、MEHI)。将一天的数据作为一个fold,我们给出了5-fold的交叉验证结果。我们使用的性能指标是精度、recall、在多个误判率(FPR)值下的ROC曲线(AUC)的面积。四种方法的性能总结在表2中。我们可以在表2中观察到,3DCNN模型的性能要比基于帧的2DCNN模型的性能要好,比模型SPM(cube、gray)和SPM(cube、MEHI)在动作类别CELLTOEAR和OBJECTPUT上性能也要好。对于动作类别pointing,3DCNN模型比其他三个性能上稍微差一点。从表1中我们可以看到,动作类别pointing的正样本数量相对来说要比其他两个类别明显大的多。因此,我们可以得出结论,当正样本的数量较小的时候,3DCNN模型的性能更高一点。总的来说,从表2中可以看出,3DCNN模型比其他三种模型平均性能要好。

表2: 在多误判率(FPR)下四种方法的性能。性能是就精度、recall和AUC测量的。为了便于展示,我们将AUC分数乘以1000。每种情况下的最高值被标亮。

4.2 KTH数据上的动作识别

我们在KTH数据上验证了3DCNN模型,包含了25个主体的6个动作类别。遵循HMAX中的设置,我们使用了9帧立方体作为输入,并且提取出前景。为了减少内存需求,在我们的实验中,输入帧的分辨率减少为80x60。我们使用与图3中类似的3DCNN架构,考虑到80x60x9的输入,每一层的特征图的数量、核的大小都要调整。尤其是,三个卷积层使用的核大小分别为9x7,7x7,6x4,两个下采样层的核大小为3x3。通过这个设置,80x60x9的输入被转换为128D的特征向量。最后一层包含了与6个类别相对应的6个神经元。

像在(Jhuang et al., 2007)中,我们使用随机选择的16个主体的数据训练,其他9个作为测试。表3中,展示了5个随机试验中的平均识别性能。相比于HMAX墨香的91.7%的识别率,3DCNN总的识别率是90.2%。注意,HMAX模型使用了从原始图像中提取的人工特征,并且是4倍的分辨率。

表3:在KTH数据集上的百分比的动作识别准确度。从上到下提出的方法依次是:3DCNN、和(Sch¨uldt et al., 2004), (Doll´ar et al., 2005), (Niebles et al., 2008), (Jhuang et al.,2007), and (Schindler & Van Gool, 2008)提出的方法。破折号表示这个类别的结果不可用。

5、结论和讨论

在这篇文章中,我们提出3DCNN模型处理动作识别。这个模型通过3D卷积操作,从空间和时间维度上构建了特征。这个深度架构从邻近输入帧中生成了多通道信息,并且在每一个通道上都分别执行卷积和下采样操作。最终的特征表示是由所有通道上的信息结合计算的。我们在TRECVI和KTH数据集上验证了3DCNN模型。结果表明,3DCNN模型在TRECVID数据集上的性能比其他方法都要好,在KTH数据集上也展示出了有竞争力的性能,这些证实了其在真实世界环境中的优越性能。

在这项工作中,我们考虑了3DCNN模型处理动作识别。也有其他深度架构,例如,深度信度网络,其在目标识别任务上的性能也很有前景。对于动作识别来说,扩展这种模型会很有趣。在这项工作中,使用监督算法训练3DCNN模型,并且需要大量的样本标记。先前的研究表示出,使用非监督方法提前训练,很大程度上减少了标记样本的数量。未来我们将探索3DCNN的非监督训练。

译:3D Convolutional Neural Networks for Human Action Recognition相关推荐

  1. 62_LP-3DCNN: Unveiling Local Phase in 3D Convolutional Neural Networks 2019 论文笔记

    LP-3DCNN: Unveiling Local Phase in 3D Convolutional Neural Networks 三维卷积神经网络局部相位的揭示 目录 LP-3DCNN: Unv ...

  2. 3D卷积“LP-3DCNN: Unveiling Local Phase in 3D Convolutional Neural Networks”

    LP-3DCNN: Unveiling Local Phase in 3D Convolutional Neural Networks 3D卷积计算量大,消耗内存多,论文提出了修正的局部相量(ReLP ...

  3. 【步态识别】多视角3D卷积网络的步态识别 算法学习《MULTI-VIEW GAIT RECOGNITION USING 3D CONVOLUTIONAL NEURAL NETWORKS》

    目录 1. 论文&代码源 2. 论文亮点 3. 模型结构 3.1 技术路线 3.2 数据预处理 3.3 训练和测试 4.实验结果 4.1 CMU 4.2 USF 4.3 CAISA-B 5.总 ...

  4. 论文翻译:Two-Stream 3D Convolutional Neural Network for Human Skeleton-Based Action Recognition

    摘要:在三维人体动作识别中,如何有效地从骨骼序列中提取时空信息仍然是一个挑战.虽然最近的动作识别方法是基于递归神经网络的,表现出了突出的性能,但这些方法的缺点之一是倾向于过分强调时间信息.由于三维卷积 ...

  5. 论文翻译:LP-3DCNN: Unveiling Local Phase in 3D Convolutional Neural Networks

    引言 传统的3D卷积神经网络(CNN)计算成本高,内存密集,容易过度拟合,最重要的是,需要改进其特征学习能力.为了解决这些问题,我们提出了整流局部相位体积(ReLPV)模块,它是标准3D卷积层的有效替 ...

  6. 【阅读笔记】《TDN: Temporal Difference Networks for Efficient Action Recognition》阅读笔记

    <TDN: Temporal Difference Networks for Efficient Action Recognition> 论文连接:https://arxiv.org/ab ...

  7. 详译:RESIDUAL AND PLAIN CONVOLUTIONAL NEURAL NETWORKS FOR 3D BRAIN MRICLASSIFICATION

    论文题目:RESIDUAL AND PLAIN CONVOLUTIONAL NEURAL NETWORKS FOR 3D BRAIN MRI  CLASSIFICATION 三维脑MRI分类的残差和平 ...

  8. 论文笔记 Semantics-Guided Neural Networks for Efficient Skeleton-Based Human Action Recognition - CVPR

    Semantics-Guided Neural Networks for Efficient Skeleton-Based Human Action Recognition 2020 CVPR | c ...

  9. Action Recognition Using Attention-Joints Graph Convolutional Neural Networks翻译

    对Action Recognition Using Attention-Joints Graph Convolutional Neural Networks(19年ieee上的一篇)这篇论文的翻译,可 ...

最新文章

  1. windows server 2003 域控制器重命名
  2. Python实现学生信息管理(面向对象)
  3. python2异步编程_最新Python异步编程详解
  4. [云炬创业基础笔记] 第三章测试3
  5. 阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务,三大能力获得突破
  6. JupyterNotebook配置远程登录
  7. CTS(11)---android自动化测试CTS源码分析之一
  8. Java数据结构和算法-二叉树
  9. js中获取时间new date()的用法和获取时间戳
  10. [51nod1232]完美数
  11. Android仿新浪微博弹出界面动画,Android仿新浪微博个人信息界面及其他效果
  12. 三角波的傅里叶变换对_傅里叶变换(二) 从傅里叶级数到傅里叶变换
  13. latex中脚注内容不显示
  14. Win7手工查找notepad.exe的IAT
  15. android音视频播放技术背景,Android音视频开发-入门(一)
  16. 【WIN10】PS/2 标准键盘鼠标带感叹号(代码10,39)(适用于红米G)
  17. hbiuder运行php_hbuilderx中运行php图文说明
  18. 内容页的链接设置seo技巧
  19. android如何正确获取iccid,特别是中间带有字母的iccid
  20. 【今日分享】官方实例用python调用OpenAI tahcTPG的APIkey生成智能问答

热门文章

  1. Mac OS X Spotlight 优化指南
  2. 友商s6客户端java_魅蓝s6发布, 给友商再次提供免费的「可抄袭的」交互方案
  3. 图像分类检测常见问题汇总(三)
  4. 海外优秀资讯抢先看10:世界著名软件缺陷导致的灾难性案例详解之阿丽安娜火箭之殇
  5. Postgresql插入带单引号的字符串
  6. RFSoC应用笔记 - RF数据转换器 -21- API使用指南之配置ADC相关工作状态
  7. python学习笔记(六)——类的初始化(__init__)、类属性和类方法 和 对象
  8. TimeUnit类详解及其常见用法(详解timedWait、sleep方法)
  9. java使用高德地图根据IP地址获取城市
  10. AI换脸为什么服务器没响应,ai换脸 云服务器