二十三章:Gated-SCNN:Gated Shape CNNs for Semantic Segmentation ——用于语义分割的门控形状卷积神经网络

news2024/7/2 4:07:03

0.摘要

        当前图像分割的最先进方法通过一个密集的图像表示来处理颜色、形状和纹理信息,这些信息都在深度卷积神经网络内部进行处理。然而,这种方法可能不太理想,因为它们包含了与识别相关的非常不同类型的信息。在这里,我们提出了一种新的双流卷积神经网络架构,用于语义分割,其中明确将形状信息作为单独的处理分支(即形状流),并与经典流并行处理信息。这种架构的关键是一种新型的门控机制,将两个流的中间层连接起来。具体来说,我们使用经典流中的高级激活来控制形状流中的低级激活,有效地去除噪声,并帮助形状流只专注于处理相关的边界信息。这使得我们可以使用一个非常浅的架构来处理形状流,该流在图像级别分辨率上操作。我们的实验证明,这导致了一个非常有效的架构,可以在物体边界周围产生更锐利的预测,并显著提升对较细小物体的性能。我们的方法在Cityscapes基准测试中取得了最先进的性能,无论是在掩码(mIoU)还是边界(F-score)质量上,相比强基准模型提高了2%和4%。

1.引言

        语义图像分割是计算机视觉中最广泛研究的问题之一,在自动驾驶[43,17,58]、3D重建[38,30]和图像生成[22,48]等领域都有应用。近年来,卷积神经网络(CNN)在几乎所有主要的分割基准测试中都取得了显著的准确性改进。一个标准的做法是通过将全连接层转换为卷积层来将图像分类的CNN架构适应于语义分割任务[37]。然而,使用分类架构进行密集像素预测有几个缺点[52,37,59,11]。一个显著的缺点是由于使用池化层导致输出的空间分辨率损失。这促使一些研究[52,59,15,35,21]提出了专门的CNN模块,帮助恢复网络输出的空间分辨率。

        我们在这里提出,由于颜色、形状和纹理信息都在一个深度CNN内部一起处理,所以架构设计中也存在固有的低效性。需要注意的是,这些信息可能包含与识别相关的非常不同数量的信息。例如,为了获得形状的有区别的编码,可能需要查看完整和详细的对象边界[2,33],而颜色和纹理包含相当低级的信息。这也可以解释为什么残差[19]、跳跃[19,53]甚至密集连接[21]可以带来最显著的性能提升。增加额外的连接有助于不同类型的信息在不同深度的网络中流动。然而,通过设计将这些表示分离开来可能会导致更自然和有效的识别流程。在这项工作中,我们提出了一种新的双流CNN架构,用于语义分割,明确将形状信息作为单独的处理分支。特别地,我们保持经典的CNN在一个流中,并添加一个所谓的形状流,以并行处理信息。我们明确不允许在顶层之前将信息在两个流之间融合。

        我们架构的关键是一种新类型的门,允许两个分支进行交互。特别地,我们利用经典流中包含的高级信息来去噪形状流在其早期处理阶段的激活。通过这样做,形状流仅专注于处理相关的信息。这使得形状流可以采用非常有效的浅层架构,以全分辨率处理图像。为了确保形状信息被定向到期望的流中,我们通过一个语义边界损失来对其进行监督。我们进一步利用一种新的损失函数,鼓励预测的语义分割与真实的语义边界正确对齐,这进一步鼓励融合层利用来自形状流的信息。我们将我们的新架构称为GSCNN。我们在Cityscapes基准测试[13]上进行了广泛的评估。需要注意的是,我们的GSCNN可以作为插件在任何经典的CNN骨干网络之上使用。在我们的实验中,我们探索了ResNet-50 [19]、ResNet-101 [19]和WideResnet [57],并在所有这些模型中都取得了显著的改进。在mIoU和F-boundary分数方面,我们的性能超过了最先进的DeepLab-v3+[11]超过1.5%。对于较细和较小的物体(例如电线杆、交通灯、交通标志),我们的改进尤其显著,IoU提高了7%。我们进一步使用先验作为距离的代理,在不同距离的情况下评估性能。实验结果显示,我们始终优于最先进的基准模型,在最大距离(即远离的物体)的mIoU方面提高了6%。

图1:我们引入了Gated-SCNN(GSCNN),一种新的双流CNN架构,用于语义分割,明确将形状信息作为单独的处理流。GSCNN使用一种新的门控机制来连接中间层。流之间的信息融合是通过融合模块在最后完成的。为了预测高质量的边界,我们利用一种新的损失函数,鼓励预测的语义分割掩码与真实边界对齐。

2.相关工作

语义分割。当前最先进的语义分割方法主要基于CNN。早期的方法[37,9]将分类网络转化为完全卷积网络(FCN),以实现高效的端到端语义分割训练。一些工作[8,32,60,44,20,3,36,23,5]提出使用结构化预测模块,如条件随机场(CRF),对网络输出进行改进,特别是在目标边界附近。为了避免昂贵的DenseCRF [29],[6]的工作在网络输出上使用快速域变换[16]滤波,同时还从中间CNN层预测边缘图。我们也预测边界图以改善分割性能。与[6]相反,他们使用边缘信息来优化网络输出,我们将学到的边界信息注入到中间CNN层中。此外,我们提出了专门的网络架构和双任务正则化器来获得高质量的边界。最近,通过新的架构设计,性能和推断速度得到了显著的提高。例如,PSPNet [59]和DeepLab [8,11]提出了一个特征金字塔池化模块,通过在多个尺度上聚合特征来整合多尺度上下文。与我们类似,[43]提出了一个双流网络,但在他们的情况下,第二个流的主要目的是恢复通过池化层丢失的高分辨率特征。在这里,我们明确将第二个流专门用于处理与形状相关的信息。一些工作[15,35,49]提出使用学习的像素关联性模块进行跨中间CNN表示的结构化信息传播。我们提出的方法不是学习专门的信息传播模块,而是通过精心设计的网络和损失函数学习高质量的形状信息。由于我们只是将形状信息与分割CNN特征拼接在一起,所以我们的方法可以很容易地与现有网络结合,以提高性能。

多任务学习。一些研究还探索了将网络组合用于互补任务的想法,以提高学习效率、预测准确性和计算机视觉任务的泛化能力。例如,[46,39,27,26,28]的工作提出了使用多任务损失学习共享表示的统一架构。我们的主要目标不是训练一个多任务网络,而是强制执行一种结构化表示,利用分割和边界预测任务之间的二重性。[12,4]同时学习分割和边界检测网络,而[31,41]将边界作为中间表示来辅助分割。与这些工作不同的是,在这些工作中,语义和边界信息只在损失函数中相互作用,我们明确将边界信息注入到分割CNN中,并提出了一个双任务损失函数,同时优化语义掩码和边界预测。

门控卷积。最近的语言建模研究工作还提出了在卷积中使用门控机制的想法。例如,[14]提出用带有门控机制的时间卷积来替代通常在循环网络中使用的循环连接。另一方面,[54]提出了使用带有软门控机制的卷积来进行自由形式的图像修复,[47]提出了用于条件图像生成的门控PixelCNN。在我们的情况下,我们使用门控卷积算子来进行语义分割任务,并定义形状流和常规流之间的信息流动。

3.门控形状卷积神经网络

        在本节中,我们介绍了用于语义分割的门控形状CNN架构。如图2所示,我们的网络由两个网络流组成,后面跟着一个融合模块第一个网络流(“常规流”)是一个标准的分割CNN,第二个网络流(“形状流”)以语义边界的形式处理形状信息。我们通过精心设计的门控卷积层(GCL)和局部监督来确保形状流仅处理与边界相关的信息。然后,我们将常规流的语义区域特征和形状流的边界特征融合在一起,以产生一个精细的分割结果,特别是在边界附近。接下来,我们详细描述我们框架中的每个模块,然后介绍我们的新颖的GCL。

常规流。这个流,表示为Rθ(I),带有参数θ,接受一个尺寸为H×W的图像I ∈ R3×H×W作为输入,并产生密集的像素特征。常规流可以是任何前馈的全卷积网络,比如基于ResNet [19]或VGG [45]的语义分割网络。由于ResNet是当前语义分割的最新技术,我们在常规流中使用了类似ResNet的架构,比如ResNet-101 [19]和WideResNet [57]。我们将常规流的输出特征表示记为r ∈ RC×mH×Wm,其中m是常规流的步长。

形状流。参数这个流,表示为Sφ,带有φ,接受图像梯度∇I以及常规流的第一卷积层的输出作为输入,并产生语义边界作为输出。网络架构由几个残差块和门控卷积层(GCL)交错组成。下面解释的GCL确保形状流只处理与边界相关的信息。我们将形状流的输出边界图表示为s ∈ RH×W。由于我们可以从GT语义分割掩码中获得GT二值边缘,我们使用监督的二元交叉熵损失来监督形状流的输出边界。

融合模块。这个模块,表示为Fγ,带有参数γ,以正常分支中来自常规流的密集特征表示r作为输入,并将其与形状分支输出的边界图s以保留多尺度上下文信息的方式进行融合。它将区域特征与边界特征结合起来,并输出一个经过优化的语义分割结果。更具体地说,对于K个语义类别的分割预测,它输出一个分类分布f = p(y|s,r) = Fγ(s,r) ∈ RK×H×W,表示像素属于每个K个类别的概率。具体来说,我们使用Atrous空间金字塔池化[11]将边界图s与r进行合并。这样可以保留多尺度的上下文信息,并被证明是最先进的语义分割网络中的重要组成部分。

图2:GSCNN架构。我们的架构由两个主要流组成。常规流和形状流。常规流可以是任何骨干网络架构。形状流通过一组残差块、门控卷积层(GCL)和监督来专注于形状处理。后面的融合模块使用Atrous空间金字塔池化模块(ASPP)以多尺度的方式将两个流的信息结合起来。通过双任务正则化器,确保分割掩码上的高质量边界。

3.1.门控卷积层

        由于估计语义分割和语义边界的任务密切相关,我们设计了一种新颖的门控卷积层(GCL),以促进信息从常规流到形状流的流动。GCL是我们架构的核心组件,通过过滤掉其他不相关的信息,帮助形状流仅处理相关信息需要注意的是,形状流不会整合常规流的特征。相反,它使用GCL来停用自己的激活,这些激活在常规流中包含的高层信息认为不相关。可以将这看作是两个流之间的合作,其中更强大的流,已经形成了更高层次的语义理解,帮助另一个流只关注相关部分。这使得形状流能够采用有效的浅层架构,在非常高的分辨率下处理图像。

        我们在两个流之间的多个位置使用GCL。设m表示位置的数量,设t ∈ 0,1,···,m为一个运行索引,其中rt和st表示相应的常规流和形状流的中间表示,我们使用GCL进行处理。为了应用GCL,我们首先通过将rt和st连接起来,然后通过一个归一化的1×1卷积层C1×1,再接一个sigmoid函数σ,得到一个注意力图αt∈RH×W:

 其中||表示特征图的连接。给定注意力图αt,GCL被应用于st,作为逐元素乘积 ⊙ 与注意力图αt,并接着进行残差连接和通道权重化,使用内核wt。在每个像素点(i,j)上,GCL*的计算如下:

然后,sˆt被传递到形状流的下一层进行进一步处理。需要注意的是,注意力图计算和门控卷积都是可微分的,因此可以进行端到端的反向传播。直观地说,α也可以看作是一个注意力图,它在具有重要边界信息的区域上给予更重的权重。在我们的实验中,我们使用三个GCL,并将它们连接到常规流的第三、第四和最后一层。如果需要,我们使用双线性插值来上采样来自常规流的特征图。

3.2.联合多任务学习

        我们以端到端的方式共同学习常规流、形状流和融合模块。在训练过程中,我们同时监督分割和边界图的预测。这里,边界图是场景中所有物体和物质类别的轮廓的二进制表示(图6)。我们对预测的边界图s使用标准的二元交叉熵(BCE)损失,对预测的语义分割f使用标准的交叉熵(CE)损失:

 其中sˆ∈RH×W表示GT边界,yˆ∈RH×W表示GT语义标签。在这里,λ1和λ2是两个超参数,控制损失之间的权重。如图2所示,在将边界图s馈送到融合模块之前,对其进行了BCE损失的监督。因此,BCE损失Lθ,φBCE更新了常规流和形状流的参数。最终的语义类别的分类分布f通过CE损失Lθφ,γCE在最后进行监督,就像标准的语义分割网络一样,更新了所有的网络参数。在边界的BCE损失中,我们遵循[51,55]并使用一个系数β来解决边界/非边界像素之间的高不平衡问题。

3.3.双任务正则化器

        如前所述,p(y|r,s)∈RK×H×W表示融合模块的分类分布输出。设ζ∈RH×W是一个表示特定像素是否属于输入图像I中的语义边界的潜力。通过对分割输出进行空间导数计算得到如下:其中G表示高斯滤波器。如果我们假设ζˆ是从GT语义标签fˆ以相同方式计算得到的GT二进制掩码,我们可以写出以下损失函数:

 其中p+包含ζ和ζˆ中所有非零像素坐标的集合。直观地说,当与GT边界不匹配时,我们希望惩罚边界像素,并避免非边界像素主导损失函数。需要注意的是,上述正则化损失函数利用了边界预测和边界空间中的语义分割之间的对偶关系。

类似地,我们可以使用形状流的边界预测 s ∈RH×W 来确保二进制边界预测 s 和预测的语义 p(y|r,s) 之间的一致性:

其中 p 和 k 分别遍历所有图像像素和语义类别。✶s = 1 : s > thrs 对应于指示函数,thrs 是一个置信阈值,我们在实验中使用0.8。总的双任务正则化器损失函数可以写为:

3.3.1.训练过程中的梯度传播

为了通过方程7进行反向传播,我们需要计算方程4关于给定参数η的梯度。假设g = ||.||,则关于给定参数η的偏导数可以计算如下:

 由于arg max不是可微分函数,我们使用Gumbel softmax技巧[24]。在反向传播过程中,我们使用温度τ来近似argmax运算符为softmax运算符:

 其中 gj ∼ Gumbel(0, I) 是服从Gumbel分布的随机变量,τ是一个超参数。操作符 ∇G∗ 可以通过Sobel卷积核进行计算。

图3:用于基于距离评估的裁剪示意图。

图4:不同裁剪因子下的预测示例。

图5:基于距离的评估:不同裁剪因子下mIoU的比较,从0到200。

表1:在Cityscapes验证集上,基于IoU与最先进基线方法的比较。

表2:在Cityscapes验证集上,基于不同阈值的边界F-score与基线方法的比较。

4.实验结果

        在本节中,我们对我们的框架的每个组件在具有挑战性的Cityscapes数据集[13]上进行了广泛的评估。我们进一步展示了我们的方法对于几种主干架构的有效性,并提供了我们方法的定性结果。

基准模型。我们使用DeepLabV3+[11]作为我们的主要基准模型。这是语义分割领域的最先进架构,并且提供了预训练模型。在我们的大多数实验中,我们使用自己的PyTorch实现的DeepLabV3+,与[11]中的选择的主干架构有所不同。具体而言,我们使用ResNet-50,ResNet-101和WideResNet作为我们版本的DeepLabV3+的主干架构。为了进行公平比较,如果适用的话,我们在表格中将其称为基准模型。此外,我们还与验证集上和Cityscapes基准测试集上的最新方法进行比较。

数据集。我们的所有实验都在Cityscapes数据集上进行。该数据集包含来自德国和邻近国家的27个城市的图像。它包含2975个训练图像、500个验证图像和1525个测试图像。Cityscapes还包括20000个额外的粗略注释(即涵盖单个对象的粗略多边形)。请注意,我们用边界的真实标注来监督我们的形状流,因此粗略子集对我们的设置不理想。因此,我们在实验中不使用粗略数据。稠密像素的注释包括在城市街景中经常出现的30个类别,其中19个类别用于实际的训练和评估。我们遵循[55,56,1]的方法来生成地面真实边界,并监督我们的形状流。

评估指标。我们使用三个定量指标来评估我们方法的性能。

        1)我们使用广泛使用的交并比(IoU)来评估网络是否准确预测区域。

        2)由于我们的方法旨在预测高质量的边界,我们还使用另一个指标进行评估。具体而言,我们遵循[42]中提出的边界指标来评估我们语义边界的质量。该指标在给定小的距离容差的情况下,计算预测掩码边界上的F分数。在我们的实验中,我们使用阈值0.00088、0.001875、0.00375和0.005,分别对应3、5、9和12个像素。类似于IoU计算,我们在计算F分数时也去除了空白区域。由于测试集没有提供边界,我们使用验证集计算F分数作为边界对齐的指标。

        3)为了评估分割模型在离相机不同距离处的性能,我们使用基于距离的IoU进行距离评估,如下所述。

基于距离的评估。我们认为对于小(远离)物体的高准确性也很重要,然而全局IoU指标并不能很好地反映这一点。因此,我们采用围绕一个近似(固定)消失点的不同大小的裁剪作为距离的代理。在我们的情况下,这是通过在图像的每个边缘除顶部裁剪100个像素,并且结果裁剪的中心是我们的近似消失点来实现的。然后,给定预定义的裁剪因子c,我们进行裁剪,使得:从顶部和底部裁剪c,从左侧和右侧裁剪c×2。直观地说,较小的中心裁剪对于远离相机的较小物体有更大的权重。图3中展示了该过程的示意图。图4显示了每个裁剪中的示例预测,说明了指标如何专注于评估不同大小的物体。

实施细节。在我们的大多数实验中,我们遵循Deeplab v3+ [11]的方法,但使用了实验中描述的更简单的编码器。我们所有的网络都是用PyTorch实现的。我们使用800×800作为训练分辨率,并使用同步批归一化。训练是在一台配备8块GPU的NVIDIA DGX Station上进行的,总批量大小为16。对于Cityscapes,我们使用学习率为1e-2的多项式衰减策略。我们为了消融实验目的进行了100个epoch的训练,并在230个epoch时在表1中展示了我们最好的结果。对于我们的联合损失,我们设置λ1 =20,λ2 =1,λ3 =1和λ4 =1。我们将τ设置为1用于Gumbel softmax。我们所有的实验都是在Cityscapes的fine set上进行的。

表3:形状流、GCL和额外的图像梯度特征(Canny)在不同常规流上的比较。Cityscapes验证集上的分数(%)表示所有类别的平均值,F-Score表示边界对齐(阈值为5像素)。

表4:不同阈值下,双重任务损失对边界质量(F-score)的影响。在常规流中使用ResNet-101。

表5:形状流对不同基础网络性能提升和参数数量增加的百分比增量。

4.1.定量评估

        在表1中,我们将我们的GSCNN与基线方法在区域准确性(通过mIoU衡量)方面的性能进行了比较。这些数字是在验证集上报告的,并在完整图像上计算(无裁剪)。在这个指标中,我们取得了2%的改进,这在这个性能水平上是一个显著的结果。特别是,我们注意到我们在小物体(摩托车、交通标志、交通灯和杆子)上获得了显著的改进。另一方面,表2比较了我们方法与基线方法在边界准确性(通过F分数衡量)方面的性能。同样,我们的模型表现得更好,比最严格的基线方法高出近4%。需要注意的是,为了公平比较,我们只报告在Cityscapes fine数据集上训练的模型。所有模型的推理都是在单一尺度上完成的。在图5中,我们根据提出的基于距离的评估方法展示了我们的方法与基线方法的性能。在这里,我们发现随着裁剪因子的增加,GSCNN相对于DeeplabV3+的性能越来越好。在裁剪因子为0(即无裁剪)时,GSCNN和DeeplabV3+之间的性能差距为2%,而在裁剪因子为400时,这个差距接近6%。这证实了我们的网络在距离摄像机较远的较小物体上取得了显著的改进。

Cityscapes基准测试。为了在测试集上获得最佳性能,我们使用我们的最佳模型(即,常规流是在Mapillary数据集[40]上预训练的WideResNet)。在一个NVIDIA DGX Station上使用8个GPU进行训练,总批量大小为16。我们使用GCL和双重任务损失来对这个网络进行175个epoch的训练,学习率为1e-2,使用多项式衰减策略。我们还使用均匀采样方案来获取一个800×800的裁剪图像,从所有类别中均匀采样。此外,我们使用多尺度推理方案,使用尺度0.5、1.0和2.0。由于我们的边界损失需要精细边界注释,因此在训练过程中我们不使用粗糙数据。

        在表6中,我们与在Cityscapes基准测试上发布的最先进方法进行了比较,评估结果是在测试集上进行的。重要的是要强调,我们的模型没有在粗糙数据上进行训练。令人印象深刻的是,我们可以看到我们的模型始终优于非常强大的基线方法,其中一些方法还使用了额外的粗糙训练数据。在撰写本文时,我们的方法在不使用粗糙数据的已发布方法中也排名第一。

图7:我们方法在Cityscapes测试集上的定性结果。图中展示了预测的分割掩码。

图8:根据预测错误进行的定性比较。请注意,我们的方法在边界方面产生了更精确的结果,特别是对于较小和较细的物体,比如杆子。人周围的边界也更加清晰。

表6:与Cityscapes测试集上最先进方法(使用/不使用粗糙训练)的比较。我们只包括已发布的方法。

4.2.消融

        在表3中,我们使用不同的编码器网络评估了我们方法的每个组件的有效性,用于常规流。为了公平起见,在这个表格中的比较是针对我们自己实现的基线(即使用不同的主干架构的DeepLabV3+)进行的,使用相同的超参数和ImageNet初始化从头开始训练。具体来说,我们使用ResNet-50、ResNet-101和Wide-ResNet作为主干架构。这里,GCL代表使用形状流进行训练的网络,并使用双重任务损失,Gradients表示在融合层之前还添加了图像梯度的网络。在我们的网络中,我们使用Canny边缘检测器来获取这些梯度。从表中可以看出,我们在mIoU方面的性能提升在1到2%之间,边界对齐方面约为3%。

        另一方面,表4展示了双重任务损失在边界对齐F-score方面的效果。我们在三个不同的阈值下说明了它的影响。这里,GCL代表使用GCL形状流进行训练但没有使用双重任务损失的网络。相对于基线,我们可以观察到双重损失显著提高了模型在边界准确性方面的性能。具体而言,通过添加双重任务损失,我们在最严格的情况下看到了高达3%的改进。

图9:在Cityscapes测试集上展示了我们预测的分割掩码的高质量边界的定性结果。边界是通过找到预测的分割掩码的边缘来获得的。

图10:GCL的alpha通道可视化。

4.3.定性结果

        在图7中,我们提供了我们方法在Cityscapes测试集上的定性结果。我们通过在图8中突出显示我们的方法在典型案例中的优势,与基线进行了比较。具体来说,我们可视化了两种方法的预测错误。在这些放大的图像中,我们可以看到一群人站在一个杆子密集的区域周围。在这里,Deeplab v3+未能捕捉到杆子,并将其错误地分类为人类。相反,我们可以看到在我们的模型中,杆子被正确分类,并且行人的错误边界也变得更细。此外,像交通灯这样的物体,在Deeplab v3+中通常被预测为过度模糊的斑块(尤其是在较远距离),在我们的模型输出中保留了它们的形状和结构。

        图10提供了来自GCL的alpha通道的可视化。我们可以注意到,门控机制有助于突出显示输入特征图中边界/区域区域之间的差异。例如,第一个门控机制突出显示了非常低级别的边缘,而第二个和第三个门控机制则关注对象级别的边界。通过门控机制的结果,我们在形状流中获得了最终的边界图,准确地勾画了对象和物体类别。这个流学习产生高质量的无类别边界,然后将其输入到融合模块中。图6展示了形状流输出的定性结果。另一方面,在图9中,我们展示了从最终分割掩码中获得的边界。请注意它们在较细和较小的对象上的准确性。

5.结论

        在本文中,我们提出了一种名为Gated-SCNN(GSCNN)的新的双流CNN架构,用于语义分割,并将形状信息引入了一个独立的并行流中。我们使用了一种新的门控机制来连接中间层,并使用了一种新的损失函数,利用了语义分割和语义边界预测之间的对偶性。我们的实验证明,这导致了一个非常有效的架构,能够在对象边界周围产生更清晰的预测,并显著提高对较细和较小对象的性能。我们的架构在具有挑战性的Cityscapes数据集上取得了最先进的结果,明显优于强基线模型。

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

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

相关文章

百度文心一言文心千帆大模型 ERNIE-Bot-turbo调用示例(golang版本)

百度的文心一言推出来也有一段时间了,但是接口部分一直没有公开,需要进行申请 最近,有朋友提供了文心千帆大模型的api权限,拿到了必须的参数,现在就来测试一下 下面是使用golang封装的文心千帆 ERNIE-Bot-turbo模型的调…

2023.7新版Pycharm没有Manager Repository(消失)下载镜像源问题

一、旧版本操作无法找到Manager Repository 二、解决方法---点击左侧键 三、点击添加设置小按钮 四、点击号复制进去镜像源网站即可 五、给大家推荐的镜像源网站 这里清华大学的镜像速度是最快的 https://pypi.tuna.tsinghua.edu.cn/simple/ 清华大学镜像http://pypi.douban…

天然气管道压力监测系统:管网安全守护者

随着我国工业的不断发展和能源需求的日益紧缺,天然气作为一种清洁能源正被广泛地开发和利用。然而。每年因天然气泄漏爆炸而造成的事故层出不穷,不仅威胁着人民的生命安全,还会对环境造成严重污染。面对这样的安全隐患,及时采取措…

Orangepi docker Home Assistant部署

手册上多数应用在树莓派用过,发现一个Home Assistant之前没搞过 按照手册先安装docker,使用enable_docker.sh 然后使用 docker run hello-world 来测试docker是否成功,如果hello from docker,即正常 通过以下docker命令搜索hom…

css - display属性

display属性有四个取值:block inline inline-block none 1、block display是类似于h和p标签在网页中默认显示方式,占据整整一行,所以不会与其他元素共同显示在一行之内。常见的block-display元素还有div、ol ul li、form等。如果想对某个blo…

【PHP面试题80】Redis消息发布与订阅功能怎么用的?

文章目录 🚀一、前言🚀二、PHP中安装Redis扩展🚀三、Redis消息发布与订阅🔎3.1 创建发布者🔎3.2 创建订阅者:🔎3.3 运行发布者和订阅者: 🚀四、总结 🚀一、前…

tomcat 使用部署

--烛光照亮了晚餐,照不出个答案。 不BB。 --部署web项目(无 maven 纯web项目) 直接把整个项目放到tomcat的webapps目录的下面然后重启tomcat即可 --部署html静态项目 直接把静态html放到tomcat的webapps目录下面即可,不要重命…

spring中bean实例化的三种方式 -- Spring入门(二)

文章目录 前言1.Bean实例化简介2.bean的实例化 -- 构造方法3.bean的实例化 -- 静态工厂实例化4.bean实例化 -- 实例工厂和FactoryBean5.三种bean实例化方式的区别 总结 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。…

JDBC之用IDEA连接SQLServer数据库实用教程

目录 前言 一、数据库准备 1.通过SQLServer配置管理器打开TCP/IP协议,设置状态为已启用 2.数据库登录模式设置为身份验证登录(如果已经设置可忽略此步骤) 3.下载SQLServer驱动jar包 二、IDEA准备 1.导入SQLServer驱动jar包 2.编写测试代…

【UE5 多人联机教程】02-开始游戏菜单控件

目录 步骤 一、完善开始游戏菜单控件 二、控件功能实现 2.1 “开始游戏”按钮切换界面 2.2 “创建房间”、“加入房间”按钮切换界面 2.3 “创建房间”按钮 步骤 一、完善开始游戏菜单控件 打开“UMG_Main” 首先在控件切换器外层包裹一个画布面板 然后调整控件切换器全…

Docker-volume【基础使用】

目录 【1】将本地的目录挂载到容器中 【2】volume卷,持久化 【3】volume数据共享 【4】volume持久化的作用 【5】volume - 随机卷的使用方式 【6】 启动nginx容器访问80出现HELLO,访问81出现WORLD 【1】将本地的目录挂载到容器中 1、容器的数据目录…

第112天:免杀对抗-加载器分离无文件落地图片隐写SOCK管道参数协议化

知识点 #知识点: 1、无文件落地&分离拆分-将shellcode从文本中提取-file 2、无文件落地&分离拆分-将shellcode与加载器分离-argv 3、无文件落地&分离拆分-将shellcode远程协议加载-http 4、无文件落地&分离拆分-将shellcode通过管道传输-socket 5、…

设计模式与技术场景面试题详解

工厂方法模式 简单工厂模式 工厂方法模式 抽象工厂模式 策略模式 工厂模式策略模式(登录案例) 责任链模式 技术场景 单点登录怎么实现 权限认证是如何实现的 上传数据的安全性你们怎么控制 你负责的项目遇到了哪些棘手的问题?怎么解决的 你们…

Vue系列第二篇:初识Vue项目

上一篇我搭建了Vue开发环境,创建了一个demo项目,借助nginx将Vue项目编译部署。这一篇来看一下Vue项目的结构。如下图所示: 我就创建一个空项目,结果Vue脚手架就帮我自动生成了这么多文件,看着挺吓人的。不用怕&#xf…

第十一章、【Linux】正则表达式与文件格式化处理

正则表达式 (Regular Expression, RE, 或称为常规表达式)是通过一些特殊字符的排列,用以“搜寻/取代/删除”一列或多列文字字串, 简单的说,正则表达式就是用在字串的处理上面的一项“表示式”。正则表达式并不是一个工…

「网络编程」传输层协议_ TCP协议学习_及原理深入理解(一)[万字详解]

「前言」文章内容大致是传输层协议,TCP协议讲解,续上篇UDP协议。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、TCP协议介绍二、TCP协议2.1 解包与分用2.2 谈谈可靠性2.3 TCP的工作模式2.4 确认应答(ACK)机制2.5 16位序号与…

【基于CentOS 7 的SSH服务】

目录 一、概念 二、特点 三、身份验证机制 1.密码验证 2.密钥对验证 四、验证过程 五、加密机制 1.单向加密 2.对称加密 3.非对称加密 六、基本参数 1.服务名 2.端口号 3.配置文件 3.1 服务器端 3.2 客户端 4.配置文件解析 4.1 /etc/ssh/sshd_config 4.2 /e…

机器学习 day29(高偏差、高方差,参数d对模型的影响)

1. 高偏差、高方差、拟合能力、泛化能力 偏差和方差分别代表拟合能力和泛化能力若给左图数据集拟合一阶多项式(d取1),则该模型有很高的偏差(欠拟合)。因为它对训练集和验证集的表现均不好,所以Jtrain很高…

使用STM32 再实现循迹/跟随/摇头避障小车

循迹小车 硬件介绍和接线 TCRT5000 使用方法和原理见89C52时期的介绍。 循迹小车需要使用两个TCRT5000,左侧的DO接到PB3;右侧的DO接到PB4 CubeMX 1. 在上节的基础上进行修改 配置两个传感器的GPIO 2. 惯例配置更新代码 Keil 注意,如果…

Linux 学习记录54(ARM篇)

Linux 学习记录54(ARM篇) 本文目录 Linux 学习记录54(ARM篇)一、框图分析1. 芯片手册内部框图2. 操作GPIO过程 二、通过汇编完成GPIO操作1. 常用的汇编指令2. GPIO初始化流程3. 查找相关寄存器(1. RCC寄存器(2. GPIO寄存器>1. 模式配置寄存器>2. 输出模式配置寄存器>3…