原文:SSR-Net: A Compact Soft Stagewise Regression Network for Age Estimation

链接:https://www.csie.ntu.edu.tw/~cyy/publications/papers/Yang2018SSR.pdf

摘要

本文提出了一种新的 CNN 模型,称为 Soft Stagewise Regression Network (SSR-Net),使用从具有紧凑尺寸的模型对单个图像进行年龄估计。受 DEX 的启发,作者通过执行多类分类来解决年龄估计问题,然后通过计算期望值将分类结果转化为回归。SSR-Net 采用由粗到细的策略并执行多阶段的多类分类。每个阶段只负责完善其前一阶段的决策,以获得更准确的年龄估计。因此,每个阶段执行的任务很少,需要的神经元也很少,从而大大减少了模型的大小。为了解决将年龄分组所引入的量化问题,SSR-Net 根据输入人脸图像为每个年龄类别分配一个可移动和缩放的动态范围。多阶段策略和动态范围都包含在 soft stagewise 回归的公式中。提出了一种新的网络架构来执行 soft stagewise 回归。由此产生的 SSR-Net 模型非常紧凑,仅占用 0.32 MB。尽管尺寸紧凑,但 SSR-Net 的性能接近模型尺寸通常大近 1500 倍以上的最先进的方法。

1. 介绍

从一张人脸图像中预测一个人的真实 (生物) 年龄是计算机视觉和人工智能中的一个经典问题。它可用于许多应用,例如监控、产品推荐、人机界面和市场分析。这个问题具有挑战性,因为同龄人的外表存在显着差异。老年人可能看起来比一些年轻人年轻,反之亦然。因此,即使对人类来说,从外表估计真实年龄的任务也是具有挑战性的。

将年龄估计问题表述为回归问题是很直观的,因为年龄是一个连续值而不是一组离散类。然而,正如之前的研究所指出的,基于回归的年龄估计方法可能会由于老化过程中的随机性以及面部外观与其真实年龄之间的模糊映射而受到过度拟合的影响。另一方面,人们可以很容易地分为几个年龄段,例如青少年、中年或老年人。因此,许多研究使用多类分类方法通过将年龄量化成组来解决年龄估计问题。然而,将年龄估计作为多类分类问题必须面临年龄组是有序的且高度相关而不是独立的类的问题。此外,将年龄量化为年龄组可能会遇到量化误差和年龄组间模糊性的问题。一些方法采用序数信息用于获取年龄之间的相对排序和解决年龄组之间的歧义。分布学习方法将年龄建模为可学习的分布用于解决组歧义问题。然而,使用序数信息和分布学习的方法通常需要额外的信息,例如分布或类之间的相似性。此外,它们通常需要更复杂的损失函数和算法。

大多数最先进的基于 CNN 的年龄估计方法都建立在复杂网络或网络集合的基础上。他们的模型通常体积庞大,模型大小大于 500 MB。因此,它们不适合在内存和计算资源有限的平台上采用,例如移动和嵌入式设备。目前已经有使用小内存占用的紧凑型通用 CNN 模型以便智能应用程序可以在此类设备上运行。 对于年龄估计,Niu 等人提出的 ORCNN,其模型消耗大约 1.7 MB 的内存。

本文提出了一种新的 CNN 模型,称为 Soft Stagewise Regression Network (SSR-Net),用于年龄估计。该模型结构紧凑,内存占用仅为 0.32 MB,并实现了最先进的性能。SSR-Net 的灵感来自 DEX。DEX 将年龄估计作为一个多类分类问题,通过计算期望值作为年龄将分类结果转化为回归。DEX 的一个问题是它需要大量神经元,每个年龄段一个。最后一个全连接层的链接数是特征数和神经元(类)数的乘积。因此,许多神经元导致许多参数和大型模型。SSR-Net 用从粗到细的策略解决了这个问题。每个阶段只对少数类进行中间分类,比如当前年龄组内的 “相对年轻”、“大约一致” 和 “相对较老”。下一阶段细化上一阶段指定的年龄组内的决策。这样,每个阶段只需要少量的神经元,模型大小可以大大减小。基于分类的方法的另一个问题是年龄的量化。SSR-Net 通过为每个年龄组引入动态范围来解决这个问题。每个组的年龄间隔可以根据输入的人脸图像进行移动和缩放。这些想法被纳入 soft stagewise 回归的公式中。提出了一种新的网络结构来实现 soft stagewise 回归。与基于序数信息或分布学习的方法相比,SSRNet 可以通过简单的回归损失和端到端的方式进行训练,而无需额外的信息,例如分布/等级相似性。实验表明,SSRNet 优于现有的紧凑型网络,包括 MobileNet、DenseNet 和 ORCNN。SSR-Net 的性能接近具有更大模型尺寸 (1500 倍以上) 的最先进方法的性能。

2. 相关工作

在本节中,通过将它们分为四类来回顾最先进的年龄估计方法。

Regression 回归

将年龄估计问题转换为回归问题是很直观的。有通过将 CNN 特征传输给以支持向量回归以用于年龄估计。 Anchored Regression Network (ARN) 将多个线性回归器结合 soft 分配到锚点。由于老化过程中的随机性和模糊映射,基于回归的方法经常过度拟合。

Multi-Class Classification and Age Grouping 多类分类和年龄分组

DEX 通过进行多类别分类,然后计算期望值作为年龄估计来执行年龄估计。此外,有同时使用回归和分类进行年龄估计。还有使用年龄组和 age-shifted 分组来训练一组深度学习模型。

Distribution Learning 分布学习

考虑到分类经常受到组歧义和量化错误的影响,Geng 等人提出了两种不同的自适应分布学习方法,IIS-ALDL 和 BFGS-ALDL 以用于年龄估计。分布的标准偏差根据 KL 散度进行更新。为了解决具有精确年龄的训练数据短缺的问题,Hou 等人提出标签分布学习以在学习特定年龄的同时利用相邻年龄信息。

Ordinal Information 序数信息

一些方法侧重于从数据集中学习相对排序以进行年龄估计。 OHRank 通过开发具有多个二元分类的 cost-sensitive 框架,成功地获得了年龄估计的排序关系。 Ranking-CNN 在 ImageNet 等大型数据集上预训练几个基本 CNN,并使用有序年龄标签对它们进行微调。 Zhang 等人提出了一种范式用于将多个年龄比较映射到年龄分布 posterior 以进行年龄估计。

3. 软阶段回归网络

本节首先说明问题。 然后描述了两个关键思想:stagewise 回归和动态范围。 最后给出了网络架构,并提出了 soft stagewise 回归的公式。

3.1 问题制定

在使用单张人脸图像进行真实年龄估计的问题中,作者给出了一组训练人脸图像  和每个图像 的真实年龄 ,其中 N 是图像数量,Y 是年龄间隔。目标是找到一个函数 F 来预测 作为给定图像 x 的年龄。 对于训练,通过最小化预测年龄和真实年龄之间的平均绝对误差 (MAE) 来搜索函数 F,

其中 是给定图像  的预测年龄。

3.2 Stagewise Regression

以前的工作已经将年龄估计的回归问题转化为解决多类分类问题,然后计算期望值作为预测年龄。 例如,DEX 将年龄区间 Y = [0, V] 均匀地划分为 s 个不重叠的 bin。 因此,每个 bin 的宽度 w 是 V/s。 将第 i 个 bin 的代表年龄表示为  并且 DEX 选择 。 DEX 为 s 级年龄分类问题训练网络。 对于给定的图像 x,网络输出分布向量 表示 x 属于每个年龄组的概率。 然后通过计算以下期望值来预测年龄,

为了获得更准确的估计,DEX 将年龄间隔细分,并将 bin 宽度设置为 one year old,即,如果 Y = [0..100],则有 101 个 bin。 这会导致最后阶段的全连接(FC)层有大量参数并消耗大量内存。

为了在不牺牲太多准确性的情况下减小模型大小,作者建议使用具有多阶段预测由粗到细的策略。 假设有 K 个阶段,第 k 个阶段有  个 bin。 对于每个阶段,我们训练一个网络  ,该网络生成该阶段的分布 。 年龄由以下阶段回归公式预测,

上述等式中的最后一项是第 k 个阶段的 bin 宽度 ,i 是 bin 索引。通过一个具体的例子来直观的理解 stagewise 回归。假设要估计一个在 0∼90 岁范围内的年龄(V = 90),并且假设有两个阶段 (K = 2),并且每个阶段都有三个 bin ( =  = 3)。从分类的角度来看,阶段一将图像分类为青年(0∼30)、中年(30∼60)或老年(60∼90)。对于阶段二,阶段一中的每个 bin 进一步分为 = 3 个 bin。因此,第二阶段的 bin 宽度为 90/3·3=10。第二阶段的分类器将阶段一 指定的年龄组的图像分类为相对年轻 (+0∼10)、中等 (+10∼20) 或相对较老 ( +20∼30) 。需要注意的是第一阶段的所有年龄组共享第二阶段的一个分类器。将阶段分类转化为回归给出了上面等式中的公式。第一阶段以粗粒度预测年龄,而第二阶段则以更细粒度对其进行细化。阶段回归的优点是每个阶段的类数量很少,从而导致参数更少,模型更紧凑。

3.3 动态范围

将年龄间隔均匀地划分为不重叠的区间在处理年龄组歧义和年龄连续性方面不太灵活。这个问题在粗粒度时更加严重。作者通过为每个 bin 引入动态范围来解决这个问题;即允许根据输入图像移动和缩放每个 bin。有几种可能的选项可以将移位和比例应用于 bin。为了在方程中使用相同的 stagewise 回归公式,作者选择修改方程中的 bin 索引 i 和 bin 宽度  以分别调整 bin 的移位和尺度。为了在第 k 阶段调整 bin 宽度 ,作者引入了一个项 Δ k 来将  修改为  如下,

其中 ∆ k 是给定输入图像的回归网络的输出。回归网络的细节将在 3.4 节中给出。修改 后,bin 宽度现在变为

因此, 的调整有效地改变了 bin 宽。对于移动 bin,作者向每个 bin 索引 i 添加一个偏移项 η。 在第 k 个阶段有 个 bin。因此,需要一个用于第 k 级的偏移向量,。 同样,偏移向量是输入图像上回归网络的输出。bin 索引 i 修改如下,

修改后的 bin 索引  有效地移动了第 i 个 bin。bin 的尺度和位移都是输入图像的回归结果。依赖于输入的动态范围根据输入图像提供更准确的细化。

3.4 网络结构

图 1(a) 说明了所提出的 SSR-Net 的整体网络结构。 受到 Yang 等人提出的互补 2-stream 结构的启发,作者采用 2-stream 模型,其中有两个异构流。 对于这两个流,基本构建块由 3 × 3 卷积、批量归一化、非线性激活和 2 × 2 池化组成。 然而,每个流都采用了不同类型的激活函数(ReLU 与 Tanh)和池化(平均与最大值)以使其异构。 这样可以提取不同的特征,它们的融合可以提高性能。

不同阶段采用不同层次的特征。如图 1(b) 所示,对于每个阶段,来自某个级别的两个流的特征都被馈送到融合块中。融合块负责生成第 k 阶段的 stagewise 输出、分布为 ,偏移向量  和比例因子  。在融合块中,来自两个流的特征首先经过 1×1 卷积、激活和池化以获得更紧凑的特征。为了获得 ,两个获得的特征图通过逐元素乘法 ⊗ 融合。乘积经过一个全连接层,然后是一个 Tanh 函数,用于在 [−1, 1] 中获得一个值作为  和  都是向量,而且更复杂。因此,特征在进行逐元素乘法、FC 层和激活之前经过一个额外的预测块。由于 表示一个分布,因此使用 ReLU 作为其激活函数以获得正值。另一方面, 使用 Tanh 以使其在正负两侧移动。

3.5 软阶段回归

为输入图像 x 给定网络的 stagewise 输出 ,bin 的数量 ,预测的年龄 

其中  是等式6中定义的移位 bin 索引,而  是等式 4 中定义的调整后的 bin 数。因为 bin 是通过小数调整的,作者将方程 7 中的公式命名为 soft stagewise 回归。通过这种方式将 softness 带入 bin 的索引和宽度。使用预测的年龄 ,通过最小化等式 1 中 MAE 定义的 L 1 损失,可以获得用于年龄估计的 SSR-Net 模型。

4 实验

本节首先描述预处理、实验设置和比较方法。 接下来报告在 IMDB-WIKI、MORPH2 和 MegaAge-Asian 数据集上的实验。

4.1 预处理和实验设置

作者在几个用于年龄估计的基准数据集上进行了实验,包括 IMDB-WIKI、MORPH2 和 MegaAge-Asian 数据集。

遵循先前工作建议的程序,为了进行预处理,所有人脸图像都使用面部标志物(例如眼睛和鼻子)对齐。对齐后,每张图像的人脸区域被裁剪并调整为 64 × 64 的分辨率。注意,该尺寸远小于 DEX 和 ARN。对于资源有限的移动和嵌入式设备,较低的分辨率是必要的。

实验在配备 Intel i7 CPU 和 NVIDIA GTX1080Ti 的机器上进行。该程序是用 Keras 实现的。Soft stagewise 回归的自定义层为 Keras 的自动微分。对于训练,随机激活了常见的数据增强技巧,包括缩放、移动、剪切和翻转。除非另有说明,SSR-Net 使用三个阶段, = 3,即 SSR-Net(3,3,3)。使用Adam 方法进行优化,epoch 为 90。学习率最初为 0.002,每 30 个 epoch 减少 0.1 倍。 IMDB 数据集的 batch size 为 128,其他数据集的 batch size 为 50。 SSR-Net 的训练时间大约为三个小时,包括预训练。

4.2 比较方式

我们将提出的 SSR-Net 模型与一组最先进的基于深度学习的年龄估计方法进行比较。根据模型大小,比较方法可以粗略地分为两类,即笨重模型和紧凑模型。

庞大的模型更强调预测准确性。它们通常更准确,但以庞大的网络模型为代价。许多这样的模型都是建立在 VGG16 之上的。 DEX 将年龄估计的回归问题转化为多类分类问题,并使用期望值作为年龄估计。 ARN 通过将多个线性回归量与 soft 分配结合到 anchor point 来解决年龄回归问题。 AP 训练了一个联合执行序数 hyperplane 分类和 posterior 分布学习的网络。 Hot 将 VGG16 特征输入支持向量回归 (SVR) 以进行年龄预测。 RankingCNN 集成了一系列二元分类网络,每个网络都使用有序年龄标签进行训练。

紧凑模型强调减少内存占用,并可能牺牲内存和速度的准确性。此类别中的年龄估计模型较少。 ORCNN 将序数回归问题转化为一系列二元分类问题,并使用多输出 CNN 来共同解决这些子问题。 MRCNN 使用类似的网络,但用于 metric 回归。MobileNet 用深度可分离卷积代替标准卷积,以​​减少参数和计算成本。DenseNet 以前馈方式将每一层连接,并且可以用更少的参数实现良好的性能。MobileNet 和 DenseNet 都是具有可调参数的通用网络模型。作者挑选了参数,以便它们的模型大小大约为 1 MB,与 SSR-Net 进行公平比较。

4.3 IMDB-WIKI上的实验

IMDB-WIKI 数据集是最大的带有年龄标签的人脸图像数据集。它包含 20,284 位名人的 523,051 张人脸图像。其中,460,723 张图片来自 IMDB,其余 62,328 张来自维基百科。

尽管 IMDB-WIKI 数据集是最大的年龄估计数据集,但正如之前的工作所指出的那样,它包含更多的噪声,例如不准确的年龄和没有人脸或多张人脸的图像。因此,它不适合使用 MAE 进行性能评估。像以前的大多数工作一样,作者将其用于预训练。此外,我们使用 IMDB-WIKI 数据集来观察不同方法的过拟合特性。 IMDB 和 WIKI 数据集分别使用 80% 的图像进行训练,其他 20% 作为验证集。由于 IMDB 数据集要大得多,作者首先在 IMDB 上训练我们的模型,然后使用训练好的模型作为在 WIKI 数据集上训练的起点。图 2 比较了 MobileNet、DenseNet 和提出的 SSRNet 在 IMDB、WIKI 和 MORPH2 数据集上的训练过程的进展。蓝色曲线表示训练误差,而橙色曲线显示验证误差。很明显,SSR-Net 的蓝色和橙色曲线比其他两种方法更接近。

这意味着在训练集上训练的模型可以更成功地应用于验证集。训练错误和验证错误之间的差异表明 MobileNet 和 DenseNet 更容易过拟合。

4.4 MORPH2上的实验

MORPH2 是最流行的年龄估计基准数据集。它有大约 13,000 个人的 55,000 张人脸图像。他们的年龄从 16 岁到 77 岁不等。与之前的工作类似,作者将数据集随机分为独立的训练集(80%)和测试集(20%)。MAE 被用作绩效评估的指标。

表 1 报告了 MORPH2 上一组最先进的年龄估计网络模型的 MAE 值,包括庞大和紧凑的模型。为了获得更好的准确性,庞大的模型通常使用更高分辨率的输入 (224 × 224 × 3) 来保留更多信息。由于大量的参数,它们经常消耗超过 500 MB 的内存。对于具有大量参数的训练模型,需要更多的图像。因此,除了 IMDB-WIKI,其中一些还使用 ImageNet 进行预训练,导致训练时间更长。Ranking-CNN 采用二进制分类网络的集合,消耗更多内存,高达 2.2 GB。尽管获得了更好的性能,但由于模型体积庞大,因此很难在资源有限的移动和嵌入式设备上采用笨重的模型。

另一方面,为了减少内存占用,紧凑模型通常将较低分辨率的图像作为输入(64 × 64 × 3),并且包含的​​参数要少得多。本文提出的 SSR-Net 非常紧凑,仅消耗 0.32 MB 内存,而 MobileNet 和 DenseNet 大约需要 1 MB,MRCNN/ORCNN 消耗 1.7 MB。在使用 MORPH2 进行训练之前,我们使用 IMDB-WIKI 数据集进行预训练。SSR-Net 达到 3.16 MAE,是紧凑模型中最好的。尽管它占用尺寸不到其模型的 1/1500,但它的效果甚至超过了几个笨重的模型。凭借极其紧凑的模型(0.32 MB)和合理的性能,SSR-Net 适合在移动和嵌入式平台上采用。图 2 的最后一行显示了 MORPH2 上 MobileNet、DenseNet 和 SSR-Net 的训练/验证曲线。同样,与其他两个紧凑模型相比,SSR-Net 受到过拟合的影响较小。

表 1 还报告了在 GPU 或 CPU 上运行的紧凑模型的推理时间。 MobileNet 比 SSR-Net 略快,但其年龄估计性能要差很多。 DenseNet 比 SSR-Net 慢得多,而且模型更大,性能更差。因其源代码未公开,作者无法报告 MRCNN 和 ORCNN 的推理时间和训练进度。

Soft 动态范围的使用对于 SSR-Net 很重要。没有它,SSR-Net 的 MAE 为 9.29。它表明动态范围提供的灵活性对于多阶段回归至关重要。由粗到细的逐步回归方法减少了神经元的数量,分类中的每一类对应一个神经元。对于 SSR-Net (),需要  +  个神经元。对于大致相同数量的类,单阶段方法将需要 ×  ×  个神经元。图 3 比较了具有不同配置和 ORCNN 的 SSR-Net 的参数数量。多级设计通常比单级设计导致更少的参数,尤其是当 V 很大时。此外,所提出的网络结构也有助于减少参数。总体而言,与 ORCNN 相比,SSR-Net 在实现更好的 MAE 的同时拥有更少的参数。

4.5 MegaAge-Asian 实验

大多数人脸图像数据集包含西方人的图像,并且人类在年龄估计中可以发挥重要作用。为了验证提出的 SSR-Net 对亚洲人等其他种族的表现如何,作者还在 MegaAge-Asian 数据集上进行了实验。它包含 40,000 张 0 到 70 岁亚洲人的面部图像。按照 Zhang 等人的协议,保留 3,945 张图像用于测试,并使用累积准确率 (CA) 作为评估指标。 CA 定义为 CA(n) =  ×100 其中 K 是测试图像的总数, 表示绝对误差小于 n 的测试图像的数量。在IMDB-WIKI上训练的SSR-Net模型作为训练的起点,MegaAge-Asian的训练图像用于训练SSR-Net。使用相同的训练程序来训练 MobileNet 和 DenseNet。表 2 报告了比较方法的 CA(3) 和 CA(5)。很明显,SSR-Net 的性能优于其他两个紧凑模型。

5 结论

在本文中,我们提出了一种新的年龄估计方法,Soft Stagewsie 回归网络(SSR-Net)。它既紧凑又高效。它还在多个年龄估计数据集上取得了良好的表现。 Stagewise 预测结构避免了大量神经元并导致模型更加紧凑。通过利用动态范围,可以更好地解决量化错误,从而使 SSR-Net 的性能可以与庞大模型的性能相媲美。凭借其紧凑的尺寸和效率,SSR-Net 适用于在移动或嵌入式设备上进行年龄估计。

【论文翻译】年龄估计 SSR-Net: A Compact Soft Stagewise Regression Network for Age Estimation相关推荐

  1. 【深度学习论文翻译】Weakly Supervised Action Localization by Sparse Temporal Pooling Network全文翻译

    Phuc Nguyen(University of California Irvine, CA, USA) Ting Liu,Gautam Prasad(Google Venice, CA, USA) ...

  2. 年龄估计系列(1)年龄性别调研:论文阅读和github资源汇总/数据库/挑战/思考

    目录 一.论文阅读和github资源汇总 1.1 论文 1.1.1 2012.人脸图像的年龄估计研究 1.1.2 2013.Age Estimation Face Images_Human vs Ma ...

  3. 最新年龄估计综述(Deep learning approach for facial age classification: a survey of the state of the art)

    目录 @[TOC](文章目录) #一.常用数据集 #二.常用的年龄识别方法 #1.多分类(MC) #2.度量回归(metric regression,MR) #3.排序(ranking) #4.深度标 ...

  4. 【论文解读】DLDL: Deep Label Distribution Learning With Label Ambiguity(年龄估计)

    1. 介绍 论文地址:https://arxiv.org/pdf/1611.01731v2.pdf 代码:https://github.com/gaobb/DLDL 针对问题:年龄估计 (1)缺乏精确 ...

  5. CVPR 2019 | 旷视研究院提出极轻量级年龄估计模型C3AE

    全球计算机视觉三大顶级会议之一 CVPR 2019 将于当地时间 6 月 16-20 日在美国洛杉矶举办.届时,旷视研究院将带领团队远赴盛会,助力计算机视觉技术的交流与落地.在此之前,旷视每周会介绍一 ...

  6. CVPR 2019 | 旷视提出极轻量级年龄估计模型C3AE

    点击我爱计算机视觉标星,更快获取CVML新技术 旷视成都研究院提出一个极其简单但是高效.基于上下文信息的级联性年龄估计模型 --C3AE.  论文名称:C3AE: Exploring the Limi ...

  7. Arcface v1 论文翻译与解读

    神罗Noctis 2019-10-13 16:14:39  543  收藏 4 展开 论文地址:http://arxiv.org/pdf/1801.07698v1.pdf 最新版本v3的论文翻译:Ar ...

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

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

  9. CVPR 2019 | 一种用于年龄估计的连续感知概率网络

    2019-11-16 04:26:34 作者 | BBuf 编辑 | 唐里 年龄估计是计算机视觉中一个重要且具有挑战性的问题.现有的年龄估计方法通常采用分治法来解决非平稳老化引起的异构数据.然而,面部 ...

最新文章

  1. 如何在Java中比较日期? [重复]
  2. QT ToolBar 工具栏浮动状态
  3. 让每次编译产生的目标文件都能打印出编译时间信息
  4. bash脚本编程之一 变量、变量类型等
  5. hadoop深入研究:(五)——Archives
  6. mysql5.7.12无法启动_MySql5.7.12免安装版配置以及服务无法启动问题解决方法
  7. 1 月份 Github 上最热门最有价值的开源项目
  8. 程矢Axure夜话:Axure手机原型视频教程之图形解锁
  9. UnionID与OpenID的区别【转自微信官方文档】
  10. 利用DEEPLABV3-RESNET101获取人体蒙版
  11. iCode代码托管的一些基本指令
  12. c语言中输入数组时用不用加地址符,C语言中,用格式符”%s”输入字符数组时,数组名前不能加。...
  13. 【转载】征途单机版详细架设图文教程
  14. 51单片机用蜂鸣器来输出音乐《两只老虎》
  15. 如何写一篇五彩斑斓的博客.append(可爱)
  16. html5 audio音乐播放,循环播放等9款播放器
  17. 笔记本电脑如何玩游戏不卡顿,提升自己的笔记本性能!开启高性能模式的方法
  18. Centos7端口映射(云端最后别忘了在安全组开放80端口!!!!!!!!!)
  19. python画风向杆_matplotlib quiver 画风速风向
  20. python调取高德api_Python调用高德API实现批量地址转经纬度并写入表格的功能

热门文章

  1. 蓝牙耳机最优秀的保养方法,别再担心你的蓝牙耳机寿命短了~
  2. python txt默认读取字符还是行,python读取中文txt文本的方法
  3. 【_ 記 】Java Calendar类详解(今年 本月 今日 去年 上月 昨日)
  4. ssm+jsp计算机毕业设计潮流服饰网店平台f91s7(程序+LW+源码+远程部署)
  5. js 操作标签 disabled属性
  6. 云服务器实现Ms Sqlserver数据库定时自动备份并存至指定存储空间
  7. WAP 2.0简介(转)
  8. iOS Quartz2D实战系列-手把手教你手势解锁
  9. C语言:指针一(基础概念)
  10. 微信小程序实现两个页面之间的跳转