目录

基本情况

摘要

I. 介绍

II. 相关工作

A.仅照相机的方法

B.相机和LiDAR地图方法

III. 提议方法

A. 激光雷达图像(LiDAR-Image)的生成

地图投影(Map Projection)

遮挡过滤(Map Projection)

B.网络架构

C.迭代细化

D.训练细节

IV. 实验结果

A.数据集

B.系统组件评估

C.反复细化和总体评估

D.泛化能力

V. 结论

VI. 未来的工作


基本情况

  • 题目:CMRNet: Camera to LiDAR-Map Registration
  • 出处:Cattaneo D, Vaghi M, Ballardini A L, et al. Cmrnet: Camera to lidar-map registration[C]//2019 IEEE Intelligent Transportation Systems Conference (ITSC). IEEE, 2019: 1283-1289.

摘要

在本文中,我们介绍了一种基于卷积神经网络(CNN)的实时方法CMRNet,该方法可以根据LiDAR数据构建的地图,定位场景的RGB图像在地图中的位置。 我们的网络即CMRNet不是学习地图。 相反,它学习图像与地图之间的匹配。 我们在KITTI数据集上验证了我们的方法,无需任何跟踪程序即可独立处理每个帧。 CMRNet在里程表数据集的序列00上实现了0.27m和1.07度的定位精度,从一个位移高达3.5m和17度的粗略姿态估计开始。 据我们所知,这是第一个基于CNN的方法,可将单眼相机的图像与给定的或预先存在的3D LiDAR地图进行匹配。

I. 介绍

在过去的几年中,自动驾驶汽车对场景的了解在物体检测车辆导航方面都得到了显着提高[1],[2]。尽管这些改进允许使用更高级和复杂的高级驾驶员辅助系统(ADAS)和操作,但(面临问题)

  • 当前的技术水平还远非SAE全自动水平,尤其是在城市等复杂情况下。
  • 这些算法中的大多数都依赖于非常精确的定位估计值,这通常很难使用通用的全球导航卫星系统(GNSS)获得,主要是针对非视距(NLOS)和多径问题。
  • 此外,在室内区域需要导航的应用,例如在地下区域的代客泊车,必然需要补充方法。

为了解决定位问题,多种选择已经被研究,(一种解决方法

  • 包括基于视觉和光检测测距(LiDAR)的方法;

    • 他们在定位过程中共享对环境先验知识的开发[3] – [5]。利用相同传感器进行映射和定位的定位方法通常可以获得良好的性能,因为场景的地图与车载传感器生成的同类数据相匹配。
    • (使用LiDAR定位的问题
      • 但是,由于需要对工作区域进行初步制图,因此妨碍了它们的应用,这在构建地图及其维护方面都存在着相关的问题。
  • (使用LiDAR定位的现状
    • 一方面,一些方法尝试利用标准地图制图(例如OpenStreetMap或其他拓扑图)来执行定位,以利用路线图[6]或车道,环形交叉路口和交叉路口[7]-[ 9]。
    • 另一方面,如今在成熟的地图和相关服务市场中的公司,例如HERE或TomTom,已经在开发所谓的高清地图(HD地图),这些地图是使用LiDAR传感器构建的[10]。这使自动驾驶汽车领域的其他参与者可以专注于定位任务。

HD地图是专门为支持自动驾驶车辆而设计的,它提供了诸如交通标志,车道标记等高级特征的准确位置,并以点云的形式以点密度表示了环境。通常达到0.1m。在下文中,我们将通过处理来自LiDAR的数据生成的点云表示为LiDAR地图。利用此类地图的标准方法是通过将车载传感器收集的点云与LiDAR地图进行匹配来将观察者定位在本地;这个问题的解决方案称为点云注册算法。当前,这些方法受到LiDAR设备巨大成本的阻碍,LiDAR设备是用于精确几何重建的事实上的标准。

相反,我们在这里提出了一种新颖的方法

  • 用于将图像从车载单眼RGB相机配准到该区域的LiDAR地图。这允许利用仅在车辆上便宜的基于摄像头的传感器套件来开发嵌入到HD地图中的LiDAR地图的即将到来的市场。
  • 特别是,我们提出了CMRNet,这是一种基于CNN的方法,可以基于粗略的初始姿态估计来实现亚米级精度的摄像机定位。用于定位的地图和图像不一定是网络训练期间使用的地图和图像。
  • 据我们所知,这是解决本地化问题的第一项工作,而没有本地化的CNN,即在工作区域中接受过培训的CNN [11]。 CMRNet不学习地图,而是学习将图像与LiDAR地图匹配。在KITTI数据集上进行的广泛实验评估[12]显示了我们方法的可行性。

本文的其余部分安排如下:

  • 第二部分简要回顾了最相似的方法以及基于DNN的方法的最新成就。
  • 在第三部分中,我们介绍了拟议系统的细节。
  • 在第四节中,我们展示了所提出方法的有效性,
  • 第五节和第六节介绍了我们的结论和未来的工作。

II. 相关工作

在过去的几年中,视觉定位已成为计算机视觉界的一个热门话题。尽管已经提出了很多变化形式,但是大多数都是基于从摄像机传感器收集的图像进行的,或者利用某种环境的3D重构。

A.仅照相机的方法

第一类技术使用单个图像作为输入来处理摄像机姿态的6自由度估计。

一方面,传统方法通过两阶段程序来解决此问题,该程序包括使用位置识别算法执行的粗略定位,然后进行第二次精炼步骤,以实现最终的精确定位[13],[ 14]。

另一方面,主要基于深度学习方法的最新机器学习技术可以一步完成此任务。通常使用从工作环境的不同角度拍摄的一组图像来训练这些模型,系统在其中进行定位。

PoseNet [11]是这一类别中最重要的方法之一,启发了许多后续作品。它包含一个训练有素的相机姿态回归的CNN。从这项工作开始,通过引入新的几何损失函数[15],利用贝叶斯CNN的不确定性估计[16],包括基于合成深度信息的数据增强方案[17]或使用CNN管道中两个观测值之间的相对姿态[18]。

  • 遵循PoseNet中提出的思想的众多作品之一是VLocNet ++ [19]。在这里,作者使用多学习任务(MLT)方法处理视觉定位问题。具体而言,他们证明了与单个任务学习相比,同时为不同任务训练CNN可获得更好的定位性能。直到今天,文献仍然认为[19]是 7Scenes 数据集[20]上性能最好的方法。
  • 克拉克等[21]开发了一种利用图像序列的CNN,以提高城市环境中的定位质量。
  • 相反,Brachmann等人以端到端的方式在基于CNN的方法中集成了RANSAC的可区分版本[22],[23]。

另一个仅用于摄影机的定位的是基于决策森林,该决策森林由用于分类或回归问题的一组决策树组成。

  • 例如,Shotto等人提出的方法 [20],利用RGBD图像和回归森林来执行室内摄像机定位。

与基于SIFT [24]的手工描述符的方法相比,上述技术得益于机器学习方法的通用功能,在应对挑战性的场景条件(如光照变化,遮挡和重复模式)时更加强大。 SURF [25]。

但是,所有这些方法都无法在训练阶段尚未开发的环境中执行定位,因此需要针对每个新位置重新训练这些回归模型。

B.相机和LiDAR地图方法

第二类定位技术是利用现有地图来解决本地化问题。特别地,文献中已经提出了两类方法:基于几何的方法和基于投影的方法。

  • Caselitz等[3]提出了一种基于几何的方法,该方法通过比较一组3D点,从一系列图像重建的点云和现有地图来解决视觉定位问题。
  • Wolcott等 [4]相反,开发了一种基于投影的方法,该方法使用从与地图的3D点相关联的强度数据构建的、投影到图像平面的网格,从而使用归一化互信息(Normalized Mutual Information,NMI)与相机图像进行比较、测量。
  • Neubert等文献[5]提出使用合成视图生成的深度图像摄像机图像之间的相似性,作为粒子过滤器的得分函数,以便在室内场景中将摄像机定位。

这些技术的主要优点是,它们可以在任何可使用3D地图的环境中使用。这样,它们避免了机器学习方法用于定位的主要缺点之一,即必须为每个特定环境训练新模型。尽管具有这些非凡的特性,但在存在遮挡,灯光变化和重复的场景结构的情况下,它们的定位能力仍然不够强大。

本文中介绍的工作受到了Schneider等人的启发 [26],它使用来自LiDAR的3D扫描和RGB图像作为新型CNN -- RegNet的输入。他们的目标是提供一种基于CNN的方法来校准相机关于LiDAR传感器外部参数。从这项工作中获得启发,在本文中,我们提出了一种新颖的方法,该方法具有上述两个类别的优点。与上述文献的贡献不同,后者利用从3D LiDAR同步单次激活中收集的数据和摄像机图像,我们方法的输入是环境的完整3D LiDAR地图,以及单个图像和粗糙的猜测的初始相机位姿。最终,输出包括一个精确的6自由度摄像机姿态定位。值得注意的是,与图像同时进行一次LiDAR扫描意味着观察到的场景是完全相同的。相反,在我们的情况下,3D地图通常描绘了不同的配置,即不存在道路使用者(图像中没有vs点云地图中有,从而使匹配更具挑战性。

我们的方法结合了CNN的泛化能力,以及可以在可使用LiDAR地图的任何环境中使用的能力,而无需重新训练网络。

III. 提议方法

在这项工作中,我们旨在根据城市环境的3D LiDAR地图中的单个图像对摄像机进行定位。 我们利用深度神经网络的最新发展来进行姿势回归[11](PoseNet)和特征匹配[27](PWC-Net)。
 
我们的方法的流程如图1所示,可以总结如下。 首先,我们通过将地图点投影到虚拟图像平面(位于相机姿势的初始猜测位置)来生成合成深度图像。 这是通过使用摄像机的内在参数完成的。 从现在开始,我们将此合成深度图像称为LiDAR图像。 LiDAR图像与来自摄像机的RGB图像一起被馈送到建议的CMRNet中,该CMRNet使两个不同视点之间的刚体变换回归。 从技术角度来看,将应用于初始姿势可使我们获得6自由度相机的定位。

为了表示刚体转换,我们使用一个(4,4)齐次矩阵:

在这里,R是笛卡尔坐标中的(3, 3)旋转矩阵,T是(3, 1)的平移矢量。旋转矩阵由九个元素组成,但是由于它表示空间中的旋转,因此它只有三个自由度。因此,使用位于3-sphere()流形上的四元数来表示网络在旋转上的输出。一方面,即使归一化四元数具有一个冗余参数,它也具有比欧拉角更好的性能,

  • 即旋转表示的唯一性(除了共轭四元数表示相同的旋转外)和
  • 避免了万向锁。
  • 此外,它们由比旋转矩阵更少的元素组成,因此更适合于机器学习回归方法。

然后,网络的输出是平移矢量和旋转四元数。为简单起见,我们将网络的输出称为,这意味着在必要时将T和q转换为相应的齐次变换矩阵。

A. 激光雷达图像(LiDAR-Image)的生成

为了生成给定初始姿态Hinit的LiDAR图像,我们遵循两步过程。

地图投影(Map Projection)

首先,我们将地图中的所有3D点投影到位于Hinit的虚拟图像平面中,即计算每个3D点P的图像坐标p。此映射如公式(2)所示,其中K是相机投影矩阵。

然后使用z缓冲区方法(z-buffer approach)计算LiDAR图像,以确定沿着同一投影线的点的可见性。由于等式(2)对于大型地图可能在计算上代价昂贵,因此我们仅对围绕Hinit裁剪的子区域执行投影,也忽略了位于虚拟图像平面后面的点。在图2a中描绘了LiDAR图像的示例。

(a)没有遮挡过滤器(b)使用遮挡过滤器

图2.顶部:具有相关RGB覆盖的LiDAR图像。请注意,右侧建筑物后面的点(即栅栏上的较浅点)如何投影到LiDAR图像中。下:遮挡过滤效果的示例。颜色代码从近距离(蓝色)到远点(红色)的距离。

遮挡过滤(Map Projection)

将点云投影到图像平面中可能会产生不切实际的深度图像。例如,由于点云的稀疏性,在墙后遮挡点的投影是可能存在的。为了避免这个问题,我们采用文献[28](Real-time rendering of massive unstructured raw point clouds using screen-space operators)中提出的点云遮挡估计滤波器。图2b中描述了这种方法的效果示例。对于每个点Pi,我们可以围绕朝向相机的投影线构建一个不与任何其他点相交的圆锥。如果锥体的孔径大于某个阈值Th,则点Pi被标记为可见。从技术角度来看,对于LiDAR图像中具有非零深度pj的每个像素,我们计算从相对3D点Pj到针孔的归一化矢量。然后,对于投影位于pj的附近(大小KxK)的任何3D点Pi,我们计算向量以及两个向量之间的角度。该角度用于评估Pj的可见性。然后在LiDAR图像中将遮挡的像素设置为零。更多详细信息,请参见[28]。

B.网络架构

PWC-Net [27]被用作基准,然后我们对其架构进行了一些更改。我们选择该网络是因为PWC-Net旨在预测一对图像之间的光流,即在它们之间找到匹配项。从粗略的摄像机定位估算开始,我们的观点是利用PWC-Net的相关层,及其从不同角度匹配特征的能力来回归正确的6自由度摄像机姿态。

下图右侧部分为PWC-Net (PWC-Net: CNNs for Optical Flow Using Pyramid, Warping, and Cost Volume)

我们对原始架构进行了以下更改。

  • 首先,因为我们的输入是深度和RGB图像(而不是两个RGB图像),所以我们通过消除权重共享来解耦特征金字塔提取器。
  • 然后,由于我们旨在执行姿态回归,因此删除了上采样层,在第一个代价层(the first cost volume layer)之后附加了全连接层。
  • 关于回归部分,我们在第一个光流估计层(PWC-Net中的conv6_4)之前
    • 添加了一个具有512个神经元的完全连接层,
    • 然后添加了两个分支来处理旋转和平移。每个分支由两个堆叠的完全连接的层组成,第一层具有256个层,第二层具有3个或4个神经元,分别用于平移和旋转。

给定一个由RGB图像和LiDAR图像组成的输入对,我们在等式(3)中使用以下损失函数,其中是平移损失,而是旋转损失。

对于平移,我们使用了损失[29]。关于旋转损失,由于欧几里德距离不能提供重要的量度来描述两个方向之间的差异,因此我们使用四元数之间的角距离,如下所示:

此处,q是真值(groung truth)旋转,表示预测的归一化旋转,inv是四元数的逆运算;是四元数m的成分,而∗是两个四元数的乘法运算。

为了将方程式(5)用作损失函数,我们需要确保对于网络的每个可能输出而言,它都是可微的。回顾对于不可微,并且m是单位四元数这一事实,我们可以轻松地验证公式(5)在S3中可微。

C.迭代细化

当初始姿态相对于相机框架严重偏离时,地图投影会产生一个LiDARimage,该图像仅与相机图像共享一些对应关系。在这种情况下,摄像机姿势预测任务很难,因为CNN缺乏比较两个视点所需的信息。因此,预测的相机姿态很可能不够准确。借鉴[26]的启发,我们提出了一种迭代优化方法。特别是,我们通过考虑初始姿态的平移和旋转分量的下降误差范围来训练不同的CNN。一旦针对给定的摄像头姿态获得了LiDARimage,就将从经过最大误差范围训练的CNN开始处理摄像头和LiDAR图像。然后,执行地图点的新投影,并使用训练有较小误差范围的CNN重复该过程。重复此操作n次可以提高最终定位的准确性。由于从摄像机观察到的场景与第n个LiDAR图像中投射的场景之间越来越多的重叠,因此实现了改进。

D.训练细节

我们使用PyTorch库[30]和官方PWC-Net实施的略微修改版本来实施CMRNet。关于激活函数,我们使用负斜率为0.1的RELU(校正线性单位)作为非线性。最终,使用ADAM优化器从零开始对CMRNet进行了300个epoch的训练,默认参数批次大小为24,单个NVidia GTX 1080ti的学习率为1e-4。

IV. 实验结果

本节介绍了我们用来验证CMRNet的评估程序,包括使用的数据集,评估的系统组件,迭代的细化以及最后的泛化能力。我们希望强调,为了评估CMRNet本身的性能,在所有执行的实验中,每个输入都是独立处理的,即没有任何跟踪或时间整合策略。

A.数据集

我们在KITTI里程表数据集上测试了我们方法的定位精度。具体来说,我们使用从03到09的序列进行训练(11697帧),使用序列00进行验证(4541帧)。请注意,除了非常小的子序列(大约200帧)之外,验证集与训练集在空间上是分开的,因此可以说,该网络是在训练阶段从未见过的场景中进行测试的。由于提供的GPSRTK地面实况的准确性不足以完成我们的任务(结果地图未在附近的环路闭合处对齐),因此我们使用了基于LiDAR的SLAM系统来获得一致的轨迹。由此产生的姿势将用于生成分辨率为0.1m的下采样地图。这种选择是我们对高清地图格式的期望的结果,地图提供商将很快提供这种格式[10]。

由于来自KITTI数据集的图像具有不同的大小(从1224x370到1242x376不等),因此我们将所有图像填充到1280x384,以匹配CNN架构要求,即宽度和高度的64倍。请注意,我们首先投影了地图指向LiDAR图像,然后填充RGB和LiDAR图像,以免修改相机的投影参数。

为了模拟嘈杂的初始姿态估计值Hinit,我们为每个输入相对真值相机姿态,独立应用了随机平移和旋转。特别是,对于每个分量,我们为平移添加了均匀分布的噪声,范围为[-2m,+ 2m],旋转为[−10°,+ 10°]。

最后,我们应用了以下数据增强方案

  • 首先,我们随机更改了图像的亮度,对比度和饱和度(均在[0.9,1.1]范围内)。
  • 我们在水平方向上随机镜像图像,
  • 最后我们沿光轴在[-5°,+ 5°]范围内应用了随机图像旋转。相应地转换了3D点云。

数据扩充和Hinit的选择都在运行时进行,以便在每一个epoch,对应同一RGB图像产生不同的LiDAR图像。

B.系统组件评估

我们通过评估定位精度,改变整个系统的不同子组件来评估CMRNet的性能。其中,最有意义的内容显示在表I中,并源自以下操作流程。

首先,我们比较了最先进的方法(即PWC-Net,ResNet18和RegNet [26],[27],[31])的性能,评估了用作主干的最佳CNN。根据进行的实验,PWC-Net在RegNet和ResNet18方面保持了明显的优势,因此被选作进一步评估的起点。

此后,我们估计了修改两个输入(即相机图像和LiDAR图像)的效果。特别是,我们添加了随机图像镜像,并尝试了不同的参数值来影响第III-A节中介绍的遮挡过滤的效果,即大小K和阈值Th。

最后,针对常用的L1损失评估了III-B节中提出的旋转损失的有效性。所提出的损失函数实现了旋转误差的相对减小,约为35%。在所有实验中,添加到验证集中的姿势中的噪音保持固定,从而可以公平地比较性能。

C.反复细化和总体评估

为了提高我们系统的定位精度,我们测试了第IIIC节中介绍的迭代方法。特别是,我们训练了三个CMRNet实例,它们改变了初始相机姿态的最大误差范围。为了评估CMRNet的鲁棒性,我们使用不同的初始噪声将定位过程重复了10次。平均结果与用于训练每个网络的对应范围一起示于表II。

此外,为了将定位性能与LiDAR映射中最新的单眼定位进行比较[3],我们在KITTI里程表的序列00上计算了10个行程中旋转和平移分量的均值和标准差数据集。我们的方法显示了平移分量的可比较值(0:33±0.22m wrt 0:30±0.11m),旋转误差较低(1.07±0.77 wrt 1.65±0.91◦ )。然而,值得注意的是,我们的方法仍然没有利用任何姿势跟踪程序或多帧分析。

图3描绘了具有上述迭代方案的CMRNet定位能力的一些定性示例。在图4中,我们说明了针对的三个迭代,将误差分解为姿势的六个分量的概率概率密度函数(PDF)。上述改进。可以注意到,即使是第一次网络迭代的PDF都近似于高斯分布,随后的迭代进一步减小了分布的方差。表III中显示了使用此配置的运行时性能分析。

D.泛化能力

为了评估我们方法的泛化有效性,我们使用了3D LiDAR地图(相对于相机图像在不同日期生成的3D LiDAR地图)评估了其本地化性能,但该环境仍处于相同环境中。这使我们可以安排完全不同的停放汽车,因此可以强调本地化功能。不幸的是,里程表数据集的序列之间只有很短的重叠(大约200帧),由序列“ 00”和“ 07”之间的一小段公用道路组成。即使我们不能完全依靠这套有限的框架的结果,在该测试中,CMRNet仍实现了0.57m和0.9o的中位定位精度。

确实,值得注意的是,该网络是用代表各个图像的相同确切场景的地图训练的,即,将汽车停在相同的停车位,因此不能学会忽略混乱的场景元素。

V. 结论

在这项工作中,我们描述了CMRNet,这是一种基于CNN的摄像机到LiDAR-Map配准方法,使用KITTI数据集进行学习和验证。所提出方法的性能允许将多个专用CMRNet堆叠在一起,以改善最终的摄像机定位,同时又保留了实时性要求。结果表明,我们的建议能够以小于0:27m和1:07◦的中值定位摄像机。

对其他数据集的初步实验(未报导)表明仍有改进的余地,原因似乎是由于点云可用的垂直视场有限。由于我们的方法不是学习地图而是学习如何执行注册,它适合与大型HD-Maps一起使用。

VI. 未来的工作

即使我们的方法没有嵌入任何特定地图的信息,但仍然依赖于相机固有的校准参数。作为未来工作的一部分,我们计划增加泛化能力,以免直接依赖于特定的摄像机校准。最后,由于误差分布显示出与高斯分布的相似性,因此我们希望能够受益于旨在以概率方式解决随时间变化的不确定性的标准滤波技术。

论文笔记_S2D.60_CMRNet:相机到激光雷达地图的注册相关推荐

  1. 【论文笔记】投影仪-相机系统标定方法

    文章目录 Simple, Accurate, and Robust Projector-Camera Calibration 摘要 1.介绍 背景 所提方法 配套软件 相关工作 2.方法^*^ A.投 ...

  2. 论文笔记_S2D.77_2013_TOR_使用RGBD相机的3D建图(RGBD SLAM V2)

    目录 基本情况 摘要 介绍 系统流程 特征提取 运动估计 EMM:Environment Measurement Model 回环检测 图优化 建图OctoMap 参考 基本情况 出处:Endres ...

  3. CMRNet++:在激光雷达地图中与地图和相机无关的单目视觉定位

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 编辑丨当SLAM遇见小王同学 声明: 本文只是个人学习记录,侵权可删.论文版权与著作权等全归原作者所有 ...

  4. 论文笔记—A Review of Visual-LiDAR Fusion based Simultaneous Localization and Mapping

    论文笔记-A Review of Visual-LiDAR Fusion based Simultaneous Localization and Mapping 论文链接 文章摘要 ~~~~    ~ ...

  5. 基于先验激光雷达地图的2D-3D线特征单目定位

    论文标题 Monocular Camera Localization in Prior LiDAR Maps with 2D-3D Line Correspondences 1. 摘要 对于视觉导航任 ...

  6. 论文笔记(十二):Particle Filter Networks: End-to-End Probabilistic Localization From Visual Observations

    Particle Filter Networks: End-to-End Probabilistic Localization From Visual Observations 文章概括 摘要 1. ...

  7. ORB-SLAM3 论文笔记

    ORB-SLAM3 论文笔记 这篇博客 ORB-SLAM3系统 相机模型的抽象(Camera Model) 重定位的问题 图片矫正的问题 视觉惯性SLAM的工作原理 相关公式 IMU初始化 跟踪和建图 ...

  8. 论文笔记 A Spatial-Temporal Decomposition Based Deep Neural Network for TimeSeries Forecasting

    0 abstract 空间时间序列预测问题出现在广泛的应用中,如环境和交通问题.由于存在特定的空间.短期和长期模式,以及维度的诅咒,这些问题具有挑战性. 在本文中,我们提出了一个用于大规模空间时间序列 ...

  9. 图像内复制粘贴篡改取证matlab_[论文笔记] 篡改检测:RGB-N

    [论文笔记] Learning Rich Features for Image Manipulation Detection 说在前面 个人心得: 第一次关注篡改检测,最常见的篡改方式是拼接.复制移动 ...

  10. 神经稀疏体素场论文笔记

    论文地址:https://proceedings.neurips.cc/paper/2020/file/b4b758962f17808746e9bb832a6fa4b8-Paper.pdf Githu ...

最新文章

  1. 用Scrum看板工具Leangoo做Sprint迭代管理-看板分享
  2. 传播路径可训练的神经网络(云上人二代)
  3. c++枚举类型(二) c++11 枚举类
  4. 速卖通新手入驻必须了解的“9大知识点”
  5. 【阿里云 MVP 月度分享】宋亚奇——应用MaxCompute实现电力设备监测数据的批量特征分析...
  6. 我的世界java什么时候打折_十周年特别纪念!微软《我的世界》游戏全平台最高折扣50% - IT之家...
  7. python面向对象教程_Python入门系列教程3-面向对象
  8. ios 控件徽章_一行代码给你的控件加上徽章(Badge)
  9. Matlab光滑曲线多项式拟合与样条曲线拟合的两个案例
  10. 笨办法学Python(learn python the hard way)--练习程序39-40
  11. 环形电流计算公式_环形电感的计算公式
  12. Python使用webdriver爬取百度文库
  13. python在线朗读-python朗读软件
  14. 常见竖屏设备屏幕宽高比
  15. Spring学习(五)—— 自动装配
  16. js查询手机号码归属地
  17. R语言中的matrix(矩阵),list(列表),data.frame(数据框)总结
  18. ISO/TS16949-99标准的介绍(转载)
  19. (附源码)springboot福佳生活超市进销存管理系统 毕业设计261620
  20. echart中国地图,多地图案例

热门文章

  1. 应用安全-Web安全-漏洞修复方案整理
  2. Kyoto Cabinet 使用及原理
  3. 浅析jQuery源码
  4. PHP 常用算法集锦
  5. 诸事不顺--今日宜睡大觉
  6. Tomcat—HTTPS之生成密钥库文件与配置Tomcat服务器
  7. 利用ObjectMapper进行对象与JSON互相转化
  8. Thinking in Java 11.13 Foreach与迭代器
  9. 09. 斐波那契数列(C++版本)
  10. 平分七框梨java_php编程- php算法 - 平分七框鱼