第十五章:DenseASPP for Semantic Segmentation in Street Scenes——在街景语义分割中的DenseASPP

news2025/1/22 16:42:16

0.摘要

        语义图像分割是自动驾驶中的基本街景理解任务,在这个任务中,高分辨率图像中的每个像素被归类为一组语义标签。与其他场景不同,自动驾驶场景中的物体呈现出非常大的尺度变化,这给高级特征表示带来了巨大挑战,因为必须正确地编码多尺度信息。为了解决这个问题,引入了扩张卷积[14],可以在不损失空间分辨率的情况下生成具有更大感受野的特征。基于扩张卷积,提出了扩张空间金字塔池化(ASPP)[2],将使用不同扩张率的多个扩张卷积特征连接成最终的特征表示。尽管ASPP能够生成多尺度特征,但我们认为尺度轴上的特征分辨率对于自动驾驶场景来说不够密集。因此,我们提出了密集连接的扩张空间金字塔池化(DenseASPP),它以密集的方式连接一组扩张卷积层,生成不仅覆盖更大尺度范围,而且密集覆盖该尺度范围的多尺度特征,而不显著增加模型大小。我们在街景场景基准数据集Cityscapes[4]上评估了DenseASPP,并取得了最先进的性能。

图1. 城市景观中具有挑战性尺度变化的插图(引自Cityscapes [4])。在第一个示例图像中,同一类别(如人)的尺度因与相机的距离而有很大变化。第二个示例图像描绘了一个更具挑战性的情况,其中一辆大巴车靠近,而几个小型交通信号灯则远离相机。 

1.引言

        使用全卷积网络(FCN)[16],语义图像分割在特征表示方面取得了显著的改进,并取得了有希望的结果。高级语义信息在实现分割网络的高性能方面起着关键作用。为了提取高级信息,FCN使用多个池化层来增加输出神经元的感受野大小。然而,增加池化层的数量会导致特征图尺寸减小,这给将分割输出上采样回完整分辨率带来了严重的挑战。另一方面,如果我们从分辨率较高的早期层输出分割结果,我们将无法利用更高级的语义信息进行更好的推理。

        空洞卷积[14]被提出来解决特征图分辨率和感受野之间的矛盾要求。通过在卷积核掩模中适当位置插入零,可以以不同的速率扩张空洞卷积核。与传统的卷积操作符相比,空洞卷积能够在不增加卷积核参数数量的情况下实现更大的感受野大小。通过空洞卷积生成的特征图可以与输入的尺寸相同,但每个输出神经元具有更大的感受野,因此能够编码更高级的语义信息。

        尽管空洞卷积解决了特征图分辨率和感受野大小之间的矛盾,但仅仅从空洞卷积后的特征图生成语义掩码的方法仍然存在限制。具体来说,空洞卷积后的特征图中的所有神经元共享相同的感受野大小,这意味着语义掩码生成过程仅利用了单一尺度的特征。然而,经验表明[24,2,3],多尺度信息有助于解决模糊情况,并且能够实现更稳健的分类结果。为此,ASPP[2,3]提出了将不同扩张率生成的特征图与空洞卷积特征图进行连接的方法,使得输出特征图中的神经元包含多个感受野大小,从而编码多尺度信息,最终提升性能。

        然而,ASPP仍然存在另一个限制。具体而言,在自动驾驶场景下,输入图像具有高分辨率,这要求神经元具有更大的感受野。为了在ASPP中实现足够大的感受野,必须使用足够大的扩张率。然而,随着扩张率的增加(例如d>24),空洞卷积变得越来越无效,并逐渐失去建模能力[3]。因此,设计一个能够编码多尺度信息并同时实现足够大的感受野大小的网络结构非常重要。

        这激发我们提出了Dense Atrous Spatial Pyramid Pooling(DenseASPP)来解决街景中具有挑战性的尺度变化,如图1所示。DenseASPP由一个基础网络和一系列空洞卷积层级组成。它使用密集连接将每个空洞卷积层的输出馈送到所有未访问的前向空洞卷积层,如图2所示。在DenseASPP中,每个空洞卷积层仅使用具有合理扩张率(d≤24)的空洞滤波器。通过一系列的空洞卷积,后面层的神经元获得越来越大的感受野,而不会遭受ASPP中内核退化问题的影响。通过一系列的特征拼接,每个中间特征图中的神经元编码来自多个尺度的语义信息,不同的中间特征图编码来自不同尺度范围的多尺度信息。因此,DenseASPP中的最终输出特征图不仅覆盖了大范围的语义信息,而且以非常密集的方式覆盖了该范围,如图3所示。我们在Cityscapes数据集上评估了DenseASPP,并取得了80.6%的平均交并比得分,达到了最先进的性能水平。

        总结起来,本文提出了两个贡献:

        1. DenseASPP能够生成覆盖非常大尺度范围(以感受野大小为标准)的特征。

        2. DenseASPP生成的特征能够以非常密集的方式覆盖上述尺度范围。

        值得注意的是,通过简单地串联或并行堆叠空洞卷积层无法同时实现上述两个特性。

2.相关工作

        语义图像分割需要高层次特征来表示每个像素进行语义预测,而卷积神经网络成为提取高层次特征的骨干[10,24,14,2,3]。

        由于卷积神经网络设计用于在整个图像级别进行预测,因此需要进行多个修改以实现像素级别的预测。完全卷积网络将全连接层转换为卷积层,以便分类网络输出热图[16]。通过多个下采样层,高层次特征图的分辨率非常低(通常为输入图像的1/32),使用双线性上采样或反卷积来恢复分辨率。

        为了补偿高层次特征的低分辨率,中间或早期层的特征图也通过跳跃连接来使用[6,1,20]。由于低分辨率是由下采样层导致的,DeepLab [14]建议去除最后几个最大池化层,并重新配置网络使用空洞卷积来重用预训练的权重。与添加空洞卷积层以移除池化层不同,更多的空洞卷积层被堆叠在级联中,进一步增加感受野的大小[3],以覆盖大的对象并带来广泛的上下文。

        此外,多尺度特征是分割具有不同尺度和模糊像素的对象所需的另一个重要因素,需要多样化的上下文信息范围。在空间金字塔匹配[13]之后,PSPNet [24]和ASPP [2]被提出来将多个感受野大小的特征串联在一起进行最终预测,其中PSPNet使用四个空间金字塔池化(下采样)层并行地聚合来自多个感受野大小的信息,并通过上采样分配给每个像素。ASPP将具有不同扩张率的多个空洞卷积层的特征并行排列在一起。提出的DenseASPP结合了并行和级联使用空洞卷积层的优点,并在更大范围内生成更多尺度的特征。

        DenseASPP的命名源自DenseNet [8],可以将其视为将扩张率设置为1的DenseASPP的特例。因此,DenseASPP也共享了DenseNet的优点,包括减轻梯度消失问题和大大减少参数的特点。在扩张DenseNet中,也有一个同时进行的工作,由Yee [23]用于心脏MRI分割。

3.密集扩张空间金字塔池化

        在本节中,我们首先介绍空洞卷积和空洞空间金字塔池化的基本知识,然后介绍提出的方法。

3.1.扩张卷积和金字塔池化

        空洞卷积首次在[14]中引入,可以增加感受野,同时保持特征图分辨率不变。在一维情况下,假设y[i]表示输出信号,x[i]表示输入信号,空洞卷积可以表示为:y[i] = Σk=1:d x[i + d · k] · w[k]其中d是扩张率,w[k]表示滤波器的第k个参数,K是滤波器的大小。当d = 1时,这个公式就变成了标准卷积。空洞卷积等效于将输入x与通过在两个连续滤波器值之间插入d - 1个零来产生的上采样滤波器进行卷积。因此,较大的扩张率意味着较大的感受野。

        为了处理不同尺度的感受野,特征图必须能够覆盖不同尺度的感受野。为了实现这个目标,DeepLabV3 [3]提出了两种策略,即级联和并行使用具有不同扩张率的多个空洞卷积层。在级联模式中,由于上层空洞层接收下层空洞层的输出,它可以有效地产生大的感受野。在并行模式中,由于多个空洞层接收相同的输入并将它们的输出连接在一起,所得到的输出实际上是对具有不同感受野尺度的输入进行采样。并行模式在[2]中正式称为ASPP,是Atrous Spatial Pyramid Pooling的缩写。

        为了简化符号表示,我们用HK,d(x)表示空洞卷积,并将ASPP写为y = H3,6 (x) + H3,12 (x) + H3,18 (x) + H3,24 (x)。在这项工作中,受到DenseNets [8]的启发,我们进一步推动了级联和并行策略的边界,设计了一种新颖的架构,能够生成比[3]更密集尺度的感受野。在Cityscapes [4]数据集上的实验结果证明了其有效性。图2. DenseASPP的结构,

(a)详细说明了DenseASPP的结构,每个扩张卷积层的输出与输入特征图进行级联,然后输入到下一个扩张层。DenseASPP的每个路径都组成了相应尺度的特征表示。

(b)以更具体的版本说明了这个结构。

3.2.更密集的特征金字塔和更大的感受野

        DenseASPP的结构如图2(a)所示。空洞卷积层按级联的方式组织,每一层的扩张率逐层增加。扩张率较小的层放在较低部分,而扩张率较大的层放在较高部分。每个空洞层的输出与输入特征图以及所有较低层的输出进行连接,连接后的特征图被输入到下一层。DenseASPP的最终输出是由多比例、多尺度的空洞卷积生成的特征图。提出的结构可以仅使用少量的空洞卷积层同时构建一个更密集和更大的特征金字塔。根据公式(2),DenseASPP中的每个空洞层可以表示为:yl = HK,dl ([yl−1,yl−2,···,y0])其中dl表示第l层的扩张率,[···]表示连接操作。[yl−1,···,y0]表示由所有前面层的输出连接形成的特征图。与原始的ASPP [3]相比,DenseASPP将所有扩张层堆叠在一起,并通过密集连接连接它们。这个改变主要带来了两个好处:更密集的特征金字塔和更大的感受野。我们将在下面的两个小节中详细解释我们的网络设计,以及这两个好处。

3.2.1.更密集的特征金字塔

        DenseASPP比ASPP组成了一个更密集的特征金字塔。这里的“更密集”不仅意味着特征金字塔具有更好的尺度多样性,还意味着在卷积过程中涉及到的像素比ASPP更多。

密集的尺度采样:DenseASPP是一种有效的架构,可以在不同尺度上对输入进行采样。DenseASPP的一个关键设计是使用密集连接来实现具有不同扩张率的层的多样化组合。每个组合等效于不同尺度的卷积核,即不同的感受野。因此,相比于ASPP [2],我们得到了一个具有更多尺度的特征图。扩张能够增加卷积核的感受野。对于一个扩张率为d、卷积核尺寸为K的空洞卷积层,等效的感受野尺寸为:R = (d-1) × (K-1) + K (4)例如,对于一个扩张率为3的3×3卷积层,其对应的感受野尺寸为7。将两个卷积层堆叠在一起可以得到一个更大的感受野。假设我们有两个卷积层,其过滤器尺寸分别为K1和K2,新的感受野尺寸为:K = K1 + K2 - 1 (5)例如,一个卷积核尺寸为7的卷积层与一个卷积核尺寸为13的卷积层堆叠在一起,将得到一个尺寸为19的感受野。图3示意了DenseASPP的简化特征金字塔,以帮助读者更好地理解其尺度多样性。

更密集的像素采样:相比于ASPP,DenseASPP在特征金字塔的计算中涉及更多的像素。ASPP使用了4个扩张率为6、12、18、24的空洞卷积层来构建特征金字塔。与具有相同感受野的传统卷积层相比,具有较大扩张率的空洞卷积层的像素采样率非常稀疏。图4(a)示例了一个具有扩张率为6的传统一维空洞卷积层,其感受野尺寸为13。然而,在这么大的卷积核中,只有3个像素参与计算。在二维情况下,这种现象更加严重。尽管获得了较大的感受野,但在计算过程中丢失了大量信息。而在DenseASPP中情况则完全不同。DenseASPP中的扩张率逐层增加,因此上层的卷积可以利用下层的特征,并使像素采样更密集。图4(b)示例了这个过程:一个扩张率为3的空洞层被放置在扩张率为6的层下面。对于原始的扩张率为6的空洞层,会有7个像素的信息参与最终的计算,这比原始的3个像素更密集。在二维情况下,会有49个像素参与最终的预测,而在标准的一层扩张卷积中,只有9个像素参与计算。当扩张率增大时,这种现象变得更加明显。图4(c)示例了二维版本的现象。具有较大扩张率的卷积层可以从扩张率较小的卷积层中获得帮助,并以更密集的方式对像素进行采样。

图3. DenseASPP的尺度金字塔示意图,对应于密集堆叠扩张率为(3, 6, 12, 18)的空洞卷积设置。DenseASPP生成具有更大尺度多样性(即在尺度轴上具有高分辨率)和更大感受野的特征金字塔。每个条带右侧的k表示相应组合的感受野大小。图4. (a) 扩张率为6的标准一维空洞卷积层。

(b) 在具有较大扩张率的空洞卷积层下方堆叠一个扩张率较小的空洞层,可以使得采样率更密集。红色表示信息的来源。

(c) (b)的二维版本。

 

3.2.2.更大的感受野

        DenseASPP带来的另一个好处是更大的感受野。在传统的ASPP中,空洞卷积层并行工作,而四个子分支在前向传播过程中不共享任何信息。相反,在DenseASPP中,空洞卷积层通过跳跃连接共享信息。具有较小扩张率和较大扩张率的层之间存在相互依赖关系,前向传播过程不仅可以组成一个更密集的特征金字塔,还可以生成一个更大的滤波器来感知更大的上下文。根据公式(5),设Rmax表示特征金字塔的最大感受野,函数RK,d表示具有内核大小K和扩张率d的卷积层的感受野。因此,ASPP(6,12,18,24)的最大感受野为:

 这样一个较大的感受野可以为高分辨率图像中的大物体提供全局信息。例如,Cityscapes [4]的分辨率为2048×1024,我们分割网络的最后一个特征图为256×128。DenseASPP(6,12,18,24)涵盖了一个大小为122的特征图,而DenseASPP(3,6,12,18,24)则涵盖了一个更大的特征图大小为128。

3.3.模型尺寸控制

        为了控制模型的大小并防止网络变得过宽,我们按照[8]的方法,在DenseASPP的每个扩张层之前添加了一个1×1的卷积层,将特征图的深度减少到原始尺寸的一半。此外,还使用了细滤波器来进一步控制输出尺寸。假设每个空洞层输出n个特征图,DenseASPP的输入特征图有c0个,第l个扩张层之前的第l个1×1卷积层的输入特征图有cl个,我们有:cl = c0 + n × (l - 1) (8)在我们的设置中,每个扩张层之前的1×1卷积层将维度减少到c0/2个通道。我们设置n = c0/8,对于DenseASPP中的所有扩张层。因此,DenseASPP中的参数数量可以计算如下:

其中L是DenseASPP中空洞层的数量,K是卷积核的大小。例如,DenseNet121的特征图有512个通道,因此对于基于DenseNet121的模型,n被设置为64。此外,在每个空洞层之前,通过一个1×1卷积层将特征图的通道数减少到256。因此,DenseASPP(3,6,12,18,24)输出一个具有832个通道的特征图,总共有1,556,480个参数,比DenseNet121模型的大小要小得多(近1×107个参数)。

4.实验

        DenseASPP是为了解决街道场景中的尺度变化和对上下文信息的需求而提出的,在本节中我们在Cityscapes数据集上进行了经验验证。Cityscapes [4]包含了一组大型、多样化的高分辨率(2048×1024)街道图像,其中5000张图像具有19个类别的高质量像素级标签,总共含有9.43×109个标记像素。按照Cityscapes的标准设置,这5000张图像被分成2975张训练图像和500张验证图像,这些图像的注释是公开可用的,还有1525张测试图像的注释被保留,通过专用的评估服务器进行与其他方法的比较。通过计算类别交并比的平均值(mIoU)进行定量评估。

表1. 在Cityscapes测试集上的类别比较。

 

4.1.实现细节

        我们在PyTorch [17]上实现了我们的方法。对于在ImageNet [5]上预训练的ConvNet,我们首先移除了最后两个池化层和最后一个分类层,并将两个移除的池化层之后的卷积层的扩张率分别设置为2和4,以使预训练的权重可重复使用。修改后的ConvNet输出了1/8输入图像分辨率的基本特征图。ASPP、PSPNet和提出的DenseASPP都添加在基本特征图上,所有输出特征图的分辨率为1/8输入图像。在特征图之后,使用带有19个1×1滤波器的卷积层来预测1/8的标签地图,然后通过8倍上采样,使用地面真实标签地图定义交叉熵损失。

        在我们的实现中,在每个权重层之前使用了批量标准化 [9],以便简化训练并使其能够比较来自不同层的特征图的拼接。为了避免过拟合,我们使用了常见的数据增强作为预处理,包括随机水平翻转、在[0.5, 2]范围内的随机缩放、在[-10, 10]范围内的随机亮度抖动以及512×512图像补丁的随机裁剪。对于训练,我们使用Adam优化器 [12],初始学习率为0.0003,权重衰减为0.00001。学习率通过将初始学习率乘以1 - maxEpoches epoch的0.9来进行调整。所有模型使用批量大小为8进行80个epoch的训练。批量标准化的统计信息在整个小批量上更新。

4.1.1.DenseASPP

        我们按照[2]的方法构建了我们的基准模型,唯一的区别是使用DenseNet121替代了ResNet101 [7]。我们将提出的DenseASPP与原始的ASPP进行了比较。对于ASPP和DenseASPP,我们分别使用了四个扩张率为6、12、18、24的空洞卷积层。其他所有设置保持不变。结果在Cityscapes的验证集上进行评估,并列在表2中。结果显示,DenseASPP相对于基准模型显著提高了4.2%的分割性能,并且一些示例在图5中展示。更深的预训练模型有助于进一步提高性能。

表2. DenseASPP显著提高了分割性能的水平

4.1.2.DenseASPP组件的详细研究

        DenseASPP由多个具有不同扩张率的空洞卷积层组成。在这部分中,我们设计了一系列实验来研究DenseASPP的不同设置对性能的影响。结果在Cityscapes的验证集上进行评估,并列在表3中。通过这些实验,我们可以得出两个结论。首先,随着DenseASPP的最大特征尺度(DenseASPP的最大感受野)的增加,分割性能得到改善。实际上,添加更多的层和使用更大的扩张率都可以增加DenseASPP的最大尺度。当最大尺度超过Cityscapes图像的特征图宽度128时,性能停止增长。其次,即使基础模型相对较弱,即DenseNet121,DenseASPP仍然可以获得相当高的性能。

4.1.3.与最先进的方法比较

        我们使用仅有精细注释数据的DenseNet161(更宽)[8]来训练DenseASPP,并将结果提交给Cityscapes[4]的评估系统。通过多尺度{0.5,0.8,1.0,1.2,1.5,2.0}的测试,该模型在测试集上实现了80.6%的mIoU。我们将我们的结果与Cityscapes上最先进的方法进行了比较,结果如表1和表4所示。需要注意的是,我们使用了原始论文中报告的结果,而不是Cityscapes的排行榜。

 图5.由于能够捕捉更大的上下文信息,DenseASPP可以正确分类混淆的类别"vegetation"和"terrain",并且可以将"fence"与背景区分开来。

表3.不同网络设置下DenseASPP的性能

表4.在Cityscapes测试集上的性能比较

4.2.消融研究

        最后一个特征图的质量,也就是决策层(即softmax层)的输入,对于准确的分割非常重要。在本节中,我们首先从特征级别和结果级别评估特征图的质量。然后,我们研究了两个显著影响特征图的主要原因,即感受野的大小和尺度/像素采样率。

4.2.1.特征相似性

        上下文信息对于区分混淆的类别和分类大型物体非常重要。在Cityscapes数据集中,由于外观相似,一些类别很容易被误分类,例如"vegetation"和"terrain","bus"、"car"、"truck"和"train"。对于这些类别,充分的上下文信息至关重要。图5展示了两个例子,其中存在一些混淆的类别。在没有足够上下文信息的情况下,我们的基线模型无法正确地分类第一个例子中的"terrain"和"fence",并且在第二个例子中将"bus"、"truck"和"wall"错分了类别。而我们提出的模型可以正确地分类这些图像。这些例子展示了DenseASPP在建模大型上下文信息方面的能力。

        进一步进行特征级别的分析,以了解我们提出的模型是如何对每个像素进行分类的。DenseASPP的输出是一个多通道的特征图,基于这个特征图,我们使用softmax分类将每个像素分到一个类别中。因此,特征图的每个位置对应一个像素,具有相同标签的像素很可能具有相似的特征。为了研究DenseASPP是如何对像素进行分类的,我们在整个特征图中计算像素之间的特征相似性,并通过热图的形式进行展示,如图6所示。余弦相似度被用来衡量像素特征之间的相似性。DenseASPP的相似性图显示,具有相同标签的连续区域中的大多数像素具有相似的特征。这意味着我们在该区域内的像素获取了相似的特征。然而,当移除DenseASPP时,结果的热区域要小得多且不连续。因此,在这种情况下,该区域内的像素很难被分类到同一类别。DenseASPP带来的大范围上下文信息对于正确的分割至关重要。

图6.展示了所有像素与一个指定像素的特征相似性。颜色越热表示特征级别上越相似。(a)和(d)分别是输入图像和相应的真值,(b)和(c)分别是在点1和点2处通过DenseASPP的输出计算得到的结果,(e)和(f)是在移除DenseASPP后的相应结果。图7.不同空间和像素采样率的效果。我们逐步移除顶部的空洞卷积层以可视化结果。

4.2.2.感受野的可视化

        由于经验感受野的大小通常要比理论感受野小得多,我们使用[25]提出的方法来可视化经验感受野的大小。具体而言,对于表示具有理论感受野大小的图像块的特征向量,我们使用一个8×8的平均图像以滑动窗口的方式覆盖图像块,并记录由欧氏距离测量的特征向量的变化作为热图。热图显示了哪些像素实际上影响了特征向量。ASPP(6,12,18,24)和DenseASPP(6,12,18,24)的最大膨胀率的卷积层分别进行了可视化,并在图8中展示。可以明显看到,DenseASPP的膨胀层采样更密集,并捕捉到更大的感受野。       

4.2.3.尺度多样性的插图

  我们在DenseASPP中使用的越密集连接的空洞卷积层,我们可以获得越密集的采样特征图。因此,逐步移除DenseASPP中的顶层空洞卷积层将减少尺度空间中的采样率,并导致分割性能下降。在这部分中,我们进行了实验来可视化这种效果。图7展示了结果。显然,随着顶层的移除,尺度空间中的采样率迅速降低。大物体如“卡车”和“墙”受到严重影响。中等尺度的“火车”受到较小影响。而“人”等小型和容易识别的物体的结果仍然良好。这些结果进一步证明了在街景分割中使用密集连接的级联空洞卷积层的必要性。图8.比较ASPP和DenseASPP的感受野。红点表示参考像素,较亮的像素表示强相关性。

5.总结

        在这篇论文中,我们提出了DenseASPP来解决街景分割中对象尺度变化较大的挑战性问题。DenseASPP以一种密集的方式连接了一组空洞卷积层,有效地在非常大的范围内生成了密集的空间采样和尺度采样特征。我们通过理论分析、可视化和在Cityscapes数据集上的定量实验结果来展示DenseASPP的有效性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761508.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA设置显示行号和方法间的分隔符

IDEA设置显示行号和方法间的分隔符 选择File--Settings--Edotor-General-Apperance,勾选上下图中的选项后点击 OK 即可。 每个函数不迷路~~ Show line numbers:显示行数 Show method separators: 显示方法分隔线。

央视赋能,强势出击——方圆出海与《品牌中国》栏目达成战略合作

2023 央视赋能,强势出击 方圆出海 “日前,深圳市方圆出海科技有限公司与《品牌中国》栏目携手,双方正式达成战略合作协议,央视《品牌中国》栏目负责人正式授予方圆出海“《品牌中国》重点推荐品牌”的荣誉称号。 此次签约标志着…

js的this绑定规则以及箭头函数

目录 调用位置默认绑定隐式绑定隐式丢失 显式绑定callapplybind new绑定装箱绑定优先级this规则之外忽略显式绑定间接函数引用 箭头函数 调用位置 从字面意思上来理解,this似乎是指向自己的 然而在JavaScript中,this并不是绑定到自身的 可以看这一个例子…

蓝牙HID模式下输出中文原理简介

目录 前言一、蓝牙和HID简介二、Unicode编码简介三、Windows下alt键code编码输出中文四、蓝牙HID模式下实现在手机上输入中文的原理 前言 最近在使用蓝牙模组,对于蓝牙模组如何输出中文的原理不太清楚,所以找了一些资料简单学习了下,总结如下…

目标检测——FasterRCNN原理与实现

目录 网络工作流程数据加载模型加载模型预测过程RPN获取候选区域FastRCNN进行目标检测 模型结构详解backboneRPN网络anchorsRPN分类RPN回归Proposal层 ROIPooling目标分类与回归 FasterRCNN的训练RPN网络的训练正负样本标记RPN网络的损失函数训练过程实现正负样本设置损失函数 …

Kubernetes 使用 helm 部署 NFS Provisioner

文章目录 1. 介绍2. 预备条件3. 部署 nfs4. 部署 NFS subdir external provisioner4.1 集群配置 containerd 代理4.2 配置代理堡垒机通过 kubeconfig 部署 1. 介绍 NFS subdir external provisioner 使用现有且已配置的NFS 服务器来支持通过持久卷声明动态配置 Kubernetes 持久…

大模型基础知识汇总

本文总结大模型相关基础知识,用于大模型学习入门 (持续更新中…) 文章目录 NLP 基础知识传统 NLP 知识NLU 与 NLG 各种任务的差异 Transformer 相关知识Pre Norm与Post Norm的区别?Bert 预训练过程手写 transformer 的 attention …

从0到1:跑团小程序开发心得笔记

背景介绍 随着健康意识的兴起,越来越多的人选择加入跑步俱乐部,不仅体验到了运动的乐趣,也感受到了人生的不同色,那么通过小程序,把俱乐部搬到手机上,通过小程序了解俱乐部动态和运动常识,可以…

C++自定义信号和QML的槽函数建立连接

0x00 在C代码在定义一个信号函数&#xff1a;“void sendData2UI(QString msg);”&#xff0c;该函数主要是将接收到的UDP消息发送到QML界面中 #ifndef UDPCLI_H #define UDPCLI_H#include <QObject> #include <QUdpSocket> #include <QString>class UdpCli …

【Netty】NIO基础(三大组件)

文章目录 三大组件Channel & BufferSelector ByteBufferByteBuffer 正确使用姿势ByteBuffer 内部结构ByteBuffer 常见方法分配空间向 buffer 写入数据从 buffer 读取数据mark 和 reset 字符串与 ByteBuffer 互转Scattering ReadsGathering Writes粘包、半包分析 附&#xf…

《啊哈算法》第一章--排序

文章目录 前言一、排序算法二、桶排序三、冒泡排序三、快速排序总结 前言 今年蓝桥杯没有拿到省一&#xff0c;所以就决定沉下心来学习算法&#xff0c;为了使得算法的学习更加稳固&#xff0c;所以就拿起了&#xff0c;最基础的且最经典的一本算法书《啊哈算法》&#xff0c;…

Redis进阶底层原理- 持久化

Redis作为基于内存的缓存数据库&#xff0c;就会存在断电即失的问题&#xff0c;所以数据的持久化是非常重要的。Redis随着版本升级迭代&#xff0c;持久化技术也在不断的升级&#xff0c;&#xff08;从最开始的RDB&#xff0c;到的Redis1.1版本加入AOF&#xff0c;3.0版本支持…

全志F1C200S嵌入式驱动开发(sd卡驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 说是sd卡,其实是micro sd卡,或者称之为tf卡更合适。一般的soc都支持从tf卡启动,所以用tf卡来学习soc、驱动和linux,对新人来说是比较合适的。前面我们已经用sd卡构建了一个类似…

uniapp:针对与富文本解析的几种方法

第一章、富文本的解析方法 1.1 uniapp自带组件&#xff1a;rich-text <rich-text :nodes"nodes"></rich-text> 1.2 v-html <view v-html"item.content"></view> 1.3 uview组件&#xff1a;u-parse <u-parse :content&quo…

学习babylon.js --- [3] 开启https

babylonjs提供WebVR功能&#xff0c;但是使用这个功能得用https&#xff0c;本文讲述如何使用自签名证书来开启https&#xff0c;基于第二篇文章中搭建的工程。 一 生成自签名证书 首先要安装openssl&#xff0c;这个去网上搜下就行了。安装完之后在终端下输入openssl回车可以…

DeepC 实用教程(三)环境数据

目 录 一、前言二、风谱/风剖三、洋流四、波浪4.1 规则波浪4.2 随机波浪谱 五、方向六、海床属性七、位置7.1 创建位置7.2 规则波时域条件7.3 随机波时域条件7.4 波浪散布图7.4.1 散布图分块7.4.2 时域条件 八、参考文献 一、前言 SESAM &#xff08;Super Element Structure A…

y0usef靶场详解

y0usef靶场详解 靶机感悟&#xff1a;对于这个靶机并没有太多的难点&#xff0c;也没有的别多的绊子&#xff0c;就是猜测下一步是什么&#xff0c;耐心的去思考怎么才能进行到下一步。 靶机下载地址&#xff1a;https://download.vulnhub.com/y0usef/y0usef.ova 这个靶机是…

每天一点Python——day55

#第五十五天Python内置数据结构&#xff1a;列表、字典、元组 本次学另外一种数据结构&#xff1a;集合 集合也是可变类型序列 重点&#xff1a;集合里面没有value&#xff0c;只有键&#xff0c;采用也是哈希函数#如图&#xff1a; #集合与字典的对比字典&#xff1a; 字典{ke…

Java 提供的线程安全集合

一、CopyOnWrite&#xff08;COW算法的容器&#xff09; 最终一致性、写分离思想。 用Volatile修饰&#xff0c;每次直接从内存地址中读取&#xff0c;读取时不加锁。 写时用显式锁整个容器&#xff08;防止其它写线程&#xff09;&#xff0c;然后拷贝一份副本&#xff0c;对…

【NLP】transformers的位置编码

一、背景 本文是“实现的变压器”系列的第二篇。它从头开始引入位置编码。然后,它