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

大连高端网站建设易营宝智能建站

大连高端网站建设,易营宝智能建站,常见的域名注册网站,做php网站前言#xff1a;Hello大家好#xff0c;我是小哥谈。ShuffleNetV2 是一种轻量级的神经网络架构#xff0c;适用于移动设备和嵌入式设备等资源受限的场景#xff0c;旨在在计算资源有限的设备上提供高效的计算和推理能力#xff0c;它通过引入通道重排操作和逐点组卷积来减… 前言Hello大家好我是小哥谈。ShuffleNetV2 是一种轻量级的神经网络架构适用于移动设备和嵌入式设备等资源受限的场景旨在在计算资源有限的设备上提供高效的计算和推理能力它通过引入通道重排操作和逐点组卷积来减少计算量和参数量。YOLOv5是一种目标检测算法可以快速准确地检测图像或视频中的目标物体。将ShuffleNetv2和YOLOv5结合起来可以实现在资源受限的设备上进行高效的目标检测。  前期回顾 YOLOv5算法改进1— 如何去改进YOLOv5算法 YOLOv5算法改进2— 添加SE注意力机制 YOLOv5算法改进3— 添加CBAM注意力机制 YOLOv5算法改进4— 添加CA注意力机制 YOLOv5算法改进5— 添加ECA注意力机制 YOLOv5算法改进6— 添加SOCA注意力机制 YOLOv5算法改进7— 添加SimAM注意力机制 YOLOv5算法改进8— 替换主干网络之MobileNetV3 目录 1.论文 2.ShuffleNetV2网络架构 3.YOLOv5结合ShuffleNetV2 步骤1在common.py中添加ShuffleNetV2模块 步骤2在yolo.py文件中加入类名 ​步骤3创建自定义yaml文件 步骤4验证是否加入成功 步骤5修改train.py中的--cfg默认参数 1.论文 旷视科技提出针对移动端深度学习的第二代卷积神经网络 ShuffleNetV2。研究者指出过去在网络架构设计上仅注重间接指标 FLOPs 的不足并提出两个基本原则和四项准则来指导网络架构设计最终得到了无论在速度还是精度上都超越先前最佳网络例如 ShuffleNetV1、MobileNet 等的 ShuffleNetV2。在综合实验评估中ShuffleNetV2 也在速度和精度之间实现了最佳权衡。研究者认为高效的网络架构设计应该遵循本文提出的四项准则。 ShuffleNetV2 是由国产旷视科技团队在 2018 年提出的发表在了 ECCV这篇文章非常硬核实验非常全面。一些网络模型如MobileNetv1/v2、ShuffleNetv1、Xception等采用了分组卷积、深度可分离卷积等操作这些操作在一定程度上大大减少了FLOPs但FLOPs并不是一个直接衡量模型速度或者大小的指标它只是通过理论上的计算量来衡量模型然而在实际设备上由于各种各样的优化计算操作导致计算量并不能准确地衡量模型的速度。 作者首先分析了现有的很多轻量级网络例如MobileNetV2ShuffleNetV1等认为这些网络模型在设计和评估测试阶段过于迷信FLOPs每秒浮点计算量这个指标而对于一个网络模型的评估单单只看这一个指标很容易导致一个次优化设计的产生。作者认为现有的FLOPs是一个间接评估准则与直接评估准则速度(Speed)之间还存在很多不协调、不一致的地方而导致这点不一致的原因主要有两个 很多对速度有重要影响的因素都不在FLOPs的考虑范围之内 比如Memory access cost(MAC)内存访问成本这个因素对速度的影响很大而恰恰很多能大幅度降低FLOPs的设计会很大程度上提高MAC的数值最典型的例子就是Group Convolution分组卷积。再比如degree of parallelism并行度在同等FLOPs的条件下具有高并行度的网络会拥有更快的运行速度。 具有相同FLOPs的操作在不同的环境配置下有着不同的运行时间 通常来说3x3的卷积层要比1x1的卷积层花费更多的计算时间但在最新版本的CUDNN库的环境下由于专门对3x3的卷积操作进行了优化实际运行速度并不比1x1的卷积层慢上多少。 针对以上两点对于一个高效率网络模型的设计作者提出了两个应该考虑的准则 1应该用直接的评估标准(Speed)替代间接的评估标准(FLOPs) 2应该根据所配置的目标环境对网络模型进行评估 论文亮点♨️♨️♨️ 1计算量复杂度不能只看FLOPs指标 2提出了4条设计高效网络的准则guidelines 3在shufflenet v1的block上提出了新的block设计。 作者使用MobileNetV2和ShuffleNetV1在GPU和ARM两个设备上进行了实验并根据网络模型各个操作的运行时间绘制出了比例图 从下图中可以发现即便是同一网络模型在不同设备中的运行时间都有着非常明显的差异这里作者认为FLOPs主要可以用Conv代表大部分计算都发生在Conv中可以很清楚地看出Conv也就是FLOPs在GPU上所占的运行时间比例不过是50%到54%而剩下近一半对运行时间、运行速度有影响的因素例如数据输入输出数据洗牌逐元素操作等等都无法用FLOPs这个指标去衡量所以作者认为对于网络模型的运行时间来说FLOPs并不是一个足够准确的度量标准。 从上图的(c)、(d)能发现对于一个相同的FLOPs不同模型间的数据处理速度可以说是天差地别。 基于以上观察为了设计出一个高效率的轻量级网络模型作者提出了四点不应违反的设计准则 G1输入输出通道相同时内存访问量最小 对于轻量级CNN网络常采用深度可分割卷积depthwise separable convolutions其中点卷积 pointwise convolution即1x1卷积复杂度最大。 G2过量使用组卷积会增加MAC组卷积group convolution是常用的设计组件因为它可以减少复杂度却不损失模型容量。但是这里发现分组过多会增加MAC。 G3网络碎片化会降低并行度一些网络如Inception以及Auto ML自动产生的网络NASNET-A它们倾向于采用“多路”结构即存在一个block中很多不同的小卷积或者pooling这很容易造成网络碎片化减低模型的并行度相应速度会慢这也可以通过实验得到证明。 G4不能忽略元素级操作对于元素级element-wise operators比如ReLU和Add虽然它们的FLOPs较小但是却需要较大的MAC。这里实验发现如果将ResNet中残差单元中的ReLU和shortcut移除的话速度有20%的提升。 基本概念♨️♨️♨️ FLOPSS大写 指每秒浮点运算次数可以理解为计算的速度是衡量硬件性能的一个指标。 FLOPss小写指浮点运算数即网络中的乘法和加法操作的数量理解为计算量。可以用来衡量算法/模型的复杂度。在论文中常用GFLOPs1 GFLOPs 10^9 FLOPs。 MAC(内存访问成本)计算机在进行计算时候要加载到缓存中然后再计算这个加载过程是需要时间的。其中分组卷积group convolution是对MAC消耗比较多的操作。 并行度在相同的FLOPs下具有高并行度的模型可能比具有低并行度的另一个模型快得多。如果网络的并行度较高那么速度就会有显著的提升。 论文题目《ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design》 论文地址  https://arxiv.org/pdf/1807.11164.pdf 代码实现  https://github.com/megvii-model/ShuffleNet-Series/blob/master/ShuffleNetV2/blocks.py YOLOv5  GitHub - ultralytics/yolov5: YOLOv5 in PyTorch ONNX CoreML TFLite 2.ShuffleNetV2网络架构 如上图(a)、(b)在ShuffleNetv1的模块中大量使用了1x1组卷积这违背了G2原则另外v1采用了类似ResNet中的瓶颈层bottleneck layer输入和输出通道数不同这违背了G1原则。同时使用过多的组也违背了G3原则。短路连接中存在大量的元素级Add运算这违背了G4原则。  为了改善v1的缺陷v2版本引入了一种新的运算channel split。具体来说在开始时先将输入特征图在通道维度分成两个分支通道数分别为和 实际实现时  。左边分支做同等映射右边的分支包含3个连续的卷积并且输入和输出通道相同这符合G1。而且两个1x1卷积不再是组卷积这符合G2另外两个分支相当于已经分成两组。两个分支的输出不再是Add元素而是concat在一起紧接着是对两个分支concat结果进行channle shuffle以保证两个分支信息交流。其实concat和channel shuffle可以和下一个模块单元的channel split合成一个元素级运算这符合原则G4。对于下采样模块不再有channel split而是每个分支都是直接copy一份输入每个分支都有stride2的下采样最后concat在一起后特征图空间大小减半但是通道数翻倍。✅ ShuffleNetv2的整体结构如下表所示基本与v1类似其中设定每个block的channel数如0.5x1x可以调整模型的复杂度。 ShuffleNetV2相较于ShuffleNetV1进行了以下改进 1使用更高效的通道重排方式ShuffleNetV2中使用了一种称为channel split的方式将输入通道分为两部分并将它们分别用于不同的分支中然后再将它们重新组合。这种方式相较于ShuffleNet V1中的channel shuffle方式更加高效。 2增加了更多的组卷积层ShuffleNetV2中引入了更多的组卷积层以进一步减少模型的计算量和参数量。 3引入了新的stage结构ShuffleNetV2中增加了一种新的stage结构以进一步提高模型的性能。 4采用更加精细的网络设计ShuffleNetV2中对网络的设计进行了更加精细的调整以进一步提高模型的性能和效率。 综上所述ShuffleNetV2相较于ShuffleNetV1在模型性能和计算效率方面都有较大的提升。    3.YOLOv5结合ShuffleNetV2 步骤1在common.py中添加ShuffleNetV2模块 将下面ShuffleNetV2模块的代码复制粘贴到common.py文件的末尾。 # 通道重排跨group信息交流 def channel_shuffle(x, groups):batchsize, num_channels, height, width x.data.size()channels_per_group num_channels // groups# reshapex x.view(batchsize, groups,channels_per_group, height, width)x torch.transpose(x, 1, 2).contiguous()# flattenx x.view(batchsize, -1, height, width)return xclass CBRM(nn.Module): #conv BN ReLU Maxpool2ddef __init__(self, c1, c2): # ch_in, ch_outsuper(CBRM, self).__init__()self.conv nn.Sequential(nn.Conv2d(c1, c2, kernel_size3, stride2, padding1, biasFalse),nn.BatchNorm2d(c2),nn.ReLU(inplaceTrue),)self.maxpool nn.MaxPool2d(kernel_size3, stride2, padding1, dilation1, ceil_modeFalse)def forward(self, x):return self.maxpool(self.conv(x))class Shuffle_Block(nn.Module):def __init__(self, ch_in, ch_out, stride):super(Shuffle_Block, self).__init__()if not (1 stride 2):raise ValueError(illegal stride value)self.stride stridebranch_features ch_out // 2assert (self.stride ! 1) or (ch_in branch_features 1)if self.stride 1:self.branch1 nn.Sequential(self.depthwise_conv(ch_in, ch_in, kernel_size3, strideself.stride, padding1),nn.BatchNorm2d(ch_in),nn.Conv2d(ch_in, branch_features, kernel_size1, stride1, padding0, biasFalse),nn.BatchNorm2d(branch_features),nn.ReLU(inplaceTrue),)self.branch2 nn.Sequential(nn.Conv2d(ch_in if (self.stride 1) else branch_features,branch_features, kernel_size1, stride1, padding0, biasFalse),nn.BatchNorm2d(branch_features),nn.ReLU(inplaceTrue),self.depthwise_conv(branch_features, branch_features, kernel_size3, strideself.stride, padding1),nn.BatchNorm2d(branch_features),nn.Conv2d(branch_features, branch_features, kernel_size1, stride1, padding0, biasFalse),nn.BatchNorm2d(branch_features),nn.ReLU(inplaceTrue),)staticmethoddef depthwise_conv(i, o, kernel_size, stride1, padding0, biasFalse):return nn.Conv2d(i, o, kernel_size, stride, padding, biasbias, groupsi)def forward(self, x):if self.stride 1:x1, x2 x.chunk(2, dim1) # 按照维度1进行splitout torch.cat((x1, self.branch2(x2)), dim1)else:out torch.cat((self.branch1(x), self.branch2(x)), dim1)out channel_shuffle(out, 2)return out 具体如下图所示 步骤2在yolo.py文件中加入类名 首先在yolo.py文件中找到parse_model函数这一行加入 CBRM 和 Shuffle_Block 。 ​步骤3创建自定义yaml文件 在models文件夹中复制yolov5s.yaml粘贴并重命名为yolov5s_ShuffleNetV2.yaml。 然后根据ShuffleNetV2的网络架构来修改配置文件。 yaml文件修改后的完整代码如下 # YOLOv5 by Ultralytics, GPL-3.0 license# Parameters nc: 20 # number of classes depth_multiple: 1.0 # model depth multiple width_multiple: 1.0 # layer channel multiple anchors:- [10,13, 16,30, 33,23] # P3/8- [30,61, 62,45, 59,119] # P4/16- [116,90, 156,198, 373,326] # P5/32# YOLOv5 v6.0 backbone backbone:# [from, number, module, args]# Shuffle_Block: [out, stride][[ -1, 1, CBRM, [ 32 ] ], # 0-P2/4[ -1, 1, Shuffle_Block, [ 128, 2 ] ], # 1-P3/8[ -1, 3, Shuffle_Block, [ 128, 1 ] ], # 2[ -1, 1, Shuffle_Block, [ 256, 2 ] ], # 3-P4/16[ -1, 7, Shuffle_Block, [ 256, 1 ] ], # 4[ -1, 1, Shuffle_Block, [ 512, 2 ] ], # 5-P5/32[ -1, 3, Shuffle_Block, [ 512, 1 ] ], # 6]# YOLOv5 v6.0 head head:[[-1, 1, Conv, [256, 1, 1]],[-1, 1, nn.Upsample, [None, 2, nearest]],[[-1, 4], 1, Concat, [1]], # cat backbone P4[-1, 1, C3, [256, False]], # 10[-1, 1, Conv, [128, 1, 1]],[-1, 1, nn.Upsample, [None, 2, nearest]],[[-1, 2], 1, Concat, [1]], # cat backbone P3[-1, 1, C3, [128, False]], # 14 (P3/8-small)[-1, 1, Conv, [128, 3, 2]],[[-1, 11], 1, Concat, [1]], # cat head P4[-1, 1, C3, [256, False]], # 17 (P4/16-medium)[-1, 1, Conv, [256, 3, 2]],[[-1, 7], 1, Concat, [1]], # cat head P5[-1, 1, C3, [512, False]], # 20 (P5/32-large)[[14, 17, 20], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)] 步骤4验证是否加入成功 在yolo.py文件里配置我们刚才自定义的yolov5s_ShuffleNetV2.yaml。 然后运行yolo.py得到结果。 这样说明我们添加成功了。  步骤5修改train.py中的--cfg默认参数 在train.py文件中找到 parse_opt函数然后将第二行 --cfg 的default改为 models/yolov5s_ShuffleNetV2.yaml然后就可以开始进行训练了。
http://www.w-s-a.com/news/495699/

相关文章:

  • 南宁广告公司网站建设小程序源码破解
  • 沛县做网站xlec网站建设开发方式包括哪些方面
  • 山西网站建设 哪家好四川城乡和建设厅网站
  • 有瀑布流的网站小型商城网站
  • 百石网怎么做网站二次开发软件
  • 网站域名是什么东西制作网页哪家好
  • 合肥网站建设团队简述网站内容管理流程
  • 网站广告是内容营销吗wordpress增加背景图片
  • 网站建设技术jsp课程设计响应式布局网站开发
  • 东莞网站排名优化seo套路网站怎么做的
  • 我做网站网络建站一般多少钱
  • 如何快速提升网站关键词排名房地产网站开发毕业设计
  • 做网站 提交源码 论坛sem分析是什么意思
  • 网站建设与部署阿里云大学百度付费推广有几种方式
  • 作品集怎么做网站个人简历模板免费下
  • 工业网站素材重庆关键词自动排名
  • 拖拽式网站建设费用微网站怎么做的好名字
  • 长沙电信网站备案谷歌推广怎么做最有效
  • 网站建设与管理总结报告华为开发者联盟
  • 门诊部网站建设天空建筑网站
  • 扬州市城乡建设网站高端品牌鞋子有哪些牌子
  • 杭州网站建设招聘网长沙网络销售公司
  • 网站制作一年多少钱免费做电子章网站
  • 信誉好的营销网站建设徐州市铜山新区建设局网站
  • 建行网站关于我们山西seo和网络推广
  • 1m带宽做网站怎么样深圳网站建设制作开发公司
  • 网站建设 服务内容 费用郴州网站建设公司哪里有
  • 网站关键词重要性育才网站建设
  • 网络安全形势下怎么建设学校网站wordpress最新主题下载
  • 自己建设网站需要什么条件.gs域名做网站怎么样