第六章 MobileNetv1网络详解

news2024/9/24 11:22:12

系列文章目录

第一章 AlexNet网络详解

第二章 VGG网络详解

第三章 GoogLeNet网络详解 

第四章 ResNet网络详解 

第五章 ResNeXt网络详解 

第六章 MobileNetv1网络详解 

第七章 MobileNetv2网络详解 

第八章 MobileNetv3网络详解 

第九章 ShuffleNetv1网络详解 

第十章 ShuffleNetv2网络详解 

第十一章 EfficientNetv1网络详解 

第十二章 EfficientNetv2网络详解 

第十三章 Transformer注意力机制

第十四章 Vision Transformer网络详解 

第十五章 Swin-Transformer网络详解 

第十六章 ConvNeXt网络详解 

第十七章 RepVGG网络详解 

第十八章 MobileViT网络详解 


文章目录

  •  MobileNetv1网络详解
  • 0. 前言
  • 1. 摘要
  • 2.   MobileNetv1网络详解网络架构
    • 1.  MobileNetv1_Model.py(pytorch实现)
    • 2.
  • 总结


0、前言


1、摘要

      我们提出了 MobileNets 这类高效模型,专门用于移动和嵌入式视觉应用。MobileNets 基于一种简化的架构,利用深度可分离卷积构建轻量级深度神经网络。我们引入了两种简单的全局超参数,可以高效地权衡延迟和准确性。这些超参数允许模型构建者根据问题的约束条件选择适合其应用的正确大小的模型。我们对资源和准确性进行了广泛的实验,并展现了在 ImageNet 分类方面与其他受欢迎的模型相比的强大性能。我们随后展示了 MobileNets 在广泛应用和用例中的有效性,包括对象检测、细粒度分类、面部属性和大规模地理定位。

2、MobileNetv1网络结构

1. 本文介绍了一种名为MobileNets的高效模型,可以用于移动和嵌入式视觉应用。

2. 本文的研究背景是为了提高移动和嵌入式设备上的视觉应用的运行效率和准确性。

3. 本文的主要论点是MobileNets模型使用深度可分离卷积构建轻型深度神经网络,并且引入了有效的全局超参数来平衡延迟和准确性之间的权衡。

4. 以往的研究方法包括基于卷积神经网络的模型,但其对移动和嵌入式设备的限制较大并且计算效率较低。方法存在的问题是难以在准确性和运行效率之间平衡。

5. 本文提出了一种基于深度可分离卷积的模型架构和有效的全局超参数来平衡延迟和准确性,用于构建轻量级深度神经网络。

6. 实验结果表明,MobileNets模型在资源和准确性之间具有较强的平衡性,并且在ImageNet分类等任务上取得了较好的表现。该模型也适用于多种应用场景,包括目标检测、细粒度分类、人脸属性和大规模地理定位。然而,本研究仍存在一些限制,例如在一些复杂应用场景下准确性仍有待提高。

3.论文亮点(MobileNets(v1) Lightspot:)


1. Depthwise Convolution(大大减少了运算量和参数数量)
2.Increment Hyperparameter(α(控制卷积层卷积核个数)、β(控制图像大小) )

 4.论文详解

Pointwise卷积是一种1×1卷积核,通常被用作深度可分离卷积中的第二个步骤。它被称为点卷积,因为它只在每个像素点上执行卷积操作。该卷积操作可以将深度可分离卷积中处理后得到的特征图降维或升维,以便进一步处理需要更多或更少的通道。

 

1 基于FaceNet模型的MobileNet

Table 1.MobileNet Body Architecture

类型/步长

卷积核形状

输入形状

Conv / s2

3 × 3 × 3 × 32

224 × 224 × 3

Conv dw / s1

3 × 3 × 32 dw

112 × 112 × 32

Conv / s1

1 × 1 × 32 × 64

112 × 112 × 32

Conv dw / s2

3 × 3 × 64

112 × 112 ×64

Conv / s1

1 × 1 × 64 × 128

56 × 56 × 64

Conv dw / s1

3 × 3 × 128 dw

56 × 56 × 128

Conv / s1

1 × 1 × 128 × 128

56 × 56 × 128

Conv dw / s2

3 × 3 × 128 dw

56 × 56 × 128

Conv / s1

1 × 1 × 128 × 256

28 × 28 × 128

Conv dw / s1

3 × 3 × 256 dw

28 × 28 × 256

Conv / s1

1 × 1 × 256 ×256

28 × 28 × 256

Conv dw / s2

3 × 3 × 256 dw

28 × 28 × 256

Conv / s1

1 × 1 × 256 ×512

14 × 14 × 256

5 × Conv dw / s1

      Conv / s1

3 × 3 × 512 dw

1 × 1 × 512 ×512

14 × 14 × 512

14 × 14 × 512

Conv dw / s2

3 × 3 × 512 dw

14 × 14 × 512

Conv / s1

1 × 1 × 512 ×1024

7 × 7 × 512

Conv dw / s1

3 × 3 × 1024 dw

7 × 7 × 1024

Conv / s1

1 × 1 × 1024 ×1024

7 × 7 × 1024

Avg Pool / s1

Pool 7 × 7

7 × 7 × 1024

FC / s1

1024 × 1000

1 × 1 × 1024

Softmax / s1

Classifier

1 × 1 × 1000

MobileNet结构是建立在深度可分离卷积的基础之上,除了第一层是全卷积层。通过这样简单的网络定义,我们能够轻松地探索网络拓扑,找到优秀的网络。MobileNet结构在表1中定义。所有层都跟随着一个batchnorm [13]和ReLU非线性,但最后一个全连接层没有非线性,而是进入一个softmax层进行分类。图3对比了使用常规卷积、batchnorm和ReLU非线性的层和使用深度卷积、1×1点卷积以及每个卷积层后都加上batchnorm和ReLU的分解层。使用深度可分离卷积和第一层的步长卷积来进行下采样。最后进行平均池化将空间分辨率降低至1,然后进入全连接层。MobileNet共有28层,包括深度和点卷积在内。

2不同类型所需资源

Table 2.Resource Per Layer Type

类型

乘法加法

参数数量

Conv 1 × 1

94.86%

74.59%

Conv DW 3 × 3

3.06%

1.06%

Conv 3 × 3

1.19%

0.02%

Fully Connected

0.18%

24.33%

仅仅用少数的Mult-Adds定义网络是不够的,还必须确保这些操作可以被高效地实现。例如,非结构化稀疏矩阵操作通常不比密集矩阵操作快,除非达到非常高的稀疏度。我们的模型结构将几乎所有计算都放入了密集的1×1卷积中。这可以使用高度优化的常规矩阵乘法(GEMM)函数来实现。通常,卷积是通过GEMM来实现的,但需要在内存中进行初始重新排列,称为im2col,以将其映射到GEMM。例如,这种方法在流行的Caffe软件包[15]中使用。1×1卷积不需要进行这种内存重新排列,并且可以直接使用GEMM实现,这是最优化数值线性代数算法之一。MobileNet的95%的计算时间都花在1×1卷积上,而参数的75%如表2所示。几乎所有的额外参数都在完全连接的层中。MobileNet模型是使用TensorFlow[1]和异步梯度下降的RMSprop[33]训练的,类似于Inception V3 [31]。然而,与训练大型模型相反,我们使用较少的正则化和数据增强技术,因为小型模型不易过拟合。在训练MobileNets时,我们不使用侧面头或标签平滑,并通过限制用于大型Inception训练的小剪辑的大小,进一步减少图像扭曲的数量。此外,我们发现对于深度滤波器很少的情况下,应该很少或不使用权重衰减(l2正则化)。在下一节的ImageNet基准测试中,所有模型都使用相同的训练参数进行训练,而不管模型的大小。

3标准卷积修改的资源使用情况,请注意每一行是在前一行的基础上叠加的累积效果。该示例是针对一个内部MobileNet(DK = 3M = 512N = 512DF = 14)

Table 3.Resource usage for modifications to standard convolution.Note that each row is a cumulative effect adding on top of the previous row.This example is for an internal MobileNet layer with DK =3,M =512,N =512,DF =14.

层/修改后

乘法加法计算量(百万)

参数数量(百万)

传统卷积

462

2.36

深度可分离卷积

52.3

0.27

α=0.75

29.6

0.15

β=0.714

15.1

0.15

尽管基本的 MobileNet 架构已经足够小和低延迟,但有时特定用例或应用程序可能需要模型更小、更快。为了构建这些更小、更少计算开销的模型,我们介绍了一个非常简单的参数 α,称为宽度乘数。宽度乘数 α 的作用是在每个层上均匀地减少网络。对于给定的层,宽度乘数 α 和输入通道数 M 成为 αM 和输出通道数 N 成为 αN。具有宽度乘数 α 的深度可分离卷积的计算成本为:DK ·DK ·αM ·DF ·DF +αM ·αN ·DF ·DF (6)其中 α2 (0;1],具有典型设置 1、0.75、0.5 和 0.25。α=1 是基线 MobileNet,α<1 是降低的 MobileNets。宽度乘数的效果是将计算成本和参数数量平方减少约 α2。可以将宽度乘数应用于任何模型结构,以定义一个新的较小模型,具有合理的精度。

第二个超参数用于减少神经网络计算成本的是分辨率乘数ρ。我们将其应用于输入图像,并随后将每个层的内部表示也同样按照乘数进行缩减。实际上,我们通过设置输入分辨率来隐式地设置ρ。现在,我们可以将核心层的计算成本表达为具有宽度乘数α和分辨率乘数ρ的深度可分离卷积:DK·DK·αM·ρDF·ρDF+αM·αN·ρDF·ρDF(其中ρ2(0;1],通常被隐式地设置为网络的输入分辨率为224、192、160或128。ρ=1是基线MobileNet,ρ<1是减少计算MobileNets。分辨率乘数的作用是通过ρ2减少计算成本。例如,我们可以查看MobileNet中的一个典型层,然后看看深度可分离卷积、宽度乘数和分辨率乘数如何降低成本和参数。表3显示了在序列应用架构缩小方法到该层时的计算和参数数量。第一行显示具有输入特征映射大小为14×14×512和内核K大小为3×3×512×512的全卷积层的倍加和和参数。在下一节中,我们将详细讨论资源和准确性之间的权衡。

4 深度分离与全卷积MobileNet模型在ImageNet百万级图片上的准确率、乘法操作数和参数数量比较。

Table 4.Depthwise Separable vs Full Convolution MobileNet

模型

ImageNet数据集上的准确率

乘法加法计算量(百万)

参数数量(百万)

全卷积MobileNet

71.7%

4866

29.3

MobileNet

70.6%

569

4.2

5 狭窄与浅层MobileNet模型对比

Table 5.Narrow vs Shallow MobileNet

模型

ImageNet数据集上的准确率

乘法加法计算量(百万)

参数数量(百万)

0.75 MobileNet

68.4%

325

2.6

浅层MobileNet

65.3%

307

2.9

6 MobileNet的宽度乘数表

Table 6.MobileNet Width Multiplie

宽度乘数(α)

ImageNet数据集上的准确率

乘法加法计算量(百万)

参数数量(百万)

1.0 MobileNet-244

70.6%

569

4.2

0.75 MobileNet-244

68.4%

325

2.6

0.5 MobileNet-24

63.7%

149

1.3

0.25MobileNet-244

50.6%

41

0.5

7 MobileNet分辨率表

Table 7.MobileNet Resolution

图像分辨率(β)

ImageNet数据集上的准确率

乘法加法计算量(百万)

参数数量(百万)

1.0 MobileNet-244

70.6%

569

4.2

1.0 MobileNet-192

69.1%

418

4.2

1.0 MobileNet-160

67.2%

290

4.2

1.0 MobileNet-128

64.4%

186

4.2

8 MobileNet与流行模型的比较

Table 8.MobileNet Comparison to Popular Models

模型

ImageNet数据集上的准确率

乘法加法计算量(百万)

参数数量(百万)

1.0 MobileNet-244

70.6%

569

4.2

GoogleNet

69.8%

1550

6.8

VGG 16

71.5%

15300

138

9小型MobileNet与流行模型的比较

Table 9.Smaller MobileNet Comparison to Popular Models

模型

ImageNet数据集上的准确率

乘法加法计算量(百万)

参数数量(百万)

0.50 MobileNet-160

60.2%

76

1.32

Squeezenet

57.5%

1700

1.25

AlexNet

57.2%

720

60

在本节中,我们首先探究深度卷积的效果,以及通过减少网络宽度而不是层数来选择缩小的影响。然后,我们展示了通过两个超参数(宽度乘数和分辨率乘数)来减小网络的权衡,并将结果与多个流行模型进行比较。接着,我们研究了MobileNets在多个不同应用中的应用。

首先,我们展示了MobileNet使用深度可分离卷积与使用完整卷积构建的模型的结果。在表4中,我们可以看到,在ImageNet的深度准确率提高1%时,使用深度可分离卷积可以极大地节省多次加法和参数。接下来,我们展示了将更薄的模型与使用较少层数的浅模型进行比较的结果。为了使MobileNet变得更浅,我们删除了表1中具有14×14×512特征尺寸的可分离滤波器的5层。在表5中,我们可以看到,以类似的计算和参数数量,使MobileNets变薄比使它们变浅产生的效果更好,效果提高了3%。表6展示了通过减小MobileNet架构的宽度乘子α来进行精度、计算和大小权衡的结果。当α=0.25时,精度平稳下降,架构太小。表7展示了通过训练具有降低输入分辨率的MobileNets的不同分辨率乘子来进行精度、计算和大小权衡的结果。在不同分辨率下,精度平稳下降。图4展示了由宽度乘子α2 f1;0.75;0.5;0.25g和分辨率f224;192;160;128g组成的16个模型的ImageNet精度和计算权衡结果。在α=0.25时,模型变得非常小,结果呈现对数线性跳跃。

10 MobileNetStanford Dogs数据集上的表现

Table 10. MobileNet for Stanford Dogs

模型

Top-1准确率

乘法加法计算量(百万)

参数数量(百万)

Inception V3

84%

5000

23.2

1.0 MobileNet-224

83.3%

569

3.3

0.75 MobileNet-224

81.9%

325

1.9

1.0 MobileNet-192

81.9%

418

3.3

0.75 MobileNet-192

80.5%

239

1.9

(Top-1准确率通常是指在分类问题中的指标之一,它是指模型在预测一个样本的正确类别时的准确率。具体地说,它指的是,在所有样本中,模型预测的概率最大的类别与实际所属类别相同的样本数占总样本数的比例。 例如,对于一个分类问题,如果总共有100个样本,模型预测出了其中的80个样本的正确类别,则它的Top-1准确率为80%。 需要注意的是,Top-1准确率只比较模型预测的最有可能的类别是否正确,而不关心其他可能的类别是否正确。因此,它可能会忽略了一些预测并不完全正确的情况,因此在某些情况下并不是完全可靠的指标。)

我们在Stanford Dogs数据集上训练MobileNet进行细粒度识别。我们扩展了[18]的方法,并从互联网上收集了比[18]更大但嘈杂的训练集。我们使用这个嘈杂的网络数据来预训练一个细粒度狗识别模型,然后在Stanford Dogs训练集上微调模型。Stanford Dogs测试集的结果在表10中。MobileNet几乎可以在大大降低计算和尺寸的情况下实现[18]的最先进结果。

11 PlaNet使用MobileNet架构的性能。百分比是在一定距离内定位到Im2GPS测试数据集的部分。原始PlaNet模型的数字是基于一个改进的架构和训练数据集的更新版本。​​​​​​​

Table 11.Performance of PlaNet using the MobileNet architec ture.Percentages are the fraction of the Im2GPS test dataset that were localized within a certain distance from the ground truth.The numbers for the original PlaNet model are based on an updated version that has an improved architecture and training dataset.

尺寸

Im2GPS技术

PlaNet

PlaNet  MobileNet

大陆(2500km)

51.9%

77.6%

79.3%

国家(750km)

35.4%

64.0%

60.3%

区域(200km)

32.1%

51.1%

45.2%

城市(25km)

21.9%

31.7%

31.7%

街道(1km)

2.5%

80.5%

11.4%

PlaNet是将确定照片拍摄位置的任务视为分类问题。该方法将地球划分为一组地理单元格,作为目标类,并对数百万个地理标记的照片进行卷积神经网络训练。PlaNet已被证明可以成功地定位各种照片,并且优于处理相同任务的Im2GPS[6,7]。我们使用MobileNet架构在相同数据上重新训练PlaNet。虽然基于Inception V3架构[31]的完整PlaNet模型具有5200万个参数和57.4亿个乘加,但MobileNet模型仅有1300万个参数,通常为300万个主体和1000万个最终层以及580,000个乘加。如表11所示,MobileNet版本提供的性能只略有降低,尽管更紧凑,仍然比Im2GPS表现要好得多。

12使用MobileNet架构进行面部属性分类。每一行对应不同的超参数设置(宽度乘数α和图像分辨率)。

Table 12.Face attribute classification using the MobileNet archi tecture.Each row corresponds to a different hyper-parameter set ting (width multiplier αand image resolution).

宽度乘数α/

图像分辨率β

平均准确率

(Average Precision)

乘法加法计算量(百万)

参数数量(百万)

1.0 MobileNet-224

88.7%

568

3.2

0.5 MobileNet-224

88.1%

149

0.8

0.25 MobileNet-224

87.2%

45

0.2

1.0 MobileNet-128

88.1%

185

3.2

0.5 MobileNet-128

87.7%

48

0.8

0.25 MobileNet-128

86.4%

15

0.2

Baseline

86.9%

1600

7.5

MobileNet的另一个用途是压缩具有未知或不常见训练程序的大型系统。在面部属性分类任务中,我们展示了MobileNet和蒸馏(一种深度网络的知识转移技术)之间的协同关系。我们试图使用MobileNet架构来缩小一个具有7500万个参数和160亿个Mult-Adds的大型面部属性分类器。该分类器是在类似于YFCC100M的多属性数据集上训练的。我们使用蒸馏技术来训练分类器模拟较大模型的输出,而不是真实标签,从而使其能够从大型(可能无限的)未标记数据集中进行训练。将蒸馏训练的可伸缩性和MobileNet的简单参数化相结合,最终系统不仅不需要正则化(例如重量衰减和提前停止),而且还表现出更好的性能。从Tab.12可以看出,基于MobileNet的分类器对于激进的模型缩小是有弹性的:它在属性之间实现了类似的平均平均精度(mean AP),同时只消耗1%的Multi-Adds。

13 使用不同框架和网络架构进行的COCO目标检测结果比较。mAP的报告以COCO主要挑战度量为基准(IoU=0.50:0.05:0.95时的AP)

Table 13.COCO object detection results comparison using differ ent frameworks and network architectures.mAP is reported with COCO primary challenge metric (AP at IoU=0.50:0.05:0.95)

框架/分辨率

模型

平均准确率

乘法加法计算量(十亿)

参数数量(百万)

SSD

300

Deeplab-VGG

21.1%

34.9

33.1

Inception V2

22.0%

3.8

13.7

MobileNet

19.3%

1.2

6.8

Faster-RCNN

300

VGG

22.9%

64.3

138.5

Inception V2

15.4%

118.2

13.3

MobileNet

16.4%

25.2

6.1

Faster-RCNN

600

VGG

25.7%

149.6

138.5

Inception V2

21.9%

129.6

13.3

MobileNet

19.8%

30.5

6.1

MobileNet可以作为现代目标检测系统中有效的基础网络。我们基于最近赢得了2016 COCO挑战赛的工作,报告了在COCO数据集上对MobileNet进行目标检测训练的结果。在表13中,MobileNet与VGG和Inception V2 [13]在Faster-RCNN [23]和SSD [21]框架下进行了比较。在我们的实验中,SSD采用300个输入分辨率(SSD 300),Faster-RCNN与300和600个输入分辨率(Faster-RCNN 300,Faster-RCNN 600)进行了比较。Faster-RCNN模型每个图像评估300个RPN提议框。这些模型都是在COCO train+val上进行训练,不包括8k个minival图像,并在minival上进行评估。 对于两种框架,MobileNet的计算复杂度和模型大小只有其他网络的一小部分,但实现了可比较的结果。

14 基于FaceNet模型的MobileNet

Table 14.MobileNet Distilled from FaceNe

模型

1e-4

准确率

乘法加法计算量(百万)

参数数量(百万)

FaceNet

83%

1600

7.5

1.0 MobileNet-160

79.4%

286

4.9

1.0 MobileNet-128

78.3%

185

5.5

0.75 MobileNet-160

75.2%

166

3.4

0.75 MobileNet-128

72.5%

108

3.8

FaceNet模型是一种最先进的人脸识别模型[25],它基于三元组损失构建人脸嵌入。为了构建一个移动的FaceNet模型,我们使用蒸馏技术通过最小化在训练数据上FaceNet和MobileNet输出的平方差异来进行训练。非常小的MobileNet模型的结果可以在表14中找到。 

1.MobileNetv1.py(pytorch实现)

from torch import nn
import torch

def _make_divisible(ch, divisor=8, min_ch=None):
    if min_ch is None:
        min_ch = divisor
    new_ch = max(min_ch, int(ch + divisor / 2) // divisor * divisor)
    if new_ch < 0.9 * ch:
        new_ch += divisor
    return new_ch

class ConvBNReLU(nn.Sequential):
    def __init__(self, in_channel, out_channel, kernel_size=3, stride=1, groups=1):
        padding = (kernel_size - 1) // 2
        super(ConvBNReLU, self).__init__(
            nn.Conv2d(in_channel, out_channel, kernel_size, stride, padding, groups=groups, bias=False),
            nn.BatchNorm2d(out_channel),
            nn.ReLU6(inplace=True)
        )

class InvertedResidual(nn.Module):
    def __init__(self, in_channel, out_channel, stride, expand_ratio):
        super(InvertedResidual, self).__init__()
        hidden_channel = in_channel * expand_ratio
        self.use_shortcut = stride == 1 and in_channel == out_channel
        layers = []
        if expand_ratio != 1:
            layers.append(ConvBNReLU(in_channel, hidden_channel, kernel_size=1))
        layers.extend([
            ConvBNReLU(hidden_channel, hidden_channel, stride=stride, groups=hidden_channel),
            nn.Conv2d(hidden_channel, out_channel, kernel_size=1, bias=False),
            nn.BatchNorm2d(out_channel)
        ])
        self.conv = nn.Sequential(*layers)
    def forward(self, x):
        if self.use_shortcut:
            return x + self.conv(x)
        else:
            return self.conv(x)

class MobileNetV2(nn.Module):
    def __init__(self, num_classes=1000, alpha=1.0, round_nearest=8):
        super(MobileNetV2, self).__init__()
        block = InvertedResidual
        input_channel = _make_divisible(32*alpha, round_nearest)
        last_channel = _make_divisible(1280*alpha, round_nearest)

        Inverted_residul_setting = [
            [1, 16, 1, 1],
            [6, 24, 2, 2],
            [6, 32, 3, 2],
            [6, 64, 4, 2],
            [6, 96, 3, 1],
            [6, 160, 3, 2],
            [6, 320, 1, 1]
        ]
        features = []
        features.append(ConvBNReLU(3, input_channel, stride=2))
        for t, c, n, s in Inverted_residul_setting:
            output_channel = _make_divisible(c * alpha, round_nearest)
            for i in range(n):
                stride = s if i == 0 else 1
                features.append(block(input_channel, output_channel, stride, expand_ratio=t))
                input_channel = output_channel
        features.append(ConvBNReLU(input_channel, last_channel, 1))
        self.features = nn.Sequential(*features)
        self.avgpool = nn.AdaptiveAvgPool2d((1, 1))
        self.classifier = nn.Sequential(
            nn.Dropout(0.2),
            nn.Linear(last_channel, num_classes)
        )
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                nn.init.kaiming_normal_(m.weight, mode='fan_out')
                if m.bias is not None:
                    nn.init.zeros_(m.bias)
            elif isinstance(m, nn.BatchNorm2d):
                nn.init.ones_(m.weight)
                nn.init.zeros_(m.bias)
            elif isinstance(m, nn.Linear):
                nn.init.normal_(m.weight, 0.01)
                nn.init.zeros_(m.bias)
    def forward(self, x):
        x = self.features(x)
        x = self.avgpool(x)
        x = torch.flatten(x, 1)
        x = self.classifier(x)
        return x

总结

我们提出了一种新的模型结构,称为基于深度可分离卷积的MobileNets。我们研究了一些重要的设计决策,以实现高效模型。然后,我们展示了如何使用宽度乘数和分辨率乘数来构建更小、更快的MobileNets,通过平衡一定量的精度来减小尺寸和延迟。我们然后比较了不同的MobileNets与流行的模型,表现出更优秀的尺寸、速度和精度特性。我们最后展示了MobileNet在广泛的任务中的有效性。作为下一步帮助MobileNets的采用和探索,我们计划在Tensor Flow中发布模型。

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

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

相关文章

chatgpt赋能python:Python文件怎么改名:简单易用的方法

Python文件怎么改名&#xff1a;简单易用的方法 在Python开发中&#xff0c;文件的重命名是一个经常用到的操作。无论是更改文件名还是批量重命名&#xff0c;在Python中都可以非常轻松地实现。本文将介绍三种不同的方法来改变Python文件的名称。 方法一&#xff1a;使用os模…

哔哩下载姬 - DownKyi

这款开源工具小编自己还是蛮喜欢的&#xff0c;有兴趣的小伙伴可以体验学习下。 一、简单介绍 Downkyi是一个极其便捷的开源工具&#xff0c;专为Bilibili视频下载而设计。它拥有一个简洁、直观的界面&#xff0c;操作逻辑流畅无比。Downkyi能够下载几乎所有B站视频&#xff0…

11.创建CentOS虚拟机

创建不同类型的实例虚拟机&#xff0c;我们是需要根据需求来准备镜像上传到glance&#xff0c;注意 ISO 镜像上传上去是没法直接使用的&#xff0c;需要将 ISO 镜像转变成qcow2磁盘文件&#xff0c;然后上传磁盘文件&#xff0c;就可以创建云主机。 官方镜像仓库地址&#xff1…

FBM237 RH914XS而且控制部件采用冗余容错技术,运行可靠性提高

​ FBM237 RH914XS而且控制部件采用冗余容错技术,运行可靠性提高 FBM237 RH914XS而且控制部件采用冗余容错技术,运行可靠性提高 概述 dcs系统与其他计算机设备是由电子元件和大规模集成电路构成&#xff0c;结构紧密&#xff0c;而且控制部件采用冗余容错技术,运行可靠性提高。…

人工智能气象一:深度学习预测浅水方程模式

查看原文>>>基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用能力 目录 专题一、Python软件的安装及入门 专题二、气象常用科学计算库 专题三、气象海洋常用可视化库 专题四、爬虫和气象海洋数据 专题五、气象海洋常用插值方法 专题六、机器…

AIGC下的CV多模态原理解析:从CLIP/BLIP到stable diffusion/Midjourney、GPT4

前言 终于开写本CV多模态系列的核心主题&#xff1a;stable diffusion相关的了&#xff0c;为何执着于想写这个stable diffusion呢&#xff0c;源于三点 去年stable diffusion和midjourney很火的时候&#xff0c;就想写&#xff0c;因为经常被刷屏&#xff0c;但那会时间错不…

RabbitMQ入门案例之Work模式

前言 本文章将介绍RabbitMQ的Work模式&#xff0c;其中这个模式又细分为轮询分发和公平分发&#xff0c;本文将会用Java代码结合RabbitMQ的web管理界面进行实操演示。 官网文档地址&#xff1a;https://rabbitmq.com/getstarted.html 什么是Work模式 RabbitMQ的Work模式是一种…

ActiveX控件打包成Cab置于网页中自动下载安装

[背景] 做过ActiveX控件的朋友都知道&#xff0c;要想把自己做的ActiveX控件功能放在自己的网页上使用&#xff0c;那么用户在客户端就必须进行本地的注册&#xff0c;也就是说用户得首先要把该ActiveX控件(test.ocx)放在本机的%system%/system32下&#xff0c;然后运行DOS工具…

Linux:第四章课后习题及答案

第四章 目录和文件管理 Q1&#xff1a;Linux系统中有哪些文件类型 Linux文件类型常见的有&#xff1a;普通文件、目录 文件、设备文件&#xff08;字符设备文件和块设备 文件&#xff09;、管道文件和符号链接文件等。普通文件 用“ls -lh”命令查看某个文件的属性&#xff0…

Docker 部署 分布式搜索引擎 Elastic Search

文章目录 ⛄引言一、使用Elastic Search 的好处二、部署ES⛅部署kibana⚡部署分词器 三、词典扩展与停用⛅扩展词典⚡停用词典 ⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮…

【C++篇】模板

友情链接&#xff1a;C/C系列系统学习目录 知识总结顺序参考C Primer Plus&#xff08;第六版&#xff09;和谭浩强老师的C程序设计&#xff08;第五版&#xff09;等&#xff0c;内容以书中为标准&#xff0c;同时参考其它各类书籍以及优质文章&#xff0c;以至减少知识点上的…

使用 InstructPix2Pix 对 Stable Diffusion 进行指令微调

本文主要探讨如何使用指令微调的方法教会 Stable Diffusion 按照指令 PS 图像。这样&#xff0c;我们 Stable Diffusion 就能听得懂人话&#xff0c;并根据要求对输入图像进行相应操作&#xff0c;如: 将输入的自然图像卡通化 。 图 1&#xff1a;我们探索了 Stable Diffusion …

深入探索Android应用启动原理:从入口到界面展示

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。&#x1f60a; 座右铭&#xff1a;不想…

day12_面向对象的三大特征之一(封装)

封装概述​​​​​​​ 为什么需要封装&#xff1f; 现实生活中&#xff0c;每一个个体与个体之间是有边界的&#xff0c;每一个团体与团体之间是有边界的&#xff0c;而同一个个体、团体内部的信息是互通的&#xff0c;只是对外有所隐瞒。例如&#xff1a;我们使用的电脑&a…

【从删库到跑路】MySQL数据库的查询(单表查询,多表查询,内外连接,联合查询,子查询)

&#x1f38a;专栏【MySQL】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 文章目录 &#x1f354;多表查询⭐多表关系&#x1f388;一对多&#x…

自动化运维工具-Ansible详解

目录 一、Ansible介绍 &#xff08;一&#xff09;简介 &#xff08;二&#xff09;特性 &#xff08;三&#xff09;优势 &#xff08;四&#xff09;基本架构 &#xff08;五&#xff09;任务执行模式 &#xff08;六&#xff09;ansible与其余配置管理软件的对比 二、…

【C++篇】STL标准模板库

友情链接&#xff1a;C/C系列系统学习目录 知识点内容正确性以C Primer&#xff08;中文版第五版&#xff09;、C Primer Plus&#xff08;中文版第六版&#xff09;为标准&#xff0c;同时参考其它各类书籍、优质文章等&#xff0c;总结归纳出个人认为较有逻辑的整体框架&…

SpringCloud Alibaba入门1之创建多模块工程

一、创建父项目 创建一个父Maven项目&#xff0c;项目命名为myshop,用于管理子模块。 创建项目后&#xff0c;删除src和增加pom设置 二、创建子module 右键父项目&#xff0c;新建module 此我们的子module就创建完成了。接下来如法炮制&#xff0c;创建另外几个子module&…

【Python 基础篇】Python 元组及元组常用函数

文章目录 导言一、什么是元组二、创建元组2.1 使用括号创建元组2.2 使用函数创建元组 三、访问元组元素四、元组常用函数4.1 len()4.2 count()4.3 index() 总结 导言 当我们需要存储一组不可变的数据时&#xff0c;Python中的元组&#xff08;Tuple&#xff09;就派上了用场。…

chatgpt赋能python:Python文件与目录

Python文件与目录 Python拥有强大的文件和目录操作功能&#xff0c;这使得它成为一个非常强大的编程语言之一。Python的文件和目录操作功能可以帮助你创建、读取和写入文件&#xff0c;访问和处理目录结构&#xff0c;以及对文件和目录进行各种操作。 在这篇文章中&#xff0…