十六章:可靠性确实重要:一种端到端的弱监督语义分割方法

news2024/11/18 6:00:40

0.摘要

        弱监督语义分割是一项具有挑战性的任务,因为它只利用图像级别的信息作为训练的监督,但在测试时需要产生像素级别的预测。为了应对这样一个具有挑战性的任务,最近最先进的方法提出了采用两步解决方案,即:1)学习生成伪像素级掩码,2)利用伪掩码训练语义分割网络。然而,这两步解决方案通常在生成高质量伪掩码时使用了许多繁琐的操作,使得这类方法变得复杂而不雅。在这项工作中,我们利用图像级别标签生成可靠的像素级注释,并设计一个全面的端到端网络来学习预测分割图。具体而言,我们首先利用图像分类分支为注释类别生成类激活图,然后将其修剪为可靠而小的目标/背景区域。这些可靠区域直接作为平行分割分支的真实标签,其中采用了一种新设计的密集能量损失函数进行优化。尽管我们的一步解决方案看似简单,但在Pascal VOC数据集上的mIoU得分(验证集:62.6,测试集:62.9)与那些两步法相比具有竞争力。通过将我们的一步方法扩展为两步,我们在Pascal VOC数据集上获得了新的最先进性能(验证集:66.3,测试集:66.5)。

1.引言

        近年来,弱监督语义分割受到了广泛关注并得到了广泛研究。它仅需要较低程度(更便宜或更简单)的注释,包括涂鸦(Lin等人,2016年;Vernaza和Chandraker,2017年;Tang等人,2018b年)、边界框(Dai,He和Sun,2015年;Khoreva等人,2017年)、点(Maninis等人,2018年;Bearman等人,2016年)和图像级别标签(Ahn和Kwak,2018年;Hou等人,2018年;Wei等人,2018年)进行训练。弱监督语义分割相比于采用像素级别掩码的完全监督语义分割,提供了一种更简单的方式。在这些弱监督标签中,图像级别注释是最简单收集的一种,但也是最具挑战性的情况,因为语义标签和像素之间没有直接的映射关系。

        为了使用图像级别标签作为监督来学习语义分割模型,许多现有的方法可以分为一步方法和两步方法。一步方法(Papandreou等人,2015年)通常建立一个端到端的框架,将多实例学习与其他约束策略相结合进行优化。这类方法既简洁又易于实现。然而,这些方法的一个显著缺点是分割准确性远远落后于完全监督的对应方法。为了获得更好的分割性能,许多研究人员提出了利用两步方法(Wei等人,2017年;Huang等人,2018年)。这类方法通常旨在采取自底向上(Hou等人,2017年)或自顶向下(Zhang等人,2018a年;Zhou等人,2016年)的策略,首先利用图像级别标签作为监督生成高质量的伪像素级别掩码。然后,这些伪掩码被作为真实标签输入到FCN(Long, Shelhamer和Darrell,2015年)和Deeplab(Chen等人,2014年;2018a年)等现成的全卷积网络中,用于训练语义分割模型。目前最先进的方法主要是两步方法,其分割性能接近于完全监督的对应方法。然而,为了生成高质量的伪掩码,这些方法通常采用了许多复杂的操作,比如从对象提议(Pinheiro和Collobert,2015年)或显著性图(Jiang等人,2013年)中引入额外的对象/背景线索。因此,这些两步方法通常非常复杂,难以重新实现,限制了它们在对象定位和视频对象跟踪等研究领域的应用。

        在本文中,我们提出了一种简单而有效的一步方法,可以以端到端的方式轻松进行训练。与两步方法相比,它实现了有竞争力的分割性能。我们的方法名为可靠区域挖掘(RRM),包括两个分支:一个用于使用图像级别注释生成伪像素级别掩码,另一个用于生成语义分割结果。与之前的两步方法(Ahn和Kwak,2018年;Lee等人,2019年)相比,我们的RRM只选择那些通常很小但在类别激活图上具有高响应分数的自信对象/背景区域,而不是倾向于挖掘密集和完整的对象区域。我们发现通过增加额外的条件随机场(CRF)操作,可以将这些区域进一步剪枝为更可靠的区域,然后将其作为并行语义分割分支的监督。由于像素级别的监督有限,我们设计了一种名为密集能量损失的正则化损失,它与逐像素的交叉熵损失合作优化训练过程。

        尽管我们的一步RRM方法看起来非常简单,但在Pascal VOC验证集和测试集上分别获得了62.6和62.9的mIoU得分。这些结果达到了最先进的性能,甚至与那些通常采用复杂操作生成伪掩码的两步方法相媲美。我们相信我们提出的RRM为弱监督语义分割的一步解决方案提供了新的见解。此外,为了展示我们方法的有效性,我们还将我们的方法扩展到了一个两步框架,并在Pascal VOC验证集和测试集上获得了66.3和66.5的最新性能。我们将公开提供代码。

2.相关工作

        语义分割是计算机视觉中的一个重要任务(Wei等人,2018年;Xiao等人,2019年;Xie等人,2018年),它要求预测像素级别的分类。Long等人(Long, Shelhamer和Darrell,2015年)提出了第一个用于语义分割的完全卷积网络。Chen等人(Chen等人,2014年)提出了一种名为“Deeplab”的新型深度神经网络结构,使用空洞卷积进行逐像素预测,此后又开发了一系列新的网络结构(Chen等人,2018a;2017;2018b)。然而,全监督的语义分割需要密集的像素级注释,这需要昂贵的人力资源。弱监督的语义分割由于需要较少的人工干预而受到了广泛关注。根据监督类型,弱监督语义分割可以分为不同的类别:涂鸦(Tang等人,2018a;Lin等人,2016年),边界框(Song等人,2019年;Hu等人,2018年;Rajchl等人,2017年),点(Maninis等人,2018年;Bearman等人,2016年)和图像级类别标签(Zhang等人,2018b;Vernaza和Chandraker,2017年;Zhang等人,2018c)。在本文中,我们关注图像级别监督的语义分割。

        图像级别的弱监督语义分割只提供图像级别的注释。最近的大多数方法都基于类激活图(CAM)(Zhou等人,2016年),即从图像级别注释中生成初始的对象种子或区域。这些初始的对象种子或区域被转换为生成伪标签,用于训练语义分割模型。Wei等人(Wei等人,2017年)提出了通过一个分类网络迭代地擦除判别区域,从而可以挖掘更多种子区域,然后将其与显著性图结合起来生成伪像素级别的标签。Wei等人(Wei等人,2018年)还证明了扩张卷积可以增加感受野并改善弱分割网络的性能。此外,Wang等人(Wang等人,2018年)训练了一个区域网络和一个像素网络,逐渐从图像级别预测到区域级别,再从区域级别预测到像素级别。此方法还将显著性图作为额外的监督。Ahn和Suha(Ahn和Kwak,2018年)设计了一个相似性网络来计算不同图像像素之间的关系,并利用该网络获取用于分割模型训练的伪对象标签。Huang等人(Huang等人,2018年)采用了一种名为种子生长的传统算法来迭代地扩展种子区域。

        然而,所有上述方法都使用了各种技术来生成高质量的伪掩码,这意味着在训练用于语义分割预测的FCN之前,我们需要至少一个或两个额外的网络。在这项工作中,我们尝试设计一个单一的网络来完成整个任务,以简化流程。我们相信这项工作为图像级别的弱监督语义分割任务提供了一种新的视角。

3.提出的方法

3.1.概括

        我们提出的RRM可以分为两个并行的分支,包括分类分支和语义分割分支。两个分支共享相同的主干网络,在训练过程中它们同时更新整个网络。我们方法的总体框架如图1所示。算法流程如算法1所示。

  • 分类分支用于生成可靠的像素级别注释。原始的CAM将被处理以生成可靠但微小的区域。最终保留下来的可靠区域被视为标记区域,而其他区域被视为未标记。这些标签被用作语义分割分支的监督信息进行训练。
  • 语义分割分支用于预测像素级别的标签。该分支采用了一个新的联合损失函数,将交叉熵损失与新设计的密集能量损失结合起来。交叉熵损失主要考虑标记像素,而密集能量损失通过充分利用RGB颜色和像素位置来考虑所有像素。我们RRM的整体损失函数为:L = Lclass + Ljoint-seg,其中Lclass代表传统的分类softmax损失,而Ljoint-seg是为分割分支引入的新的联合损失。

3.2.分类分支:为可靠区域生成标签

        高质量的像素级别注释对我们最终的语义分割性能有直接影响,因为它是训练过程中唯一的真值。原始的CAM可以突出对象的最具有区分性的区域,但它们仍然包含一些非对象区域,即错误标记的像素。因此,在获取原始的CAM区域之后,需要进行后处理,例如密集的CRF(Krahenb¨uhl和Koltun,2013年)。我们遵循了这个基本思想,并对生成可靠标签进行了进一步的处理。

        我们根据(Zhou等人,2016年)的方法计算训练数据集的初始CAM。在我们的网络中,全局平均池化(GAP)应用于最后的卷积层。GAP的输出通过全连接层进行分类。最后,全连接层的权重被用于最后的卷积层,以获得每个类别的热力图。此外,受到扩张卷积可以增加感受野的事实的启发(Wei等人,2018年),我们将扩张卷积添加到最后三层。我们网络设置的详细信息将在我们的实验部分中报告。给定一张图像I,类别c的CAM表示为:

        其中,Cfg = {c1,c2,...,cN}包括所有前景类别,M_c_oc_M_c_ocam 是图像I类别c的CAM,ωc 表示类别c的全连接层权重,F 是主干网络最后一个卷积层的特征图。RS(·)是一个将输入调整为I形状的操作。使用原始图像的多尺度有助于生成稳定的CAM。给定I,并将其按因子si进行缩放,si ∈ {s0,s1,...,sn},I的多尺度CAM表示为:

        其中,M_c_oc_M_c_ocam(si) 是按因子si缩放的图像I的类别c的CAM。图2显示,与原始CAM(尺度=1)相比,多尺度CAM提供了更准确的对象定位。CAM得分被归一化,这样我们可以获得I中每个像素的分类概率。

 背景得分的计算方式与(Ahn和Kwak,2018年)中的方法类似:

        在公式(7)中,Icrf(i)=Icam(i)考虑了CRF的约束。采用这种策略,可以获得高度可靠的区域及其标签。在公式(7)中被标记为255的区域被视为不可靠的区域。图3显示了我们方法的一个示例。观察到原始的CAM标签(图3(c))包含了大部分前景标签,但将许多背景像素错误地标记为前景。CRF标签(图3(d))可以得到准确的边界,但同时将许多前景像素错误地标记为背景。换句话说,CAM标签可以提供可靠的背景像素,CRF标签可以提供可靠的前景像素。使用我们的方法将CAM标签和CRF标签映射结合起来,一些错误的像素级标签被移除,而可靠的区域仍然保留,这在物体边界上尤为明显(参见图3(e)和(f)之间的差异)。

图1:我们提出的RRM网络的框架。首先,通过分类分支计算原始区域,然后生成伪像素级掩码。最后,将伪标签应用作监督来训练语义分割分支。在训练过程中,整个RRM通过标准的反向传播算法进行端到端的联合优化。

图2:多尺度CAM计算的示例

3.3.语义分割分支:做预测

        在获得可靠的像素级注释之后,它们被用作我们语义分割分支的标签。与其他方法不同,它们独立地使用完整的伪标签来训练他们的语义分割网络,我们的分割分支与分类分支共享相同的骨干网络,只需要可靠但微小的像素级标签。我们的损失函数由交叉熵损失和能量损失组成。交叉熵损失专注于利用标记数据,而能量损失同时考虑了标记和未标记的数据。联合损失函数为:

        其中,Bc(i)是一个二进制指示器,如果像素i的标签为c,则等于1,否则为0;Φ表示标记区域,Φ={i|Ifinal(i) = 255};Pnet c (i)是训练网络的输出概率。到目前为止,所有标记的像素都已经用于使用交叉熵损失进行训练,但是还有大量未标记的像素。为了对这些未标记的区域进行预测,我们设计了一种新的浅层损失,称为稠密能量损失,考虑了RGB颜色和空间位置。我们首先基于(Joy et al.2019)定义了像素i和j之间的能量公式:

4.实验

4.1.数据集和实现细节

数据集:我们的RRM模型在PASCAL VOC 2012(Everingham et al.2010)及其扩充数据上进行了训练和验证,其中包括10,582张用于训练的图像,1,449张用于验证,1,456张用于测试。平均交并比(mIoU)被视为评估标准。 实现细节:骨干网络采用了ResNet架构。我们使用了PyTorch框架来实现模型,并在具有多个GPU的服务器上进行了训练。我们使用了Adam优化器,并设置了初始学习率、权重衰减和动量等超参数。训练过程中,我们采用了数据增强技术,如随机裁剪、水平翻转和颜色抖动等。我们还使用了批量大小为16的mini-batch训练,并进行了100-200个epoch的训练迭代。 在测试阶段,我们使用测试集上的推理结果来评估模型的性能。我们计算了平均交并比等常见的语义分割指标。 总的来说,我们的RRM模型在PASCAL VOC 2012数据集上进行了训练和验证,并采用了一系列的实现细节和策略来提高模型的性能。

实现细节:骨干网络采用了具有38个卷积层的ResNet模型(Wu, Shen和Van Den Hengel 2019)。我们移除了原始网络的所有全连接层,并在最后三个ResNet块(一个ResNet块是一组具有相同输出大小的残差单元)中使用了扩张卷积,其中最后一个卷积层的扩张率为2,最后两个卷积层的扩张率为4。对于语义分割分支,在骨干网络之后,我们添加了两个具有相同配置的扩张卷积层(Wu, Shen和Van Den Hengel 2019),其卷积核大小为3,扩张率为12,填充大小为12。交叉熵损失分别计算背景和前景。我们的稠密能量损失中的σd和σr分别设置为15和100。

        训练过程中的学习率为0.001,权重衰减为5e-4。训练图像按照从(0.7,1.3)中随机采样的比例进行调整大小,并进行随机翻转。最后,它们被归一化并随机裁剪为大小为321*321。为了生成可靠的区域,(2)中的比例系数设置为{0.5,1,1.5,2},(5)中的γ对于Pfg bg设置为4。CRF参数按照(Ahn and Kwak 2018)中的设置进行。在(6)中,选择一个α值,使得每个类别选择40%的像素作为标记像素。在验证和测试过程中,应用稠密CRF作为后处理方法,并将参数设置为(Huang et al.2018)中给出的默认值。在训练过程中,两个分支都会更新骨干网络。在测试过程中,只使用分割分支生成预测结果。

可复现性:我们使用了PyTorch框架(Paszke et al.2017)。所有实验都在NVIDIA RTX 2080 Ti上进行。代码现在可以在以下网址找到:https://github.com/zbf1991/RRM。

4.2.我们方法的分析

        我们的RRM模型具有两个重要方面:使用可靠但微小的伪掩码进行监督和使用新的联合损失函数进行端到端训练。我们进行了消融研究来说明它们的个体和联合效果,结果在表1和表2中报告。

        我们首先验证了不同伪掩码尺寸的影响。我们通过改变α的值来实现这一点。表1报告了结果。较小的伪掩码尺寸意味着选择更可靠的区域用于分割分支,而较大的尺寸意味着标记的可靠像素较少。表1表明,20%-60%的标记像素可以获得最佳性能。一方面,标记的像素过少无法获得满意的性能,因为分割网络无法获得足够的标签进行学习。另一方面,标记的像素过多意味着使用了更多不正确的标签,这对于训练过程来说是噪声。

        表2展示了我们引入的两个主要部分的有效性:可靠区域挖掘和联合损失。比较了使用原始CAM区域和使用RRM挖掘的可靠区域所获得的结果。观察到,RRM生成的伪标签优于CAM标签。如果我们从分割分支中移除联合损失,同样可以看到RRM生成的可靠伪标签改善了分割性能。此外,表2中Ours-RRM与CE损失和Ours-RRM与联合损失的比较说明了引入的联合损失的有效性。在没有联合损失的情况下,RRM与CE损失获得的mIoU较低。这是因为当仅考虑交叉熵损失时,RRM挖掘的可靠区域无法为分割模型训练提供足够的标签。采用联合损失后,分割性能大幅提高,从48.5提升到62.6,增加了14.1。CAM与CE损失和CAM与联合损失之间也获得了类似的比较结果。

表1:基于不同挖掘区域的PASCAL VOC 2012验证集上的性能。Ratio表示我们的方法挖掘到的可靠区域在整个像素中的比例。“CE损失”表示我们的分割分支仅使用交叉熵损失,“联合损失”表示我们的密集能量损失与交叉熵损失相结合用于分割分支。

表2:我们方法的分析。CAM表示将类别激活图直接作为伪掩码。Ours-RRM表示我们使用我们的方法生成伪掩码。根据表1,CAM和Ours-RRM都使用了前40%的像素。

表3:在PASCAL VOC 2012验证集上与其他端到端弱监督方法的性能比较。

表4:在PASCAL VOC 2012测试集上与其他端到端弱监督方法的性能比较。

表5:与PASCAL VOC 2012验证集和测试集上的最新方法进行比较。Sup.表示监督信息,GT表示真实标注,F表示完全监督,L表示图像级别类别标签,B表示边界框标签,S表示涂鸦标签。

4.3.与之前方法的对比

        在表3和表4中,我们与其他仅使用图像级别监督进行语义分割的端到端网络进行了详细比较。尽管有各种不同的网络用于此任务,但只有EM-Adapt(Papandreou等,2015年)采用了端到端结构,可以看出Ours-RRM(一步)在性能上明显优于它。首先,与使用期望最大化(EM)算法更新网络参数的EM-Adapt(Papandreou等,2015年)相比,我们的方法采用了更直接和明确的学习过程来更新整个网络,使用我们设计的联合损失函数。其次,EM-Adapt(Papandreou等,2015年)仅考虑图像级别信息,因此只能给出粗略的分割结果,而Ours-RRM(一步)设计了一个导航机制来提供可靠的像素级标签,从而导致更准确的分割预测。

        为了展示我们方法的有效性和可扩展性,我们还将我们的方法扩展到了一个两步的框架。区别在于,对于我们的一步方法(Ours-RRM(一步)),我们直接通过我们的分割分支生成预测。而对于我们的两步方法,我们首先使用我们的Ours-RRM(一步)网络为训练数据集生成伪掩码。随后,我们使用生成的像素级标签来训练和评估Deeplab(Chen等,2014年),我们将其命名为Our-RRM VGG(两步)。使用相同的设置,我们还评估了使用Deeplab-v2(Chen等,2018a年)和ResNet-101骨干网络时的性能,称为Our-RRM-ResNet(两步)。最终结果可以在表5中找到。观察到,在仅使用图像级别标签而没有额外数据的现有方法中,AffinityNet(Ahn和Kwak,2018年)是效果最好的。然而,当使用相同的骨干网络时,Ours-RRM-VGG(两步)和Ours-RRM-ResNet(两步)的性能要比它好得多。还需要注意的是,AffinityNet(Ahn和Kwak,2018年)使用ResNet-38(Wu,Shen和Van Den Hengel,2019年)作为基准,比ResNet-101(Lee等,2019年)更强大,即使在这种情况下,Ours-RRM-ResNet(两步)的性能仍然明显优于它。请注意,AffinityNet(Ahn和Kwak,2018年)应用了三个不同的深度神经网络,并添加了许多额外的优化手段,而我们只使用一个端到端网络(Ours-RRM(一步))就能获得相当的结果。

        据我们所知,之前的最先进模型FickleNet(Lee等,2019年)在PASCAL VOC验证集和测试集上的mIoU得分分别为64.9和65.3,但它使用了类别不可知的显著性图(Liu等,2010年)作为额外的辅助信息,并使用了两个单独的网络。而我们的Ours-RRM-ResNet(两步)在PASCAL VOC验证集和测试集上取得了更好的性能,mIoU得分分别为66.3和66.5,这表示了1.4和1.2的改进。需要注意的是,在我们的情况下,我们没有使用额外的数据或信息。因此,Ours-RRM-ResNet(两步)是新的两步图像级别标签弱监督语义分割的最先进模型。

        在图4中,我们展示了一些我们方法的主观语义分割结果,并与最先进的端到端网络EM-Adapt(Papandreou等,2015年)进行了比较。在大型和小型物体上,Ours-RRM(一步)取得了更好的分割结果,并具有更准确的边界。我们还展示了我们两步方法的一些结果,可以看出在我们的三种方法中,Ours-RRM-ResNet(两步)由于强大的网络架构取得了最佳性能。

图4:PASCAL VOC 2012验证集的定性分割结果。(a)原始图像。(b)真实标签。(c)EM Adapt的结果。(d)Ours-RRM(一步)的结果。(e)Ours-RRM-VGG(两步)的结果。(f)Ours-RRM-ResNet(两步)的结果。

5.总结

        在本文中,我们提出了RRM,一种用于图像级别弱监督语义分割的端到端网络。我们重新审视了现有方法采用的两步方法的缺点。我们通过挖掘可靠但微小的区域,提出了一种一步方法,并直接将它们用作分割模型训练的标签。在有限的像素监督下,我们设计了一种新的损失函数,称为密集能量损失,它利用浅层特征(RGB颜色和空间信息)与像素级交叉熵损失相结合,优化训练过程。基于我们的一步RRM,我们扩展了一个两步方法。我们的一步和两步方法都实现了最先进的性能。更重要的是,我们的RRM提供了与传统的两步解决方案不同的视角。我们相信,提出的一步方法可以进一步推动这个方向的研究。

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

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

相关文章

自动上传git

自动上传git 执行脚本 保存为.bat文件 echo off title bat 交互执行git命令 D: cd D:/git/test git add . git commit -m %date:~0,4%年%date:~5,2%月%date:~8,2%日 git push教程如下 1、搜索任务计划程序(最好管理员身份运行,普通用户可能无权限&am…

下载JMeter的历史版本——个人推荐5.2.1版本

官网地址:https://archive.apache.org/dist/jmeter/binaries/

【Git|项目管理】Git的常用命令以及使用场景

文章目录 1.前言2.工作区,暂存区,版本库简介3.Git的常用命令4.版本回退5.撤销修改6.删除文件7.总结 1.前言 在学习Git命令之前,需要先了解工作区,暂存区和版本库这三个概念 2.工作区,暂存区,版本库简介 在使用Git进行版本控制时,有三个重要的概念:工作…

机器学习——异常检测

异常点检测(Outlier detection),⼜称为离群点检测,是找出与预期对象的⾏为差异较⼤的对象的⼀个检测过程。这些被检测出的对象被称为异常点或者离群点。异常点(outlier)是⼀个数据对象,它明显不同于其他的数据对象。异…

invalid use of incomplete type class ui(new Ui::MainWindow)报错,解决方案

invalid use of incomplete type class ui(new Ui::MainWindow报错,解决方案 原因解决方案 原因 就是在我改控件button的名字的时候,没有选中控件,导致吧mainwindow的名字改了。。。 解决方案 吧mainwindow的名字改回来 MainWindow 完美解…

【LeetCode】101.对称二叉树

题目 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false提示: 树中节点数…

java项目之社区疫情防控管理信息系统(ssm+mysql+jsp)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的社区疫情防控管理信息系统。技术交流和部署相关看文章末尾! 开发环境: 后端: 开发语言:Ja…

小米新专利曝光:解决升降摄像头痛点,隐藏式摄像头指日可待

根据国家知识产权局官方网站的最新消息,小米移动软件公司的“摄像头隐藏式电子设备及隐藏式摄像头”的专利申请在今天获得了授权。 这款电子设备的主要组成部分包括壳体、摄像模组和可伸缩的反射组件。壳体上设有一个开口,可以让反射组件向外伸出。反射组…

数据可视化大屏拼接屏开发实录:屏幕分辨率测试工具

一、可视化大屏开发 在数据可视化大屏开发时,确定数据可视化大屏拼接屏的板块尺寸需要考虑以下几个因素: 屏幕分辨率:首先需要知道每个板块屏幕的分辨率,包括宽度和高度,这决定了每个板块上可以显示的像素数量。 数据…

Qt : day4

1.思维导图 2.服务器 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//给服务器指针实例化空间server new QTcpServer(this);}Widget::~Widget() {delete ui;…

Pytorch(一)

目录 一、基本操作 二、自动求导机制 三、线性回归DEMO 3.1模型的读取与保存 3.2利用GPU训练时 四、常见的Tensor形式 五、Hub模块 一、基本操作 操作代码如下: import torch import numpy as np#创建一个矩阵 x1 torch.empty(5,3)# 随机值 x2 torch.rand(5,3)# 初始化…

grid网格布局看这一篇就够了(接近3w字的总结)

在当今现代Web设计中,如何实现有效的布局一直是一个关键问题。这就是为什么CSS3推出了“grid网格布局”作为一种新的布局方式。使用grid,您可以轻松地设置复杂的网格布局,而无需使用冗长的CSS代码或框架。本文将探讨grid的概念、语法和实际应…

青大数据结构【2021】

一、单选(17!) 根据中序遍历得到降序序列可以知道,每个结点的左子树的结点的值比该结点的值小,因为没有重复的关键字,所以拥有最大值的结点没有左子树。 二、简答 三、分析计算 四、算法分析 3.迪杰斯特拉…

DAY53:动态规划(十八)最长公共子序列+不相交的线+最大子序列和

文章目录 1143.最长公共子序列(注意递推的逻辑)思路DP数组含义递推公式初始化完整版重要:该解法是否保持了元素顺序总结 1035.不相交的线(注意思路)思路完整版 53.最大子序列和思路1:贪心思路1完整版思路2:动态规划DP数…

java商城系统和php商城系统对比

java商城系统和php商城系统是两种常见的电子商务平台,它们都具有一定的优势和劣势。那么,java商城系统和php商城系统又有哪些差异呢? 一、开发难度 Java商城系统和PHP商城系统在开发难度方面存在一定的差异。Java商城系统需要使用Java语言进…

【前端工程化】未使用docker时,前端项目实现线上秒级回滚

目录 一. 前言 二. 思路 三. 实践 3.1 准备单页应用项目 3.2 保存历史构建index.html内容 3.3 模拟服务端托管前端应用 3.4 快速回滚node服务端代码开发 3.5 快速回滚前端可视化页面开发 3.6 快速回滚测试 四. 总结 一. 前言 项目快速回滚是前端工程化中很重要的一环&…

【项目】轻量级HTTP服务器

文章目录 一、项目介绍二、前置知识2.1 URI、URL、URN2.2 CGI2.2.1 CGI的概念2.2.2 CGI模式的实现2.2.3 CGI的意义 三、项目设计3.1 日志的编写3.2 套接字编写3.3 HTTP服务器实现3.4 HTTP请求与响应结构3.5 EndPoint类的实现3.5.1 EndPoint的基本逻辑3.5.2 读取请求3.5.3 构建响…

yolov5 onnx模型 转为 rknn模型

1、转换为rknn模型环境搭建 onnx模型需要转换为rknn模型才能在rv1126开发板上运行,所以需要先搭建转换环境 模型转换工具 模型转换相关文件下载: 网盘下载链接:百度网盘 请输入提取码 提取码:teuc 将其移动到虚拟机中&#xf…

用于提取数据的三个开源NLP工具

开发人员和数据科学家使用生成式AI和大语言模型(LLM)来查询大量文档和非结构化数据。开源LLM包括Dolly 2.0、EleutherAI Pythia、Meta AI LLaMa和StabilityLM等,它们都是尝试人工智能的起点,可以接受自然语言提示,生成…

3d动画用云渲染靠谱吗?有什么不同?

3d动画是一种利用计算机技术制作的动画形式,它可以模拟真实世界的物体和场景,创造出各种惊人的效果和视觉体验。3d动画广泛应用于影视、游戏、广告、教育等领域,成为当今最流行的艺术表现形式之一。据统计,2019年全球3d动画市场规…