Shuffle Net系列详解 (1) Shuffle Net论 V1论文理论部分详解

请添加图片描述

Shuffle Net 系列

  • 论文精讲部分
    • 0.摘要
    • 1. 引文
    • 2. 相关工作
    • 3. Approach方法
      • 3.1 Channel Shuffle for Group Convolutions 通道重排针对分组卷积
      • 3.2 模型块Block
        • a Block
        • b Block
        • c Block
      • 3.3 模型整体架构
    • 4 实验
    • 5 总结

论文精讲部分

本专栏致力于深度剖析轻量级模型相关的学术论文,并通过具体的代码实验来增强理解。读者可根据个人需求,参照本专栏的内容。文中的解读部分,会通过引用的方式进行标注,旨在展现对每篇论文内容的理解和解释。考虑到不同的阅读视角可能引发理解上的偏差,欢迎并鼓励读者通过评论或私信的形式,分享自己的见解或提出疑问。在本章节中,继续讨论前文提及的 MobileNet 同时期的超级轻量化 ShuffleNet 模型,深挖这些轻量化模型的精髓。本节着重于对论文的核心内容进行解析,下一节将详细探讨 ShuffleNet 的实现代码。在之后的章节中,会持续对轻量级模型的进化进行论述,采用案例分析的方式,帮助读者对学术论文有更深入的理解。对于感兴趣的内容,读者可以自主选择阅读顺序。如果您有任何问题或想法,欢迎随时评论区私信进行交流和讨论。

0.摘要

我们介绍了一种极其效率高的CNN架构,命名为ShuffleNet,该架构专门为计算能力非常有限的移动设备设计(例如,10-150 MFLOPs)。这种新架构利用两种新的操作,即逐点群卷积通道混洗,大大降低了计算成本,同时保持了准确性。在ImageNet分类和MS COCO目标检测的实验中,ShuffleNet相比其他结构展现出了优越的性能,例如在40 MFLOPs的计算预算下(在计算资源有限的情况下),其在ImageNet分类任务上的top-1错误率(绝对值7.8%)低于最近的MobileNet[12]。在基于ARM的移动设备上,ShuffleNet在保持与AlexNet相当的准确率的同时,实现了约13倍的实际加速。

摘要简述,其模型主要是为了针对边缘设备开发的,就是说白了模型参数少不依赖于计算机的性能。提出了一种减少参数同时不减少性能的策略:由于翻译的问题逐点群卷积和通道混洗。文中还再次强调了这样的一个参数==在40 MFLOPs的计算预算下(在计算资源有限的情况下)==主要是为了衡量模型的复杂度。即在有限的复杂度情况下控制模型的性能。就是杀猪不能用牛刀啊。其也袒露出实验的公平特性。

  • pointwise group convolution 逐点分组卷积,直译看起来很奇怪
  • channel shuffle 通道重排,这个shuffle打乱这个单词看起来好像是无序的纯随机实际上人家这个是按照特定规则进行重新排列所以是通道重排。就是python中的reshape()

顺便还说了一嘴,咱这个模型比ImageNet分类任务上的top-1错误率(绝对值7.8%)低于最近的MobileNet[12]。怎么说呢,很不错。有这个模型给咱们这穷哥们学习。再次感谢,张翔宇大佬🧍‍♂️

1. 引文

引文传统艺能,阐述背景和关注的问题,现阶段解决方式存在的缺陷。本文提出的解决方法。以及如何验证的自身的模型的优越性。

阐述背景和关注的问题。这段:

构建更深更大的卷积神经网络(CNNs)是解决主要视觉识别任务的主要趋势。最精确的CNNs通常拥有数百层和数千个通道,因此需要在数十亿FLOPs的计算量。本报告考察了相反的极端:在极为有限的计算预算内(数十或数百MFLOPs)追求最佳精度,重点关注如无人机、机器人和智能手机等常见移动平台。值得注意的是,许多现有工作集中于对“基础”网络架构进行剪枝、压缩或低比特表示。而我们的目标是探索一种高效的基础架构,专门为我们所需的计算范围设计。

大佬指出我们这个网络和现阶段的主流加参数追求性能的趋势相反,主要是针对终端设备考量实际应用,因此其轻量化模型设计,在其有限的计算能力下追求更好的性能,并非传统的剪枝技术。追求的是天然就是小模型,其卷积核啥的都是围绕这一模型单独设计的,并不是某种训练好的模型参数降低的丐版。另一方面神经网络参数存在着一定量的边际效应所以,性能和参数的平衡这一课题确实值得被研究。

现阶段解决方式存在的缺陷。本文提出的解决方法。这段:

我们注意到,如Xception和ResNeXt等最先进的基础架构在极小的网络中效率较低,因为密集的1×1卷积代价高昂。我们提议使用逐点群卷积来降低1×1卷积的计算复杂度。为了克服群卷积带来的副作用,我们提出了一种新颖的通道混洗操作,以帮助信息在特征通道间流动。基于这两项技术,我们构建了一个高效的架构,称为ShuffleNet。与如[30, 9, 40]等流行结构相比,对于给定的计算复杂度预算,我们的ShuffleNet允许更多的特征图通道,这有助于编码更多信息,特别是对于非常小的网络性能至关重要。

说明现阶段还存在的问题,提出自己的解决方式。两种策略逐点分组卷积和通道重排。

怎么验证的你的模型就是好。这段:

我们在挑战性的ImageNet分类和MS COCO对象检测任务上评估了我们的模型。一系列受控实验表明了我们设计原则的有效性以及与其他结构相比的更好性能。与最先进的架构MobileNet相比,ShuffleNet以显著优势实现了更优越的性能,例如,在40 MFLOPs级别上,ImageNet top-1错误率低绝对值7.8%。

我们还检验了在实际硬件上的加速,即一款现成的基于ARM的计算核心。ShuffleNet模型在保持相当精度的同时,实现了约13倍的实际加速(理论加速是18倍)超过AlexNet。

2. 相关工作

近几年来,深度神经网络在计算机视觉任务上取得了成功,其中模型设计起到了至关重要的作用。面对在嵌入式设备上运行高品质深度神经网络的日益增长的需求,高效模型设计的研究受到了鼓励。例如,GoogLeNet通过增加网络深度同时大幅降低复杂度,相比简单堆叠卷积层。SqueezeNet在保持精度的同时显著减小了参数量和计算量。ResNet运用高效的瓶颈结构达成了令人印象深刻的性能。SENet引入了一种架构单元,在稍微增加计算成本的同时提升了性能。与我们同时期的,一项最新的工作运用强化学习和模型搜索探索高效模型设计。所提出的移动NASNet模型在性能上与我们的ShuffleNet模型相当

其实透过这段可以看到主要讨论,传统的模型可以普遍认为是基于大量参数实现的性能提升。而这个NASNet这是通过强化学习探索出的其性能也是小模型和本文提出的模型性能相当。但是其做的实验证明较少。本文提出其问题主要是在其并未真实的去评估整体的性能,这也是本文讨论的核心。

(ImageNet分类错误率26.0% @ 564 MFLOPs 对比 26.3% @ 524 MFLOPs)。但这项工作并未报告在极小模型上的结果(例如,复杂度低于150MFLOPs),也未评估在移动设备上的实际推理时间。

分组卷积Group Convolution 的概念最初在AlexNet中被引入,用于在两个GPU上分布模型,它的有效性在ResNeXt中得到了很好的展示。

在AlexNet时代,分组卷积(GroupConvolution)的确是当时的计算能力受限而被提出和应用的。AlexNet设计中使用了两个并行的GPU来处理数据,这种设计旨在通过分拆模型到两个GPU上,实现更快的计算速度和构建更大的网络模型。这样,每个GPU处理网络的一部分,从而实现了计算能力的"延伸"。这种分组卷积在当时是为了适应硬件限制的一种创新手段。

然而,现代的应用场景中,分组卷积的理念已经转变。现阶段,分组卷积更多被应用于减少网络参数的数量、降低计算复杂度,同时仍尽可能保持网络性能的策略中。这种方法通过将卷积层分成多个组,每组独立计算,再将结果合并,能有效地减少模型大小和计算需求,从而在不牺牲太多性能的前提下,适应那些计算资源有限的平台。

因此,从AlexNet的时代到现在,分组卷积的主要应用发生了转变:从一种因应硬件限制而设计的模型架构,到一种旨在优化模型性能和计算资源利用的策略。实际上AlexNet中使用分组卷积的目的并非为了"增加参数",而是由于那个时期硬件的限制,使得作者不得不采取这样的设计以拟合当时的硬件环境。

总而言之,分组卷积从AlexNet时代的应用到现在,其目的和作用上都有所转变,更多地被用于减少模型的参数量和计算需求,同时尽量保持模型的性能。

即使同样的策略在不同GPU中所表现的性能是不同的,而分组卷积就像是一个GPU中CNN进行分组,这就是稀疏1*1的网络连接。但是在两个GPU中则是针对硬件限制的一种妥协。

挖个坑后面会对传统的卷积神经网络模型论文来个专区进行讲解

Xception提出的深度可分离卷积推广了Inception系列中的可分离卷积思想(goolenet论文所阐述的思想)。最近,MobileNet利用深度可分离卷积,在轻量级模型中取得了最先进的结果。我们的工作以一种新形式概括了分组卷积和深度可分离卷积。

有点相同问题的不同解决方式

通道重排Channel Shuffle Operation,就我们所知,通道混洗操作在之前的高效模型设计工作中很少被提及,尽管CNN库cuda-convnet支持“随机稀疏卷积”层,相当于随机通道混洗后跟一个分组卷积层。这种“随机混洗”操作有着不同的目的,后来很少被利用。最近,另一个并行的工作也采纳了这一思想进行两阶段卷积。然而,该工作并未特别研究通道混洗本身的有效性及其在小型模型设计中的使用。

本身存在这样的工具但是被采用的具体方式不一样,比如你用砖头打人你觉得效果还赶不上铁锹,我拿砖头盖房子效果很好一样的比喻。其实他这个分组卷积也是和这个方式一样的,相同的工具不同用法

模型加速的目标是在保持预训练模型精度的同时加速推理。剪枝网络连接或通道在保持性能的同时减少了预训练模型中的冗余连接。文献中提出量化和因式分解减少计算中的冗余以加速推理。不修改参数的情况下,通过FFT和其他方法实现的优化卷积算法在实践中减少了时间消耗。蒸馏从大模型到小模型的知识转移,使得训练小模型变得更容易。

3. Approach方法

3.1 Channel Shuffle for Group Convolutions 通道重排针对分组卷积

现代卷积神经网络通常由具有相同结构的重复构建块组成。在这些网络中,像Xception和ResNeXt这样的最先进网络将高效的深度可分离卷积或分组卷积引入构建块中,以在表示能力和计算成本之间取得优良的平衡。然而,我们注意到这两种设计都没有充分考虑1×1卷积(在相关文献中也称为逐点卷积),这需要相当的复杂度。例如,在ResNeXt中,只有3×3层配备了分组卷积。因此,对于ResNeXt中的每个残差单元,逐点卷积占据了93.4%的乘加操作(按建议的基数=32计算)。在小型网络中,昂贵的逐点卷积导致为满足复杂度限制而通道数有限,这可能会显著损害准确性。

像Xception和ResNeXt这样的都没有充分考虑1×1卷积昂贵的逐点卷积,虽然满足复杂度的限制对模型有效,但是其仍然是做乘法运算消耗计算资源,导致增加1×1卷积的同时计算资源被消耗,而有限的计算资源下1×1卷积的个数就是会被限制住设置不了太多,因此通道数有限,这可能会显著损害准确性。但是同时值得注意的是人家引入的深度可分离卷积或分组卷积确实很有效。
说人话就是你虽然参数量下来了,但是1×1卷积用的太多了,由于你发现1×1卷积较多还会增加复杂度,所以你有偏向的减少1×1卷积的数量,但是这可能就会导致特征图的通道数降低,其模型性能还是受限,显然有提升空间。有问题,要改。
主要还是在做乘法。消耗资源,因此尽量减少1×1卷积。如何减少呢??
其实在进行深度可分离卷积的时候就讨论过,单纯的减少数量绝对不是明智之举,还是要改实现方式。那么就使用分组卷积去改进1×1卷积。这创新点不就来了吗。
就是由于使用逐点卷积(即 1×1 卷积)计算量虽然减少了,但是本身还是有很大消耗的由于设备能力问题。逐点卷积却还不能多用,这就损失了使用逐点卷积的初衷去,在上文中讨论过使用逐点卷积就是目的拟合出一种可以创造多个高维度卷积核的能力。
尽管逐点卷积相比于其他类型的卷积(如 3×3 卷积)在计算上较为轻量,但在计算资源极其有限的环境下(例如手机或嵌入式设备),即使是逐点卷积也可能成为计算负担。少用逐点卷积有两种少的方法。

  • 单纯的减少卷积核。
  • 逐点分组卷积。

思考一下多组逐点卷积像不像一个全连接,让这个连接稀疏点不就好了嘛。这不就是分组卷积的思想嘛。而且稀疏还会增加网络的健壮性。这样的思想就可以套用下。但是值得注意的是,dropout是随机稀疏。这个并不符合网络的构建堆叠。让这个稀疏的网络可复现才是我们的面对。可以看到这里的思想又和上面的相同的工具在不同了领域的应用不谋而合,旷世工作可能就是基于此。有效的稀疏可复现就是分组卷积嘛,整体都是可控的。故此论文下面接着说:

为解决这个问题,一个直接的解决方案是在1×1层上也应用通道稀疏连接,例如分组卷积。通过确保每个卷积仅在相应的输入通道组上操作,分组卷积显著降低了计算成本。

1×1层最初设计的目的就是为利用卷积核实现通道信息聚合,你将他稀疏化了,那还在全通道聚合,仅仅是特定通道信息聚合了,因此虽然分组卷积降低卷积核个数,可以降低计算成本,但是采用分组卷积就是像深层卷积一样不同组的通道间通信就成了问题,下一层再次按照之前的分组卷积就像是近亲繁殖这出不来啥好人。表达能力有限啊。直接的想法就是在下一层换一些通道进行分组卷积呗。简单点的方法就是你用一个1×1的不分组卷积。但是这个又和之前的说法有点打架的意思。其实这样先分组再不分组也能有效的减少参数了。但是能再减少点更好了。因此无非就是把通道的顺序掺和掺和。再次使用不就行了吗。
还要保证分组卷积的实现,还要保证通道特征要掺和掺和。那就把特征打乱呗,有点像做汉堡,先给肉切片然后一片面包一篇肉一片菜。这样每个人都能处理一个汉堡这样的数据。而不是一个人只能吃肉一个人吃菜一个人吃面包。咱们的下一个创新点这不就来了吗。

请添加图片描述

然而,如果多个分组卷积叠加在一起,就会产生一个副作用:特定通道的输出仅来自于少量的输入通道。如图1(a)所示,展示了两个叠加的分组卷积层的情形。可以清楚看到,某个组的输出仅与该组内的输入相关。这一属性阻碍了通道组间的信息流动,削弱了表示能力。

如果我们允许分组卷积从不同的组获得输入数据(如图1(b)所示),则输入和输出通道将完全相关。具体来说,对于从前一层组生成的特征图,我们可以首先将每个组内的通道分成几个子组,然后用下一层中的不同子组喂入每个组。这可以通过通道混洗操作(图1(c))有效且优雅地实现:假设一个具有g组的卷积层,其输出有g×n个通道;我们首先将输出通道维度重塑为(g,n),进行转置,然后再平铺回作为下一层的输入。需要注意的是,即使两个卷积具有不同数量。

请添加图片描述

本质就是将之前分组的卷积核每组分成一样的份数,从每组中抽出来一个组成一个新的组。这不就可以了嘛。人家定义的名字叫通道打乱,个人感觉就是重新排列而已,严格遵照规律设定。当然发论文吗高端一点比价好。好用就可以

具体的他是如何定义这个过程的呢?

为了便于下图解释一下:
在这里插入图片描述

g组的卷积层。就是分了几组。上图颜色一致的特征图被分为一组,每组采用三个1*1的卷积核进行聚合,正常情况聚合完后会是上图输入特征的情况,但是显然只能在规定的通道内进行信息的聚合,如何实现通道重排打破这一问题限制,将这些组按的全部通道按组别顺序排列组成一个向量。本身如果按照序列排列的话,全部通道的序列数值可以使用一个向量表示,然后通过分组分成多组向量,将向量按顺序构成矩阵,最后转置矩阵。将通道序列矩阵拉伸成一维向量,将特征图的通道顺序按照新生成的向量进行排列,作为下一阶段卷积聚合的特征图,自然而言就能实现均匀的分割。下一阶段再次使用同样的逐点聚合和通道重排,就可以解决层卷积的通道聚合问题。而且全部操作可以通过torch或者np中的函数完成不增加任何计算难度。妙不可言。

上述内容是其对卷积的创新,其实质模型采用的模块并未采用和Mobilenet 中反复的重叠,其采用了上述改进卷积思想构建了多种卷积组合模块。如下3.2中进行讲解

3.2 模型块Block

a Block

前文中主要讨论了对现存技术问题的改进,即传统11卷积浪费运算资源,通过11分组卷积实现参数量的减少。并且利用通道重排操作实现对1*1分组卷积出现的问题。因此利用上述技术对卷积中的不同块进行修改,以此组成这个新颖的创造性模型。

利用通道重排操作,我们为小型网络特别设计了一种新颖的 ShuffleNet 单元。

请添加图片描述
我们从瓶颈单元的设计原则出发,如图 2 (a) 所示。它是一个残差块。在它的残差分支中,对于 3×3 层,我们在瓶颈特征图上应用了一种计算经济的 3×3 深度卷积。

上述部分仅仅是对传统的resnet模块中的卷积层使用深度卷积进行替换,即将传统的卷积核换成了3×3
深度卷积。其他位置一样,但是这么做最大的好处就是参数量骤减。Add将输入特征和卷积后结果进行加和。个人感觉比较像mobilenetV2的结构但是其改进使用的1×1卷积其主要目的是为降低维度和resnet的初衷是一致的,所以还是和V2中的反转残差结构区分一下。

b Block

请添加图片描述

后续人家又设计了一个卷积模块,b图的卷积模块采用的则是GConv在本文中指代分组卷积,即对输入使用1×1 分组卷积操作,后面为了解决1×1分组卷积的问题使用了通道重排。然后再次使用了3×3 的深度卷积最后使用1×1 分组卷积和产生输入结果和模块输入进行残差连接。属于其模型全部创新集大成之所在,其大量的特征提取工作都在这完成,这里才是模型计算能力的全部

然后,我们用点对点分组卷积代替了第一个 1×1 层,并跟随一个通道混洗操作,形成了一个 ShuffleNet 单元,如图 2 (b) 所示。第二个点对点分组卷积的目的是恢复通道维度,以匹配快捷路径。

第二次的1×1 分组卷积不使用通道重排操作这么做的目的是没差别,其主要是通道间的通信壁垒已经被打通了,所以没啥实际效果了。

为了简化,我们在第二个点对点层之后不再应用额外的通道重排操作,因为这样做会得到相似的分数。批量归一化(BN)和非线性的使用类似于 [9, 40],除了我们不在深度卷积之后使用 ReLU,如 [3] 所建议的。

c Block

其实这个block就是在不断的特征提取过程中减少特征图大小,增加通道数的维度,这么做的目的就是让三维图,压缩长高的维度增加厚度。最终向向量靠拢更加顺利的接上全连接网络进行分类。

请添加图片描述

其实这部分可以看出来模型在降低特征图的时候特征图变小了,但是通道变多了即变得小厚了。这部分很符合卷积的直觉,本身这个stride步长为2的卷积就是下采样,为了实现残差连接也要对输入进行池化达到一样的尺寸,最终在通道维度上的拼接向下传递。

在应用步幅的 ShuffleNet 情况下,我们只需做两处修改(见图 2 ©):(i) 在快捷路径上增加一个 3×3 的平均池化;(ii) 用通道连接替换逐元素加法,这使得以极小的额外计算成本扩大通道维度变得简单。
多亏了带通道混洗的点对点分组卷积,ShuffleNet 单元中的所有组件都能高效计算。与 ResNet(瓶颈设计)和 ResNeXt 比较,在相同设置下,我们的结构具有更低的复杂度。例如,给定输入尺寸 c×h×w 和瓶颈通道 m,ResNet 单元需要 hw (2cm + 9m²) 的 FLOPs,而 ResNeXt 需要 hw (2cm + 9m²/g) 的 FLOPs,我们的 ShuffleNet 单元只需要 hw (2cm/g + 9m) 的 FLOPs,其中 g 表示卷积的组数。换句话说,在给定的计算预算下,ShuffleNet 可以使用更宽的特征图。我们发现这对于小型网络至关重要,因为微型网络通常有不足的通道数来处理信息。

上述说的‘微型网络通常有不足的通道数来处理信息。’由于其计算性能限制卷积核不能设计太多,而通道数量又由传统卷积核个数控制,所以通常通道数量不足会导致模型性能不行。实际是卷积核个数在控制模型性能,参数减少导致性能不足。而现阶段采用了两种策略在减少参数的同时使得卷积核个数可控,进而实现了特征图通道的增加。使得模型性能变好

另外,在 ShuffleNet 中,深度卷积仅在瓶颈特征图上执行。尽管深度卷积通常具有非常低的理论复杂度,我们发现在低功耗移动设备上高效实现它很困难,这可能是因为与其他密集操作相比,它有更差的计算 / 内存访问比例。这种缺点也在 [3] 中提到,它基于 TensorFlow 的运行时库。在 ShuffleNet 单元中,我们有意只在瓶颈处使用深度卷积,以尽可能防止开销。

说了一下子深度卷积的问题。这个仁者见仁智者见智吧,mobilenet已经离开了座位。

3.3 模型整体架构

在ShuffleNet单元的基础上,我们在表1中展示了整体ShuffleNet架构。

可以看下模型的主体框架,如下表所示可以到k为卷积核大小,而g则用来表示分组的个数。首先其输入的就是一个3通道224*224.然后使用常规卷积进行下采样并且生成了24个特征图。简而言之使用了24个下采样卷积核。继续使用最大池化层实现下采样减少运算量。池化操作不改变通道个数因此不标明通道个数。后续则是采用的stage初识都是采用上述block c进行下采样操作,后面接的都是block b进行卷积操作。每次完成一个stage其特征图减小通道数加倍。最终变成了类传统神经网络的尺寸,进行分类。

下图细节值得注意的是stage1中由于其通道数量过小,没用分组卷积,后续采用的。一般采用3作为baseline。

请添加图片描述
所提出的网络主要由一系列ShuffleNet单元上图的abc-block组成,这些单元分为三个阶段堆叠而成。每个阶段的第一个构建块应用步幅=2。在一个阶段内其他超参数保持不变,并且对于下一个阶段,输出通道数量加倍。与[9]类似,我们将每个ShuffleNet单元的瓶颈通道数设置为输出通道数的1/4。我们的目的是提供一个尽可能简单的参考设计,尽管我们发现进一步的超参数调整可能会产生更好的结果。

在ShuffleNet单元中,分组数字g控制了逐点卷积的连接稀疏度。表1探索了不同的分组数量,并且我们调整输出通道数以确保整体计算成本大致不变(约140MFLOPs)。显而易见,较大的分组数量在给定的复杂性约束下会导致更多的输出通道数(即更多的卷积滤波器),这有助于编码更多信息,尽管这可能也会由于相应输入通道有限而导致单个卷积滤波器的性能下降。在4.1.1节中,我们将研究这一数字在不同计算约束下的影响。

为了将网络定制到期望的复杂度,我们可以简单地对通道数应用一个缩放因子s。例如,我们将表1中的网络称为“ShuffleNet 1×”,那么“ShuffleNet s×”意味着将ShuffleNet 1×中的滤波器数量乘以s倍,因此整体复杂度将大致是ShuffleNet 1×的s^2倍。有点像mobilenetV1中给定的超参数控制规模

4 实验

我们主要在ImageNet 2012分类数据集上评估我们的模型。我们遵循了[40]中使用的大多数训练设置和超参数,但有两个例外:(i) 我们将权重衰减设置为4e-5而不是1e-4,并使用线性衰减学习率策略(从0.5减少到0);(ii) 我们对数据预处理使用了稍微保守一些的尺度增强。类似的修改也在[12]中提到,因为这样的小型网络通常更容易出现欠拟合而不是过拟合。在4个GPU上训练一个模型3×10^5次迭代大约需要1到2天,批大小设置为1024。为了进行基准测试,我们比较了ImageNet验证集上的单次裁切top-1性能,即从256×输入图像中裁剪224×224的中央视图并评估分类准确率。我们为所有模型使用完全相同的设置以确保公平比较。 实验基础环境,后续的实验部分各位可自行参考原文学习本文不再过多赘述

5 总结

在本章中,深入探讨了轻量级模型中的重要代表 ——ShuffleNet。ShuffleNet 通过创新的设计思路,在保持模型轻量的同时大幅提升了性能,尤其适合在计算资源受限的移动设备上应用。下一阶段将会对第二篇论文和代码部分实战操作解释便于各位的理解和学习。有什么问题欢迎各位评论区私信讨论栓q。

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

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

相关文章

浏览器书签的同步和备份工具Elysian

什么是 Elysian ? Elysian 是一个自托管工具,用于将您经常使用的书签从浏览器的书签工具栏备份到您的家庭实验室。包括服务和浏览器插件两部分。 Elysian 主要专注于将您浏览器的常用书签备份到您家庭实验室中运行的 Elysian 服务器。浏览器插件使用 chr…

利用1688商品数据洞察市场:优化策略,提升业绩

对1688商品通过API接口的数据进行详细分析,可以帮助商家更好地了解商品的市场表现、用户需求及行为,从而优化商品供应和销售策略。以下是对1688商品数据的详细分析,包括需要分析的具体数据、分析过程及结果、以及基于分析结果的建议。 一、需…

【日记】我不想调回去啊啊啊(341 字)

正文 新电脑不知道为什么有时键盘会突然没反应。 今天没有客户,工作上几乎没什么可说的。唯一听到的消息,似乎是我可能不久之后就要被调回去,因为市分行有人要人事调动。 救命啊!我不想回市分行。在下面吃住都比市分行好&#xff…

C语言之扫雷小游戏(完整代码版)

说起扫雷游戏,这应该是很多人童年的回忆吧,中小学电脑课最常玩的必有扫雷游戏,那么大家知道它是如何开发出来的吗,扫雷游戏背后的原理是什么呢?今天就让我们一探究竟! 扫雷游戏介绍 如下图,简…

鸿蒙开发之ArkUI 界面篇 二十四 计数器案例

计数器案例,点击’-‘按钮,数字减少1,点击啊‘’按钮,数字加一 分析:这里需要三个组件,外层容器是Row,从左往右的组件分别是ButtonTextButton,涉及到修改更新界面,变量需…

【PGCCC】在 Postgres 上构建图像搜索引擎

我最近看到的最有趣的电子商务功能之一是能够搜索与我手机上的图片相似的产品。例如,我可以拍一双鞋或其他产品的照片,然后搜索产品目录以查找类似商品。使用这样的功能可以是一个相当简单的项目,只要有合适的工具。如果我们可以将问题定义为…

点评项目-4-隐藏敏感信息、使用 redis 优化登录业务

一、隐藏敏感信息 之前我们对 /user/me 路径,直接返回了登录的所有用户信息,其中的 passward 等敏感信息也会被返回到前端,这是很危险的,故我们需要选择性的返回用户信息,隐藏敏感用户信息 我们可以创建一个 UserDTO…

Linux环境变量及命令行参数

目录 一、环境变量的概念和基本命令 二、环境变量的组织结构及获取环境变量的方式 (1)组织结构 (2)获取环境变量 命令行第三个参数 通过第三方变量environ获取 通过系统调用getenv获取 三、命令行参数 一、环境变量的概念和…

ORM框架简介

什么是ORM? ORM(Object-Relational Mapping,对象关系映射)是一种编程技术,用于在关系数据库和对象程序语言之间转换数据。ORM框架允许开发者以面向对象的方式来操作数据库,而不需要编写复杂的SQL语句。简单…

JS基础总结

JS基础总结 WebAPI获取元素事件事件源的位置操作元素元素节点元素属性BOM对象操作元素综合示例(键盘移动活动表格) 执行上下文和执行栈执行上下文执行上下文的特点执行上下文的生命周期执行栈 作用域var let const的区别作用域链作用域和值类型引用类型的…

Linux源码阅读笔记-USB驱动分析

基础层次详解 通用串行总线(USB)主要用于连接主机和外部设备(协调主机和设备之间的通讯),USB 设备不能主动向主机发送数据。USB 总线采用拓扑(树形),主机侧和设备侧的 USB 控制器&a…

SpringBoot框架在服装生产管理中的创新应用

3 系统分析 3.1 可行性分析 可行性分析是该平台系统进行投入开发的基础第一步,必须对其进行可行性分析才能够降低不必要的需要从而使资源合理利用,更具有性价比和降低成本,同时也是系统平台的成功的未雨绸缪的一步。 3.1.1 技术可行性 技术…

AtCoder Beginner Contest 374 A-E 题解

服了,跟 DP \text{DP} DP 杠上了,C 和 E 都在想 DP \text{DP} DP C 和 D 又交了两发罚时 每题难度: A:11 B:28 C:226 D:694 E:1504 F:2026 G:2608 A. Takahashi san 2 题意 给你一个字符串,判断这个字符串是否以 san 结尾&…

springboot医院预约挂号系统

基于springbootvue实现的医院预约挂号系统 (源码L文ppt)4-085 4.1系统功能模块设计 医院预约挂号系统与数据分析系统在设计与实施时,采取了模块性的设计理念,把相似的系统的功能整合到一个模组中,以增强内部的功能…

服装生产管理:SpringBoot框架的高效实现

3 系统分析 3.1 可行性分析 可行性分析是该平台系统进行投入开发的基础第一步,必须对其进行可行性分析才能够降低不必要的需要从而使资源合理利用,更具有性价比和降低成本,同时也是系统平台的成功的未雨绸缪的一步。 3.1.1 技术可行性 技术…

城市交通场景分割系统源码&数据集分享

城市交通场景分割系统源码&数据集分享 [yolov8-seg-C2f-Faster&yolov8-seg-GhostHGNetV2等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Glob…

LLM RAG面试问题大全!

01 引言 RAG在通用人工智能、数据科学和人工智能的发展领域中起到了变革性的作用。RAG模型让机器能够基于事实产生更准确、连贯和一致的语言,它改变了人类与技术的互动方式。RAG让能够撰写独特内容、引人入胜的产品描述和新闻文章的机器人概念成为现实。尽管RAG的重…

打造梦幻AI开发环境:一步步解锁高效配置的魅力

作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客 目录 前言&#…

2024年双11哪些好物值得买?双十一必入好物清单不容错过!

在双十一这个年度购物盛宴中,万千精品汇聚一堂,优惠力度空前绝后。本文精心挑选了一系列不容错过的好物,旨在为您的购物车增添几分智慧与惊喜。无论是科技潮品、还是生活日用、家居装饰,每一款推荐都承载着对品质生活的追求与热爱…

Unity实现自定义图集(三)

以下内容是根据Unity 2020.1.0f1版本进行编写的   1、实现编辑器模式下进游戏前Pack全部自定义图集 同Unity的图集一样,Unity的编辑器模式会在进游戏前把全部的SpriteAtlas都打一次图集,如图: 我们也实现这样的效果。 首先需要获取全部的图集路径。因为目前使用的是以.…