四、CNNs网络架构-深度可分离卷积

news2024/12/28 20:48:50

《A review of convolutional neural network architectures and their optimizations》论文指出一些高性能的卷积神经网络方法不可避免地带来巨大的计算成本,往往需要高性能GPU或高度优化的分布式CPU架构的支持。尽管CNNs应用向移动终端扩展,但大多数移动设备并不具备强大的计算能力和巨大的内存空间。因此,需要对轻量级网络架构进行研究,以妥善处理上述问题。轻量级卷积神经网络一般是指压缩和加速后得到的更小的卷积神经网络结构,其特点如下:

1 .与服务器通信要求小;

2 .网络参数少,模型数据量低;

3 .适合部署在内存受限的设备上。

为了使CNNs在满足需求的同时保持性能,提出了深度可分离卷积的架构。文中主要介绍了以下几个网络结构:MobileNet v1、MobileNet v2、MobileNet v3、Xception、ShuffleNet v1、ShuffleNet v2。

下面,本博文将介绍什么是深度可分离卷积,并对上述网络架构进行介绍。

目录

1.深度可分离卷积

1.1 逐通道卷积(Depthwise Convolution)

1.2 逐点卷积(Pointwise Convolution)

1.3 参数及计算量对比

2.MobileNet v1(2017)

2.1 网络结构

2.2 论文 

2.3 参考博文

3.MobileNet v2(2018)

3.1 网络结构 

3.2 Linear Bottlnecks(线性瓶颈结构)

3.3 Inverted Residuals(反向残差)

3.4 论文 

4.MobileNet v3(2019)

4.1 网络架构 

4.2 网络改进 

4.3 论文 

5.Xception(2017)

5.1 基于Inceptionv3模型改进 

5.2 网络结构

5.3 论文 

5.4 参考博文

6.ShuffleNetV1(2017)

6.1  group convolution

6.2 channel shuffle

6.3 ShuffleNet Units

6.4 网络结构

6.5 论文 

6.6 参考博文 

7.ShuffleNetV2(2018)

7.1 4个设计轻量级网络的要领

7.2  ShuffleNet Unit

7.3 网络结构

7.4 论文 

7.5 参考博文


1.深度可分离卷积

深度可分离卷积 主要是两种卷积变体组合使用,分别为逐通道卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)

1.1 逐通道卷积(Depthwise Convolution)

Depthwise Convolution的一个卷积核只有一个通道,输入信息的一个通道只被一个卷积核卷积,这个过程产生的feature map通道数和输入的通道数完全一样。以一张5x5x3(长和宽为5,RGB3通道)的彩色图片为例。每层深度卷积卷积核的数量与上一层的通道数相同(通道和卷积核一一对应)。设padding=1,stride=1,一个三通道的图像经过运算后生成了3个特征图,如上图中蓝色虚线框部分所示。

Depthwise Convolution完成后的Feature map数量与输入层的通道数相同,无法在通道维度上扩展或压缩Feature map的数量。而且这种运算对输入层的每个通道独立进行卷积运算,没有有效的利用不同通道在相同空间位置上的features的相关性。简而言之,虽然减少了计算量,但是失去了通道维度上的信息交互。因此需要Pointwise Convolution来将这些Feature maps进行组合生成新的Feature maps。

1.2 逐点卷积(Pointwise Convolution)

Pointwise Convolution的运算与常规卷积运算非常相似,其实就是1X1的卷积。它的卷积核的尺寸为 1×1×M,M为上一层输出信息的通道数。所以这里Pointwise Convolution的每个卷积核会将上一步的feature maps在通道方向上进行加权组合,生成新的feature map。有几个卷积核就有几个输出多少个新的feature maps,如图红色虚线部分所示。

1.3 参数及计算量对比

常规卷积参数个数:

卷积层共4个Filter,每个Filter包含一个通道数为3(与输入信息通道相同),且尺寸为3×3的kernel。因此卷积层的参数数量可以用如下公式来计算(即:卷积核W x 卷积核H x 输入通道数 x 输出通道数):

N_std = 4 × 3 × 3 × 3 = 108

深度可分离卷积参数个数:

N_depthwise = 3 × 3 × 3 = 27

N_pointwise = 1 × 1 × 3 × 4 = 12

N_separable = N_depthwise + N_pointwise = 39

常规卷积计算量:

计算量可以用如下公式来计算(即:卷积核W x 卷积核H x (图片W-卷积核W+1) x (图片H-卷积核H+1) x 输入通道数 x 输出通道数):

C_std =3×3×(5-2)×(5-2)×3×4=972

深度可分离卷积计算量:

深度卷积计算量可用如下公式进行计算(卷积核W×卷积核H×(图片W-卷积核W+1)×(图片H-卷积核H+1)×输入通道数):

C_depthwise=3x3x(5-2)x(5-2)x3=243

逐点卷积计算量则为(1 x 1 特征层W x 特征层H x 输入通道数 x 输出通道数):

C_pointwise = 1 × 1 × 3 × 3 × 3 × 4 = 108

C_separable = C_depthwise + C_pointwise = 351

结论:

相同的输入,同样是得到4张Feature map,Separable Convolution的参数个数和据算量是常规卷积的约1/3。因此,在参数量相同的前提下,采用Depthwise Separable Convolution的神经网络层数可以做的更深。

2.MobileNet v1(2017)

MobileNetv1将传统的卷积过程分解为Depthwise卷积和Pointwise卷积两个步骤,在模型大小和计算负担方面都实现了大幅压缩。

2.1 网络结构

MobileNet的网络结构下表所示。首先是一个3x3的标准卷积,然后后面就是堆积depthwise separable convolution,并且可以看到其中的部分depthwise convolution会通过strides=2进行down sampling。经过卷积提取特征后再采用average pooling将feature变成1x1,根据预测类别大小加上全连接层,最后是一个softmax层。

从整个网络架构来看,不算平均池化层与softmax层,共28层,且步长为2的卷积同时充当了下采样的功能,在每一个卷积层之后也会紧跟BN操作和ReLU激活后函数,结构如系图所示,左侧为标准卷积后接batchnorm和ReLU,右侧为深度可分离卷积中深度卷积和逐点卷积后接的batchnorm和ReLU。

2.2 论文 

论文:《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications》

https://arxiv.org/pdf/1704.04861.pdf

贡献:用深度可分离卷积代替普通卷积;

缺陷:深度卷积存在无效卷积核;

2.3 参考博文

1.轻量级神经网络MobileNet全家桶详解_轻量级网络模型_雷恩Layne的博客-CSDN博客

2.

深度学习之图像分类(九):MobileNet系列(V1,V1,V3) - 魔法学院小学弟

3.MobileNet v2(2018)

Mark Sandler等人基于MobileNetv1,提出了线性瓶颈(linear bottleneck)的反向残差(inverted residual),并以此构建了MobileNetv2,其速度和精度均优于MobileNetv1。

3.1 网络结构 

MobileNetv2网络结构如下图所示,t代表反转残差中第一个1*1卷积升为的倍数;c代表通道数;n代表堆叠的bottleneck的次数;s代表DWconv的幅度(1或2),不同的步幅对应了不同的模块(如图d所示)。效果上,在 ImageNet 图像分类的任务中,相比 V1 参数量减少了,效果也好了一些。

MobileNetV2网络模型中有共有17个Bottleneck层(每个Bottleneck包含两个逐点卷积层和一个深度卷积层),一个标准卷积层(conv),两个逐点卷积层(pw conv),共计有54层可训练参数层。MobileNetV2中使用线性瓶颈(Linear Bottleneck)和反向残差(Inverted Residuals)结构优化了网络,使得网络层次更深了,但是模型体积更小,速度更快了。

3.2 Linear Bottlnecks(线性瓶颈结构)

该模块将Inverted Residuals block中的bottleneck处的Relu去掉,通过下图可见,实质就是去掉了1*1卷积后的Relu激活函数,转为Linear激活函数,因为1X1卷积降维操作本来就会丢失一部分信息,ReLU 会对 channel 数较低的张量造成较大的信息损耗,出现输出为0的情况。线性瓶颈结构有两种,第一种是步长为1时使用残差结构,第二种是步长为2时不使用残差结构。

3.3 Inverted Residuals(反向残差

通过下图对比,如果采用residual block,在mobilenet中逐通道进行卷积,本来feature的维度就不多,如果还进行压缩,会使模型太小,所以使用inverted residual,先进行扩展(6倍)后进行压缩,这样就不会使模型压缩太厉害。MobileNetV2的残差结构实际是在线性瓶颈结构的基础上增加残差传播

ResNet中的残差结构使用第一层逐点卷积降维,后使用深度卷积,再使用逐点卷积升维。

MobileNetV2版本中的残差结构使用第一层逐点卷积升维并使用Relu6激活函数代替Relu,之后使用深度卷积,同样使用Relu6激活函数,再使用逐点卷积降维,降维后使用Linear激活函数。

3.4 论文 

论文:《MobileNetV2: Inverted Residuals and Linear Bottlenecks》

https://openaccess.thecvf.com/content_cvpr_2018/papers/Sandler_MobileNetV2_Inverted_Residuals_CVPR_2018_paper.pdf

贡献:引入逆向残差(inverted residual)和线性瓶颈(linear bottleneck)结构;

缺陷:可优化的特征提取效率;

4.MobileNet v3(2019)

Andrew G. Howard 等于 2019 年又提出了 MobileNet V3。文中提出了两个网络模型, MobileNetV3-Small 与 MobileNetV3-Large 分别对应对计算和存储要求低和高的版本。

  • Large版本共有15个bottleneck层,一个标准卷积层,三个逐点卷积层。

  • Small版本共有12个bottleneck层,一个标准卷积层,两个逐点卷积层。

4.1 网络架构 

MobileNet V3-Large结构图:

MobileNetV3中引入了5×5大小的深度卷积代替部分3×3的深度卷积。引入Squeeze-and-excitation(SE)模块和 h-swish(HS)激活函数以提高模型精度。结尾两层逐点卷积不使用批规范化(Batch Norm),在MobileNetV3结构图中使用NBN标识。

MobileNet V3-Small结构图:

4.2 网络改进 

1.基于 MobileNetV2的改进:

作者发现v2网络最后一部分结构可以优化,如上图所示,去除3x3 Dconv,1x1Conv等卷积层,原始结构使用1×1卷积进行feature维度的调整,从而提高模型预测的精度,但这一部分工作会造成一定的时间消耗,因此,作者将average pooling提前,这样可以提前把feature的size减下来(pooling之后的feature size由7×7降至1×1),并且精度几乎没有降低。

2.h-swish:

文中指出利用swish激活函数比ReLU激活函数精度高,但swish激活函数在移动端设备上耗费资源,因此作者提出h-swish激活函数代替swish,效果和swish差不多,但计算量大大减少,下图为h-swish激活函数表达式:

Sigmoid和Swish非线性函数的"hard"对比:

3.squeeze-and-excite(SE):

SE模块由自动驾驶公司Momenta在2017年公布的一种图像识别结构,旨在通过对特征通道之间的相关性进行建模,把重要的特征进行强化来提升准确率。运用SE模块使得有效的权重大,无效或效果较小的权重小,可以训练出更好的模型。改进的SE模块在传统SE模块的基础上保证了准确率,提升了性能,减少了参数量和计算量。

与MobileNetV2相比,MobileNetV3中增加了SE结构,并将含有SE结构部分的expand layer 的channel数减少,发现这样做增加了精度,在适度增加参数的数量,并且没有明显的延迟成本。

 参考链接:

SE:解读Squeeze-and-Excitation Networks(SENet) - 简书

4.3 论文 

论文:《Searching for MobileNetV3》

https://openaccess.thecvf.com/content_ICCV_2019/papers/Howard_Searching_for_MobileNetV3_ICCV_2019_paper.pdf

贡献:引入Squeeze-and-excitation(SE)模块和 h-swish(HS)激活函数,引入神经架构搜索(NAS)技术生成的网络结构;

缺陷:网络解释性差,模型结构混乱,不利于模型部署,昂贵的计算成本;

5.Xception(2017)

Xception借鉴了AlexNet中引入的深度可分离卷积的思想,可以认为是一种极端的Inception架构。下图描述了Xception模块,该模块拓宽了原有的Inception,使用一层紧跟1 × 1的3 × 3卷积核替换不同空间维度的( 1 × 1、3 × 3、3 × 3),从而调节计算复杂度。首先,输入特征图通过1 × 1卷积核进行处理。然后,使用3 × 3的卷积核对输出特征图的每个通道进行卷积操作。最后将所有输出拼接在一起,得到新的特征图。尽管Xception网络的训练参数比Inceptionv3少,但Xception网络的识别精度和训练速度与Inceptionv3相同,在更大的数据集上也有更好的表现。

与深度可分离卷积对比,唯一的区别是 1X1 卷积的执行顺序是在 Depthwise Conv之前还是之后而已。他们从不同的角度揭示了深度可分离卷积的强大作用,MobileNet的思路是通过将普通卷积拆分的形式来减少参数数量,而Xception是通过对Inception的充分解耦来完成的。

5.1 基于Inceptionv3模型改进 

针对Inceptionv3改进步骤:

(1)Inceptionv3原始模块如下图所示

(2)简化Inception模块:

(3)inception改进

对于一个输入的Feature Map,首先通过三组 1X1 卷积得到三组Feature Map,它和先使用一组 1X1 卷积得到Feature Map,再将这组Feature Map分成三组是完全等价的。

(4)Xception模块

Inception模块的一个"极端"版本,在1x1卷积的每一个输出通道有一个空间卷积。此时,这个的参数数量是普通卷积的 1/k,k为3×3卷积的个数。

5.2 网络结构

数据首先经过Entry flow,然后经过Middle flow重复八次,最后经过Exit flow。注意,所有的卷积层和可分离卷积层后面都进行了batch normalization(不包括在图中)。所有的Separable Convolution层使用1 (无深度扩展)的深度乘子。

5.3 论文 

论文:《Xception: Deep Learning with Depthwise Separable Convolutions》

https://arxiv.org/pdf/1610.02357v3.pdf

贡献:结合卷积分离和深度可分离卷积;

缺陷:计算开销大,模型结构复杂;

5.4 参考博文

1.深度学习之图像分类(五):GoogLeNet - 魔法学院小学弟

6.ShuffleNetV1(2017)

ShuffleNet v1是由旷视科技在2017年底提出的轻量级可用于移动设备的卷积神经网络。

该网络创新之处在于,使用 group convolution还有channel shuffle,保证网络准确率的同时,大幅度降低了所需的计算资源。作者在文中提出了pointwise group convolution来降低逐点卷积的计算量,但在组卷积运算中,group与group之间没有联系,在一定程度上影响了网络的准确度,因此作者提出shuffle操作,在channel见进行shuffle操作可以加强group之间的联系,在一定的计算复杂度下,网络允许更多的通道数来保留更多的信息。

6.1  group convolution

group convolution:

与普通卷积相比,虽然在参数量与运算向上两者相同,但通过组卷积可生成g倍的feature map数量,所以group conv可以用少量的参数两和运算量就能生成大量的feature map,获取更多的特征信息。如下图所示,g作为分组数量的控制参数,最小值为1,最大值为输入feature map的通道数。当g=1时,为普通卷积,当g=输入feature map通道数时,为深度分离卷积(depthwise sepereable convolution)。

 

6.2 channel shuffle

在Group Convolution中,仅仅是将这一个Group内的特征图进行了融合,但是不同的group之间缺乏计算,不同组中的特征图对于其他组的特征了解就越来越少。因此,作者提出把每个组的特征图经过组卷积计算之后,结果进行一定程度的乱序结合再送入下一层组卷积,以这样的方式增加特征图的连接融合次数,过程如下图所示:

上图中(a)为正常的组卷积;(b)和(c)是channel shuffle的方式。

6.3 ShuffleNet Units

如下图所示,(a)深度卷积( DWConv )]的瓶颈单元;(B )点群卷积( GConv )和通道洗牌的ShuffleNet单元;(c)步幅= 2的ShuffleNet单元。

(b)是3X3卷积步幅等于1的情况,可以看出与DWconv非常像,只是为了进一步减少参数量将 1X1 kernel尺寸的卷积优化成1X1组卷积,而且添加channel shuffle来确保不同组之间的信息交互。注意:Channel Shuffle操作在1×1的卷积操作之后,也就是先对通道进行了收缩,随后进行通道调整,最后卷积在调整回原来的通道数;
(c)是步幅等于2的情况,即输出特征图尺寸减半,channel维度增加为原先的2倍,为了保证最后的concat连接,需要保证两个分支的输出特征图尺寸相同,因此,在捷径分支上添加步幅为2的3X3全局池化。

6.4 网络结构

下图为ShuffleNet-v1网络结构,stride表示步幅,不同的步幅对应不同的ShuffleNet Units;repeat代表重复次数,例如stage3阶段对stride为2的ShuffleNet Units惊醒重复一次,对stride为1的ShuffleNet Units单元重复七次;

在上图的网络架构基础之上,作者也按照MobileNetV1的思路,对于网络设置了一些超参数s,表示通道数的多少,例如s=1,即标准的网络结构;s=0.5表明每个stage的输出和输入通道数都为上图中通道数的一半,其他的类似。通过通道缩放s倍,整个计算复杂度和参数均下降s2 倍。

6.5 论文 

论文:《ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices》

https://arxiv.org/pdf/1707.01083.pdf

贡献:引入pointwise group convolution和channel shuffle;

缺陷:产生边界效应;

6.6 参考博文 

1.ShuffleNet:通道的打乱与混洗_通道混洗_心之所向521的博客-CSDN博客

 2.深度学习之图像分类(十):ShuffleNet系列(V1,V2) - 魔法学院小学弟

7.ShuffleNetV2(2018)

2018年,Ma等人提出了一种称为ShuffleNetv2的新架构。并在论文中指出,作为衡量计算复杂度的指标,FLOPs实际并不等同于速度。FLOPs相似的网络中,在速度上有着巨大的差别,因此还需考虑内存消耗及GPU并行计算。

7.1 4个设计轻量级网络的要领

在论文中,作者指出了4个设计轻量级网络的要领:

G1) Equal channel width minimizes memory access cost (MAC).

当卷积的输入和输出是相同维度的通道时,将最小化内存访问成本,如下表所示,当input/output=1:1时,每秒处理的涂料数量最多。

G2) Excessive group convolution increases MAC.

过多的分组卷积会加大内存访问成本,如下表所示,随分组数的增多,速度会急剧下降,尤其在GPU上。同时也说明了并不是参数量越小,计算复杂度越小,运算速度就越快。因此,作者建议根据目标平台和任务谨慎选择组数。简单地使用大量的组数是不明智的,因为这可能使使用更多的通道,因为精度提高的好处很容易被迅速增加的计算成本所抵消。

G3) Network fragmentation reduces degree of parallelism.

碎片化操作(将一个大卷积分解为多个小卷积)将会减小网络的平行度,作者在实验中发现,固定FLOPs的情况下,分别对比串和并行分支结构,结果发现增加并行度的平行结构居然降低了速度的,结果如下表所示:

G4) Element-wise operations are non-negligible.

不要忽略元素级操作,即ReLU,AddTensor,AddBias等对矩阵元素的操作,它们具有较小的FLOPs但相对较重的MAC。为了验证该想法,作者对bottleneck这个层级进行了相应的修改,测试了是否含有ReLU和short-cut操作的两种情况,对比如下表所示,可以看到,在去除ReLU和short-cut后,GPU和ARM都获得了20 %左右的加速比。

Conclusion and Discussions:

1 )使用"平衡"卷积(等通道宽度);

2 )意识到使用分组卷积的代价;

3 )降低碎片化程度;

4 )减少元素操作。

7.2  ShuffleNet Unit

如下图所示,(a)(b)对应shufflenetV1是uints; (c),(d)对应改进后的V2版units。为了解决在全卷积或者分组卷积中维护大多数的卷积的输入通道数与输出通道数相等,作者提出了Channel Split操作。

split channel把整个特征图分为两个组了(模拟分组卷积的分组操作,接下来的1X1卷积又变回了正常卷积),这样的分组避免了像分组卷积一样过多的增加了卷积时的组数,符合G2。split channel之后,一个小组的数据是通过short-cut通道,而另一个小组的数据经过bottleneck层;这时,由于split channel已经降低了维度,因此bottleneck的1X1就不需要再降维了,输入输出的通道数就可以保持一致,符合G1。同时,由于最后使用的concat操作,没有用TensorAdd操作,符合G4。

7.3 网络结构

7.4 论文 

论文:《ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design》

https://arxiv.org/pdf/1807.11164.pdf

贡献:提出了轻量快速模型的四个准则;优化了shufflenet网络结构;

缺陷:特征损失显著;

7.5 参考博文

1.轻量级神经网络——shuffleNet2_秃头小苏的博客-CSDN博客

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

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

相关文章

如何在Spring Boot服务端实现公网远程调试并进行HTTP服务监听

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

Go语言 -- Web开发基础学习 net/http包

前言 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go语言最擅长的领域就是Web开发,此贴是本人入门完go语法基础后学习Web开发的学习笔记。 第一个Go Web 新建go文件hello_world.go 写入: package mainimport (&…

企业级信息系统开发——初探Spring AOP

文章目录 一、提出游吟诗人唱赞歌任务(一)采用传统方式实现(二)采用传统方式实现的缺点 二、采用配置方式使用AOP(一)创建本讲所需子包(二)创建杀龙任务类(三&#xff09…

VESD静电监控系统:提高静电防护效果与管理效率

随着科学技术不断发展,现代的工业对静电防护的要求越来越高。因为静电的存在可能会对产品质量、工作环境、甚至是人身产生威胁。静电监控系统是一项高效的管理工具,能够有效地控制和监测静电产生的情况,提高静电防护效果和管理效率。 VESD静电…

群晖DS920 video station使用教程

群晖DS920 video station使用教程 为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000 安装video station在群晖套件里点一下就好,这里不说了。 一、添加视频库 可以添加电视剧、电视节目等类型。 比如我在国产剧这个视频…

写出诗一样代码的灵丹妙药: const与assert

🤩本文作者:大家好,我是paperjie,感谢你阅读本文,欢迎一建三连哦。 🥰内容专栏:这里是《C知识系统分享》专栏,笔者用重金(时间和精力)打造,基础知识一网打尽,…

网络安全好就业吗?会不会容易被淘汰?

网络安全发展前景好吗?好就业吗?会不会容易被淘汰?很多刚入门或者想入门的小伙伴都会有这样的疑问 今天就在这里给大家介绍一下。我就在这个行业,目前湖南,薪资就没必要说了,高就对了。 这个行业优势就是工…

互联网营销推荐算法理论-30分钟理解协同过滤

一、协同过滤概念 不论在淘宝还是京东,你浏览了/购买了某个商品A,后面几天你在该app内总是会在首页看到商品A和商品A相似的商品,背后支撑这种能力的就是推荐系统,而其推荐算法可能就是协同过滤。(注:app内…

Scala学习(九)---List集合

文章目录 1.List1.1 不可变List集合1.2 可变集合ListBuffer 1.List List集合默认为不可变集合,List集合在实例化的时候,无法通过new关键字进行实例化,只能通过伴生apply方法来对其进行实例化 1.1 不可变List集合 创建一个不可变list集合 …

真题详解(树的结点)-软件设计(八十四)

真题详解(汇总)-软件设计(八十三)https://blog.csdn.net/ke1ying/article/details/130856130?spm1001.2014.3001.5501 COCOMOII估算不包括_____。 对象点 B.功能点 C.用例数 D.源代码行 答案:C 语法翻译是一种&#xff…

【vue3】 实现 公共搜索组件,在当前页搜索的路由跳转不能改变当前值的操作,使用bus / event-emitter 派发器

一、安装 bus 插件 cnpm install --save event-emitter 二、创建 bus.ts 文件 1、在utils下创建bus.ts 2、bus.ts 代码如下 import ee from event-emitter export default ee() 三、页面使用 1、搜索的公用组件页面&#xff0c;search.vue <el-input v-model.trim&qu…

全网最详细实现微信小程序小程序支付功能【前端部分】

文章目录 功能描述&#xff1a;准备工作申请微信支付接口权限 微信支付api需要的参数说明示例代码 需要传入后端接口的参数说明&#xff1a;接口返回的参数说明&#xff1a;支付逻辑代码&#xff08;只包含支付功能&#xff09;以下是功能完整代码确认订单页面结构部分逻辑部分…

【阿里云】文本转语音方言— 阿里云语音合成,文本转语音方言工具类

目录 一、导入SDK坐标 二、文本转语音方言 —步骤和工具类 1.登录阿里云账号&#xff0c;创建一个语音合成项目和创建用户并设置权限。 2.获取appKey、accessKeyId、accessKeySecret在相应位置进行填写。 3.相应位置填写自己需要保存的本地路径。意思就是说&#xff0c;自…

【HarmonyOS】低代码元服务开发中的地图实现

在元服务开发过程中&#xff0c;大家可能需要在应用中使用地图&#xff0c;如果使用SDK集成的方式&#xff0c;地图SDK包体积大小很大&#xff0c;集成后元服务大小可能会超过10M&#xff0c;这就超出了HAP包的大小限制。那么是否有其他途径可以在元服务中使用地图呢&#xff1…

视频理解学习笔记(一):双流卷积神经网络

视频理解学习笔记&#xff08;一&#xff09;&#xff1a;双流卷积神经网络 两句话总结双流卷积神经网络论文概览方法详解Spatial stream ConvNetTemporal stream ConvNet测试方法 光流什么是光流怎么预处理光流 数据集UCF101&#xff08;已被刷爆&#xff09;HMDB51 Experimen…

安装包UI美化之路-Electron打包出界面美观,功能完善的安装包,这三步就够了

这篇文章应该说是《安装包UI美化之路-nsNiuniuSkin安装包制作可视化配置向导》的延伸与进一步应用&#xff0c;在可视配置的基础之上&#xff0c;生成供electron-builder打包的脚本&#xff01; 一直有朋友反馈&#xff0c;不知道如何将nsNiuniuSkin与Electron打包结合起来&am…

Real-Time C++ 嵌入式C++ 程序设计(二)

翻译自 Real-Time C Efficient Object-Oriented and Template Microcontroller Programming 4th Edition - Kormanyos, Christopher&#xff0c;这书涉及了从C11 到C20 的内容&#xff0c;主要介绍使用C 的模板、面向对象等特性设计嵌入式程序。书里的示例代码都是公开的&#…

【OpenCV DNN】Flask 视频监控目标检测教程 03

欢迎关注『OpenCV DNN Youcans』系列&#xff0c;持续更新中 【OpenCV DNN】Flask 视频监控目标检测教程 03 3.3 上传本地图片进行人脸检测3.3.1 OpenCV 级联分类器类 cv::CascadeClassifier3.3.2 cvFlask03 项目的构建步骤 本系列从零开始&#xff0c;详细讲解使用 Flask 框架…

Unity3D :运行时 UI 的性能注意事项

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 运行时 UI 的性能注意事项 本页介绍如何提高运行时的性能用户界面 . 优化数据存储 您可以使用 usageHints 来设置元素在运行时的使用方式&#xff0c;以便相应地优化数据存储。例…

三、CNNs网络架构-跨层连接思想的网络架构

《A review of convolutional neural network architectures and their optimizations》论文指出随着网络架构的深入&#xff0c;梯度消失、爆炸或退化问题变得越来越严重。跨层连接的思想是解决现有问题的有效方案&#xff0c;允许网络在非相邻层之间传递信息。因此&#xff0…