据传FaceBoxes比MTCCN速度还快,FaceBoxes 在cpu上FPS20,MTCNN在cpu上FPS16,到底真的是最快模型吗?我认为并不是。

论文地址:arxiv.org1708

论文代码:caffe版、PyTorch版

下面是论文的翻译。

FaceBoxes: A CPU Real-time Face Detector with High Accuracy

Shifeng Zhang Xiangyu Zhu Zhen Lei Hailin Shi Xiaobo Wang Stan Z. Li
CBSR & NLPR, Institute of Automation, Chinese Academy of Sciences, Beijing, China
University of Chinese Academy of Sciences, Beijing, China
fshifeng.zhang,xiangyu.zhu,zlei,hailin.shi,xiaobo.wang,szlig@nlpr.ia.ac.cn

Abstract

虽然在人脸检测方面已经取得了巨大进步,但其余的开放性挑战之一是在CPU上实现实时速度以及保持高性能,因为用于面部检测的有效模型往往在计算上是禁止的。为了应对这一挑战,我们提出了一种名为FaceBoxes的新型人脸检测器,它在速度和精度方面都具有卓越的性能。具体来说,我们的方法具有轻量级但功能强大的网络结构,包括快速消化卷积层(RDCL)和多尺度卷积层(MSCL)。 RDCL旨在使FaceBoxes能够在CPU上实现实时速度。 MSCL旨在丰富不同层上的感受野和离散锚,以处理各种尺度的面。此外,我们提出了一种新的锚点致密化策略,使不同类型的锚点在图像上具有相同的密度,从而显着提高了小脸部的召回率。因此,所提出的检测器在单CPU核心上以20 FPS运行,在使用GPU用于VGA分辨率图像时以125 FPS运行。而且,FaceBoxes的速度对面部的数量是不变的。我们全面评估了这种方法,并在多个人脸检测基准数据集上呈现了最先进的检测性能,包括AFW,PASCAL人脸和FDDB。代码可在https://github.com/sfzhang15/FaceBoxes获得。

1. Introduction

人脸检测是计算机视觉和模式识别中的基本问题之一。它在许多后续的面部相关应用中扮演着重要的角色,例如面部对齐[47],面部识别[48]和面部跟踪[12]。随着过去几十年的巨大进步,尤其是卷积神经网络的突破,人脸检测已成功应用于各种场景下的日常生活中。然而,在非受控面部检测问题中仍存在一些严峻挑战,特别是对于CPU设备。挑战主要来自于人脸探测器的两个要求:1)杂乱背景中人脸的大视觉变化要求人脸探测器准确地解决复杂的人脸和非人脸分类问题; 2)可能的面部位置和面部尺寸的大搜索空间进一步提出了时间效率要求。这两个要求是相互矛盾的,因为高精度的面部检测器往往在计算上很昂贵。因此,对于CPU设备上的实际面部检测器来说,实现实时速度以及保持高性能是其余的开放性问题之一。为了满足这两个相互矛盾的要求,人脸检测主要以两种方式进行了深入的研究。早期的方法是基于手工艺特征。继Viola-Jones人脸探测器[37]的开创性工作之后,大多数早期工作都集中在设计强大的功能和训练有效的分类器上。除了级联结构外,可变形零件模型(DPM)被引入到人脸检测任务中,并取得了显着的性能。然而,这些方法高度依赖于非鲁棒的手工艺特征并且分别优化每个组件,使得面部检测管道不是最佳的。简而言之,它们在CPU上是高效的,但对于面部的大视觉变化则不够准确。另一种方式是基于卷积神经网络(CNN),近年来取得了显着的成功,从图像分类到物体检测。最近,CNN已成功引入面部检测任务中作为传统面部检测框架中的特征提取器[23,41,42]。此外,一些人脸检测器[4,46]继承了通用物体检测方法的有效技术,如更快的R-CNN [29]。这些基于CNN的面部检测方法对于面部外观的大变化是稳健的并且展示了最先进的性能。但它们实现实时速度太耗时,尤其是在CPU设备上。这两种方式各有优势。前者速度快,后者具有高精度。为了在速度和准确度上表现良好,一个自然的想法是结合这两种方法的优点。因此,提出了基于CNN的级联方法[16,45],将CNN学习的特性放入级联框架中,以提高性能并保持高效。然而,在基于CNN的级联方法中存在三个问题:1)它们的速度与图像上的面部数量负相关。随着面部数量的增加,速度会急剧下降; 2)基于级联的探测器分别优化每个组件,使训练过程极其复杂,最终模型次优; 3)对于VGA分辨率图像,它们在CPU上的运行时效率约为14 FPS,这不足以达到实时速度。

在本文中,受到快速R-CNN中的RPN [29]以及SSD [21]中的多尺度机制的启发,我们开发了一种具有CPU实时速度的最先进的人脸检测器。具体来说,我们提出了一种名为FaceBoxes的新型人脸检测器,它只包含一个完全卷积的神经网络,并且可以进行端到端的训练。所提出的方法具有轻量且强大的网络结构(如图1所示),其由快速消化的卷积层(RDCL)和多尺度卷积层(MSCL)组成。 RDCL旨在使FaceBoxes能够在CPU上实现实时速度,而MSCL旨在丰富不同层上的感知域和离散锚点,以处理各种面部比例。此外,我们提出了一种新的锚点致密化策略,使输入图像上不同类型的锚点具有相同的密度,从而显着提高了小脸部的召回率。因此,对于VGA分辨率图像,我们的面部检测器在单个CPU内核上运行速度为20 FPS,使用GPU运行速率为125 FPS。更重要的是,FaceBoxes的速度对于图像上的面数是不变的。我们全面评估了这种方法,并在几个面部检测基准数据集上展示了最先进的检测性能,包括AFW,PASCAL面和FDDB

为清楚起见,这项工作的主要贡献可归纳为四重:•我们设计快速消化卷积层(RDCL),使面部检测能够实现CPU的实时速度; •我们引入了多尺度卷积层(MSCL)来处理各种面部尺度,通过丰富感受野和层上的离散锚点。 •我们提出了一种新的锚点密集化策略,以证明小面孔的召回率; •我们进一步改进AFW,PASCAL面和FDDB数据集的最新性能。 本文的其余部分安排如下。 第2节回顾了相关工作。 FaceBox的分析见第3节。第4节显示实验结果,第5节结束本文。

2. Related work

现代人脸检测方法大致可分为两类。 一种是基于手工功能,另一种是基于CNN。 本节简要回顾了这两种方法。

2.1. Hand-craft based methods

以前的面部检测系统主要基于手工艺特征。 由于开创性的Viola-Jones人脸检测器[37]提出结合Haar特征,Adaboost学习和人脸检测的级联推理,许多后续工作被提出用于实时人脸检测,如新的局部特征[20,40], 新的增强算法[3,25]和新的级联结构[2,18]。 除了级联框架之外,基于结构模型的方法逐渐实现更好的性能并且变得越来越有效。 一些研究[38,39,49]将可变形部分模型(DPM)引入到人脸检测任务中。 这些工作使用有监督的部分,更多的姿势分区,更好的训练或更有效的推理,以实现卓越的检测性能。

2.2. CNN based methods

首次使用CNN进行人脸检测可以追溯到1994年.Vaillant等。 [36]使用经过训练的CNN和滑动窗口方式来检测面部。罗利等人[30,31]介绍视网膜连接的神经网络或直立的正面检测,以及设计用于估计旋转不变的ace检测方向的“路由器”网络。加西亚等人。 [7]开发神经网络来检测半正面。 Osadchy等。 [24]训练CNN或同时进行人脸检测和姿势估计。这些arlier方法只能在简单的数据集上获得相对较好的性能。近年来见证了基于CNN的ace探测器的进步。 CCF [41]在CNN食物之上使用加强剂进行面部检测。 Farfade等。 [6]微调CNN模型训练1k ImageNet分类任务进行面部非面部分类任务。 Faceness [42]训练一系列CNN用于面部属性识别,以检测被遮挡的面部。 CascadeCNN [16]开发了一种基于CNN的级联架构,具有强大的判别能力和高性能。秦等人。 [26]建议对CascadeCNN进行全面培训,以实现端到端的优化。与[5]类似,MTCNN [45]提出了一种基于多任务的基于CNN的框架,用于联合面部检测和对齐。 UnitBox [44]引入了一种新的交叉过联损失函数。 CMS-RCNN [46]在面部检测中使用更快的R CNN和身体上下文信息。 Convnet [19]在最终的o-end多任务学习框架中集成了CNN和3D人脸模型。 STN [4]提出了一种新的监督变压器网络和ROI卷积或人脸检测。

3. FaceBoxes

本节介绍了我们的三个贡献,使FaceBoxes在CPU设备上准确有效:快速消化卷积层(RDCL),多尺度卷积层(MSCL)和锚点密集化策略。 最后,我们介绍相关的培训方法

3.1 快速消化的卷积层

大多数基于CNN的面部检测方法通常受到时间成本的限制,特别是在CPU设备上。 更准确地说,当输入,内核和输出的大小很大时,CPU的卷积操作非常耗时。 我们的RDCL旨在通过适当的内核大小快速缩小输入空间大小,同时减少输出通道的数量,使FaceBox在CPU设备上达到实时速度,如下所示

•缩小输入的空间大小:为了快速缩小输入的空间大小,我们的RDCL为其卷积和池化层设置了一系列大步幅。 如图1所示,Conv1,Pool1,Conv2和Pool2的步幅分别为4,2,2和2。 RDCL的总步幅大小为32,这意味着输入空间大小快速减少了32倍

•选择合适的内核大小:一个网络中前几个层的内核大小应该很小以便加速,同时它也应该足够大以减轻空间大小减小带来的信息损失。 如图1所示,为了保持高效和有效,我们分别为Conv1,Conv2和所有Pool层选择7×7,5×5和3×3内核大小。

•减少输出通道的数量:我们利用C.ReLU激活功能(如图2(a)所示)来减少输出通道的数量。 C.ReLU [32]的动机来自CNN中的观察,即较低层中的滤波器形成对(即,具有相反相位的滤波器)。 根据这一观察,C.ReLU可以通过在应用ReLU之前简单地连接否定输出来使输出通道的数量加倍。 使用C.ReLU可显着提高速度,精度下降可忽略不计

3.2 多尺度卷积层

所提出的方法基于RPN,RPN是在多类别对象检测的场景中作为类不可知的提议者而开发的。 对于单类检测任务(例如,面部检测),RPN自然是唯一有关类别的检测器。 然而,作为独立的面部检测器,RPN不能获得竞争性能。 我们认为这种不令人满意的表现来自两个方面。 首先,RPN中的锚点仅与最后的卷积层相关联,其最终卷积层的特征和分辨率太弱而不能处理各种大小的面。 其次,锚定关联层负责检测相应范围内的面部,但它只有一个不能匹配不同面部比例的感知场。 为解决上述两个问题,我们的MSCL按以下两个维度设计:

•沿网络深度维度的多尺度设计。 如图1所示,我们设计的MSCL由几层组成。 这些层逐渐减小尺寸并形成多尺度特征图。 与[21]类似,我们的默认锚点与多尺度特征图(即,Inception3,Conv3 2和Conv4 2)相关联。 这些层作为沿网络深度维度的多尺度设计,在具有不同分辨率的多个层上离散锚,以自然地处理各种尺寸的面。

•沿网络宽度维度的多尺度设计。 为了学习不同比例的面部的视觉模式,锚相关层的输出特征应该对应于各种尺寸的感受野,这可以通过初始模块[34]轻松实现。 Inception模块由具有不同内核的多个卷积分支组成。 这些分支作为沿网络宽度维度的多尺度设计,能够丰富感受野。 如图1所示,MSCL中的前三层基于Inception模块。 图2(b)说明了我们的Inception实现,它是一个经济有效的模块,用于捕获不同比例的面部。

3.3. Anchor densification strategy

如图1所示,我们对默认锚点(即方形锚点)施加1:1的宽高比,因为面部框大致为方形。 Inception3层的锚点比例为32,64和128像素,Conv3 2层和Conv4 2层分别为256和512像素。

图像上锚点的平铺间隔等于相应锚点关联层的步幅大小。 例如,Conv3 2的步幅大小为64像素,其锚点为256×256,表示输入图像上每64个像素有一个256×256的锚点。 我们如下定义锚的平铺密度(即Adensity):

这里,Ascale是锚的尺度,Ainterval是锚的平铺间隔。 默认锚点的平铺间隔分别为32,32,32,64和128。 根据Equ。 (1),相应的密度为1,2,4,4和4,显然不同尺度的锚之间存在瓦片密度不平衡问题。 与大锚(即128×128,256×256和512×512)相比,小锚(即32×32和64×64)太稀疏,这导致小面的回忆率低。

为消除这种不平衡,我们提出了一种新的锚固密度化策略。 具体来说,为了使一种类型的锚点密集n次,我们在一个感受野的中心周围均匀地平铺Anumber = n2个锚点,而不是仅在该感知场的中心处平铺一个以进行预测。 一些例子如图4所示。在我们的论文中,为了提高小锚的平铺密度,我们的策略用于将32×32锚4次和64×64锚2次加密,这保证了不同的尺度。 锚的尺寸在图像上具有相同的密度(即4),因此各种尺度的面可以匹配几乎相同数量的锚。

3.4. Training

本小节介绍了训练数据集,数据增强,匹配策略,损失函数,硬负挖掘和其他实现细节。 训练数据集。 我们的模型训练12; WIDER FACE [43]训练子集的880张图像。 数据增加。 每个训练图像按以下数据增强策略顺序处理:

•颜色失真:应用与[9]类似的一些照片度量失真。 •随机裁剪:我们从原始图像中随机裁剪五个方形补丁:一个是最大的方形补丁,其他的大小介于原始图像的短尺寸的[0:3,1]之间。 然后我们随意选择一个补丁用于后续操作。 •缩放变换:随机裁剪后,所选方形拼贴的大小调整为1024×1024。•水平翻转:调整大小的图像以0:5的概率水平翻转。 •面盒过滤器:如果面板盒的中心位于上面处理的图像中,我们会保留面盒的重叠部分,然后过滤掉这些高度或宽度小于20像素的面盒。

匹配策略。在训练期间,我们需要确定哪些锚对应于面部边界框。我们首先将每个面与具有最佳jaccard重叠的锚匹配,然后将锚点与具有高于阈值的jaccard重叠的任何面部匹配(即,0:35)。

损失功能。我们的损失函数与快速R-CNN中的RPN相同[29]。我们采用2级softmax损失进行分类,并采用平滑L1损失进行回归

硬负采矿。在锚匹配步骤之后,发现大多数锚是负的,这在正例和负例之间引入了显着的不平衡。为了更快地优化和稳定训练,我们按损失值对它们进行排序并选择最高值,以便负数和正数之间的比率最多为3:1。

其他实施细节。使用“xavier”方法随机初始化所有参数。我们使用具有0:9动量,0:0005权重衰减和批量大小32的SGD来对所得模型进行微调。最大迭代次数为120k,我们在前80k次迭代中使用10-3学习率,然后继续训练20k次迭代分别为10-4和10-5。我们的方法在Caffe库中实现。

4. Experiments

在本节中,我们首先介绍FaceBoxes的运行效率,然后以烧蚀的方式分析我们的模型,最后在常见的人脸检测基准上进行评估。

4.1. Runtime efficiency
运行时效率

基于CNN的方法一直被指责其运行时效率。 虽然现有的CNN面部解决方案可以通过高端GPU加速,但它们在大多数实际应用中都不够快,尤其是基于CPU的应用。 如下所述,我们的FaceBoxes足以满足实际要求。 在推理期间,我们的方法输出大量的框(例如,8个;用于VGA分辨率图像的525个框)。 我们首先通过0:05的置信度阈值过滤掉大多数框,并在应用NMS之前保留前400个框,然后我们执行NMS,其中jaccard重叠为0:3并保留前200个框。 我们使用Titan X(Pascal)和cuDNN v5:1测量速度,使用Intel Xeon E5-2660v3 @ 2:60GHz。 如表格中所列。 1,与最近的基于CNN的方法相比,我们的FaceBoxes可以在CPU上以20 FPS运行,具有最先进的精度。 此外,我们的方法可以使用单个GPU以125 FPS运行,并且只有4:1MB的大小。

表1.不同方法的总体CPU推断时间和mAP比较。 FPS用于CPU上的VGA分辨率图像,mAP表示FDDB上1000个误报的真正正率。 值得注意的是,对于STN [4],其mAP是179个误报的真实阳性率,并且随着ROI卷积,其FPS可以加速到30,召回率下降0:6%。

4.2. Model analysis

模型分析

我们对FDDB数据集进行了广泛的消融实验,以分析我们的模型。 与AFW和PASCAL相比,FDDB要困难得多,因此在FDDB上分析我们的模型是有说服力的。 对于所有实验,除了对组件的指定更改外,我们使用相同的设置。 烧蚀设置。 为了更好地理解FaceBoxes,我们一个接一个地删除每个组件,以检查每个提议的组件如何影响最终性能。 1)首先,我们消除锚固密集化策略。 2)然后,我们用三个卷积层替换MSCL,这三个卷积层都具有3×3内核大小,其输出数量与MSCL的前三个初始模块相同。 同时,我们只将锚点与最后一个卷积层相关联。 3)最后,我们在RDCL中代替C.ReLU和ReLU。 烧蚀结果列于表格中。 2,一些有希望的结论可归纳如下:

表2. FDDB数据集上FaceBoxes的消融结果。 准确度(mAP)表示1000个误报的真实阳性率。 速度(ms)用于CPU上的VGA分辨率图像。

Anchor致密化战略至关重要。我们的锚固致密化策略用于增加小锚的密度(即32×32和64×64),以提高小面部的召回率。从标签中列出的结果。 2,我们可以看到在消除锚密化策略后,FDDB上的mAP从96:0%降低到94:9%。急剧下降(即1:1%)证明了所提出的锚固致密化策略的有效性。 MSCL更好。 Tab中第二列和第三列之间的比较。图2表明MSCL有效地将mAP增加1:0%,这取决于不同的感受域和多尺度锚定拼接机制。 RDCL是高效且准确的保留。 RDCL的设计使我们的FaceBoxes能够在CPU上实现实时速度。如Tab中所述。 2,RDCL导致精度下降微不足道,但速度显着提高。具体而言,FDDB mAP以大约19:3ms的速度改进而降低0:1%。

4.3. Evaluation on benchmark

评估基准

我们在常见的人脸检测基准数据集上评估FaceBoxes,包括Annotated Faces in the Wild(AFW),PASCAL Face和Face Detection Data Set and Benchmark(FDDB)

AFW数据集[49]。 它有205个图像,473个面孔。 我们根据众所周知的作品[4,20,22,33,39,42,49]和商业面部检测器(例如,Face.com,Face ++和Picasa)评估FaceBoxes。 如图4所示,我们的FaceBoxes在很大程度上优于其他所有FaceBox。 图7(a)显示了AFW数据集的一些定性结果。

图4. AFW数据集的精确回忆曲线

图5. PASCAL面部数据集上的精确回忆曲线。

FDDB数据集[10]。 它有5个; 171面临2; 从雅虎网站上的新闻文章中获取的845张图片。 FDDB采用边界椭圆,而我们的FaceBoxes输出矩形单边界。 这种不一致对连续得分有很大影响。 为了在连续得分评估下进行更公平的比较,我们训练椭圆回归量以将我们预测的边界框转换为边界椭圆。 我们根据其他方法评估FDDB上的人脸检测器[1,6,8,13,14,15,17,19,20,23,27,28,35,42,44,45]。 结果如图6(a)和图6(b)所示。 我们的FaceBoxes在不连续和连续的ROC曲线上实现了最先进的性能并且在很大程度上优于其他所有。 这些结果表明我们的FaceBoxes可以稳健地检测无约束的面部。 图7(c)显示了FDDB的一些定性结果。

(a)不连续的ROC曲线

(b)连续ROC曲线

图6. FDDB数据集的评估。

5. Conclusion

由于面部检测任务的有效模型往往在计算上是禁止的,因此CPU设备实现实时速度以及保持高性能是具有挑战性的。 在这项工作中,我们提出了一种新颖的面部检测器,它在速度和准确性方面都具有卓越的性能。 所提出的方法具有轻量且强大的网络结构,其由RDCL和MSCL组成。 前者使FaceBoxes能够实现实时速度,后者旨在丰富感知领域和不同层次上的锚点以处理各种尺度的面部。 此外,提出了一种新的锚点密集化策略,以提高小脸的召回率。 实验表明,我们的贡献使Face Boxes在常见的人脸检测基准测试中具有最先进的性能。 所提出的探测器非常快,在CPU上实现了VGA分辨率图像的20 FPS,并且可以在GPU上加速到125 FPS。

最后我吐槽一下

论文里提到的CPU可以跑20FPS,而他的cpu计算能力很好

[论文翻译]据传比MTCCN的FaceBoxes《FaceBoxes: A CPU Real-time Face Detector with High Accuracy》相关推荐

  1. FaceBoxes:A CPU Real-time Face Detector with High Accuracy 论文翻译和解析

    论文地址 https://arxiv.org/pdf/1708.05234.pdf 开源代码 https://github.com/sfzhang15/FaceBoxes (若失效直接复制链接打开) ...

  2. FaceBoxes: A CPU Real-time Face Detector with High Accuracy(论文解析)

    论文:FaceBoxes: A CPU Real-time Face Detector with High Accuracy 代码地址:https://github.com/TropComplique ...

  3. 《FaceBoxes: A CPU Real-time Face Detector with High Accuracy》论文笔记

    FaceBoxes: A CPU Real-time Face Detector with High Accuracy笔记 1. Introduction 略. 2. Related work 略. ...

  4. FaceBoxes: 高精度的CPU实时人脸检测器

    论文题目:<FaceBoxes: A CPU Real-time Face Detector with High Accuracy> 论文链接:https://arxiv.org/pdf/ ...

  5. [CV Paper] FaceBoxes: A CPU Real-time Face Detector with High Accuracy

    论文阅读:CPU上的高精度实时人脸检测器 综述 人脸识别是计算机视觉和模式识别的基础问题,过去几十年取得了长足进步,但是由于计算量较大,在CPU上的实时检测一直没有很好的被解决.面临的主要问题,一是人 ...

  6. Spatial As Deep: Spatial CNN for Traffic Scene Understanding论文翻译

    Spatial As Deep: Spatial CNN for Traffic Scene Understanding论文翻译 Abstract摘要 Convolutional neural net ...

  7. 人脸检测--FaceBoxes: A CPU Real-time Face Detector with High Accuracy

    FaceBoxes: A CPU Real-time Face Detector with High Accuracy 人脸检测已经研究了很多年,有很多算法.但是目前基于深度学习CNN网络的人脸检测算 ...

  8. 论文翻译_论文翻译的注意事项有什么?

    针对不同题材的文稿有不同的翻译标准,论文翻译是比较严谨的一种翻译类型,下面小编给大家分享论文翻译的注意事项有什么? 注意"从一而终" 所有的论文,在权威平台上发布的时候都必须译为英 ...

  9. 转:经典论文翻译导读之《Google File System》

    首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源 - 导航条 -首页所有文章资讯Web架构基础技术书籍教程Java小组工具资源 经典论文翻译导读之<Google ...

最新文章

  1. 依然持有比特币,Roger Ver谈投资心经
  2. SAP财务中国本土化报表
  3. java解析xml实例_在java中使用dom解析xml的示例分析
  4. 转:shell awk
  5. Dapr 客户端 搭配 WebApiClientCore 玩耍服务调用
  6. three.js两个点给线条加宽度_一台电视两个房间看?衣柜、客房会隐形?这是什么神奇设计!...
  7. microsoft office 2007 完全 卸载 工具 来自微软官方
  8. linux mount 原文件夹,window文件夹mount挂载Linux
  9. java学习之路目录(已完结)
  10. React 可视化开发工具 shadow-widget 最佳实践(上)
  11. 自学测试的看过来:【全网最全超大型软件测试从零开始学习攻略】
  12. RPlidar学习(三)——RPlidar源代码库
  13. 同时使用动态库和静态库时怎么写makefile
  14. 平安人寿优+计划广纳英才,平安代理人实现职涯发展
  15. 服务器是Windows Server 2003 出现svchost.exe错误对话框的问题解决
  16. 解锁前端密码框常见功能做法
  17. 电商运营基本常识你都知道哪些?
  18. win10升级补丁_微软官方给出无法安装WIN10更新的终极解决办法:覆盖安装
  19. 中国红薯淀粉市场供需现状调研及前景策略分析报告2022年版
  20. 百度站长平台恢复网站自动推送功能!

热门文章

  1. 请回答2021,爱彼迎、木鸟民宿、途家民宿年度走心PK
  2. 微积分基础-极限,导数,反导数
  3. WPF中的ControlTemplate
  4. 花了1晚上diy的matlab解数独算法,很好理解!
  5. Linux - 一次性计划任务之at命令使用
  6. 京东云主机挂载云硬盘、分区、格式化
  7. python学习之股票查询程序
  8. Windows中Latex应用排版、常用引用、公式、表格等
  9. 崩坏三8月20号服务器维修,崩坏3手游8月20日更新了什么
  10. Kata Containers及相关vmm介绍