参考  2D-Driven 3D Object Detection in RGB-D Images - 云+社区 - 腾讯云

目录

摘要

1、简介

2、相关工作

3、方法

3.1、狭缝检测

3.2、估计三维目标方位

3.3、Bounding Box回归

3.4、基于上下文信息的细化

4、实验

4.1、定量比较

4.2、定性比较

5、结论


摘要

在本文中,我们提出了一种在RGB-D场景中,在目标周围放置三维包围框的技术。我们的方法充分利用二维信息,利用最先进的二维目标检测技术,快速减少三维搜索空间。然后,我们使用3D信息来定位、放置和对目标周围的包围框进行评分。我们使用之前利用常规信息的技术,独立地估计每个目标的方向。三维物体的位置和大小是用多层感知器(MLP)学习的。在最后一个步骤中,我们根据场景中的目标类关系改进我们的检测。最先进的检测方法相比,操作几乎完全在稀疏的3D域,在著名的SUN RGB-D实验数据集表明,我们建议的方法要快得多(4.1 s /图像)RGB-D图像中的3目标检测和执行更好的地图。(3)、高于慢是4.7倍的最先进的方法和相对慢两个数量级的方法。这一工作提示我们应该进一步研究3D中2D驱动的目标检测,特别是在3D输入稀疏的情况下。

1、简介

场景理解的一个重要方面是目标检测,它的目标是在对象周围放置紧密的2D边界框,并为它们提供语义标签。2D目标检测的进步是由众多挑战中令人印象深刻的性能驱动的,并由具有挑战性和大规模的数据集支持。二维目标检测技术的进步体现在快速、准确检测技术的发展和普及。由于二维目标检测结果受图像帧的约束,需要更多的信息将其与三维世界联系起来。已有多种技术尝试将二维检测扩展到三维,但这些技术都需要场景的先验知识,且不能很好地推广。随着3D传感器(如Microsoft Kinect)的出现,提供深度和颜色信息,将2D知识传播到3D的任务变得更加容易实现。

三维目标检测的重要性在于提供更好的定位,将知识从图像帧扩展到现实世界。这使得机器(例如机器人)与其环境之间能够进行交互。由于三维检测的重要性,许多技术都利用大规模的RGB-D数据集,尤其是SUN RGB-D,将二维边界框替换为三维边界框,它为数百个目标类提供了三维边界框注释。

最先进的3D检测方法的一个缺点是运行时。尽管硬件加速(GPU),它们往往比2D目标检测方法慢得多,有几个原因。(i)、其中一个原因是三维场景相对于二维图像场景的相对大小。添加额外的空间维度会大大增加3D中的搜索空间,从而降低搜索速度。(ii)、另一个原因是单个RGB-D图像生成的三维点云中可用的稀疏数据不完整,存在二维图像中存在的弱邻接/邻近特征。(iii)、RGB-D图像中深度信息的理想编码和挖掘仍然是一个开放的挑战。文献中的技术要么尝试增加颜色通道的深度,要么将其编码为稀疏体素化的三维场景。使用深度信息作为额外的通道有助于检测过程,同时仍然受益于快速的2D操作,但最终结果仅限于2D检测,其形式为2D边界框或2D目标分段。可以用3D编码的信息包括密度、法线、梯度、符号距离函数等。然而,所有这些基于三维体素的技术都存在大量的三维信息缺失,使得场景中的可观测点只构成了三维体素的一小部分。

本文利用二维目标检测的优势,提出了一种快速检测三维边界框的三维目标检测方法。我们的方法的输出如图1所示。我们使用2D技术来限制搜索空间来进行3D检测,而不是改变2D技术来接受可能缺失或定义不明确的3D数据。然后,我们利用3D信息来定位、放置和对所需目标周围的包围框进行评分。我们使用之前的方法对每个物体进行独立的定向,然后利用所得到的旋转方向和每个方向上的点密度来反演物体的极值。我们最终的3D边界框得分是使用语义上下文信息进行细化的。

除了对3D场景中可能包含特定目标的部分进行珩磨所获得的加速之外,3D搜索空间的减少也有利于探测器的整体性能。这种缩减使得3D搜索空间比从头开始搜索整个场景更适合3D方法,从而降低了搜索速度,并产生许多不需要的误报。这些假阳性可能会使3D分类器产生混淆,而3D分类器比2D分类器更弱,因为它是针对稀疏(大部分为空)的3D图像数据进行训练的。

2、相关工作

在计算机视觉技术方面有丰富的文献,通过在物体周围放置矩形框来检测物体。我们这里提到的一些最具代表性的方法,解决这一问题,即DPM(可变形部件模型)和选择性搜索在无处不在的深度学习的基础方法,以及代表深度网络这个任务包括R-CNN,Fast R-CNN,Faster R-CNN,ResNet,YOLO,R-FCN。所有这些技术都只在二维图像平面上对目标进行检测,并且已经发展到非常快速和高效的程度。

随着3D传感器的出现,已经有许多工作使用3D信息来更好地定位目标。在这里,我们提到了几种方法,它们研究在深度信息存在下的目标检测。其他基于RGB和深度的语义分割图像的技术。所有这些3D感知技术都使用额外的深度信息来更好地理解二维图像,但并不旨在将正确的3D包围框放置在被检测目标周围。

[30]方法利用多视点三维CAD模型的效果图对整个空间滑动窗口得到的所有三维边界框进行分类。使用CAD模型限制了可以检测到的类和目标的多样性,因为找到不同类型和目标类的3D模型要比拍摄它们困难得多。此外,滑动窗口策略的计算要求很高,使得这种技术相当慢。类似的检测器使用目标分割和姿态估计来表示在编译库中具有相应3D模型的目标。尽管如此,我们相信正确的3D边界框布局有利于这样的任务,并且可以根据这些模型的可用性来执行模型拟合。与[7]相比,我们的方法不需要三维CAD模型,对二维检测误差不敏感,利用上下文信息提高了检测效率。

其他的方法提出了3D框,并根据手工制作的功能进行评分。在[1]中提出的方法在自动驾驶环境下,将三维包围框放置在物体周围。该问题在MRF中被表述为推理,MRF生成3D建议,并根据手工制作的功能对建议进行评分。该方法使用立体图像作为输入,只针对少数特定于街景的类。对于室内场景,[19]中提出的方法是利用二维分割提出候选框,然后通过形成一个条件随机场(CRF)将不同来源的信息进行分类。最近的[26]方法提出了一种面向梯度描述符的云,并将其与法线和密度一起用于对三维边界框进行分类。该方法还利用上下文特征,利用[11]级联分类框架,更好地提出三维框。该方法在SUN-RGBD上取得了最先进的性能;然而,计算所有三维长方体假设的特征非常慢(每节课10-20分钟)。

Yang等人提出了一种新颖的降雨模型,该模型带有深度学习架构,可以在单个图像中解决降雨检测问题。Hu等以方向感知的方式分析空间图像上下文,设计了一种新型的深度神经网络来检测阴影。准确的物种识别是分类学研究的基础,最近的一项工作介绍了一种用于物种识别的深度学习方法。目标识别网络(ORN)。对象建议的使用灵感来自2D目标检测技术。然而,这两个网络并不共享层,计算是分开进行的。此外,将深度的3D编码为截断的带符号函数,与2D卷积相比,3D卷积要慢得多。这种ConvNet方法在单个RGBD帧上运行大约需要20秒。另一种最近的ConvNet方法提出了一个转换网络,将场景的三维体积表示作为输入,并将其与一个已知模板对齐。然后基于局部目标特征和整体场景特征进行三维目标检测。虽然该算法在测试时速度很快(0.5s),但训练的计算成本很高(使用8个gpu一周),而且它不能推广到所有场景配置(在SUN RGB-D测试集的约7%上测试)。

贡献:

我们提出了一种只使用RGB-D数据在对象周围放置边框的快速技术。我们的方法不使用CAD模型,而是放置3D边界框,这使得它很容易推广到其他对象类。通过专注于特定对象实例在3D中的位置(使用2D检测),我们的3D检测器不需要彻底搜索整个3D场景,也不需要遇到更少的误检。与两种直接在3D中操作的先进3D检测器相比,我们的方法实现了不以检测精度为代价的加速。

3、方法

给定一个RGB图像及其对应的深度图像,我们的目标是在一个已知类的目标周围放置3D包围框。我们的3D目标检测管道由四个模块组成(查看图2)。在第一个模块中,我们使用了最先进的2D目标检测方法,特别是Faster R-CNN,来定位可能的目标周围的2D边界框。每个2D边界框在3D中扩展到我们所说的截锥体。在第二个模块中,不像之前的方法[31]假设场景中的所有目标都具有相同的方向,我们估计场景和单个目标的方向,其中每个目标都有自己的方向。在第三个模块中,我们训练了一个多层感知器,利用方向上的点密度,在每个方向上回归三维物体的边界。在最后一个模块中,我们使用基于目标类共现和类间距离的上下文信息来细化检测分数。

3.1、狭缝检测

我们的3D检测管道的第一步是在2D中获得目标位置的初始估计。在这里,我们选择使用Faster R-CNN模型和VGG-16 net对3D dataset (SUN-RGBD)中的一组目标类(object classes)进行检测器的训练。在2D中,检测到的目标由2D窗口表示。在3D中,这转化为一个3D扩展,我们称之为截锥体。物体的截锥体对应于在二维检测窗口中包含投影到图像平面上的三维点。这样,在二维图像中,通过相机中心的平面和边界框的线段所限定的区域内就会出现潜在的物体。截锥体类似圆锥,底部为长方形。从本质上讲,这个区域提供的三维搜索空间要比RGB-D传感器捕捉到的整个区域小得多。此外,每个frustum只指定2D检测器返回的目标类。

二维目标检测得益于图像中信息的连续性,二维卷积包含了所有目标位置的RGB信息。相对于三维场景体素化中缺失的三维数据,这使得二维信息对于目标检测和分类更加可靠。此外,通过Faster 的R-CNN的转发在GPU上至少运行5帧每秒,这比使用3D卷积的深度滑动形状(DSS)快两个数量级。

在每个截锥体中,三维点分布在深度最小的点和深度最大的点之间。这些点保留了正确检测目标所需的所有深度信息。与穷举滑动窗口方法相比,这类似于固定在特定的2D区域,而不是搜索整个区域来查找所有目标类。

3.2、估计三维目标方位

到目前为止,我们已经确定了最有可能包含目标类的区域。我们的下一步是估计这个区域内物体的方位。由于三维包围框是曼哈顿结构,因此目标的方向必须与最佳曼哈顿框架对齐。这个框架可以估计物体的方向,因为在室内场景中发现的大多数三维物体都可以近似为曼哈顿物体,其法线与三个主要正交方向对齐。

为了计算这个曼哈顿帧,我们使用了在中提出的曼哈顿帧估计(MFE)技术来独立估计物体在每个截锥内的方向。综上所述,旋转可以通过求解以下优化问题得到:

其中是矩阵包含每一个3D点的法线,是一个常数参数,是一个松弛变量引入RN稀疏。

这里,我们假设每个截锥体中只有一个主要对象。我们首先计算图像中所有3D点的法线,并使用MFE对整个场景的摄像机进行定向。对于每个截锥体,我们使用房间方向初始化,并使用其中点的法线来估计目标的方向。在本文中,我们修改了MFE,以限制旋转是围绕轴沿地板法线(偏航角只)。这个限制对于室内场景中的大多数目标都是一个可行的假设,并且与SUN RGB-D dataset的注释方式一致。对于非曼哈顿结构的物体(如圆形物体),许多方向被认为是正确的。MFE技术的输出仍然是一种可行的目标检测方向。

3.3、Bounding Box回归

在此步骤中,我们需要匹配最能描述被检测对象的3D包围框。给出了在截锥体内的三维点以及物体的估计方向,并以三维点的质心为中心,用估计方向建立了一个标准正交系统。然后,我们为沿每个方向的三维点的坐标构造直方图。然后,这些直方图被用作多层感知器(MLP)网络的输入,MLP网络学习从训练数据中返回目标边界框的边界。对于每个目标类,训练一个具有隐含层的网络,以坐标直方图作为输入,输出目标沿各个方向的边界框边界。直方图描述了每个方向上点的密度,而高密度对应于表面位置。我们选择一个固定的箱子大小来保持真实的距离,并选择一个固定的直方图长度来考虑所有的物体大小。补充材料中给出了MLP的输入示例。

每个方向的训练都是分开进行的,即长、宽、高。在测试过程中,高度由地面方向确定,长度和宽度由截锥体内各方向点的较宽分布确定。为了形成训练集,我们使用了2D groundtruth窗口和groundtruth 3D框。由于许多室内物体都放置在地板上,我们使用训练集中的高度信息来剪辑接近地板的物体的高度,从而从地板开始。

一旦得到三维边界框,我们就给它分配一个分数,这个分数是两个分数的线性组合:(1)、初始二维检测分数,(2)、三维点密度分数。通过对所有类的三维长方体的三维点云密度训练线性SVM分类器,得到三维点云密度分数。这个简单的3D功能类似于[26]中使用的功能,并受到了它的启发。显然,其他3D功能也可以被纳入,但要付出额外的计算成本。我们使用所有可能的目标旋转,以及对象位置的细微变化来训练分类器。

3.4、基于上下文信息的细化

给定一组3D边界框其中为box的数量,我们的目标是根据上下文信息来细化它们的分数。我们将一个标签li关联到每个box,其中。这里是被考虑的对象类标签的数量,而zero标签对应于背景。我们假设边界框标签是一组离散随机变量有一个相关联的吉布斯分布因子图。因子图是由一组变量节点(边界框标签),和一组节点的因素,我们选择的任意组合2边界框。该图是通过将给定场景中的所有目标分配给一个特定节点来构造的。该图是通过将给定场景中的所有目标分配给一个特定节点来构造的。我们的图模型如图3所示。在这种情况下,我们有

这里U和B是一元和二元对数势函数。我们的目标是找到最大化aposteriori (MAP)的标签,

通过引入局部边缘变量,将上述问题转化为线性规划(LP),

与一元项有关的概率:

摘要为了对一元势模型进行建模,这代表给箱子一个标签为的概率,利用三次多项式核的一对一SVM分类器。我们增加了两种类型的特征,几何特征和深度学习特征。几何特征包括长度、宽度、高度、纵横比和体积。为了提取深度学习特征,我们将3D框的重投影到图像平面上,运行 Fast RCNN,利用全连通层(FC7)的特征。在测试过程中,我们将分类分数转换为后验概率,并将其作为一元概率使用。

与二进制项有关的概率:

对于每一对3D盒子,我们计算一个框被分配一个标签的概率,前提是另一个标签是。我们利用了发生在三维场景中的两个关系,类的共现和类的空间分布。对于共发生概率,我们使用训练集中两个类的每个组合的共发生次数。给定标签, 的发生次数与其他所有发生次数的比值。对于空间关系,我们使用核密度估计(KDE)来分配基于一对边界盒之间Hausdorff距离的概率。最后,我们最后的二元词概率定义为:

为了在一元项和二元项之间进行权衡,我们使用softmax操作符。为了推断出最终的标签集,我们使用了的LP-MAP技术。然后,我们将最后一组标签与最初的标签进行比较,并增加保留最初标签的标签的得分。

4、实验

我们在SUN RGB-D数据集上评估了我们的技术,并与两种最先进的方法:深层滑动形状(DSS)和定向梯度云(COG)进行了比较。我们采用组委会选择的10个类别进行训练和测试。我们还使用了[31]中提供的数据集修改,它提供了楼层方向。我们采用与这两种方法相同的评价尺度,即假设所有的边界框都与重力方向对齐。

评估准则:

我们的评估是基于传统的三维体积交联(IoU)措施。如果使用ground truth框生成的边界框的卷IoU大于0.25,我们认为检测是正确的。我们遵循DSS和COG采用的相同评估策略。我们绘制了10个类的精确回忆图,并计算了曲线下的面积,用平均精度(AP)表示。与前面的方法类似,我们将其与amodal groundtruth包围框进行比较,后者扩展到可见范围之外。

实验步骤:

在我们的2D目标检测器中,我们遵循数据集增强约定,将翻转后的图像添加到训练集中。我们使用在ImageNet上预先训练的模型,初始化Fast R-CNN网络中的所有卷积层。我们还采用了Faster R-CNN中描述的4步交替训练。在我们所有的实验中,我们考虑沿垂直于地面方向的所有三维点坐标的第一个百分位作为相机高度。

在我们最初的2D检测之后,我们删除所有重叠超过30%的得分较高的框,并删除所有得分非常低的框(小于0.05)。为了确定主曼哈顿框架的方向,我们对法线进行了10次子采样,这使得对管道的这一阶段进行实时处理成为可能。一旦估计了房间的朝向,我们就并行地计算每个截锥体的朝向和回归。关于边界框回归的实现(第3.3节)和使用上下文关系的细化(第3.4节)的进一步细节载于补充材料。

计算速度:

我们在MATLAB中实现了我们的算法,使用12核3.3 GHz CPU和Titan X GPU。Faster R-CNN训练和测试是用Caffe完成的。初始目标检测仅需0.2秒。当并行运行时,所有目标的方向估计大约需要1秒。对于沿x、y和z方向的所有目标,MLP回归大约需要1.5秒。基于上下文的目标细化运行时间为1.45秒,包括设置因子图和推断最终标签的时间。综上所述,我们的检测方法对每一对RGB-D图像总共需要4.15秒。

4.1、定量比较

首先,我们研究了拟议管道中每个阶段的重要性。我们为方法的不同变体绘制了精确回忆曲线(参见图4)。在本例中,我们使用2D目标检测器输出的标签及其相应的分数。(1)、第一个变量表示“不细化”,这里我们不执行最后一个包含场景上下文信息的细化步骤。在本例中,我们使用2D对象检测器输出的标签及其对应的分数。(2)、我们还尝试将盒子与frustums匹配,即所有frustums中的所有框都具有相同的朝向(房间朝向)。(3)、我们算法的最后一个变体没有使用MLP回归器回归目标边界。我们将回归框替换为一个向各个方向扩展到最大值和最小值坐标的百分位数的框。显然,这不能处理amodal框。

固定vs独立方向:

我们研究了正确定位三维边界框的重要性。相对于一个固定的方向,为每个边界框计算正确的方向会增加最终的得分(表1),这是因为相同方向的目标之间有更高的重叠,而且方向对于在MLP回归器中匹配正确的目标边界至关重要。

回归的重要性:

回归的重要性在于定位目标中心和估计边界框维数。由于三维数据的噪声性质以及背景点的存在,使得三维点在截锥体内的质心与物体的质心不同。如果不进行回归,检测分值会显著下降(表1),这是由于与检测分值直接相关的目标大小不正确造成的。此外,由于groundtruth框是amodal的,这意味着它们扩展到可见部分之外,因此需要回归来扩展超出可见点之外的框。

纹理信息的重要性:

在我们的技术的最终形式中,我们结合上下文信息来细化最终检测。这种细化将mAP得分提高2%以上(表1)。与图4中的“no refinement””变体相比,我们注意到细化在相同的召回率下提高了精度。另一方面,它实现了相同的最大召回,因为它不改变3D框的数量及其位置。

在第二部分,我们比较了两种最先进的方法,DSS和COG(表1),我们直接从[31]和[26]报告运行时和AP结果。我们提供了我们的技术的两个版本:最终版本(包括管道中的所有模块)和非细化版本(不使用上下文信息,但是大约快35%)。非细化版本的速度比DSS快7倍,在精度方面稍好一些。最终版本比DSS (45.1% mAP vs . 42.1% mAP)更快4.7×,准确率更高3%。它也比COG大约快两个数量级,同时仍然实现了类似的检测性能。

与COG相比,我们的方法只使用目标到目标的关系,而不使用目标到场景的关系。我们没有穷尽地搜索3D边界框,但仍然能够达到相当的精度,同时速度提高了两个数量级。COG方法花费大部分时间计算所有可能的3D边界框位置、大小和方向的特性。我们的方法对可能的目标位置进行珩磨,并且只使用一个方向。COG方法的性能并不比我们的结果好多少,因为有许多目标建议可能会混淆分类器,特别是在使用稀疏的3D数据时。

4.2、定性比较

现在,我们展示一些定性的结果。在图5中,我们将方法的检测结果(红色部分)叠加到SUN-RGBD的8张RGB-D图像的三维点云上,并将其与3D groundtruth boundingbox(如图ingreen所示)进行比较。我们的方法能够根据方向和范围正确地放置边界框。我们还在图6中显示了我们所建议的技术的错误检测。这包括在2D中没有检测到的目标,或者使用MLP的输出将目标放错位置的目标。由于背景点或不正确的回归而发生错位。此外,假阳性还包括来自不可见对象类的目标,这些目标看起来类似于在训练中看到的类(例如。柜台vs.书桌,抽屉vs.梳妆台)。

5、结论

提出了一种快速的室内场景三维目标检测算法。我们利用二维检测技术对三维中特定目标类的潜在三维位置进行了挖掘(称为狭缝生成和雕刻),从而实现了简单的三维分类器和搜索机制。与目前两种最先进的方法相比,我们的方法比其中一种方法快3倍,实现了更好的(+3% mAP)检测性能,比另一种方法快两个数量级,同时仍然可以比较具有挑战性的大型SUN-RGBD数据集。

2D-Driven 3D Object Detection in RGB-D Images相关推荐

  1. 【论文翻译】FCOS3D: Fully Convolutional One-Stage Monocular 3D Object Detection

    文章目录 PaperInfo Abstract 1 Introduction 2 Related Work 2D Object Detection Monocular 3D Object Detect ...

  2. 点云网络的论文理解(七)-Frustum PointNets for 3D Object Detection from RGB-D Data

    名词解释 RGB:就是彩色图像. RGB-D:就是彩色图像外加一个深度,这个深度就是摄像头到那个东西的距离. 单目RGB-D:就是一个摄像头采集RGB-D数据 双目RGB-D:就是两个摄像头一起采集R ...

  3. 《Frustum PointNets for 3D Object Detection from RGB-D Data》中文翻译

                用于从RGB-D数据进行3D物体检测的Frustum PointNets 摘要:  在这项工作中,我们研究了室内和室外场景中RGB-D数据的三维物体检测. 虽然以前的方法专注于 ...

  4. 论文阅读 End-to-End Multi-View Fusion for 3D Object Detection in Lidar Point Clouds

    [论文阅读] End-to-End Multi-View Fusion for 3D Object Detection in Lidar Point Clouds 原文链接:https://arxiv ...

  5. Delving into Localization Errors for Monocular 3D Object Detection 论文学习

    论文地址:Delving into Localization Errors for Monocular 3D Object Detection Github地址:Delving into Locali ...

  6. Introduction to 3D Object Detection with Lidar

    深度学习的开始 人类的大脑是一个神秘的器官,它由无数的神经细胞组成,神经细胞又有突触,轴突,树突等组成,至今我们还未对大脑如何工作研究的十分清楚.1943年,美国数学家沃尔特·皮茨(W.Pitts)和 ...

  7. 论文精读《OFT: Orthographic Feature Transform for Monocular 3D Object Detection》

    OFT: Orthographic Feature Transform for Monocular 3D Object Detection 文章目录 OFT: Orthographic Feature ...

  8. MONODISTILL: LEARNING SPATIAL FEATURES FOR MONOCULAR 3D OBJECT DETECTION

    Paper name MONODISTILL: LEARNING SPATIAL FEATURES FOR MONOCULAR 3D OBJECT DETECTION Paper Reading No ...

  9. 【论文翻译】Orthographic Feature Transform for Monocular 3D Object Detection

    标题:<Orthographic Feature Transform for Monocular 3D Object Detection> 作者:Thomas Roddick, Alex ...

最新文章

  1. 织梦首页常用调用标签
  2. MySQL多实例安装配置指南
  3. Meerkat关闭直播?很好,你努力挣扎的样子成功吸引了我们的注意力
  4. marlin 三角洲_带火花的三角洲湖:什么和为什么?
  5. java opencv 平移_Java中使用opencv
  6. 获取TextView每行的内容 (涉及getLineCount为0,getLineEnd问题)
  7. 技术江湖--讲座笔记
  8. layui日周月年的日历切换,当选择周时设置每周一可选,其余日期置灰不可选
  9. 病理IHC专题|免疫检查点抑制剂疗效生物标志物PD-L1
  10. C语言实现机器猫绘制
  11. CrossBar 将 PUF 技术引入 ReRAM
  12. 人见人爱!收款码背后的原理是什么?
  13. 【PyTorch】nn.Conv2d函数详解
  14. 华为日历登录qq邮箱的解决方案
  15. JS案例学习——随机点名案例
  16. Don Box博客中文版入驻CSDN,志愿者翻译招募中....
  17. 40 张图带你搞懂 TCP 和 UDP,android软件开发教程
  18. 作为程序员的你 是喜欢代码还是喜欢工作 ?
  19. 030:判断能否被3,5,7整除
  20. 2021-11-06 编程打印空心菱形

热门文章

  1. C语言错题集(指针2020/12/8)
  2. Linux命令:Nginx的启动、停止与重启
  3. FileReader与FileWriter使用一例
  4. Web全栈~04.css入门
  5. Ajax执行向php请求的js脚本
  6. 如何免费下载IEEE文章!
  7. 2009年8月8号日志
  8. 爬虫实战——求是网周刊文章爬取
  9. append()与prepend()的区别
  10. PYQT5安装时,labelImg执行pyrcc5 -o libs/resources.py resources.qrc 报错:File does not exist ‘resources.qrc‘