图 1:SEGCloud:3D点云被体素化并通过3D全卷积神经网络馈送,以生成粗略的下采样体素标签。三线性插值层将此粗略输出从体素转换回原始3D点表示。获得的3D点分数用于在3D全连接CRF中进行推理以产生最终结果。我们的框架是端到端训练的。

Abstract

3D语义场景标记是在真实世界中操作的代理的基础。特别是,标记来自传感器的原始3D点集提供了细粒度的语义。最近的工作利用了神经网络(NNs)的能力,但是局限于粗略的体素预测,并且没有明确地实施全局一致性。我们提出了SEGCloud,这是一个端到端的框架,用于获得3D点级分割,它结合了NNs、三线性插值(TI)和全连接条件随机场(FC-CRF)的优点。来自3D完全卷积NN的粗略体素预测通过三线性插值被传递回原始3D点。然后,FC-CRF实施全局一致性,并在点上提供细粒度的语义。我们将后者实现为一个可微分的递归神经网络,以允许联合优化。我们在两个室内和两个室外三维数据集(NYU V2,S3DIS,KITTI,Semantic3D.net)上评估了该框架,并在所有数据集上显示了可媲美或优于最先进水平的性能。

1. Introduction

场景理解是计算机视觉中的一个核心问题,是机器人、自动驾驶、增强现实和建筑行业等应用的基础。在各种场景理解问题中,3D语义分割允许在3D空间中找到精确的目标边界及其标签,这对于诸如目标操纵、详细场景建模等细粒度任务是有用的。

3D点集或点云的语义分割已通过利用图形模型的表示能力的各种方法得到解决[36、44、3、48、30、35]。一个常见的范例是结合分类器阶段和条件随机场(CRF)[39]来预测每个数据点的空间一致标签[68、69、45、66、69]。随机森林分类器[7, 15]在此任务上表现出出色的性能,但是随机森林分类器和CRF阶段通常独立优化并作为单独的模块组合在一起,这限制了它们之间的信息流。

3D全卷积神经网络(3D-FCNN)[42]是3D点云分割中分类器阶段的有力候选者。但是,由于它们需要常规网格作为输入,因此它们的预测仅限于体素(网格单元)级别的粗略输出。最终分割是粗略的,因为体素内的所有3D点都被分配了相同的语义标签,使得体素尺寸是限制整体精度的一个因素。为了从3D-FCNN获得细粒度分割,需要对粗略的3D-FCNN输出进行额外处理。我们在框架中解决了这个问题,该框架能够利用3D-FCNN的粗略输出,并且仍然使用三线性插值(TI)和CRF提供3D点的细粒度标记。

我们提出了一个端到端框架,利用3D-FCNN、三线性插值[47]和全连接条件随机场(FC-CRF) [39, 37]的优势来获得细粒度的3D分割。详细地说,3D-FCNN提供体素级别的类概率,使用三线性插值将其转移回原始3D点。然后,我们使用全连接条件随机场(FC-CRF)来推断3D点标签,同时确保空间一致性。在CRF步骤之前将类概率转移到点,允许CRF使用点级模态(颜色、强度等)来学习对点的细粒度标记,这可以改进初始的粗略3D-FCNN预测。我们使用有效的CRF实现来执行最终推理。鉴于我们管道的每个阶段都是可区分的,我们能够使用标准随机梯度下降来端到端地训练框架。

这项工作的贡献是:

  • 我们建议将全卷积神经网络的推理能力与使用TI和CRF的3D点云的细粒度表示相结合。

  • 我们通过三线性插值将它们连接起来,从而在原始3D点空间中进行分割,从而联合和端到端地训练体素级3D-FCNN和点级CRF。

我们的框架可以处理来自各种来源(激光扫描仪、RGB-D传感器等)的3D点云,并且我们在室内和室外、部分和完全重建的3D场景(即NYU V2)上展示了最先进的性能[52],斯坦福大型3D室内空间数据集(S3DIS)[5],KITTI[23, 22],以及室外场景的Semantic3D.net基准[26]。

2. Related Work

在本节中,我们将介绍我们框架的三个主要方面的相关工作:3D数据的神经网络、3D分割的图形模型以及探索卷积神经网络(CNN)和CRF组合的工作。其他技术已用于3D场景分割[13、2、40],但我们主要关注与上述主题相关的技术。

3D 数据的神经网络: 3D神经网络已广泛用于3D目标和部件识别[60、54、46、25、53、21]、理解目标形状先验以及生成和重建目标[73、71、19、70、12]。最近的工作已经开始探索使用神经网络进行3D语义分割[53,16,32]。 Qi等人[53]提出了一种多层感知器(MLP)架构,该架构从1m31 m^31m3物理大小的3D点云中提取全局特征向量,并使用提取的特征向量和附加的点级变换来处理每个点。他们的方法在点级别上运行,因此固有地提供了细粒度的分割。它适用于室内语义场景理解,尽管没有证据表明它可以扩展到更大的输入维度而无需额外的训练或适应。Huang等人[32]提出了一种用于3D语义分割的3D-FCNN,它产生粗体素级分割。 Dai等人[16]也提出了一种全卷积架构,但他们对同一体素网格列中的所有体素进行单一预测。这使得体素网格列包含具有相同目标标签的3D点的假设是错误的。所有上述方法都受到以下事实的限制:它们没有明确强制相邻点预测之间的空间一致性和/或提供3D数据的粗略标记。相比之下,我们的方法对3D输入中的每个点进行细粒度预测,通过CRF显式地强制执行空间一致性和模型类交互。此外,与[53]相比,我们很容易扩展到更大和任意大小的输入,因为我们的分类器阶段是完全卷积的。

3D 分割的图形模型: 我们的框架建立在结合图形模型([61、62、39、20、38])和高度工程化分类器的一系列工作之上。 3D语义分割的早期工作将问题表述为建立在一组特征之上的图形模型。此类模型已在多项作品中使用,以根据各种特征和线索(例如外观、形状和几何形状)来捕捉上下文关系。这些模型被证明可以很好地完成这项任务[50, 49, 36, 58, 44, 3, 48]。

图 2:网络架构:3D-FCNN由夹在2个卷积层之间的3个残差层组成。网络早期阶段的Max Pooling产生了4倍的下采样。

3D语义分割中的常见范式结合了分类器阶段和条件随机场以施加平滑度和一致性[68、69、45、66、69]。随机森林[7、15]是该范式中分类器的流行选择,并且一般在3D分割中[75, 17, 9, 8, 51, 67];他们使用手工制作的功能为体素、超分段或3D点提供可靠的类分数。在[45]中,自旋图像描述符被用作特征,而[68]使用基于几何和外观的14维特征向量。 Hackel等人[27]还定义了一组自定义特征,旨在捕获几何、外观和位置。在这些作品中,随机森林输出被用作CRF的一元势(类分数),其参数是独立学习的。然后,CRF利用分类器提供的置信度以及一组附加特征之间的相似性来执行最终推理。与这些方法相比,我们的框架使用3D-FCNN,它可以学习更高维度的特征并为每个数据点提供强大的一元数据。此外,我们的CRF被实现为一个完全可微的循环神经网络,类似于[76]。这允许对3D-FCNN和CRF进行端到端的训练,并使信息能够从CRF流向CNN分类阶段。

联合CNN + CRF: 先前已提出将3D CNN和3D CRF结合起来用于3D医学扫描中的病变分割任务。 Kamnitsas等人[34]提出了一种带有CRF的多尺度3D CNN来对来自健康脑组织的4种类型的病变进行分类。该方法由两个未经端到端训练的模块组成:一个以2种不同扫描分辨率运行的2流架构和一个CRF。在CRF训练阶段,作者将问题简化为2类分割任务,以便为CRF找到可以提高分割精度的参数。

[76]在图像语义分割的背景下首次展示了CNN和CRF的联合端到端训练,其中CRF被实现为可微循环神经网络(RNN)。以端到端方式训练的CNN和CRF的组合展示了图像语义分割的最先进的准确性。在[76]和其他相关工作[42, 10] 中,CNN有一个具有学习权重的最终上采样层,允许在CRF阶段之前获得像素级一元。我们的工作遵循类似的推动力,将CRF定义为RNN,并使用三线性插值层将3D-FCNN的粗略输出传输到CRF阶段之前的各个3D点。与[34]相比,我们的框架是一个单流架构,它联合优化了3D CNN和CRF,针对3D场景点云领域,并且能够在CNN和CRF阶段处理大量类。与[76, 42, 10]不同,我们选择使用确定性插值权重,该权重考虑了3D点与其相邻体素中心之间的度量距离(第 3.2 节)。我们的方法减少了要学习的参数数量,我们发现它在实践中效果很好。我们表明,联合训练的3D-FCNN和CRF与TI的组合始终比独立的3D-FCNN表现更好。

综上所述,我们的工作与之前的工作在设计用于细粒度3D语义分割的端到端深度学习框架、使用确定性三线性插值获得点级分割以及使用联合训练的CRF强制空间一致性。本文的其余部分组织如下。第3节和第4节介绍了我们端到端框架的组件,第5节提供了实现细节。第6节介绍了我们的实验,包括数据集(6.1)、基准测试结果(6.2)和系统分析(6.3)。第7节总结了所呈现的结果。

3. SEGCloud Framework

SEGCloud管道的概述如图1所示。在我们管道的第一阶段,3D数据被体素化,生成的3D网格由3D全卷积神经网络(3D-FCNN)处理。 3DFCNN对输入体积进行下采样,并为每个下采样的体素生成类别集上的概率分布(第3.1节)。下一阶段是一个三线性插值层,它将从下采样的体素中插入类分数到3D点(第 3.2节)。最后,使用CRF执行推理,该CRF将原始3D点特征与插值分数相结合,以在点集上产生细粒度的类分布(第3.3节)。我们的整个管道是联合优化的,CRF推理和联合优化过程在第4节。

3.1. 3D Fully Convolutional Neural Network

我们的框架使用3D-FCNN来学习适合语义分割的表示。此外,全卷积网络通过共享计算减少了为每个体素生成预测所需的计算开销[43]。在下一节中,我们将描述如何将3D点云表示为3D-FCNN的输入。

3D-FCNN数据表示:鉴于3D-FCNN输入应该是体素网格的形式,我们将3D点云转换如下。每个数据点都是一个3D观察oio_ioi​,它由3D位置pip_ipi​和其他可用模态组成,例如颜色强度IiI_iIi​和传感器强度SiS_iSi​。我们将3D观察O={oi}\mathbf{O}=\left\{o_i\right\}O={oi​}放在度量空间中,以便卷积核可以学习目标的尺度。这个过程通常在大多数3D传感器中处理。然后我们定义一个包含3D观测的常规3D网格。我们将3D网格中的每个单元表示为体素viv_ivi​,为简单起见,每个单元都是长度V=5cmV=5 \mathrm{~cm}V=5 cm的立方体。3D输入中的大部分空间都是空的,并且没有关联的特征。为了表征这一点,我们使用通道将占用率表示为二进制值(0或1)。我们使用额外的渠道来代表其他方式。例如,三个通道用于RGB颜色,一个通道用于传感器强度(如果可用)。

架构:我们的3D FCNN架构如图2所示。我们使用3个残差模块[28]夹在2个卷积层之间,以及在架构的早期阶段使用2个破坏性池化层对网格进行下采样,并在最后使用2个非破坏性模块。早期的下采样给了我们更少的内存占用。整个框架是完全卷积的,可以处理任意大小的输入。对于每个体素viv_ivi​,3D-FCNN输出与标签上的概率分布qiq_iqi​相关联的分数(logit)LiL_iLi​。通过三线性插值将所得分数转换为原始3D点。

3.2. 3D Trilinear Interpolation

3D-FCNN中的体素化和随后的下采样过程将我们的数据表示转换为粗略的3D网格,这限制了CRF阶段语义标记的分辨率(在我们的例子中为20厘米)。在这种粗略的体素上运行CRF会导致粗略的分割。避免这种信息丢失的一种选择是增加体素网格的分辨率(即减小体素大小)和/或移除破坏性池化层,并直接在细粒度体素上运行CRF。然而,这很快就会遇到计算和内存限制,因为对于给定的3D数据维度,3D-FCNN的内存需求随着网格的分辨率呈立方增长。此外,对于给定的3D-FCNN架构,感受野会随着网格分辨率的增加而减小,这会由于推理期间可用的上下文较少而降低性能(参见[63])。

图 3:从体素到点的类分数的三线性插值:每个点的分数计算为其8个空间上最近的体素中心的分数的加权和。

因此,我们摒弃了基于体素的CRF方法,转而使用原始3D点作为节点运行CRF推理。通过这种方式,CRF可以利用3DFCNN输出和输入3D点的细粒度模态来生成准确的预测,详细捕捉场景和目标边界。我们使用三线性插值将体素级预测从3D-FCNN传输到原始3D点,如图3所示。具体而言,对于每个点oi={pi,Ii,Si}o_i=\left\{p_i, I_i, S_i\right\}oi​={pi​,Ii​,Si​},我们定义一个随机变量xix_ixi​表示语义类,与xix_ixi​的分布相关的分数(logits)LiL_iLi​被定义为其8个空间上最接近的体素vi,n,n∈{1,…,8}v_{i, n}, n \in\{1, \ldots, 8\}vi,n​,n∈{1,…,8}的分数的加权和(pi,nx,pi,ny,pi,nz)\left(p_{i, n}^x, p_{i, n}^y, p_{i, n}^z\right)(pi,nx​,pi,ny​,pi,nz​), 其中心为如下:

ψu(xi=l)=Li(xi=l)=∑n=18wi,nLi,n(xi,n=l)wi,n=∏s∈{x,y,z}(1−∣pis−pi,ns∣/V)(1)\begin{gathered} \psi_u\left(x_i=l\right)=L_i\left(x_i=l\right)=\sum_{n=1}^8 w_{i, n} L_{i, n}\left(x_{i, n}=l\right) \\ w_{i, n}=\prod_{s \in\{x, y, z\}}\left(1-\left|p_i^s-p_{i, n}^s\right| / V\right) \end{gathered} \quad\quad\quad\quad(1) ψu​(xi​=l)=Li​(xi​=l)=n=1∑8​wi,n​Li,n​(xi,n​=l)wi,n​=s∈{x,y,z}∏​(1−∣∣​pis​−pi,ns​∣∣​/V)​(1)

其中VVV是体素大小。在反向传播期间,我们使用相同的三线性插值权重wi,nw_{i, n}wi,n​将梯度从CRF分散到3D-FCNN。然后将获得的点级别分数用作CRF中的一元。

3.3. 3D Fully Connected Conditional Random Field

CRF的能量函数由一组一元和成对的势能项组成。一元势能代表跨语义类的初始概率分布,成对势能增强预测之间的平滑性和一致性。CRF的能量定义为,

$ E(x)=\sum_i \psi_u\left(x_i\right)+\sum_{i<j} \psi_p\left(x_i, x_j\right) \quad\quad\quad\quad(2) $

其中ψu\psi_uψu​表示公式 3.2 中定义的一元势,而ψp\psi_pψp​表示成对势。请注意,CRF中的所有节点都通过成对电位相互连接。我们使用[37]中的高斯核作为成对势,

ψp(xi,xj)=μ(xi,xj)[wsexp⁡(−∣pi−pj∣22θγ2)+wbexp⁡(−∣pi−pj∣22θα2−∣Ii−Ij∣22θβ2)](3)\begin{aligned} \psi_p\left(x_i, x_j\right) &=\mu\left(x_i, x_j\right)\left[w_s \exp \left(-\frac{\left|p_i-p_j\right|^2}{2 \theta_\gamma^2}\right)\right.\\ &\left.+w_b \exp \left(-\frac{\left|p_i-p_j\right|^2}{2 \theta_\alpha^2}-\frac{\left|I_i-I_j\right|^2}{2 \theta_\beta^2}\right)\right] \end{aligned} \quad\quad\quad\quad(3) ψp​(xi​,xj​)​=μ(xi​,xj​)[ws​exp(−2θγ2​∣pi​−pj​∣2​)+wb​exp(−2θα2​∣pi​−pj​∣2​−2θβ2​∣Ii​−Ij​∣2​)]​(3)

其中wbw_bwb​和wsw_sws​分别是双边和空间核的权重,是标签兼容性得分,θα,θβ,θγ\theta_\alpha, \theta_\beta, \theta_\gammaθα​,θβ​,θγ​是核的带宽参数。当RGB信息不可用时,我们只使用空间核。使用高斯核能够通过一系列的回旋在一个自复形晶格上进行快速的变分推理和学习[1] (第4节)。

4. CRF Inference and Joint Optimization

CRF中精确的能量最小化是难以处理的,因此我们依靠一种变分推理方法,这种方法允许我们联合优化CRF和3D-FCNN [76,37]。CRF能量最小化后的输出为我们提供了每个3D点的细粒度预测,其中考虑了平滑度和一致性。给定CRF的最终输出,我们遵循惯例并且使用预测和ground truth语义标签之间的距离作为损失函数并且最小化它。

CRF推理:高斯势的CRF具有特殊的结构,允许快速有效的推理。krhenbüHL等人[37]提出了一种近似推理方法,该方法假设语义标签分布Q(X)=∏iQi(xi)Q(\mathbf{X})=\prod_i Q_i\left(x_i\right)Q(X)=∏i​Qi​(xi​)之间的独立性,并推导出更新方程:

Qi+(xi=l)=1Ziexp⁡{−ψu(xi)−∑l′∈Lμ(l,l′)∑m=1Kw(m)∑j≠ik(m)(fi,fj)Qj(l′)}(4)\begin{aligned} Q_i^{+} &\left(x_i=l\right)=\frac{1}{Z_i} \exp \left\{-\psi_u\left(x_i\right)\right.\\ &\left.-\sum_{l^{\prime} \in \mathcal{L}} \mu\left(l, l^{\prime}\right) \sum_{m=1}^K w^{(m)} \sum_{j \neq i} k^{(m)}\left(f_i, f_j\right) Q_j\left(l^{\prime}\right)\right\} \end{aligned} \quad\quad\quad\quad(4) Qi+​​(xi​=l)=Zi​1​exp{−ψu​(xi​)−l′∈L∑​μ(l,l′)m=1∑K​w(m)j=i∑​k(m)(fi​,fj​)Qj​(l′)⎭⎬⎫​​(4)

上述更新方程可以使用简单的卷积、求和和softmax来实现,如Zheng等人[76]所示,他们将CRF推理和学习实现为递归神经网络(RNN),称为CRF-RNN。 CRF-RNN可以在标准CNN框架内进行训练,因此我们遵循相同的程序将我们的3D CRF定义为用于推理和学习的RNN。这个公式允许我们将CRF集成到我们的3D-FCNN框架中以进行联合训练。

损失:一旦我们在方程2中最小化CRF的能量,我们就获得了语义类xix_ixi​在每个3D观察oio_ioi​上的最终预测分布。将观测oio_ioi​的ground truth离散标签表示为yiy_iyi​,我们遵循惯例并将损失函数定义为使用KL散度的最终预测分布与ground truth分布之间的距离:

L(x,y)=1N∑i=1NEyi[−log⁡p(xi)](5)L(\mathbf{x}, \mathbf{y})=\frac{1}{N} \sum_{i=1}^N E_{y_i}\left[-\log p\left(x_i\right)\right] \quad\quad\quad\quad(5) L(x,y)=N1​i=1∑N​Eyi​​[−logp(xi​)](5)

其中NNN是观察次数。由于yiy_iyi​的熵对于所有参数都是常数,因此我们不将其包含在损失函数方程中。

5. Implementation Details

我们使用Caffe神经网络库[33]实现了SEGCloud框架。在Caffe框架内,我们采用了[11]的双线性插值并将三线性插值实现为神经网络层。3D-FCNN、三线性插值层和CRF中的所有计算都在图形处理单元(GPU)上完成。对于CRF推理,我们将Zheng等人[76]的RNN实现改编为3D点云。

为了解决某些数据集中缺乏数据的问题并使网络变得健壮,我们应用了各种数据增强技术,例如随机颜色增强、沿垂直方向的旋转和点子采样。上述随机变换和子采样允许将每个数据集的有效大小增加至少一个数量级,并且可以帮助网络建立对旋转/视点变化的不变性,以及减少和变化的上下文(参见[63])。

训练分两步进行,类似于[76](参见图4)。在第一阶段,我们通过三线性插值单独训练3D-FCNN 200个epochs。

图 4:我们遵循两阶段训练,首先优化点级一元势(无CRF),然后优化点级细粒度标签的联合框架。

在第二阶段,我们联合训练3D-FCNN和CRF端到端(两个模块都通过三线性插值层连接)。我们用于CRF[37]的近似变分推理方法近似于一个permutohedral网格中的卷积,其大小取决于带宽参数θα,θβ,θγ\theta_\alpha, \theta_\beta, \theta_\gammaθα​,θβ​,θγ​。我们将θγ\theta_\gammaθγ​固定在5cm,θβ\theta_\betaθβ​固定在11,并在验证集上使用具有小扰动的网格搜索来找到最佳θα\theta_\alphaθα​(参见[63])。

7. Conclusion

我们提出了一个端到端的3D语义分割框架,该框架结合了3D-FCNN、三线性插值和CRF来为3D点云提供类标签。我们的方法实现了与基于以下技术的最先进方法相当或更好的性能神经网络、随机森林和图形模型。我们展示了它的几个组件,例如几何3D数据增强和三线性插值,在最终性能中起着关键作用。尽管我们展示了优于一些随机森林方法和基于点的MLP方法的明显优势,但我们的实现使用了标准的基于体素的3D-FCNN,并且仍然可以使用稀疏卷积适应体素网格的稀疏性(例如 [55])这可以增加性能的额外提升,并在3D语义分割中设置新的最新技术。

原文链接:https://ieeexplore.ieee.org/abstract/document/8374608

References



(3DV 2017) SEGCloud: Semantic Segmentation of 3D Point Clouds相关推荐

  1. JSNet: Joint Instance and Semantic Segmentation of 3D Point Clouds

    Abstract 在本文中,我们提出了一种新的联合实例和语义分割方法,称为JSNet,以同时解决3D点云的实例和语义分割.首先,我们建立了一个有效的骨干网络来从原始点云中提取鲁棒的特征.其次,为了获得 ...

  2. 论文翻译 | RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds

    论文:RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds 代码:code 前言:最近很犹豫要不要继续翻译点云 ...

  3. 地面分割:Fast Segmentation of 3D Point Clouds for Ground Vehicles

    论文链接:Fast segmentation of 3D point clouds for ground vehicles | IEEE Conference Publication | IEEE X ...

  4. 论文笔记-Multi-view Incremental Segmentation of 3D Point Clouds for Mobile Robots

    标题:Multi-view Incremental Segmentation of 3D Point Clouds for Mobile Robots 作者:Jingdao Chen1, Yong K ...

  5. Fast Segmentation of 3D Point Clouds: A Paradigm on LiDAR Data for Autonomous Vehicle Applications阅读

    该篇点云论文主要分为两个阶段的创新: ①点云地面点的提取(Ground Plane Fitting, GPF): ②点云扫描聚类快速提取(Scan Line Run, SLR): 一.Ground P ...

  6. RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds

    上岸以后第一次做这种读论文的任务,该怎么读.怎么学都还在一点一点摸索,这里记录一下看论文的过程中的一些思考以及不明白的地方. 一.简介 在大规模的3D点云识别中,想要做到高效的语义分析是一个不简单的任 ...

  7. Feature Relevance Assessment for the Semantic Interpretation of 3D Point Clouds Data

    摘要 大型三维点云的自动分析是摄影测量.遥感和计算机视觉中的一项重要任务.在这篇文章中,我们提出了一种新的方法来对这种点云进行语义解释,其中包括特征相关性估计,以减少处理时间和内存消耗.给定具有130 ...

  8. 【点云系列】综述: Deep Learning for 3D Point Clouds: A Survey

    文章目录 起因 题目 摘要 1 简介 2 背景 2.1 数据集 2.2 衡量指标 3 3D形状分类 3.1基于多视角的方法 3.2基于体素的方法 3.3 基于点的方法 3.3.1逐点MLP网络 3.3 ...

  9. 三维点云语义分割【综述】 ——Deep Learning for 3D Point Clouds: A Survey

    3D POINT CLOUD SEGMENTATION 3D Semantic Segmentation Projection-based Networks Point-based Networks ...

最新文章

  1. java基础编程题(2)
  2. JUC AQS ReentrantLock源码分析
  3. java 插入排序_看动画学算法之:排序-插入排序
  4. [原]Oracle数据文件损坏的模拟和修复(一) |ORA-01578 data block corrupted|
  5. Linux 命令之 tail -- 在屏幕上显示指定文件的末尾若干行/显示文件尾部内容/查看文件尾部内容
  6. Nodejs ORM框架Sequelize
  7. 计算机科学与量子信息处理,量子计算交叉学科
  8. MongoDB聚合(aggregate)常用操作及示例
  9. python解析器打包_打包发布Python模块的方法详解
  10. C# Web Service 不使用服务引用直接调用方法(转)
  11. 计算5的阶乘 5!的结果是?
  12. 在code::block中创建console application
  13. C# 固高运动控制卡插补
  14. 乐优商城(11)--用户中心
  15. 如何获取EasyCVR平台设备通道的RTMP视频流地址?
  16. 各地的公安接口的配置说明书
  17. springboot项目基础骨架搭建并完成基本增删改查及多种形式分页
  18. spring boot 2.0 配置logback日志
  19. [数据库] 一文搞懂case when所有使用场景
  20. 面对ChatGPT的挑战,谷歌CEO怒发Bard调教指南:别慌,咱向来是弯道超车

热门文章

  1. QQ 可以注销,青春如何删除?
  2. VC+VB开发CAD重生记:CADEditorX 15.X Crack
  3. [超级无敌详细系列]Visual Studio/c++配置opencv环境
  4. 2023 最新双端相册TXL源码
  5. elementUi NavMenu 导航菜单 去除下划白线
  6. Spring Boot Admin(SBA)
  7. 清华大学实验组18篇论文被ACL 2022录用
  8. pycharm安装opencv-python失败的手动解决办法
  9. Carbon Streaming宣布签订碳信用流协议,以保护巴西塞拉多生物群落区
  10. OPPO Android 开发技术面总结