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

一个高端网站设计做网站要有哪些知识

一个高端网站设计,做网站要有哪些知识,莞城网页设计,wordpress id连续插件【图像分类】【深度学习】【轻量级网络】【Pytorch版本】MobileNets_V2模型算法详解 文章目录 【图像分类】【深度学习】【轻量级网络】【Pytorch版本】MobileNets_V2模型算法详解前言MobleNet_V2讲解反向残差结构(Inverted Residuals)兴趣流形(Manifold of interest)线性瓶颈层…【图像分类】【深度学习】【轻量级网络】【Pytorch版本】MobileNets_V2模型算法详解 文章目录 【图像分类】【深度学习】【轻量级网络】【Pytorch版本】MobileNets_V2模型算法详解前言MobleNet_V2讲解反向残差结构(Inverted Residuals)兴趣流形(Manifold of interest)线性瓶颈层(Linear Bottlenecks)MobleNet_V2模型结构 MobleNet_V2 Pytorch代码完整代码总结 前言 MobileNets_V2是由谷歌公司的Sandler, Mark等人在《MobileNetV2: Inverted Residuals and Linear Bottlenecks【CVPR-2017】》【论文地址】一文中提出的带线性瓶颈的反向残差设计的改进模型相比于普通残差模块反向残差模块则是中间维度大两边维度小保证精度的同时显著减少所需的操作数量和内存适用于嵌入式移动设备。 MobleNet_V2讲解 MobleNet_V1网络【参考】结构虽然轻盈但是只是单纯地使用卷积层进行堆叠没有引入类似于ResNet【参考】的shortcut连接因此没有充分利用图像的信息所以其准确率表现不佳并且论文中提到在实际使用中发现深度可分离卷积的某些卷积核参数为0部分卷积核在训练过程中失效了。 深度可分离卷积(Depthwise Separable Convolution) 结构中的深度卷积层(Depthwise Convolutional) 的卷积核数量取决于上一层的通道数MobleNet_V1训练得到的很多无效的卷积核因此MobleNet_V2在深度卷积层前添加了一层 点卷积(Pointwise Convolution) 进行升维再通过深度卷积进行卷积最后通过点卷积进行降维变成了一个两端细中间粗的结构弥补了MobleNet_V1中训练不足导致卷积核失效的情况。 反向残差结构(Inverted Residuals) ResNet中证明残差结构(Residuals) 有助于构建更深的网络从而提高精度MobileNetV2中以ResNet的残差结构为基础进行优化提出了反向残差(Inverted Residuals) 的概念。 深度卷积层提取特征限制于输入特征维度若采用普通残差块会将输入特征图压缩深度卷积提取的特征会更少MobileNets_V2将输入特征图扩张丰富特征数量进而提高精度。 普通残差结构的过程高维输入-1x1卷积(降维)–relu激活–3x3卷积(低维)–relu激活–1x1卷积(升维)-残差相加-relu激活。 反向残差结构的过程: 低维输入-1x1点卷积(升维)- relu激活-3x3深度卷积(低维)-relu激活-1x1点卷积(降维)-与残差相加。 论文中MobileNets_V2的反向残差结构如下图所示 t代表膨胀比(通道扩展系数)K代表输入维度K’输出维度s代表步长。 MobileNets_V2的反向残差结构分为俩种当stride2时反向残差结构取消了shortcut连接。 兴趣流形(Manifold of interest) 这个部分还是有点意思的理解后也不难博主根据论文和其他资料尽量简单的给出了个人见解 兴趣流形是指在特征空间(特征图)中与特定任务或概念相关的数据样本的聚集区域。它是数据样本在特征空间中的分布结构其中包含了与任务相关的有用信息兴趣流形可以理解为数据在特征空间中形成的低维嵌入结构。具体来说卷积层的所有独立的通道输出的特征图的像素值这些像素值中编码的信息实际上位于某个流形中而流形又可嵌入到低维子空间(部分特征图)中这是因为并不是每一个像素对于表征输入图像而言都是不可或缺的可能只有一部分像素就足够表征这些输入图像在该层的某种感兴趣信息。 简单来说就是兴趣流形就是指输出特征图中与任务相关的部分特征图的部分特征像素值的总和。 这就会有产生一种直觉可以通过减小卷积层的维数来减小特征空间的维数因为兴趣流形只占特征空间的一部分希望尽可能的减少其余无关的特征空间。根据这种直觉MobileNets_V1通过不断降低特征空间的维度直到流形充满整个空间来达到压缩模型的目的。 但是卷积神经网络中特征空间是需要经过非线性激活层(relu)也就是降低的是激活特征空间的维度因此兴趣流形并没有不断聚合而充满整个特征空间而是丢失了一部分兴趣流形从而导致模型的检测准确率降低。 特征空间经过非线性变换ReLU激活会导致为负的输入全部变为零导致失去保存的信息当ReLU使得某一个输入通道崩塌时(这个通道中有很多特征像素值都变成了负值)就会使当前通道丢失很多信息但是如果有很多卷积核也就是生成了很多通道那么在当前通道丢失的信息就会有可能在其他通道找回来如下图展示了嵌入在高维空间中的低维兴趣流形经过ReLU激活的情况。 线性瓶颈层(Linear Bottlenecks) 线性瓶颈层的主要作用是通过降低维度来提取数据的主要特征从而减少计算量和模型复杂度同时保持输入数据的重要信息通常由一个线性变换操作组成例如全连接层或卷积层其输出维度远小于输入维度并且不引入非线性变换。假设兴趣流形是低维的插入线性瓶颈层可以防止非线性破坏太多信息因为线性瓶颈层使用线性层而非ReLU激活层。因此在反向残差结构的1×1点卷积降维后并没有ReLU激活层。 很多论文证明在残差块相加之前不做非线性激活会使得检测的准确率提高读者可以去看resnet的残差结构其实最后一层也是线性瓶颈层是在残差块相加之后才做的非线性激活。 MobleNet_V2模型结构 下图是原论文给出的关于MobleNet_V2模型结构的详细示意图 t是通道扩展系数c是通道数 n是组成员数s是步长。 MobileNets_V2在图像分类中分为两部分backbone部分 主要由普通卷积层、反残差结构和池化层(汇聚层)组成分类器部分由1×1卷积层(全连接)层组成 。 在分类任务中分类器的1×1卷积层作用等价于全连接层因此很多demo就用全连接代替1×1卷积层的作用了 MobleNet_V2 Pytorch代码 普通卷积块 3×3卷积层BN层ReLU6激活函数 # 普通卷积块 class ConvBNReLU(nn.Sequential):def __init__(self, in_channel, out_channel, kernel_size3, stride1, groups1):# 保持输入输出特征图尺寸一致的paddingpadding (kernel_size - 1) // 2super(ConvBNReLU, self).__init__(nn.Conv2d(in_channel, out_channel, kernel_size, stride, padding, groupsgroups, biasFalse),nn.BatchNorm2d(out_channel),nn.ReLU6(inplaceTrue))反向残差结构 1×1点卷积层BN层ReLU6激活函数3×3深度卷积层BN层ReLU6激活函数1×1点卷积层BN层 # 反向残差结构 class InvertedResidual(nn.Module):# expand_ratio是膨胀率def __init__(self, in_channel, out_channel, stride, expand_ratio):super(InvertedResidual, self).__init__()# 升维后的维度hidden_channel in_channel * expand_ratio# 特征图形状保持一致才能shortcutself.use_shortcut stride 1 and in_channel out_channellayers []if expand_ratio ! 1:# 1x1 pointwise convlayers.append(ConvBNReLU(in_channel, hidden_channel, kernel_size1))layers.extend([# 3x3 depthwise conv 维度数组数ConvBNReLU(hidden_channel, hidden_channel, stridestride, groupshidden_channel),# 1x1 pointwise conv(linear)nn.Conv2d(hidden_channel, out_channel, kernel_size1, biasFalse),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)完整代码 from torch import nn import torch from torchsummary import summarydef _make_divisible(ch, divisor8, min_chNone):if min_ch is None:min_ch divisorint(ch divisor / 2) // divisor * divisor)目的是为了让new_ch是divisor的整数倍类似于四舍五入:ch超过divisor的一半则加1保留;不满一半则归零舍弃new_ch max(min_ch, int(ch divisor / 2) // divisor * divisor)# 假设new_ch小于ch的0.9倍,则再加divisorif new_ch 0.9 * ch:new_ch divisorreturn new_ch# 卷积组: Conv2dBVReLU6 class ConvBNReLU(nn.Sequential):def __init__(self, in_channel, out_channel, kernel_size3, stride1, groups1):# 保持输入输出特征图尺寸一致的paddingpadding (kernel_size - 1) // 2super(ConvBNReLU, self).__init__(nn.Conv2d(in_channel, out_channel, kernel_size, stride, padding, groupsgroups, biasFalse),nn.BatchNorm2d(out_channel),nn.ReLU6(inplaceTrue))# 反向残差结构 class InvertedResidual(nn.Module):# expand_ratio是膨胀率def __init__(self, in_channel, out_channel, stride, expand_ratio):super(InvertedResidual, self).__init__()# 升维后的维度hidden_channel in_channel * expand_ratio# 特征图形状保持一致才能shortcutself.use_shortcut stride 1 and in_channel out_channellayers []if expand_ratio ! 1:# 1x1 pointwise convlayers.append(ConvBNReLU(in_channel, hidden_channel, kernel_size1))layers.extend([# 3x3 depthwise conv 维度数组数ConvBNReLU(hidden_channel, hidden_channel, stridestride, groupshidden_channel),# 1x1 pointwise conv(linear)nn.Conv2d(hidden_channel, out_channel, kernel_size1, biasFalse),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_classes1000, alpha1.0, round_nearest8):super(MobileNetV2, self).__init__()# 反残差结构block InvertedResidual# alpha控制网络通道数input_channel _make_divisible(32 * alpha, round_nearest)last_channel _make_divisible(1280 * alpha, round_nearest)网络配置参数:t是通道扩展系数 c是通道数n是组成员数s是步长inverted_residual_setting [# t, c, n, s[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 []# conv1 layerfeatures.append(ConvBNReLU(3, input_channel, stride2))# 用反残差结构搭建网络for t, c, n, s in inverted_residual_setting:output_channel _make_divisible(c * alpha, round_nearest)for i in range(n):# 每个反残差模块组的第一个反残差块的stride根据指定要求s设置,其余的默认都是1stride s if i 0 else 1features.append(block(input_channel, output_channel, stride, expand_ratiot))input_channel output_channelfeatures.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, modefan_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, 0.01)nn.init.zeros_(m.bias)def forward(self, x):# mobilenetV2 1.0为例# N x 3 x 224 x 224x self.features(x)# N x 1280 x 7 x 7x self.avgpool(x)# N x 1280 x 1 x 1x torch.flatten(x, 1)# N x 1280x self.classifier(x)# N x 100return x# mobilenetV2 0.25 def MobileNetV2x25():return MobileNetV2(alpha0.25, round_nearest8)# mobilenetV2 0.50 def MobileNetV2x50():return MobileNetV2(alpha0.5, round_nearest8)# mobilenetV2 0.75 def MobileNetV2x75():return MobileNetV2(alpha0.75, round_nearest8)# mobilenetV2 1.00 def MobileNetV2x100():return MobileNetV2(alpha1.0, round_nearest8)if __name__ __main__:device torch.device(cuda:0 if torch.cuda.is_available() else cpu)model MobileNetV2x100().to(device)summary(model, input_size(3, 224, 224))summary可以打印网络结构和参数方便查看搭建好的网络结构。 总结 尽可能简单、详细的介绍了反残差结构的原理和卷积过程讲解了MobileNets_V2模型的结构和pytorch代码。
http://www.hkea.cn/news/14444051/

相关文章:

  • 住房建设部网站监理员活动策划流程及细节
  • 个人网站建设实训目的备案不关闭网站的方法
  • 犀牛网站建设电子商城网站制作公司
  • 网站字体怎么设置青岛做网站定制
  • 怎么学好网站开发江苏建设教育考试网站
  • 烟台建设银行网站黄骅市旅游景点有哪些
  • 网站管理建设工作报告国外有哪些设计网站推荐
  • 做医药商城网站的公司dede企业网站带留言板后台查询
  • 怎么才服务器上做网站高清图片素材网站推荐
  • 山东省建设文化传媒有限公司网站优秀的wordpress博客
  • 北京做兼职从哪个网站深圳市凡客科技有限公司
  • 济南正规网站制作怎么选择技术培训机构排名前十
  • 二级网站内容建设要求吗河北网站搜索排名优化方案
  • 企业手机网站建设效果济宁做网站的公司
  • 辽宁移动网站赌场网站建站
  • 广告网站留电话整人网络认证网站
  • 免费网站模板带后台网站制作网站建设需要多少钱
  • 网站设计分析案例如何做酒店网站
  • 网站建设 网页设计 的文章网站怎么做百度能搜到
  • 程序员知识网站需要多少钱东莞seo建站优化费用
  • 如何免费建网站大连做网页工作室
  • 做彩票网站需要什么服务器wordpress点击文字弹窗
  • 教育网站建设计划书wordpress小工具缓存
  • 黄岛区城市建设局网站商务网站设计实训报告
  • 现在还有做系统的网站吗wordpress 仪表盘
  • 网站建设开票属于什么服务网络营销方式的图片
  • 蚌埠网站建设网站linux做网站1G内存够不
  • 手机网站被拦截怎么解除任丘哪里做网站
  • 三明网站开发域名注册网站排名
  • 房产公司网站建设网站建设策划书