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

济南英文网站建设优秀毕业设计网站设计

济南英文网站建设,优秀毕业设计网站设计,网站就业技术培训机构,广西旅游 网站建设论文#xff1a;https://arxiv.org/abs/1911.11907 源码#xff1a;https://github.com/huawei-noah/ghostnet 简要论述GhostNet的核心内容。 Ghost Net 1、Introduction 在训练良好的深度神经网络的特征图中#xff0c;丰富甚至冗余的信息通常保证了对输入数据的全面理…论文https://arxiv.org/abs/1911.11907 源码https://github.com/huawei-noah/ghostnet 简要论述GhostNet的核心内容。 Ghost Net 1、Introduction 在训练良好的深度神经网络的特征图中丰富甚至冗余的信息通常保证了对输入数据的全面理解。 上图是ResNet-50中第一个残差组生成的一些特征图的可视化其中三个相似的特征图对样例用相同颜色的方框标注。其中存在许多相似的特征图对就像一个幽灵一样。其中一个特征映射可以通过简单的操作(用扳手表示)对另一个特征映射进行变换近似得到。 作者认为特征映射中的冗余是一个成功的深度神经网络的重要特征而不是避免冗余的特征映射更倾向于采用它们但以一种经济有效的方式。 怎么以很小的代价生成许多能从原始特征发掘所需信息的幽灵特征图呢这个便是整篇论文的核心思想。 2、Approach 主流CNN计算的中间特征映射存在广泛的冗余比如上面的ResNet-50依此提出了可以减少它所需的资源。 上面所对比的就是输出相同特征映射的卷积层与Ghost模块的对比这里的表示的就是很小的代价。 Ghost模块的原理就是先进行Conv操作生成一些特征图然后经过cheat生成一系列的冗余特征图最后将Conv生成的特征图与cheap操作生成的特征图进行concat操作。 现有方法采用点向卷积跨通道处理特征再采用深度卷积处理空间信息。相比之下Ghost模块采用普通卷积先生成一些固有的特征映射然后利用便宜的线性运算来增加特征和增加通道。而在以前的高效架构中处理每个特征映射的操作仅限于深度卷积或移位操作而Ghost模块中的线性操作具有较大的多样性。 3、GhostNet Ghost bottleneck 上图是步幅分别为1和2的Ghost bottleneck这个结构看起来很眼熟很像是resnet里面的残差模块。 左侧的G-bneck主要由两个堆叠的ghost模块组成它的作用是作为扩展层增加通道的数量。右侧的G-bneck减少了通道的数量以匹配快捷路径。批归一化和ReLU非线性在每一层之后应用但MobileNetV2建议在第二个Ghost模块之后不使用ReLU。 网络结构 G-bneck表示Ghost bottleneck。#exp表示扩展大小。#out表示输出通道的数量。SE表示是否使用SE模块。 这里的G-bneck适用于stride1。对于stride2的情况快捷路径由下采样层实现并在两个Ghost模块之间插入stride2的深度卷积。在实践中Ghost模块的主要卷积是点卷积因为它的效率很高。 4、pytorch实现 Creates a GhostNet Model as defined in: GhostNet: More Features from Cheap Operations By Kai Han, Yunhe Wang, Qi Tian, Jianyuan Guo, Chunjing Xu, Chang Xu. https://arxiv.org/abs/1911.11907import torch import torch.nn as nn import torch.nn.functional as Fimport math__all__ [ghostnet]def _make_divisible(v, divisor, min_valueNone):此函数取自TensorFlow代码库.它确保所有层都有一个可被8整除的通道编号在这里可以看到:https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet.py通过四舍五入和增加修正确保通道编号是可被 divisor 整除的最接近的值并且保证结果不小于指定的最小值。if min_value is None:min_value divisornew_v max(min_value, int(v divisor / 2) // divisor * divisor)# 确保四舍五入的下降幅度不超过10%.if new_v 0.9 * v:new_v divisorreturn new_vdef hard_sigmoid(x, inplace: bool False):实现硬切线函数hard sigmoid的函数。Args:x: 输入张量可以是任意形状的张量。inplace: 是否原地操作in-place operation。默认为 False。Returns:处理后的张量形状与输入张量相同。注意ReLU6 函数是一个将小于 0 的值设为 0大于 6 的值设为 6 的函数。clamp_ 方法用于限制张量的取值范围。if inplace:return x.add_(3.).clamp_(0., 6.).div_(6.)else:return F.relu6(x 3.) / 6.class SqueezeExcite(nn.Module):def __init__(self, in_chs, se_ratio0.25, reduced_base_chsNone,act_layernn.ReLU, gate_fnhard_sigmoid, divisor4, **_):super(SqueezeExcite, self).__init__()self.gate_fn gate_fnreduced_chs _make_divisible((reduced_base_chs or in_chs) * se_ratio, divisor)self.avg_pool nn.AdaptiveAvgPool2d(1)self.conv_reduce nn.Conv2d(in_chs, reduced_chs, 1, biasTrue)self.act1 act_layer(inplaceTrue)self.conv_expand nn.Conv2d(reduced_chs, in_chs, 1, biasTrue)def forward(self, x):x_se self.avg_pool(x)x_se self.conv_reduce(x_se)x_se self.act1(x_se)x_se self.conv_expand(x_se)x x * self.gate_fn(x_se)return xclass ConvBnAct(nn.Module):def __init__(self, in_chs, out_chs, kernel_size,stride1, padding0 ,act_layernn.ReLU):super(ConvBnAct, self).__init__()self.conv nn.Conv2d(in_chs, out_chs, kernel_size, stride, padding, biasFalse)self.bn1 nn.BatchNorm2d(out_chs)self.act1 act_layer(inplaceTrue)def forward(self, x):x self.conv(x)x self.bn1(x)x self.act1(x)return xclass GhostModule(nn.Module):def __init__(self, inp, oup, kernel_size1, ratio2, dw_size3, stride1, reluTrue):super(GhostModule, self).__init__()self.oup oupinit_channels math.ceil(oup / ratio) # m n / snew_channels init_channels*(ratio-1) # m * (s - 1) n / s * (s - 1)self.primary_conv nn.Sequential(nn.Conv2d(inp, init_channels, kernel_size, stride, kernel_size//2, biasFalse),nn.BatchNorm2d(init_channels),nn.ReLU(inplaceTrue) if relu else nn.Sequential(),)self.cheap_operation nn.Sequential(nn.Conv2d(init_channels, new_channels, dw_size, 1, dw_size//2, groupsinit_channels, biasFalse),nn.BatchNorm2d(new_channels),nn.ReLU(inplaceTrue) if relu else nn.Sequential(),)def forward(self, x):x1 self.primary_conv(x)x2 self.cheap_operation(x1)out torch.cat([x1,x2], dim1)return out[:,:self.oup,:,:]class GhostBottleneck(nn.Module): Ghost bottleneck w/ optional SEdef __init__(self, in_chs, mid_chs, out_chs, dw_kernel_size3,stride1, act_layernn.ReLU, se_ratio0.):super(GhostBottleneck, self).__init__()has_se se_ratio is not None and se_ratio 0.self.stride stride# Point-wise expansionself.ghost1 GhostModule(in_chs, mid_chs, reluTrue)# Depth-wise convolutionif self.stride 1:self.conv_dw nn.Conv2d(mid_chs, mid_chs, dw_kernel_size, stridestride,padding(dw_kernel_size-1)//2,groupsmid_chs, biasFalse)self.bn_dw nn.BatchNorm2d(mid_chs)# Squeeze-and-excitationif has_se:self.se SqueezeExcite(mid_chs, se_ratiose_ratio)else:self.se None# Point-wise linear projectionself.ghost2 GhostModule(mid_chs, out_chs, reluFalse)# shortcutif (in_chs out_chs and self.stride 1):self.shortcut nn.Sequential()else:self.shortcut nn.Sequential(nn.Conv2d(in_chs, in_chs, dw_kernel_size, stridestride,padding(dw_kernel_size-1)//2, groupsin_chs, biasFalse),nn.BatchNorm2d(in_chs),nn.Conv2d(in_chs, out_chs, 1, stride1, padding0, biasFalse),nn.BatchNorm2d(out_chs),)def forward(self, x):residual x# 1st ghost bottleneckx self.ghost1(x)# Depth-wise convolutionif self.stride 1:x self.conv_dw(x)x self.bn_dw(x)# Squeeze-and-excitationif self.se is not None:x self.se(x)# 2nd ghost bottleneckx self.ghost2(x)x self.shortcut(residual)return xclass GhostNet(nn.Module):def __init__(self, cfgs, num_classes1000, width1.0, dropout0.2):super(GhostNet, self).__init__()# setting of inverted residual blocksself.cfgs cfgsself.dropout dropout# building first layeroutput_channel _make_divisible(16 * width, 4)self.conv_stem nn.Conv2d(3, output_channel, 3, 2, 1, biasFalse)self.bn1 nn.BatchNorm2d(output_channel)self.act1 nn.ReLU(inplaceTrue)input_channel output_channel# building inverted residual blocksstages []block GhostBottleneckfor cfg in self.cfgs:layers []for k, exp_size, c, se_ratio, s in cfg:output_channel _make_divisible(c * width, 4)hidden_channel _make_divisible(exp_size * width, 4)layers.append(block(input_channel, hidden_channel, output_channel, k, s,se_ratiose_ratio))input_channel output_channelstages.append(nn.Sequential(*layers))output_channel _make_divisible(exp_size * width, 4)stages.append(nn.Sequential(ConvBnAct(input_channel, output_channel, 1)))input_channel output_channelself.blocks nn.Sequential(*stages)# building last several layersoutput_channel 1280self.global_pool nn.AdaptiveAvgPool2d((1, 1))self.conv_head nn.Conv2d(input_channel, output_channel, 1, 1, 0, biasTrue)self.act2 nn.ReLU(inplaceTrue)self.classifier nn.Linear(output_channel, num_classes)def forward(self, x):x self.conv_stem(x)x self.bn1(x)x self.act1(x)x self.blocks(x)x self.global_pool(x)x self.conv_head(x)x self.act2(x)x x.view(x.size(0), -1)if self.dropout 0.:x F.dropout(x, pself.dropout, trainingself.training)x self.classifier(x)return xdef ghostnet(**kwargs):Constructs a GhostNet modelcfgs [# k, t, c, SE, s# stage1[[3, 16, 16, 0, 1]],# stage2[[3, 48, 24, 0, 2]],[[3, 72, 24, 0, 1]],# stage3[[5, 72, 40, 0.25, 2]],[[5, 120, 40, 0.25, 1]],# stage4[[3, 240, 80, 0, 2]],[[3, 200, 80, 0, 1],[3, 184, 80, 0, 1],[3, 184, 80, 0, 1],[3, 480, 112, 0.25, 1],[3, 672, 112, 0.25, 1]],# stage5[[5, 672, 160, 0.25, 2]],[[5, 960, 160, 0, 1],[5, 960, 160, 0.25, 1],[5, 960, 160, 0, 1],[5, 960, 160, 0.25, 1]]]return GhostNet(cfgs, **kwargs)if __name____main__:model ghostnet()model.eval()print(model)input torch.randn(32,3,320,256)y model(input)print(y.size())参考文章 CVPR 2020华为GhostNet超越谷歌MobileNet已开源 - 知乎 (zhihu.com) GhostNet网络详解_ghostnet网络结构-CSDN博客 GHostNet网络最通俗易懂的解读【不接受反驳】_ghost卷积_☞源仔的博客-CSDN博客 GhostNet 详解_ghostnet是什么-CSDN博客 GhostNet详解及代码实现_ghostnet代码_何如千泷的博客-CSDN博客
http://www.hkea.cn/news/14355238/

相关文章:

  • 永嘉移动网站建设公司网站页面好了怎么做后端
  • 电子商务网站建设的步骤一般为网站怎样做seo推广
  • 整站seo排名公司2019年的阜南县建设修路网站
  • 北京网站建设的服务推广服务商
  • 做最好的在线中文绅士本子阅读网站水处理网站源码
  • 网站建设程序流程图商务网站建设中存在的问题
  • 大学哪个专业可以做网站在线app开发
  • 莱芜十七中网站影视小程序搭建教程
  • 郑州做网站网络公司最好用的企业网站cms
  • 西安建设工程交易网站外包公司做网站多少钱
  • 泰兴网站建设开发网站通栏设计素材
  • 电白区建设局网站集团公司网站怎么做
  • wordpress电脑版南京seo域名
  • 5a景区网站建设2021中国十大软件公司排名
  • 长清网站建设建设工程施工合同示范文本2017
  • 别人帮做的网站怎么修改病句怎样免费做网站
  • wordpress架站教程怎么给网站添加统计代码
  • 泰安高端网站建设报价手机软件app免费下载
  • 网站访问频率免费做试用的网站
  • 常州网站建设企业建设银行网站 购买外汇
  • 厦门建设局网站首页免费建网站的服务器
  • 网站主机多少钱我想建个自己的网站
  • 网站建设工具最简洁的企业建站模板下载
  • 赤峰网站开发公司ps转页面wordpress插件
  • 站长统计芭乐鸭脖小猪郓城做网站哪家好
  • 旅游网站的设计栏目模板网站的域名是什么意思
  • 畜牧企业网站模板公司注册网上查询
  • 做离线版申报表进入哪个网站企业文化建设网站建设
  • 兼容模式网站错位代理服务器地址是什么
  • sae网站备案企业 网站规划与网页设计word