轻量级网络论文精度笔记(二):《YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object ..》

本文涉及的产品
文件存储 NAS,50GB 3个月
简介: YOLOv7是一种新的实时目标检测器,通过引入可训练的免费技术包和优化的网络架构,显著提高了检测精度,同时减少了参数和计算量。该研究还提出了新的模型重参数化和标签分配策略,有效提升了模型性能。实验结果显示,YOLOv7在速度和准确性上超越了其他目标检测器。

论文以及源码获取

论文下载:点击
源码:点击

论文题目

《 YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors》
《YOLOv7:对于最新的实时目标检测器设置的可训练的免费包》

参考文献

Wang C-Y, Bochkovskiy A, Liao H-Y M. YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors[A]. arXiv,2022[2022-11-28].

1. 介绍

实时目标检测在计算机视觉中是一个非常重要的课题,因为它往往是计算机视觉系统中必不可少的组成部分。例如,多目标跟踪[94,93]、自动驾驶[40,18]、机器人[35,58]、医学图像分析[34,46]等。执行实时对象检测的计算设备通常是一些移动CPU或GPU,以及由主要制造商开发的各种神经处理单元(NPU),例如,苹果神经引擎(Apple)、神经计算棒(Intel)、Jetson AI边缘设备(Nvidia)、边缘TPU(谷歌)、神经处理引擎(Qualcomm)、AI处理单元(联发科)、AI soc (Kneron)都是npu。上面提到的一些边缘设备专注于加速不同的操作,如vanilla卷积、深度卷积或MLP操作。

​ 近年来,针对不同的边缘设备,还开发了实时目标检测器。比如说这个devel-MCUNet[49,48]和NanoDet[54]的开发重点是生产低功耗的单片机和提高边缘CPU的推理速度。至于YOLOX[21]和YOLOR[81]等方法,其重点是提高各种gpu的推理速度。最近,实时目标检测器的发展集中在高效架构的设计上。而能够在CPU上使用的实时对象检测器[54,88,84,83],其设计多基于MobileNet[28,66,27]、ShuffleNet[92,55]或GhostNet[25]。另一种主流的实时对象检测器是针对GPU开发的[81,21,97],它们大多使用ResNet[26]、DarkNet[63]或DLA[87],然后使用CSPNet[80]策略来优化架构。本文提出的方法的发展方向不同于目前主流的实时目标检测器。除了体系结构优化,我们提出的方法将专注于训练过程的优化。我们将重点研究一些优化的模块和优化方法,这些优化方法可以在不增加推理成本的前提下,增加训练成本,提高目标检测的准确性。我们将提出的模块和优化方法称为可训练的免费模块。

近年来,模型重新参数化[13,12,29]和动态标签分配[20,17,42]已成为网络训练和目标检测中的重要课题。主要是在上述新概念提出之后,目标检测器的训练又出现了许多新的问题。在本文中,我们将介绍我们发现的一些新问题,并提出有效的方法来解决它们。在模型重参数化方面,利用梯度传播路径的概念,分析了适用于不同网络层的模型重参数化策略,提出了规划重参数化模型。此外,当我们发现使用动态标签分配技术,训练具有多个输出层的模型会产生新的问题。那就是:“如何为不同分支的输出分配动态目标?”针对这一问题,我们提出了一种新的标签分配方法,即由粗到细的导向性标签分配方法。
在这里插入图片描述

2. 贡献

  • 设计了几种可训练的免费包方法,使得实时目标检测在不增加推理成本的前提下,大大提高了检测精度;
  • 对于目标检测方法的发展,我们发现了两个新的问题,即重新参数化的模块如何替换原始模块,动态标签分配策略如何处理对不同输出层的分配。
  • 提出了能有效利用参数和计算的“扩展”和“复合缩放”实时目标检测器方法;
  • 该方法可有效减少现有实时目标检测器40%左右的参数和50%的计算量,具有更快的推理速度和更高的检测精度。

2. 相关工作

2.1 实时目标检测器

​目前最先进的实时目标检测器主要基于YOLO和FCOS。能够成为最先进的实时目标检测器通常需要以下特征:

  1. 更快和更强的网络架构;
  2. 更有效的特征整合方法;
  3. 更精确的检测方法;
  4. 更鲁棒的损失函数;
  5. 更有效的标签分配方法;
  6. 更有效的训练方法。

在本文中,我们不打算探索需要额外数据或大模型的自我监督学习或知识蒸馏方法。相反,我们将针对上述(4)、(5)和(6)相关的最先进方法,设计新的可训练的免费包方法。

2.2 模型重参数化

模型重参数化技术在推理阶段将多个计算模块合并为一个。模型重参数化技术可以看作是一种集成技术,我们可以将其分为模块级集成和模型级集成两大类。为了获得最终的推理模型,有两种常见的模型级重参数化实践。一种是用不同的训练数据训练多个相同的模型,然后对多个训练过的模型进行加权平均。另一种是对不同迭代次数下模型的权重进行加权平均。模块级重参数化是近年来比较热门的研究课题这种方法在训练时将一个模块划分为多个相同或不同的模块分支,在推理时将多个分支模块集成为一个完全等价的模块。然而,并不是所有提出的重参数化模块都可以完美地应用于不同的体系结构。考虑到这一点,我们开发了新的重新参数化模块,并为各种体系结构设计了相关的应用策略。

2.3 模型缩放

模型缩放是一种放大或缩小已经设计好的模型,使其适合不同的计算设备的方法。模型缩放方法通常采用不同的缩放因子,如分辨率(输入图像的大小)、深度(层数)、宽度(通道数)、阶段(特征金字塔数),以达到在网络参数量、计算量、推理速度和精度方面的良好权衡。**网络架构搜索(NAS)**是常用的模型扩展方法之一。NAS可以自动从搜索空间中搜索合适的缩放因子,而不需要定义太复杂的规则。NAS的缺点是需要非常昂贵的计算来完成对模型缩放因子的搜索。在[15]中,研究者分析了缩放因子与参数量和操作量的关系,试图直接估计一些规则,从而得到模型缩放所需的缩放因子。查阅文献发现,几乎所有的模型标度方法都是独立分析单个标度因子的,甚至复合标度类的方法也是独立优化标度因子的。这是因为大多数流行的NAS体系结构处理的是不太相关的伸缩因素。我们观察到,所有基于连接的模型,如DenseNet[32]或VoVNet[39],当这些模型的深度缩放时,会改变某些层的输入宽度。由于所提出的体系结构是基于串联的,我们必须为该模型设计一种新的复合缩放方法。

3. 架构

3.1 扩展的高效层聚合网络

​ 在大多数关于设计高效架构的文献中,主要的考虑因素仅仅是参数的数量、计算量和计算密度。从内存访问成本的特点出发,Ma等人[55]还分析了输入/输出通道比、体系结构分支数量和元素智慧操作对网络推理速度的影响。Dollár等[15]在进行模型缩放时还考虑了激活,即更多地考虑卷积层输出张量中的元素数量。图2 (b)中CSP VoVNet[79]的设计是VoVNet[39]的变体,除了考虑上述的基本设计问题外,CSP VoVNet[79]的体系结构还分析了梯度路径,以使不同层的权重学习到更多不同的特征。**上述梯度分析方法使推理速度更快、更准确。图2 ©**中的ELAN[1]考虑了以下设计策略——“如何设计一个高效的网络?”他们得出了一个结论:通过控制最短最长的梯度路径,一个更深层次的网络可以有效地学习和收敛。在本文中,我们提出了基于ELAN的Extended-ELAN (E-ELAN),其主要架构如图2 (d)所示。

在大规模的ELAN中,无论梯度路径长度和计算块的堆叠数量如何,它都达到了一个稳定的状态。如果无限制地堆叠更多的计算块,则可能破坏这种稳定状态,参数利用率下降。

​ 本文提出的E-ELAN使用扩展、shuffle、合并基数来实现在不破坏原有梯度路径的情况下不断增强网络学习的能力。在架构方面,E-ELAN只改变了计算块的架构,而过渡层的架构则完全不变。**我们的策略是利用群卷积来扩展计算块的通道和基数。**我们将对一个计算层的所有计算块应用相同的组参数和通道乘法器,然后,根据设定的组参数g将每个计算块计算出的特征映射洗牌到g组中,然后将它们连接在一起。此时,每组特征图中的通道数量将与原始体系结构中的通道数量相同,最后,我们添加g组特征映射来执行合并基数。除了维护原始的ELAN设计架构,E-ELAN还可以引导不同的计算块组学习更多不同的特性。

3.2 基于连接的模型的模型缩放

在这里插入图片描述

模型缩放的主要目的是调整模型的某些属性,生成不同尺度的模型,以满足不同推理速度的需要。例如,EfficientNet[72]的缩放模型考虑了宽度、深度和分辨率。而scaled-YOLOv4[79],其缩放模型是调整级数。在[15]中,Dollár等分析了vanilla卷积和组卷积在进行宽度和深度缩放时对参数量和计算量的影响,并以此设计了相应的模型缩放方法。以上方法主要应用于PlainNet或ResNet等体系结构中。当这些架构在执行放大或缩小缩放时,每一层的入度和出度都不会发生变化,因此我们可以独立分析每个缩放因子对参数量和计算量的影响。然而,如果将这些方法应用到基于连接的体系结构中,我们会发现,当对深度进行放大或缩小缩放时,紧接在基于连接的计算块之后的转换层的入度会减少或增加,如图3 (a)和(b)所示。

从上述现象可以推断,对于基于串联的模型,我们不能单独分析不同的缩放因子,而必须综合考虑。以缩放深度为例,这样的操作将导致转换层的输入通道和输出通道之间的比率发生变化,这可能会导致模型的硬件使用率下降。因此,对于基于拼接的模型,必须提出相应的复合模型缩放方法。当我们缩放计算块的深度因子时,我们还必须计算该块的输出通道的变化。然后,我们将对过渡层进行同样量的宽度因子缩放,结果如图3 ©所示。我们提出的复合缩放方法可以保持模型在初始设计时的属性,并保持最佳结构。

4.可训练的免费包

4.1 Planned re-parameterized convolution

在这里插入图片描述

虽然RepConv[13]在VGG上取得了优异的性能[68],但当我们直接将其应用到ResNet[26]和DenseNet[32]等体系结构上时,其精度会显著降低。我们使用梯度流传播路径来分析重新参数化卷积如何与不同的网络相结合。我们还设计了相应的规划重参数化卷积。

RepConv实际上在一个卷积层中结合了3 × 3卷积、1 × 1卷积和恒等连接。通过分析RepConv与不同体系结构的结合及其相应的性能,我们发现RepConv中的身份连接破坏了ResNet中的残差和DenseNet中的连接,为不同的特征映射提供了更多的梯度多样性。基于以上原因,我们使用无标识连接的RepConv (RepConvN)来设计规划的重参数化卷积的体系结构。在我们的思想中,当一个带有残差或拼接的卷积层被重新参数化的卷积代替时,应该没有恒等连接。图4显示了我们设计的在PlainNet和ResNet中使用的“计划重参数化卷积”的一个例子。至于计划完成的基于残差模型和基于级联模型的再参数化卷积实验,将在消融研究环节进行介绍。

4.2 Coarse for auxiliary and fine for lead loss

在这里插入图片描述

深度监督是深度网络训练中常用的一种技术,其主要思想是在网络中间层增加额外的辅助头,以此作为辅助损失来给浅层网络权重作指导。即使对于 ResNet 和 DenseNet 这样通常收敛良好的架构,深度监督仍然可以提高模型在许多任务上的性能。下图 a、b 分别展示了 没有 和 有 深度监督的目标检测器架构。在论文中,作者把最终输出的头部称为 引导头lead head,将辅助训练的头部称为 辅助头auxiliary head。
​ 接下来要讨论标签分配问题。过去,在深度网络的训练中,标签通常就是指 ground truth,根据给定的规则生成硬标签。然而近年来,以目标检测为例,研究人员往往利用网络预测输出的质量和分布,再考虑 ground truth 真实值,然后使用一个计算和优化的方法来生成可靠的软标签 soft label。例如,YOLO 使用 bounding box 回归预测 IOU 和 ground truth 作为目标的软标签。在论文中,作者将预测结果和 ground truth 相结合并分配软标签的机制称为 “标签分配器 label assigner”。

​ 无论 auxiliary head 或 lead head 的情况如何,都需要对最终目标进行深度监督训练。作者在开发软标签分配器相关技术的过程中,偶然发现了一个新的衍生问题,即:如何分配软标签给 auxiliary head 和 lead head。相关文献还没有探讨过这个问题。如下图c,目前最流行的方法是将 auxiliary head 和 lead head 分开,利用各自的预测结果和 ground truth 进行标签分配。本文提出的方法是一种通过 lead head 预测来同时引导 auxiliary head 和 lead head 标签分配的方法。换句话说,就是以 lead head 预测为指导,生成从粗到细 coarse-to-fine 的层次标签,分别用于 auxiliary head 和 lead head 学习。提出的两种深度监督标签分配策略分别如下图d 和 e。

​ Lead head guided label assigner 主要根据 lead head 的预测结果和 ground truth 进行计算,通过优化生成软标签。这套软标签将作为 auxiliary head 和 lead head 的 target 来训练模型。这样做的原因是 lead head 具有较强的学习能力,由此生成的软标签应该更能代表源数据和目标数据之间的分布和相关性。我们可以把这种学习称为 广义的残差学习。通过让较浅的 auxiliary head 直接学习 lead head 已经学习过的信息,lead head 将更多精力专注于学习还未学习的残差信息。

Coarse-to-fine lead head guided label assigner 是利用 lead head 的预测结果和 ground truth 来生成软标签。然而在此过程中,生成了两组不同的软标签,即 粗标签 和 细标签,其中细标签和 lead head 引导标签生成器生成的软标签相同,而粗标签是通过放宽正样本分配过程的约束,允许更多的 grids 作为正目标来生成的。这是因为 auxiliary head 的学习能力不如 lead head 强,为了避免丢失需要学习的信息,在目标检测任务中需要重点优化 auxiliary head 的召回。对于 lead head 的输出,可以从高查全率的结果中 过滤出 高精度的结果,作为最终输出。但必须注意的是,如果粗标签的附加权重接近细标签的附加权重,可能会在最终预测的时候产生较差的先验。因此,为了使这些额外的粗的 positive grids 影响较小,作者在解码器中加入了限制,使额外的粗的 positive grids 不能完美地产生软标签。上述机制允许细标签和粗标签的重要性在学习的过程中动态调整,使细标签的可优化上限始终高于粗标签。

4.3 Other trainable bag-of-freebies

在本节中,作者列出一些 trainable bag-of-freebies,这些 freebies 是在训练中使用的一些技巧,这个概念并不是在论文中最先提出的。这些 freebies 包括:

  • conv-bn-activation 拓扑中的批归一化:将批归一化直接连接到卷积层。这样做的目的是在推理阶段将批归一化的均值和方差整合到卷积层的偏置和权重中;
  • YOLOR 中的 implicit knowledge 结合卷积特征映射的加法和乘法方式:在推理阶段,通过预计算可以将 YOLOR 中的 implicit knowledge 简化为向量,该向量可以和前一层或后一层的偏置和权重相结合;
  • EMA 模型:EMA 是 mean teacher 中使用的一种技术,在本文提出的模型中,只使用 EMA 模型作为最终的推理模型。

5. 实验

5.1 实验设置

  • 数据集:Microsoft COCO;训练集:train 2017;验证集:val 2017;测试集;test 2017
  • 我们所有的实验都没有使用预先训练的模型。也就是说,所有的模型都是从零开始训练的
  • 设计了三种不同的基本模型;边缘GPU、普通GPU和云GPU的基本模型,分别叫做YOLOv7tiny、YOLOv7和YOLOv7- w6。同时,我们还利用基本模型对不同的业务需求进行模型伸缩,得到不同类型的模型。
  • 对于YOLOv7,我们在颈部进行堆栈缩放,并使用提出的复合缩放方法对整个模型的深度和宽度进行缩放,从而得到YOLOv7- x。对于YOLOv7-W6,我们使用新提出的复合标度法得到YOLOv7-E6和YOLOv7-D6。
  • 此外,我们将提出的EELAN用于YOLOv7-E6,从而完成YOLOv7E6E。由于YOLOv7-tiny是面向边缘gpu的架构,所以它将使用Leaky ReLU作为激活函数。对于其他模型,我们使用SiLU作为激活函数。并附录中详细描述每个模型的比例因子。

5.2 基线


​ 我们选择以前版本的YOLO[3,79]和最先进的对象检测器YOLOR[81]作为基线。表1显示了我们提出的YOLOv7模型与使用相同设置训练的基线之间的比较。

​ 从结果中我们可以看到,与YOLOv4相比,YOLOv7的参数减少75%,计算量减少36%,AP提高1.5%。与最新的YOLOR-CSP相比,YOLOv7的参数减少43%,计算量减少15%,AP提高0.4%。在tiny模型的性能上,与YOLOv4-tiny-31相比,YOLOv7tiny的参数数量减少了39%,计算量减少了49%,但AP保持不变。在云GPU模型上,我们的模型仍然可以有更高的AP,同时减少19%的参数数量和33%的计算量

5.3. 与先进的水平进行对比


​ 我们将所提出的方法与用于通用gpu和移动gpu的最先进的对象检测器进行比较,结果如表2所示。由表2的结果可知,所提方法综合而言具有最佳的速度-精度权衡。如果我们比较YOLOv7-tiny-SiLU和YOLOv5-N (r6.1),我们的方法在AP上的速度快127 fps,准确率高10.7%。此外,YOLOv7具有51.4%的AP,帧率为161帧/秒,而具有相同AP的PPYOLOE-L只有78帧/秒。在参数使用方面,YOLOv7比PPYOLOE-L少41%。如果我们将YOLOv7-X的114 fps推理速度与YOLOv5-L (r6.1)的99 fps推理速度进行比较,YOLOv7-X可以提高3.9%的AP。将YOLOv7X与相似尺度的YOLOv5-X (r6.1)进行比较,YOLOv7-X的推理速度快31 fps。此外,在参数量和计算量方面,YOLOv7-X比YOLOv5-X (r6.1)减少了22%的参数量和8%的计算量,但AP提高了2.2%。

​ 在输入分辨率为1280的情况下,YOLOv7- w6的推理速度比YOLOR- p6快8 fps,检出率也提高了1% AP。YOLOv7-E6与YOLOv5-X6 (r6.1)比较,前者AP增益较后者提高0.9%,参数减少45%,计算量减少63%,推理速度提高47%。YOLOv7-D6推理速度接近YOLOR-E6,但AP提高0.8%。YOLOv7-E6E的推理速度接近于YOLOR-D6,但AP提高了0.3%。

5.4 消融实验

5.4.1 提出的复合缩放方法

在这里插入图片描述

​ 表3显示了使用不同模型缩放策略进行缩放时得到的结果。其中,我们提出的复合缩放方法是将计算块深度放大1.5倍,将过渡块宽度放大1.25倍。如果将该方法与仅放大宽度的方法进行比较,我们的方法可以用更少的参数和计算量提高0.5%的AP。如果将我们的方法与只放大深度的方法进行比较,我们的方法只需要增加2.9%的参数数量和1.2%的计算量,就可以提高0.2%的AP。

​ 从表3的结果可以看出,我们提出的复合缩放策略可以更有效地利用参数和计算。

5.4.2 提出规划的重参数化模型

在这里插入图片描述

在这里插入图片描述

​ 为了验证所提出的平面再参数化模型的通用性,我们将其分别用于基于级联的模型和基于残差的模型进行验证。我们选择的基于级联的模型和基于残差的模型分别是3-stacked ELAN和CSPDarknet。

​ 在基于级联模型的实验中,我们用RepConv替换了3- stacking ELAN中不同位置的3 × 3卷积层,具体配置如图6所示。从表4所示的结果中,我们看到所有较高的AP值都出现在我们提出的计划重新参数化模型中。

在这里插入图片描述

在这里插入图片描述

​ 在处理基于残差的模型的实验中,由于原始dark block没有符合我们设计策略的3×3卷积块,我们为实验额外设计了一个反向dark block,其架构如图7所示。由于具有dark block和反向dark block的CSP Darknet具有相同数量的参数和操作,进行比较是公平的。表5中所示的实验结果充分证实了所提出的计划重新参数化模型对基于残差的模型同样有效。我们发现RepCSPResNet[85]的设计也符合我们的设计模式。

5.4.3 提出的辅助头的辅助损失


在这里插入图片描述

​ 在辅助头部的辅助损耗实验中,我们比较了一般的独立标签分配方法和辅助头部的标签分配方法,也比较了两种提出的引线引导标签分配方法。我们将所有的比较结果显示在表6中。从表6中列出的结果可以清楚地看出,任何增加助手损耗的模型都可以显著提高整体性能。此外,我们提出的引线引导标签分配策略在AP、AP50和AP75中获得了比一般独立标签分配策略更好的性能。对于我们提出的辅助标签粗、主导标签细的分配策略,在所有情况下都得到了最好的结果。图8给出了辅助头部和引线头部不同方法预测的目标度图。从图8中我们发现,如果辅助头学习导联软标签,它确实有助于导联头从一致目标中提取残差信息。

​ 在表7中,我们进一步分析了所提出的由粗到细导联标签分配方法对辅助头译码器的影响。即我们比较了引入上界约束和不引入上界约束的结果。从表中的数字来看,用距离物体中心的距离来约束物体的上限值的方法可以获得更好的性能。

​ 由于所提出的YOLOv7使用多个金字塔来联合预测目标检测结果,我们可以直接将辅助头部连接到中间层的金字塔进行训练。这种类型的训练可以弥补下一级金字塔预测中可能丢失的信息。基于以上原因,我们在提出的E-ELAN架构中设计了部分辅助头。我们的方法是在合并基数之前,在一组特征映射集之后连接辅助头,这种连接可以使新生成的特征映射集的权值不通过辅助丢失直接更新。我们的设计允许每个金字塔铅头仍然从不同大小的物体获取信息。表8给出了粗至细导联法和部分粗至细导联法两种不同方法得到的结果。显然,局部粗转细导导法具有较好的辅助效果。

5.5 其它对比图

​ 在COCO数据集和批处理为32的V100 GPU上,我们的YOLOv7-tiny (35.2% AP, 0.4 ms)模型比美团/YOLOv6-n (35.0% AP, 0.5 ms)快25%,高0.2% AP。

6. 论文总结

本文提出了一种新的实时目标检测器体系结构和相应的模型缩放方法。此外,我们发现目标检测方法的发展过程产生了新的研究课题。在研究过程中,我们发现了重参数化模块的替换问题和动态标签分配问题。为了解决这一问题,我们提出了可训练的免费赠品袋方法来提高目标检测的准确性。在此基础上,我们开发了YOLOv7系列目标检测系统,获得了最先进的结果。

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
25天前
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
100 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
1月前
|
机器学习/深度学习 数据可视化 计算机视觉
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
这篇文章详细介绍了如何通过可视化深度学习中每层特征层来理解网络的内部运作,并使用ResNet系列网络作为例子,展示了如何在训练过程中加入代码来绘制和保存特征图。
56 1
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
|
23天前
|
机器学习/深度学习 人工智能
类人神经网络再进一步!DeepMind最新50页论文提出AligNet框架:用层次化视觉概念对齐人类
【10月更文挑战第18天】这篇论文提出了一种名为AligNet的框架,旨在通过将人类知识注入神经网络来解决其与人类认知的不匹配问题。AligNet通过训练教师模型模仿人类判断,并将人类化的结构和知识转移至预训练的视觉模型中,从而提高模型在多种任务上的泛化能力和稳健性。实验结果表明,人类对齐的模型在相似性任务和出分布情况下表现更佳。
53 3
|
1月前
|
机器学习/深度学习 编解码 算法
轻量级网络论文精度笔记(三):《Searching for MobileNetV3》
MobileNetV3是谷歌为移动设备优化的神经网络模型,通过神经架构搜索和新设计计算块提升效率和精度。它引入了h-swish激活函数和高效的分割解码器LR-ASPP,实现了移动端分类、检测和分割的最新SOTA成果。大模型在ImageNet分类上比MobileNetV2更准确,延迟降低20%;小模型准确度提升,延迟相当。
56 1
轻量级网络论文精度笔记(三):《Searching for MobileNetV3》
|
1月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
46 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
10天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
49 4
|
1月前
|
Java
Java Object 类详解
在 Java 中,`Object` 类是所有类的根类,每个 Java 类都直接或间接继承自 `Object`。作为所有类的超类,`Object` 定义了若干基本方法,如 `equals`、`hashCode`、`toString` 等,这些方法在所有对象中均可使用。通过重写这些方法,可以实现基于内容的比较、生成有意义的字符串表示以及确保哈希码的一致性。此外,`Object` 还提供了 `clone`、`getClass`、`notify`、`notifyAll` 和 `wait` 等方法,支持对象克隆、反射机制及线程同步。理解和重写这些方法有助于提升 Java 代码的可读性和可维护性。
|
3月前
|
Java
【Java基础面试二十】、介绍一下Object类中的方法
这篇文章介绍了Java中Object类的常用方法,包括`getClass()`、`equals()`、`hashCode()`、`toString()`、`wait()`、`notify()`、`notifyAll()`和`clone()`,并提到了不推荐使用的`finalize()`方法。
【Java基础面试二十】、介绍一下Object类中的方法
|
2月前
|
Python
类与面向对象编程(Object-Oriented Programming, OOP)
类与面向对象编程(Object-Oriented Programming, OOP)
|
3月前
|
前端开发 Java 编译器
【前端学java】java中的Object类和前端中的Object有什么区别(9)
【8月更文挑战第10天】java中的Object类和前端中的Object有什么区别
43 0
【前端学java】java中的Object类和前端中的Object有什么区别(9)