当前位置: 首页 > article >正文

第三十二篇 MobileNetV3论文翻译:《搜索 MobileNetV3》

文章目录

  • 搜索 MobileNetV3
  • 摘要
  • 一、简介
  • 二、相关工作
  • 三、高效的移动构建模块
  • 四、网络搜索
    • 4.1、用于块搜索的平台感知 NAS
    • 4.2、用于逐层搜索的 NetAdapt
  • 五、网络改进
    • 5.1、重新设计昂贵的图层
    • 5.2、非线性
    • 5.3. 大挤压和激发
    • 5.4. MobileNetV3 定义
  • 六、实验
    • 6.1、 分类
      • 6.1.1 训练设置
      • 6.1.2 测量设置
    • 6.2、结果
      • 6.2.1 消融研究
    • 6.3、检测
    • 6.4、语义分割
  • 七、结论和今后的工作

搜索 MobileNetV3

论文链接:

1905.02244.pdf (arxiv.org)

image-20220203132725759

摘要

我们展示了基于互补搜索技术和新颖架构设计的下一代 MobileNets。 MobileNetV3 通过结合硬件感知网络架构搜索 (NAS) 和 NetAdapt 算法来调整到手机 CPU,然后通过新的架构进步进行改进。本文开始探索自动搜索算法和网络设计如何协同工作,以利用互补方法提高整体技术水平。通过这个过程,我们创建了两个用于发布的新 MobileNet 模型:MobileNetV3-Large 和 MobileNetV3-Small,它们针对高资源和低资源用例。然后将这些模型调整并应用于对象检测和语义分割任务。对于语义分割(或任何密集像素预测)的任务,我们提出了一种新的高效分割解码器 Lite Reduced Atrous Spatial Pyramid Pooling (LR-ASPP)。我们在移动分类、检测和分割方面取得了最新的成果。与 MobileNetV2 相比,MobileNetV3-Large 在 ImageNet 分类上的准确率提高了 3.2%,同时将延迟降低了 20%。与具有相当延迟的 MobileNetV2 模型相比,MobileNetV3-Small 的准确率提高了 6.6%。在 COCO 检测上,MobileNetV3-Large 检测速度快 25% 以上,准确度与 MobileNetV2 大致相同。对于 Cityscapes 分割,MobileNetV3-Large LRASPP 比 MobileNetV2 R-ASPP 快 34%,精度相似。

一、简介

高效的神经网络在移动应用程序中变得无处不在,从而实现全新的设备体验。 它们也是个人隐私的关键推动者,允许用户获得神经网络的好处,而无需将他们的数据发送到服务器进行评估。 神经网络效率的进步不仅通过更高的准确性和更低的延迟改善了用户体验,而且还通过降低功耗来帮助延长电池寿命。

image-20220203175629736

本文描述了我们开发 MobileNetV3 大型和小型模型的方法,以提供下一代高精度、高效的神经网络模型来支持设备上的计算机视觉。 新网络推动了最先进的技术发展,并展示了如何将自动搜索与新颖的架构进步相结合以构建有效的模型。

image-20220203175653192

本文的目标是开发最佳的移动计算机视觉架构,优化移动设备上的准确性延迟权衡。为了实现这一点,我们介绍了(1)互补搜索技术,(2)适用于移动设置的新的高效非线性版本,(3)新的高效网络设计,(4)新的高效分割解码器。我们提供了全面的实验,展示了在各种用例和手机上评估的每种技术的功效和价值。

本文的结构如下。我们首先在第 2 节中讨论相关工作。第 3 节回顾了用于移动模型的有效构建块。第 4 节回顾了架构搜索以及 MnasNet 和 NetAdapt 算法的互补性。第 5 节描述了新的架构设计,提高了通过联合搜索找到的模型的效率。第 6 节介绍了分类、检测和分割的广泛实验,以证明有效性并了解不同元素的贡献。第 7 节包含结论和未来的工作。

二、相关工作

近年来,设计深度神经网络架构以实现准确性和效率之间的最佳权衡一直是一个活跃的研究领域。新颖的手工结构和算法神经架构搜索都在推进这一领域发挥了重要作用。

SqueezeNet[22] 广泛使用 1x1 卷积和挤压和扩展模块,主要专注于减少参数的数量。最近的工作将重点从减少参数转移到减少操作数 (MAdds) 和实际测量的延迟。 MobileNetV1[19] 采用深度可分离卷积来显着提高计算效率。 MobileNetV2[39] 通过引入具有反向残差和线性瓶颈的资源高效块对此进行了扩展。 ShuffleNet[49] 利用组卷积和通道混洗操作来进一步减少 MAdds。 CondenseNet[21] 在训练阶段学习组卷积,以保持层之间有用的密集连接以进行特征重用。 ShiftNet[46] 提出了与逐点卷积交错的移位操作,以取代昂贵的空间卷积。

为了自动化架构设计过程,强化学习 (RL) 首次被引入以搜索具有竞争准确性的高效架构 [53、54、3、27、35]。完全可配置的搜索空间可能会呈指数级增长且难以处理。所以架构搜索的早期工作主要集中在单元级别的结构搜索上,并且在所有层中都重用了同一个单元。最近,[43] 探索了一种块级分层搜索空间,允许在网络的不同分辨率块下使用不同的层结构。为了降低搜索的计算成本,[28,5,45] 中使用了基于梯度优化的可微架构搜索框架。 [48,15,12] 专注于使现有网络适应受限的移动平台,提出了更有效的自动化网络简化算法。

量化 [23, 25, 47, 41, 51, 52, 37] 是通过降低精度算术来提高网络效率的另一项重要补充工作。最后,知识蒸馏 [4, 17] 提供了一种额外的补充方法,可以在大型“教师”网络的指导下生成小型准确的“学生”网络。

三、高效的移动构建模块

移动模型建立在越来越高效的构建块之上。 MobileNetV1 [19] 引入了深度可分离卷积作为传统卷积层的有效替代品。深度可分离卷积通过将空间滤波与特征生成机制分离,有效地分解了传统卷积。深度可分离卷积由两个单独的层定义:用于空间过滤的轻量级深度卷积和用于特征生成的较重的 1x1 点状卷积。

MobileNetV2 [39] 引入了线性瓶颈和倒置残差结构,以便通过利用问题的低秩性质来制作更有效的层结构。这种结构如图 3 所示,由 1x1 扩展卷积和深度卷积和 1x1 投影层定义。当且仅当输入和输出具有相同数量的通道时,它们才通过残差连接进行连接。这种结构在输入和输出处保持紧凑的表示,同时在内部扩展到更高维的特征空间,以增加非线性每通道变换的表现力。

image-20220203175450493

MnasNet [43] 建立在 MobileNetV2 结构的基础上,将基于挤压和激发的轻量级注意力模块引入瓶颈结构。请注意,挤压和激发模块与 [20] 中提出的基于 ResNet 的模块集成在不同的位置。该模块放置在展开中的深度过滤器之后,以便将注意力应用于最大的表示,如图 4 所示。

image-20220203175428373

对于MobileNetV3,我们使用这些层的组合作为构建块,以构建最有效的模型。层也用改进的swish非线性进行升级[36,13,16]。挤压和激励以及swish非线性都使用了sigmoid,这可能会导致计算效率低下,并且难以在定点算法中保持准确性,因此我们将其替换为第5.2节中讨论的sigmoid[2,11]。

四、网络搜索

网络搜索已证明自己是发现和优化网络架构的一个非常强大的工具 [53, 43, 5, 48]。 对于 MobileNetV3,我们使用平台感知 NAS 通过优化每个网络块来搜索全局网络结构。 然后我们使用 NetAdapt 算法在每层搜索过滤器的数量。 这些技术是互补的,可以结合起来有效地为给定的硬件平台找到优化的模型。

4.1、用于块搜索的平台感知 NAS

与 [43] 类似,我们采用平台感知神经架构方法来查找全局网络结构。由于我们使用相同的基于 RNN 的控制器和相同的分解分层搜索空间,我们发现目标延迟约为 80 毫秒的大型移动模型的结果与 [43] 相似。因此,我们只需重用与我们最初的大型移动模型相同的 MnasNet-A1 [43],然后在其上应用 NetAdapt [48] 和其他优化。

但是,我们观察到原始奖励设计并未针对小型移动模型进行优化。具体来说,它使用多目标奖励 A C C ( m ) × [ L A T ( m ) / T A R ] w ACC(m)\times [LAT(m)/TAR]^{w} ACC(m)×[LAT(m)/TAR]w 来近似帕累托最优解,通过平衡每个模型 m 的模型精度 A C C ( m ) ACC(m) ACC(m)和延迟 LAT(m)目标延迟 TAR。我们观察到,对于小型模型,准确性会随着延迟而发生显着变化;因此,我们需要更小的权重因子 w = -0.15(与 [43] 中的原始 w = -0.07 相比)来补偿不同延迟下更大的精度变化。使用这个新的权重因子 w 进行增强,我们从头开始新的架构搜索以找到初始种子模型,然后应用 NetAdapt 和其他优化来获得最终的 MobileNetV3-Small 模型。

4.2、用于逐层搜索的 NetAdapt

我们在架构搜索中采用的第二种技术是 NetAdapt [48]。 这种方法是对平台感知 NAS 的补充:它允许以顺序方式对各个层进行微调,而不是试图推断粗略但全局的架构。 我们参考原始论文的全部细节。 简而言之,该技术如下进行:

  1. 从平台感知 NAS 发现的种子网络架构开始。
  2. 每一步:
    (a) 生成一组新方案。 每个方案都代表了对架构的修改,与上一步相比,该架构至少减少了 δ 延迟。
    (b) 对于每个方案,我们使用上一步中的预训练模型并填充新提议的架构,酌情截断和随机初始化缺失的权重。 为 T 步微调每个方案,以获得对准确度的粗略估计。
    © 根据某些指标选择最佳提案。
  3. 重复上一步,直到达到目标延迟。

在 [48] 中,度量标准是最小化精度变化。 我们修改了这个算法并最小化延迟变化和准确性变化之间的比率。 也就是说,对于在每个 NetAdapt 步骤中生成的所有建议,我们选择一个最大化: Δ A c c ∣ Δ  latency  ∣ \frac{\Delta \mathrm{Acc}}{\mid \Delta \text { latency } \mid} Δ latency ΔAcc Δ  latency  { \Delta \text { latency } } Δ latency 满足 2(a) 中的约束。 直觉是,因为我们的建议是离散的,我们更喜欢最大化权衡曲线斜率的建议。

重复此过程,直到延迟达到其目标,然后我们从头开始重新训练新架构。 我们使用与 [48] 中用于 MobilenetV2 的相同提案生成器。 具体来说,我们允许以下两种类型的提案:

1.减小任意扩展层的尺寸;

  1. 减少共享相同瓶颈大小的所有块中的瓶颈 - 以保持剩余连接

在我们的实验中,我们使用了 T T T = 10000,发现虽然它提高了建议的初始微调的准确性,但它不会改变从头开始训练时的最终准确性。 我们设置 δ = 0.01 ∣ L ∣ \mid L \mid L,其中 L 是种子模型的延迟。

五、网络改进

除了网络搜索,我们还在模型中引入了几个新组件,以进一步改进最终模型。我们在网络的开头和结尾重新设计了计算成本高的层。我们还引入了一种新的非线性,h-swish,它是最近 swish 非线性的修改版本,计算速度更快,量化更友好。

5.1、重新设计昂贵的图层

一旦通过架构搜索找到模型,我们观察到一些最后一层以及一些较早的层比其他层更昂贵。我们建议对架构进行一些修改,以减少这些慢层的延迟,同时保持准确性。这些修改超出了当前搜索空间的范围。

第一个修改修改了网络的最后几层如何交互,以便更有效地生成最终特征。当前基于 MobileNetV2 的倒置瓶颈结构和变体的模型使用 1x1 卷积作为最后一层,以便扩展到更高维的特征空间。该层对于具有丰富的预测特征至关重要。然而,这是以额外的延迟为代价的。

为了减少延迟并保留高维特征,我们将这一层移到最终的平均池化之后。最后一组特征现在以 1x1 空间分辨率而不是 7x7 空间分辨率计算。这种设计选择的结果是特征的计算在计算和延迟方面变得几乎免费。

image-20220203203311882

一旦降低了该特征生成层的成本,就不再需要先前的瓶颈投影层来减少计算量。这一观察使我们能够移除先前瓶颈层中的投影和过滤层,进一步降低计算复杂度。原始和优化的最后阶段可以在图 5 中看到。高效的最后阶段将延迟减少了 7 毫秒,这是运行时间的 11%,并且减少了 3000 万次 MAdd 的操作数量,几乎没有损失准确性。第 6 节包含详细结果。

5.2、非线性

在 [36, 13, 16] 中,引入了一种称为 swish 的非线性,当用作 ReLU 的替代品时,它显着提高了神经网络的准确性。 非线性定义为
swish ⁡ x = x ⋅ σ ( x ) \operatorname{swish} x=x \cdot \sigma(x) swishx=xσ(x)
虽然这种非线性提高了准确性,但它在嵌入式环境中具有非零成本,因为在移动设备上计算 sigmoid 函数的成本要高得多。 我们以两种方式处理这个问题。

  1. 我们用它的分段线性硬模拟替换 sigmoid 函数:  ReLU6  ( x + 3 ) 6 \frac{\text { ReLU6 }(x+3)}{6} 6 ReLU6 (x+3),类似于 [11, 44]。 细微的区别是我们使用 ReLU6 而不是自定义裁剪常量。 同样,swish 的硬版本变成
     h-swish  [ x ] = x ReLU ⁡ 6 ( x + 3 ) 6 \text { h-swish }[x]=x \frac{\operatorname{ReLU} 6(x+3)}{6}  h-swish [x]=x6ReLU6(x+3)

最近在 [2] 中也提出了类似版本的 hard-swish。 sigmoid 和 swish 非线性的软和硬版本的比较如图 6 所示。我们选择常数的动机是简单,并且与原始平滑版本很好匹配。 在我们的实验中,我们发现所有这些功能的硬版本在准确性上没有明显差异,但从部署的角度来看具有多种优势。 首先,ReLU6 的优化实现几乎可以在所有软件和硬件框架上使用。 其次,在量化模式下,它消除了由近似 sigmoid 的不同实现引起的潜在数值精度损失。 最后,在实践中,h-swish 可以实现为分段函数,以减少内存访问次数,从而大幅降低延迟成本。

image-20220203205501175

  1. 随着我们深入网络,应用非线性的成本会降低,因为每次分辨率下降时,每一层的激活内存通常都会减半。 顺便说一句,我们发现大多数好处都是通过仅在更深层使用它们来实现的。 因此,在我们的架构中,我们只在模型的后半部分使用 h-swish。 我们参考表 1 和表 2 了解精确布局。

    image-20220203204317168

即使有这些优化,h-swish 仍然会引入一些延迟成本。 然而,正如我们在第 6 节中所展示的,当使用基于分段函数的优化实现时,对准确性和延迟的净影响是积极的,没有优化和实质性。

5.3. 大挤压和激发

在 [43] 中,squeeze-and-excite 瓶颈的大小是相对于卷积瓶颈的大小。 相反,我们将它们全部替换为固定为扩展层通道数的 1/4。 我们发现这样做可以提高准确性,同时适度增加参数数量,并且没有明显的延迟成本。

5.4. MobileNetV3 定义

MobileNetV3 被定义为两个模型:MobileNetV3-Large 和 MobileNetV3-Small。 这些模型分别针对高资源和低资源用例。 这些模型是通过应用平台感知 NAS 和 NetAdapt 进行网络搜索并结合本节中定义的网络改进来创建的。 有关我们网络的完整规格,请参见表 1 和表 2。

六、实验

我们展示了实验结果来证明新的 MobileNetV3 模型的有效性。 我们报告分类、检测和分割的结果。 我们还报告了各种消融研究,以阐明各种设计决策的影响。

6.1、 分类

正如已经成为标准的那样,我们将 ImageNet[38] 用于我们所有的分类实验,并将准确性与各种资源使用量度进行比较,例如延迟和乘法相加 (MAdds)。

6.1.1 训练设置

我们使用具有 0.9 动量的标准 tensorflow RMSPropOptimizer 在 4x4 TPU Pod [24] 上使用同步训练设置来训练我们的模型。 我们使用 0.1 的初始学习率,批量大小为 4096(每个芯片 128 张图像),每 3 个 epoch 的学习率衰减率为 0.01。 我们使用 0.8 的 dropout,l2 权重衰减 1e-5 以及与 Inception [42] 相同的图像预处理。 最后我们使用衰减为 0.9999 的指数移动平均线。 我们所有的卷积层都使用平均衰减为 0.99 的批量归一化层。

6.1.2 测量设置

为了测量延迟,我们使用标准的 Google Pixel 手机并通过标准的 TFLite Benchmark Tool 运行所有网络。 我们在所有测量中都使用单线程大内核。 我们不报告多核推理时间,因为我们发现这种设置对于移动应用程序不太实用。 我们为 tensorflow lite 贡献了一个原子 h-swish 运算符,现在它在最新版本中是默认的。 我们在图 9 上展示了优化的 h-swish 的影响。

image-20220203205539155

6.2、结果

image-20220203210034869

如图 1 所示,我们的模型优于 MnasNet [43]、ProxylessNas [5] 和 MobileNetV2 [39] 等当前最先进的模型。 我们在表 3 中报告了不同 Pixel 手机上的浮点性能。我们在表 4 中包含了量化结果。

image-20220203210058011

在图 7 中,我们展示了 MobileNetV3 性能权衡作为乘数和分辨率的函数。 请注意,MobileNetV3-Small 的性能如何优于 MobileNetV3-Large,其乘数缩放以匹配近 3% 的性能。 另一方面,分辨率提供了比乘数更好的折衷。 但是,需要注意的是,分辨率往往是由问题决定的(例如分割和检测问题通常需要更高的分辨率),因此不能总是用作可调参数。

image-20220203210003191

6.2.1 消融研究

非线性的影响在表 5 中,我们研究了插入 h-swish 非线性的位置的选择,以及使用优化实现相对于简单实现的改进。 可以看出,使用 h-swish 的优化实现节省了 6ms(超过 10% 的运行时间)。 与传统 ReLU 相比,优化后的 h-swish 仅增加了 1ms。

image-20220203210604714

图 8 显示了基于非线性选择和网络宽度的有效边界。 MobileNetV3 在网络中间使用了 h-swish,明显主导了 ReLU。 有趣的是,在整个网络中加入 h-swish 比扩大网络的插值前沿略好。

image-20220203210631281

其他组件的影响在图 9 中,我们展示了不同组件的引入是如何沿着延迟/准确度曲线移动的。

6.3、检测

我们使用 MobileNetV3 作为 SSDLite [39] 中骨干特征提取器的替代品,并与 COCO 数据集 [26] 上的其他骨干网络进行比较。

在 MobileNetV2 [39] 之后,我们将 SSDLite 的第一层附加到输出步幅为 16 的最后一个特征提取器层,并将 SSDLite 的第二层附加到输出步幅为 32 的最后一个特征提取器层。 在检测文献中,我们将这两个特征提取层分别称为 C4 和 C5。 对于 MobileNetV3-Large,C4 是第 13 个瓶颈块的扩展层。 对于 MobileNetV3-Small,C4 是第 9 个瓶颈块的扩展层。 对于这两个网络,C5 是池化之前的层。

我们另外将 C4 和 C5 之间的所有特征层的通道数减少了 2。这是因为 MobileNetV3 的最后几层被调整为输出 1000 个类,这在转移到具有 90 个类的 COCO 时可能是多余的。

image-20220203211213115

COCO 测试集的结果在表 6 中给出。随着通道的减少,MobileNetV3-Large 比 MobileNetV2 快 27%,具有几乎相同的 mAP。 具有通道缩减功能的 MobileNetV3-Small 也比 MobileNetV2 和 MnasNet 高 2.4 和 0.5 mAP,同时快 35%。 对于这两个 MobileNetV3 模型,通道减少技巧有助于减少大约 15% 的延迟而没有 mAP 损失,这表明 Imagenet 分类和 COCO 对象检测可能更喜欢不同的特征提取器形状。

6.4、语义分割

在本小节中,我们使用 MobileNetV2 [39] 和提出的 MobileNetV3 作为移动语义分割任务的网络主干。此外,我们比较了两个分割头。第一个,称为 R-ASPP,是在 [39] 中提出的。 R-ASPP 是 Atrous Spatial Pyramid Pooling 模块 [7, 8, 9] 的简化设计,它仅采用两个分支,包括 1×1 卷积和全局平均池操作 [29, 50]。在这项工作中,我们提出了另一个轻量级分割头,称为 Lite R-ASPP(或 LR-ASPP),如图 10 所示。Lite R-ASPP 对 R-ASPP 进行了改进,部署了全局平均池化以类似于 Squeeze-and-Excitation 模块 [20] 的方式,其中我们使用了一个具有大步幅的大型池化内核(以节省一些计算),并且模块中只有一个 1×1 卷积。我们将 atrous 卷积 [18, 40, 33, 6] 应用于 MobileNetV3 的最后一个块以提取更密集的特征,并进一步从低级特征添加跳过连接 [30] 以捕获更详细的信息。

image-20220203212719362

我们使用度量 mIOU [14] 在 Cityscapes 数据集 [10] 上进行实验,并且仅利用“精细”注释。我们采用与 [8, 39] 相同的训练协议。我们所有的模型都是从头开始训练的,没有在 ImageNet [38] 上进行预训练,并使用单尺度输入进行评估。与目标检测类似,我们观察到我们可以将网络主干的最后一个块中的通道减少 2 倍,而不会显着降低性能。我们认为这是因为主干是为 1000 个类别的 ImageNet 图像分类 [38] 而设计的,而 Cityscapes 只有 19 个类别,这意味着主干中有一些通道冗余。

我们在表 7 中报告了我们的 Cityscapes 验证集结果。如表所示,我们观察到 (1) 将网络主干最后一个块中的通道减少 2 倍,显着提高了速度,同时保持了相似的性能(第 1 行 vs . 第 2 行,第 5 行与第 6 行),(2)提出的分割头 LR-ASPP 比 R-ASPP [39] 稍快,同时性能有所提高(第 2 行与第 3 行,第 6 行与第 6 行相比)。第 7 行),(3)将分割头中的过滤器从 256 减少到 128 以提高速度,但性能稍差(第 3 行与第 4 行,第 7 行与第 8 行),(4)在采用在相同的设置下,MobileNetV3 模型变体获得了相似的性能,同时比 MobileNetV2 对应的模型稍快(第 1 行与第 5 行、第 2 行与第 6 行、第 3 行与第 7 行、第 4 行与第 8 行),(5 ) MobileNetV3-Small 获得与 MobileNetV2-0.5 相似的性能,同时速度更快,并且(6)MobileNetV3 Small在获得相似速度的同时,显著优于MobileNetV2-0.35。

表 8 显示了我们的 Cityscapes 测试集结果。我们使用 MobileNetV3 作为网络主干的分割模型分别比 ESPNetv2 [32]、CCC2 [34] 和 ESPNetv1 [32] 高 6.4%、10.6%、12.3%,同时在 MAdds 方面更快。在 MobileNetV3 的最后一个块中不使用 atrous 卷积提取密集特征图时,性能略有下降 0.6%,但速度提高到 1.98B(对于半分辨率输入),分别是 1.36、1.59 和 2.27 倍分别比 ESPNetv2、CCC2 和 ESPNetv1 快。此外,我们使用 MobileNetV3-Small 作为网络主干的模型仍然比所有模型至少高出 2.1%。

七、结论和今后的工作

在本文中,我们介绍了MobileNetV3大型和小型模型,展示了移动分类、检测和分割的最新技术。我们已经描述了我们利用多种网络架构搜索算法以及网络设计的进步来交付下一代移动模型的努力。我们还展示了如何适应swish等非线性,并以量化友好、高效的方式应用挤压和激励,将其作为有效工具引入移动模型领域。我们还引入了一种称为LR-ASPP的新型轻量级分段解码器。虽然如何最好地将自动搜索技术与人类直觉相结合仍然是一个悬而未决的问题,但我们很高兴展示这些初步的积极结果,并将继续完善这些方法,作为未来的工作。


http://www.kler.cn/a/406805.html

相关文章:

  • Web3与智能合约:区块链技术下的数字信任体系
  • 分布式 Data Warebase - 构筑 AI 时代数据基石
  • VSCode汉化教程【简洁易懂】
  • 2024年9月中国电子学会青少年软件编程(Python)等级考试试卷(六级)答案 + 解析
  • 14 go语言(golang) - 并发编程goroutine和channel
  • 缓存工具类编写
  • React核心功能详解(一)
  • Debezium系列之:Debezium3版本源码阅读理解
  • Webpack之后,Rollup如何引领前端打包新潮流?(1)
  • SQLite Having 子句
  • C语言程序编译和链接
  • 利用 GitHub 和 Hexo 搭建个人博客【保姆教程】
  • seq2seq attention详解
  • 用nextjs开发时遇到的问题
  • 安卓应用安装过程学习
  • 苹果Siri将搭载大型语言模型,近屿智能抢占AIGC大模型人才培养高地
  • 掌握Go语言中的异常控制:panic、recover和defer的深度解析
  • 嵌入式Linux学习——标准 I/O 库
  • 【前端知识】前端组件-axios详细介绍
  • 身份证实名认证API接口助力电商购物安全
  • AI修改验证账号名正则表达式的案例
  • Python Flask中集成SQLAlchemy和Flask-Login
  • 应急响应靶机——linux2
  • 栈的应用,力扣394.字符串解码力扣946.验证栈序列力扣429.N叉树的层序遍历力扣103.二叉树的锯齿形层序遍历
  • ThinkPad t61p 作SMB服务器,打印服务器,pc ,android ,ipad利用此服务器互传文件
  • 企业办公自动化:Spring Boot OA管理系统详解