ReadPaperhttps://readpaper.com/pdf-annotate/note?pdfId=4498426416823164929¬eId=713724753433432064

Abstract

尽管在不受控制的人脸检测方面已经取得了巨大的进步,但在野外准确高效的人脸定位仍然是一个公开的挑战。本文提出了一种鲁棒的单阶段人脸检测器,名为RetinaFace,它利用联合超监督和自我监督多任务学习的优势,对不同尺度的人脸进行像素级的人脸定位。具体而言,我们在以下5个方面做出了贡献:(1)我们在WIDER FACE数据集上手动标注了5个面部标志,并观察到在这个额外的监督信号的帮助下,硬脸检测的显著改进。(2)我们进一步添加了一个自监督网格解码器分支,与现有的监督分支并行预测像素级三维形状人脸信息。(3)在WIDER FACE硬测试集上,RetinaFace比目前水平的平均精度(AP)高出1.1%(实现AP等于91.4%)。(4)在IJB-C测试集上,RetinaFace使最先进的方法(ArcFace)能够改善其人脸验证结果(FAR=1e-6的TAR=89.59%)。(5)通过采用轻量级骨干网,RetinaFace可以在单个CPU核上实时运行vga分辨率的图像。额外的注释和代码已经发布在:

https://github.com/deepinsight/insightface/tree/master/RetinaFacehttps://github.com/deepinsight/insightface/tree/master/RetinaFace

1. Introduction

在人脸属性(如表情[64]和年龄[38])、人脸身份识别[45,31,55,11]等许多应用中,人脸自动定位是人脸图像分析的前提步骤。对人脸定位的一个狭义定义可以参考传统的人脸检测[53,62],其目的是在没有任何尺度和位置先验的情况下估计人脸边界框。然而,在这篇论文中我们引用了更广泛的人脸定位定义,包括人脸检测[39],人脸对齐[13],像素级人脸解析[48]和3D密集对应回归[2,12]。这种密集的面部定位为所有不同尺度提供了准确的面部位置信息。

图1。提出的单阶段像素人脸定位方法采用了超监督和自监督多任务学习,并与现有的框分类和回归分支并行。每个正锚输出(1)一个人脸评分,(2)一个人脸框,(3)五个人脸标志,(4)投影在图像平面上的密集3D人脸顶点。

受通用对象检测方法[16,43,30,41,42,28,29]的启发,人脸检测最近取得了显著的进展[23,36,68,8,49],这些方法囊括了深度学习的所有最新进展。与一般的目标检测不同,人脸检测具有较小的比例变化(从1:1到1:1.5),但更大的尺度变化(从几个像素到上千像素)。最新的最先进的方法[36,68,49]集中于单阶段[30,29]设计,在特征金字塔[28]上密集采样人脸位置和尺度,与两阶段方法[43,63,8]相比,显示出良好的性能和更快的速度。遵循这一路线,我们改进了单阶段人脸检测框架,并提出了一种先进的密集人脸定位方法,利用强监督和自我监督信号中的多任务损失。我们的想法如图1所示。

一般情况下,人脸检测训练过程包含分类损失和框回归损失[16]。Chen等人[6]提出在一个联合级联框架中结合人脸检测和对齐,该框架基于对齐后的观察结果人脸形状为人脸分类提供了更好的特征。受到[6]的启发,MTCNN[66]和STN[5]同时检测人脸和5个面部标志。由于训练数据的限制,JDA[6]、MTCNN[66]和STN[5]还没有验证微小人脸检测是否可以受益于5个面部标志的额外监督。我们在本文中想要回答的问题之一是,是否可以利用由5个面部标志构建的额外监督信号,将目前在WIDER FACE硬测试集[60]上的最佳性能(90.3%[67])向前推进。

在Mask R-CNN[20]中,通过在现有的边界框识别和回归分支的基础上,增加一个预测目标掩码的分支,从而显著提高了检测性能。这证实了密集的像素级注释也有助于改进检测。不幸的是,对于更宽的人脸来说,不可能进行密集的人脸注释(以更多地标或语义段的形式)。由于监督信号不容易获得,问题是我们是否可以应用无监督方法来进一步改善人脸检测。

在FAN[56]中,提出了一种锚级注意图来改进被遮挡人脸的检测。然而,所提出的注意图相当粗糙,不包含语义信息。最近,自我监督的3D变形模型[14,51,52,70]已经在野外实现了很有前途的3D人脸建模。特别是Mesh Decoder[70]通过利用关节形状和纹理上的图卷积[10,40]实现了超过实时的速度。然而,在单级检测器中应用网格解码器[70]面临的主要挑战是:(1)摄像机参数难以准确估计,(2)联合潜在形状和纹理表示是由单个特征向量(1 × 1 Conv on feature pyramid)预测,而不是由RoI池特征预测,这表明存在特征偏移的风险。在本文中,我们通过自我监督学习使用网格解码器[70]分支,与现有的监督分支并行预测像素级3D人脸形状。总而言之,我们的主要贡献是:

•基于单阶段设计,我们提出了一种新的像素级人脸定位方法,名为RetinaFace,该方法采用多任务学习策略,同时预测人脸评分、人脸框、五个面部地标以及每个人脸像素的3D位置和对应关系。

•在WIDER FACE硬子集中,RetinaFace比最先进的两阶段方法(ISRN[67])的AP性能高1.1% (AP = 91.4%)。•

在IJB-C数据集上,RetinaFace有助于提高ArcFace的[11]验证精度(当FAR=1e-6时,TAR等于89.59%)。这表明,更好的人脸定位可以显著提高人脸识别。

•通过使用轻量级骨干网,RetinaFace可以在单个CPU核上实时运行vga分辨率的图像。

•额外的注释和代码已经发布,以促进未来的研究。

2. Related Work

图像金字塔vs .特征金字塔:滑动窗口范式,将分类器应用于密集的图像网格,可以追溯到过去几十年。Viola-Jones[53]的里程碑式工作探索了级联链从图像金字塔中实时高效地剔除虚假人脸区域,导致这种尺度不变的人脸检测框架被广泛采用[66,5]。尽管图像金字塔上的滑动窗口是领先的检测范式[19,32],但随着特征金字塔[28]的出现,多尺度特征地图上的滑动锚[43][68,49]迅速主导了人脸检测。

两阶段vs .单阶段:目前的人脸检测方法继承了一般目标检测方法的一些成果,分为两阶段方法(如Faster R-CNN[43,63,72])和单阶段方法(如SSD[30,68]和RetinaNet[29,49])。两阶段方法采用“建议+细化”机制,具有较高的定位精度。相比之下,单阶段方法密集采样人脸位置和尺度,导致训练过程中正样本和负样本极度不平衡。为了处理这种不平衡,广泛采用[47]抽样法和[29]重加权法。与两阶段方法相比,单阶段方法效率更高,召回率更高,但有可能产生更高的误报率和影响定位精度。

上下文建模:为了增强模型的上下文推理能力,以捕捉小面孔[23]、SSH[36]和PyramidBox[49]在特征金字塔上应用上下文模块,从欧氏网格扩大接受域。为了增强cnn的非刚性变换建模能力,变形卷积网络(deformable convolution network, DCN)[9,74]采用了一种新的变形层来建模几何变换。2018年WIDER Face Challenge[33]的冠军解决方案表明,刚性(膨胀)和非刚性(变形)上下文建模是互补和正交的,以提高人脸检测的性能。

多任务学习:联合人脸检测和对齐被广泛应用[6,66,5],对齐的人脸形状为人脸分类提供了更好的特征。在Mask R-CNN[20]中,通过增加一个与现有分支并行预测目标掩码的分支,可以显著提高检测性能。Densepose[1]采用了Mask-RCNN的架构,获取每个选定区域内密集的部分标签和坐标。然而,[20,1]中的稠密回归分支采用监督学习进行训练。此外,密集分支是一个小的FCN应用于每个RoI,以预测像素到像素的密集映射。

3. RetinaFace

3.1. Multi-task Loss

3.2. Dense Regression Branch

网解码器。我们直接采用[70,40]中的网格解码器(网格卷积和网格上采样),这是一种基于快速局域光谱滤波[10]的图卷积方法。为了实现进一步的加速,我们还使用了一种类似于[70]中的方法的联合形状和纹理解码器,与[40]只解码形状不同。

下面我们将简要解释图卷积的概念,并概述为什么它们可以用于快速解码。如图3(a)所示,二维卷积运算是欧氏网格接收域中的“核加权邻居和”。同样,图卷积也采用了相同的概念,如图3(b)所示。然而,邻接距离是通过计算连接两个顶点的最小边数来计算的。我们按照[70]定义了一个彩色的面网格G = (V, E),其中V∈Rn×6是包含的面顶点的集合E∈{0,1}n×nis是编码顶点之间连接状态的稀疏邻接矩阵。拉普拉斯图定义为asL = D−E∈Rn×n,其中D∈Rn×n是一个对角矩阵,Dii =∑j Eij。

接下来[10,40,70],图与核θ的卷积可以表述为一个在K阶截断的递归Chebyshev多项式,

 4. Experiments 

 4.1. Dataset

WIDER FACE数据集[60]包含32,203张图像和393,703个人脸边界框,在尺度、姿势、表情、遮挡和光照方面具有高度的变化率。通过从61个场景类别中随机抽样,将WIDER FACE数据集分为训练(40%)、验证(10%)和测试(50%)子集。根据EdgeBox的检出率[76],通过逐步加入硬样本,定义了Easy、Medium、Hard三个难度等级。

额外的注释。如图4和表1所示,我们定义了五个层次的人脸图像质量(根据如何

在可以从WIDER face训练和验证子集注释的脸上标注5个面部地标(即眼中心、鼻尖和嘴角)。我们总共在训练集上标注了84.6k个人脸,在验证集上标注了18.5k个人脸。

4.2. Implementation details

金字塔的特性。RetinaFace使用从P2到P6的特征金字塔级别,其中P2到P5是由相应的ResNet剩余阶段(c2到C5)的输出计算出来的,使用自上而下和横向连接,如[28,29]。P6是通过C5上stride=2的3×3卷积来计算的。C1到C5是ImageNet-11k数据集上预训练的ResNet-152[21]分类网络,而ep6是用“Xavier”方法[17]随机初始化的。上下文模块。受SSH[36]和PyramidBox[49]的启发,我们还在五个特征金字塔层次上应用了独立的上下文模块,以增加接受域,增强刚性上下文建模能力。借鉴2018年WIDER Face Challenge[33]冠军的经验,我们还将横向连接和上下文模块中的所有3 × 3卷积层替换为可变形卷积网络(DCN)[9, 74],这进一步增强了非刚性上下文建模能力。损失的头。对于负锚点,只应用分类损失。对于正锚点,计算提出的多任务损失。我们在Hn × Wn × 256, n∈{2,…不同的特征映射上使用一个共享损失头(1 × 1conv)。6}。对于网格解码器,我们采用预训练模型[70],这是一个小的计算开销,允许有效的推断。

锚设置。如表2所示,我们在从P2到p6的特征金字塔级别上使用了尺度特定的锚点,比如[56]。在这里,P2的设计目的是通过平铺小锚来捕捉微小的面孔,代价是更多的计算时间和更多的误报风险。我们将比例步长设为2^1/3,长宽比为1:1。当输入图像大小为640 × 640时,锚点可以覆盖特征金字塔层上从16 × 16到406 × 406的尺度。共有102300个锚点,其中75%来自P2。

表2。特征金字塔的细节,步长,锚定在RetinaFace。对于640 × 640的输入图像,总共有102,300个锚点,其中75%的锚点平铺在P2上。

在训练过程中,当IoU大于0.5时,锚点与ground-truth box匹配,当IoU小于0.3时,锚点与background匹配。在训练过程中会忽略未匹配的锚点。由于匹配步骤后大多数锚定(> 99%)是负的,我们使用标准的OHEM[47,68]来缓解正、负训练示例之间的显著不平衡。更具体地说,我们根据损失值对负锚点进行排序,选择最上面的,使负样本和正样本的比例至少为3:1。

数据增强。由于在WIDER FACE训练集中大约有20%的小人脸,我们遵循[68,49],从原始图像中随机裁剪正方形小块,并将这些小块的大小调整为640 × 640,以生成更大的训练人脸。更具体地说,从原始图像上裁剪正方形小块,大小在原始图像短边的[0.3,1]之间。对于作物边界上的面,我们保留面框的重叠部分,如果它的中心在作物斑块内。除了随机裁剪,我们还通过概率为0.5的随机水平翻转和photo-metric colour distortion来增强训练数据[68]。

训练的细节。我们使用SGD优化器(动量为0.9,重量衰减为0.0005,批处理大小为8 × 4)在4个NVIDIA Tesla P40 (24GB) gpu上训练retina aface。学习速率从10−3开始,5个epoch后上升到10−2,然后在55和68个epoch时除以10。训练过程在80个时期结束。

测试的细节。对于WIDER FACE的测试,我们遵循[36,68]的标准实践,并使用翻转和多尺度(图像短边缘在[500,800,1100,1400,1700])策略。箱投票[15]使用IoU阈值0.4应用于预测的面箱联合集。

4.3. Ablation Study

为了更好地理解提出的RetinaFace,我们进行了广泛的消融实验,以检查注释的5个面部标志和之前提出的密集回归分支定量地影响人脸检测的性能。除了Easy、Medium和Hard子集IoU=0.5时的标准评估指标平均精度(AP)外,我们还使用了WIDER Face Challenge 2018[33]的开发服务器(硬验证子集),该服务器对IoU=0.5:0.05:0.95时采用了更严格的平均AP (mAP)评估指标,奖励更准确的人脸探测器。

如表3所示,我们评估了几种不同设置在WIDER FACE验证集上的性能,并重点关注了Hard子集上AP和mAP的观察结果。通过应用最先进的技术(即FPN、上下文模块和可变形卷积),我们建立了一个强基线(91.286%),略优于ISRN[67](90.9%)。加入5个人脸地标回归分支后,人脸框的AP(0.408%)和mAP(0.775%)在硬子集上显著提高,表明地标定位对提高人脸检测的准确性至关重要。相比之下,增加密集回归分支增加了Easy和Medium子集上的面盒AP,但略微降低了Hard子集上的结果,这表明在具有挑战性的场景下,密集回归的难度较大。然而,与仅仅添加地标回归相比,将地标和密集回归结合起来学习能够进一步改进。这表明,地标回归确实有助于密集回归,这反过来又进一步提高了人脸检测性能。

4.4. Face box Accuracy

遵循WIDER FACE数据集的标准评估协议,我们只在训练集上训练模型,在验证集和测试集上测试模型。为了获得测试集上的评价结果,我们将检测结果提交给主办方进行评价。如图5所示,我们将提出的RetinaFace与其他24种最先进的人脸检测算法(即多尺度级联CNN[60]、两阶段CNN[60]、ACFWIDER[58]、face - wider[59]、多任务级联CNN[66]、cm - rcnn[72]、LDCF+[37]、HR[23]、face R-CNN[54]、ScaleFace[61]、SSH[36]、SFD[68]、face RFCN[57]、MSCNN[4]、FAN[56]、Zhu等[71]、PyramidBox[49]、FDNet[63]、SRN[8]、FANet[65]、DSFD[27]、DFS[50]、VIM-FD[69]、ISRN[67])。

更具体地说,在验证集和测试集的所有子集中,我们的方法RetinaFace产生的AP是最好的,即验证集96.9%(简单)、96.1%(中等)和91.8%(硬),测试集96.3%(简单)、95.6%(中等)和91.4%(硬)。与最近表现最好的方法[67]相比,RetinaFace在包含大量微小面孔的Hard子集上创造了一个令人印象深刻的新记录(91.4% vs . 90.3%)。

在图6中,我们展示了一张脸部密集的自拍的定性结果。RetinaFace成功地从报告的1,151张面孔中找到了大约900张(阈值为0.5)。除了精确的边界框,该方法预测的5种面部标志在姿态、遮挡和分辨率变化下也具有很强的鲁棒性。尽管在重度遮挡下存在一些密集人脸定位失败的案例,但在一些清晰较大的人脸上,密集回归结果良好,甚至出现表情变化。

4.5. Five Facial Landmark Accuracy

为了评估5个面部地标定位的准确性,我们在AFLW数据集[26](24,386张脸)和WIDER FACE验证集(18.5k张脸)上比较了RetinaFace和MTCNN[66]。这里,我们使用面盒尺寸(√W × H)作为归一化距离。如图7(a)所示,我们给出了每个人脸地标在AFLW数据集上的平均误差[73]。与MTCNN相比,RetinaFace显著降低了归一化平均误差(NME),从2.72%降低到2.21%。在图7(b)中,我们展示了在WIDER FACE验证集上的累积误差分布(CED)曲线。与MTCNN相比,RetinaFace将失败率从26.31%显著降低到9.37% (NME阈值为10%)。

4.6. Dense Facial Landmark Accuracy

除了box和5个面部标志外,RetinaFace还输出密集的面部对应,但密集回归分支仅通过自监督学习进行训练。接下来[12,70],我们考虑(1)68个具有2D投影坐标的地标和(2)所有具有3D坐标的地标,在AFLW2000-3D数据集[75]上评估密集面部地标定位的准确性。这里,平均误差仍然通过边界框大小进行归一化[75]。在图8(a)和8(b)中,我们给出了最先进的方法[12,70,75,25,3]以及RetinaFace的CED曲线。尽管监督和自我监督方法之间存在性能差距,但RetinaFace的密集回归结果与这些先进的方法相当。更具体地说,我们观察到(1)五种面部标志回归可以缓解密集回归分支的训练难度,显著提高密集回归结果。(2)使用单级特征(如retinaface)预测密集对应参数比使用(感兴趣区域)RoI特征(如Mesh Decoder[70])困难得多。如图8(c)所示,RetinaFace可以轻松处理姿态变化的人脸,但在复杂的场景下有困难。这表明,失调和过紧致的特征表示(在retina aface中为1 × 1 × 256)阻碍了单阶段框架实现高精度的密集回归输出。尽管如此,在密集回归分支中投影的人脸区域仍然具有注意力[56]的作用,这有助于改善人脸检测,这在消融研究部分得到了证实。

4.7. Face Recognition Accuracy

人脸检测在鲁棒人脸识别中起着至关重要的作用,但其效果却很少得到明确的测量。在本文中,我们演示了我们的人脸检测方法如何提高最先进的公开可用的人脸识别方法(即ArcFace[11])的性能。ArcFace[11]研究了深度卷积神经网络训练过程中的不同方面(即训练集的选择、网络和损失函数)对大规模人脸识别性能的影响。然而,ArcFace的论文并没有研究人脸检测的效果,只使用MTCNN[66]进行检测和对齐。在本文中,我们用RetinaFace代替MTCNN,检测并对齐所有的训练数据(MS1M[18])和测试数据(LFW[24]、CFP-FP[46]、AgeDB-30[35]和IJBC[34]),并保持嵌入网络(ResNet100[21])和损失函数(加性角距)与ArcFace完全相同。

在表4中,我们通过比较广泛使用的MTCNN[66]和提出的RetinaFace,展示了人脸检测和对齐对深度人脸识别(即ArcFace)的影响。在CFP-FP上的验证结果表明,RetinaFace可以将ArcFace的验证准确率从98.37%提高到99.49%。这一结果表明,正面-侧面人脸验证的性能已经接近正面-正面人脸验证(例如LFW上的99.86%)。

在图9中,我们展示了IJB-C数据集上的ROC曲线,以及每个图例结尾FAR= 1e−6的TAR值。我们采用两种方法(即翻转测试和人脸检测评分来衡量模板内的样本)来逐步提高人脸验证的准确性。在公平比较下,仅用RetinaFace替代MTCNN, TAR (FAR= 1e−6)就从88.29%显著提高到89.59%。这表明(1)人脸检测与对齐

 

(2)在人脸识别应用中,与MTCNN相比,RetinaFace是一个更强的基线。

4.8. Inference Efficiency

在测试过程中,RetinaFace在单个阶段完成人脸定位,灵活高效。除了上述探索的重权重模型(ResNet-152,大小为262MB,在WIDER FACE硬集上AP为91.8%),我们还采用了轻权重模型(MobileNet-0.25[22],大小为1MB,在WIDER FACE硬集上AP为78.2%)来加速推断。对于轻量级模型,我们可以在输入图像上进行stride=4的7 × 7卷积,将P3、P4和P5的密集锚点平铺为[36],并去除可变形层,从而快速减小数据量。此外,ImageNet对前两层卷积进行了预训练

模型是固定的,以达到更高的精度。

表5给出了两种模型对于不同输入大小的推断时间。我们省略了在密集回归分支上的时间开销,因此时间统计与输入图像的人脸密度无关。在NVIDIA Tesla P40 GPU、Intel i76700K CPU和ARM-RK3399上分别采用TVM[7]加速模型推断和定时。retina afaceresnet -152是为高度精确的人脸定位而设计的,VGA图像(640 × 480)运行在13帧/秒。相比之下,RetinaFace-MobileNet-0.25是为高效的人脸定位而设计的,在GPU上,4K图像(4096 × 2160)的实时速度为40 FPS,在多线程CPU上,HD图像(1920 × 1080)的实时速度为20 FPS,在单线程CPU上,VGA图像(640 × 480)的实时速度为60 FPS。更令人印象深刻的是,在ARM上VGA图像的16帧/秒(640 × 480)允许移动设备上的快速系统。

5. Conclusions 

我们研究了图像中任意尺度的人脸同时密集定位和对齐的挑战性问题,并提出了第一个,据我们所知,一阶段解决方案(RetinaFace)。我们的解决方案在目前最具挑战性的人脸检测基准测试中,其表现超过了最先进的方法。此外,当将RetinaFace与最先进的人脸识别技术相结合时,它明显提高了准确率。数据和模型已公开提供,以促进对该专题的进一步研究。

6. Acknowledgements

邓建康感谢帝国总统博士奖学金的资助和NVIDIA的GPU捐赠。Stefanos Zafeiriou感谢DEFORM (EP/S010203/1)、FACER2VM (EP/ n00774.3 /1)和谷歌教员奖学金的支持。

RetinaFace: Single-stage Dense Face Localisation in the Wild相关推荐

  1. 活体检测论文研读四:RetinaFace: Single-stage Dense Face Localisation in the Wild

    文章目录 论文简介 主要贡献 论文研读 摘要 相关工作 图像金字塔与特征金字塔 两阶段与单阶段 上下文建模 多任务学习 RetinaFace 多任务损失 密集回归分支 实验 数据集 实现细节 消融研究 ...

  2. 【论文翻译】RetinaFace: Single-stage Dense Face Localisation in the Wild

    论文题目:RetinaFace: Single-stage Dense Face Localisation in the Wild 论文来源:RetinaFace: Single-stage Dens ...

  3. [论文翻译]RetinaFace: Single-stage Dense Face Localisation in the Wild

    论文来源:RetinaFace: Single-stage Dense Face Localisation in the Wild RetinaFace: Single-stage Dense Fac ...

  4. 人脸检测--SSH: Single Stage Headless Face Detector

    SSH: Single Stage Headless Face Detector ICCV2017 https://github.com/mahyarnajibi/SSH 本文的人脸检测算法走的是又快 ...

  5. 目标检测--Accurate Single Stage Detector Using Recurrent Rolling Convolution

    Accurate Single Stage Detector Using Recurrent Rolling Convolution CVPR 2017 商汤科技关于目标检测的文献 Code: htt ...

  6. 【3D 目标检测】3DSSD: Point-based 3D Single Stage Object Detector

    一 核心思路 本篇通过观察point-based目标检测方法中,在PointNet++的上采样层(FP层)和refinement Module上面耗费了大量时间,因此作者借此提出了one-stage的 ...

  7. (CVPR 2020)3DSSD: Point-based 3D Single Stage Object Detector

    摘要 目前,基于体素的3D单级检测器已经有很多种,而基于点的单级检测器仍处于探索阶段.在本文中,我们首先提出了一种轻量级且有效的基于点的3D单级目标检测器,名为3DSSD,在精度和效率之间取得了很好的 ...

  8. S4Net: Single Stage Salient-Instance Segmentation阅读笔记

    论文链接:http://arxiv.org/abs/1711.07618 简介 文章关注显著实例分割.考虑到每个实例类的独立性,文章设计了一个单阶段显著实例分割网络,该网络不仅考虑了box框内的loc ...

  9. 【阅读记录】3DSSD:Point-based 3D Single Stage Object Detector

    前情提要 在目前的三维目标检测任务中,大致分为单阶段和双阶段的网络.双阶段网络可以依靠pointnet++这样的网络得到的语义信息提供更加精确的结果.单阶段网络虽然具备了快速的优点,但是由于在道路环境 ...

最新文章

  1. Rust linux 系统接口使用
  2. Arduino可穿戴教程之第一个程序——上传运行程序(四)
  3. C++中类的组合和继承关系
  4. 窗口分析函数_1_生成不重复排名序号
  5. C#中的串口通信SerialPort
  6. .NET Core + K8S + Apollo 玩转配置中心
  7. 【SpringMVC】SpringMVC+Spring+hibernate整合
  8. mongodb-查询
  9. 数据增长率怎么算_2019 年“泰迪杯”数据分析职业技能大赛A题 超市销售数据分析...
  10. 怎样才能算是在技术上活跃的小公司
  11. 阿里巴巴分布式调度引擎tbschedule实战三tbschedule的调度原理
  12. 用python把视频转换为图片
  13. 7.ratings评价列表页的实现
  14. 根据个人情况以及Java程序员面试宝典总结的需要复习的知识点
  15. 操作系统:文件共享的实现方法
  16. Css Reset -Css样式重置
  17. YGG:2021年年终回顾
  18. 关于图文识别功能相关技术的大致实现
  19. Python自然语言处理实战(1):NLP基础
  20. 面试问题-理解数字后仿,其次针对性理解数字后仿中的sdf文件(约束文件)的作用

热门文章

  1. 嵌入式Linux支持dlopen,Android下使用dlopen函数动态调用.so链接库
  2. 【独家对话】卫星导航与移动GIS----北斗导航应用分会主席曹冲专访
  3. 安卓studio安装教程!
  4. 解决报错:‘egg-bin‘不是内部或外部命令,也不是可运行的程序或批处理文件。
  5. 连续型随机变量及其概率密度(知识点部分)
  6. NCO IP Core
  7. 在创业公司的第三天----(犯事了)
  8. 戴尔OptiPlex商务台式机限时5折起,助力小企业加速成长!
  9. linux中RAID是什么意思,Linux中Raid的介绍
  10. Vue3+Vite+ElementPlus自定义主题色