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

青海省交通建设管理局网站鸿运通网站建设

青海省交通建设管理局网站,鸿运通网站建设,新西兰网站建设,软件开发难度大吗MobileNet 文章目录MobileNet1. MobileNet概述2. 深度可分离卷积#xff08;depthwise separable convolution#xff09;2.1 深度可分离卷积通俗理解2.2 深度可分离卷积对于参数的优化3. MobileNet网络结构4. 代码实现4.1 卷积块4.2 深度可分离卷积块4.3 MobileNet定义4.4 完…MobileNet 文章目录MobileNet1. MobileNet概述2. 深度可分离卷积depthwise separable convolution2.1 深度可分离卷积通俗理解2.2 深度可分离卷积对于参数的优化3. MobileNet网络结构4. 代码实现4.1 卷积块4.2 深度可分离卷积块4.3 MobileNet定义4.4 完整代码1. MobileNet概述 网络专注于移动端或者嵌入式设备中的轻量级CNN相比于传统卷积神经网络在准确率小幅度降低的前提下大大减少模型参数与运算量。 传统卷积与DW卷积Depthwise Conv的差异在传统卷积中每个卷积核的channel与输入特征矩阵的channel相等每个卷积核都会与输入特征矩阵的每一个维度进行卷积运算输出特征矩阵channel等于卷积核的个数。而在DW卷积中每个卷积核的channel都是等于1的每个卷积核只负责输入特征矩阵的一个channel卷积核的个数输入特征矩阵的channel数输出特征矩阵的channel数 MobileNet模型是Google针对手机等嵌入式设备提出的一种轻量级的深层神经网络其使用的核心思想便是深度可分离卷积 depthwise separable convolution 2. 深度可分离卷积depthwise separable convolution 2.1 深度可分离卷积通俗理解 传统的三通道卷积过程如下 那么深度可分离卷积能用到轻量级的网络中保证效率减少参数量其具体是如何巧妙设计优化的下图为深度可分离卷积的运作过程。 深度可分离卷积分为两个部分Depthwise Convolution 深度卷积、Pointwise Convolution点卷积这是两个不同的卷积过程传统三通道卷积的过程是一个卷积核的厚度有三层每一层与输入的feature map的每一层做加权求和从而生成输出的一个通道故输出通道数取决于卷积核的数量卷积核的通道数等同于输入feature map的通道数对齐 而Depthwise Convolution不同其卷积核的厚度只有1对于输入的feature map特征图谱的每一个通道都有一个不同的厚度为1的卷积核相对应卷积核数量与输入通道数对应每个卷积核都只对对应通道的feature map做卷积操作这样得到的每一个通道的卷积操作得到一个1通道的feature map这样深度卷积之后的输出通道数与输入通道数一致。下图中绿色、红色、黄色表示的不同的通道数为1的卷积核。 点卷积Pointwise Convolution是采用1×11\times11×1大小的卷积核此时的卷积核是传统卷积核其通道数与输入通道数相同分别遍历输入的所有通道得到的输出通道取决于卷积核的个数点卷积与传统卷积方式相同只是卷积核使用1×11\times11×1起到一个改变通道数的作用直观意义上讲就是加厚输出的feature map其实际的意义在于由于深度卷积的方式对于特征提取不够明显再通过点卷积进行一些信息补偿在保证参数量减少的情况下尽可能的让网络的效果保持一个可观的水平。 2.2 深度可分离卷积对于参数的优化 举例说明优化的效果由于MobileNet是用于嵌入式设备等受限的设备上的网络其参数肯定是大幅度降低的。 有下列场景   使用3×33\times33×3大小的卷积层输入通道数为16输出通道数为32. 使用传统卷积的方式需要32个3×33\times33×3的卷积核对16个通道中的每一层数据进行卷积计算最后得到32个输出通道的feature map所需要的参数量为 16×32×3×3460816\times 32\times 3\times 34608 16×32×3×34608   采用深度可分离卷积由于输入的通道数为16那么采用16个3×33\times33×3大小的卷积核对16个通道的feature map分别卷积得到一个16通道的输出feature map为了得到所需要的32通道的输出采用点卷积的方式使用32个1×11\times11×1大小的卷积核遍历16个通道的输入feature map那么参数量为 16×3×316×32×1×165616\times 3\times 316\times 32\times 1\times 1656 16×3×316×32×1×1656   通过上述实验对比参数量确实大大减少。 注意深度可分离卷积指的是深度卷积Depthwise Conv点卷积Pointwise Conv而并不是一个dwDepthwise的缩写就是一个深度可分离卷积这个概念混淆度很高 3. MobileNet网络结构 一个深度可分离卷积的结构如下所示 首先对输入做深度卷积Depthwise Conv深度卷积的特点是是卷积核的个数与处理的输入通道数一致同时每个卷积核通道数都是1每个1通道卷积核去卷积输入feature map里的一个通道的数据导致深度卷积处理之后输入与输出的通道数总是不变的。 深度卷积之后就是BN层BN层为Batch Normalization对数据做归一化处理再通过激活函数接下来是一个1×11\times11×1的Conv层其就是点卷积的层使用1×11\times11×1的卷积核进行卷积操作改变通道数再进行归一化和激活输出。 BN的作用以及应用过程已经在笔者的博文《CV学习笔记-Inception》中详细介绍不再赘述。 MobileNet的网络结构图如下所示 在此不进行逐层分析仅对初始几层进行分析后面的读者可以自行推导计算过程一致。 首先输入为224×224×3224\times 224\times 3224×224×3卷积核的shape为3×3×3×323\times 3\times 3\times 323×3×3×32通过卷积核的shape能够看出本次卷积操作采用的是一个传统的卷积计算卷积核的通道数为3个数为32那么得到的输出为112×112×32112\times 112\times 32112×112×32stride步长为2此处的通道数32与卷积采用的卷积核个数32对应之后经过Conv dw层这个是深度卷积层dw即Depthwise输入feature map为112×112×32112\times 112\times 32112×112×32所用卷积核shape为3×3×323\times 3\times 323×3×32注意与上面一层的卷积层相区别少了一个维度因为每一个卷积核的通道数为1每个1通道卷积核只需要卷积feature map中的一个通道的数据故经过深度卷积之后的输出通道数不变输出的feature map为112×112×32112\times 112\times 32112×112×32然后通过一个点卷积层卷积核shape为1×1×32×641\times 1\times 32\times 641×1×32×64即使用64个1×1×1×321\times 1\times 1 \times 321×1×1×32的卷积核进行卷积操作点卷积卷积的方式与传统的卷积相同只是在尺寸上采用的1×11\times 11×1的卷积核用点卷积的方式改变通道数输出的feature map shape为112×112×64112\times 112\times 64112×112×64接下来就可以留给读者推算了深度可分离卷积部分已经作出了分析。 4. 代码实现 4.1 卷积块 代码按照传统的Conv-BN-Relu组合拳进行卷积块的定义padding采用same方式 def _conv_block(inputs, filters, kernel(3, 3), strides(1, 1)):x Conv2D(filters, kernel,paddingsame,use_biasFalse,stridesstrides,nameconv1)(inputs)x BatchNormalization(nameconv1_bn)(x)return Activation(relu6, nameconv1_relu)(x)4.2 深度可分离卷积块 深度可分离卷积分为深度卷积和点卷积x DepthwiseConv2D([params])即为深度卷积块的定义使用的是DepthwiseConv2D()在深度卷积完成BNRelu后紧接着接上了一个点卷积模块x Conv2D(pointwise_conv_filters,(1, 1))使用1×11\times 11×1卷积核来改变通道数。 def _depthwise_conv_block(inputs, pointwise_conv_filters,depth_multiplier1, strides(1, 1), block_id1):x DepthwiseConv2D((3, 3),paddingsame,depth_multiplierdepth_multiplier,stridesstrides,use_biasFalse,nameconv_dw_%d % block_id)(inputs)x BatchNormalization(nameconv_dw_%d_bn % block_id)(x)x Activation(relu6, nameconv_dw_%d_relu % block_id)(x)x Conv2D(pointwise_conv_filters, (1, 1),paddingsame,use_biasFalse,strides(1, 1),nameconv_pw_%d % block_id)(x)x BatchNormalization(nameconv_pw_%d_bn % block_id)(x)return Activation(relu6, nameconv_pw_%d_relu % block_id)(x)4.3 MobileNet定义 按照MobileNet的网络结构将其复现成python程序整合的就是上面定义的卷积模块和深度可分离卷积模块。预训练权重文件可以在网络上下载 def MobileNet(input_shape[224,224,3],depth_multiplier1,dropout1e-3,classes1000):img_input Input(shapeinput_shape)# 224,224,3 - 112,112,32x _conv_block(img_input, 32, strides(2, 2))# 112,112,32 - 112,112,64x _depthwise_conv_block(x, 64, depth_multiplier, block_id1)# 112,112,64 - 56,56,128x _depthwise_conv_block(x, 128, depth_multiplier,strides(2, 2), block_id2)# 56,56,128 - 56,56,128x _depthwise_conv_block(x, 128, depth_multiplier, block_id3)# 56,56,128 - 28,28,256x _depthwise_conv_block(x, 256, depth_multiplier,strides(2, 2), block_id4)# 28,28,256 - 28,28,256x _depthwise_conv_block(x, 256, depth_multiplier, block_id5)# 28,28,256 - 14,14,512x _depthwise_conv_block(x, 512, depth_multiplier,strides(2, 2), block_id6)# 14,14,512 - 14,14,512x _depthwise_conv_block(x, 512, depth_multiplier, block_id7)x _depthwise_conv_block(x, 512, depth_multiplier, block_id8)x _depthwise_conv_block(x, 512, depth_multiplier, block_id9)x _depthwise_conv_block(x, 512, depth_multiplier, block_id10)x _depthwise_conv_block(x, 512, depth_multiplier, block_id11)# 14,14,512 - 7,7,1024x _depthwise_conv_block(x, 1024, depth_multiplier,strides(2, 2), block_id12)x _depthwise_conv_block(x, 1024, depth_multiplier, block_id13)# 7,7,1024 - 1,1,1024x GlobalAveragePooling2D()(x)x Reshape((1, 1, 1024), namereshape_1)(x)x Dropout(dropout, namedropout)(x)x Conv2D(classes, (1, 1),paddingsame, nameconv_preds)(x)x Activation(softmax, nameact_softmax)(x)x Reshape((classes,), namereshape_2)(x)inputs img_inputmodel Model(inputs, x, namemobilenet_1_0_224_tf)model_name mobilenet_1_0_224_tf.h5model.load_weights(model_name)return model4.4 完整代码 本代码完成了一个图片的识别图片如下可以重命名为elephant.jpg输入网络运行。 #-------------------------------------------------------------# # MobileNet的网络部分 #-------------------------------------------------------------# import warnings import numpy as np# from keras.preprocessing import imagefrom keras.models import Model from keras.layers import DepthwiseConv2D,Input,Activation,Dropout,Reshape,BatchNormalization,GlobalAveragePooling2D,GlobalMaxPooling2D,Conv2D from keras.applications.imagenet_utils import decode_predictions from keras.utils import image_utils as image from keras import backend as Kdef MobileNet(input_shape[224,224,3],depth_multiplier1,dropout1e-3,classes1000):img_input Input(shapeinput_shape)# 224,224,3 - 112,112,32x _conv_block(img_input, 32, strides(2, 2))# 112,112,32 - 112,112,64x _depthwise_conv_block(x, 64, depth_multiplier, block_id1)# 112,112,64 - 56,56,128x _depthwise_conv_block(x, 128, depth_multiplier,strides(2, 2), block_id2)# 56,56,128 - 56,56,128x _depthwise_conv_block(x, 128, depth_multiplier, block_id3)# 56,56,128 - 28,28,256x _depthwise_conv_block(x, 256, depth_multiplier,strides(2, 2), block_id4)# 28,28,256 - 28,28,256x _depthwise_conv_block(x, 256, depth_multiplier, block_id5)# 28,28,256 - 14,14,512x _depthwise_conv_block(x, 512, depth_multiplier,strides(2, 2), block_id6)# 14,14,512 - 14,14,512x _depthwise_conv_block(x, 512, depth_multiplier, block_id7)x _depthwise_conv_block(x, 512, depth_multiplier, block_id8)x _depthwise_conv_block(x, 512, depth_multiplier, block_id9)x _depthwise_conv_block(x, 512, depth_multiplier, block_id10)x _depthwise_conv_block(x, 512, depth_multiplier, block_id11)# 14,14,512 - 7,7,1024x _depthwise_conv_block(x, 1024, depth_multiplier,strides(2, 2), block_id12)x _depthwise_conv_block(x, 1024, depth_multiplier, block_id13)# 7,7,1024 - 1,1,1024x GlobalAveragePooling2D()(x)x Reshape((1, 1, 1024), namereshape_1)(x)x Dropout(dropout, namedropout)(x)x Conv2D(classes, (1, 1),paddingsame, nameconv_preds)(x)x Activation(softmax, nameact_softmax)(x)x Reshape((classes,), namereshape_2)(x)inputs img_inputmodel Model(inputs, x, namemobilenet_1_0_224_tf)model_name mobilenet_1_0_224_tf.h5model.load_weights(model_name)return modeldef _conv_block(inputs, filters, kernel(3, 3), strides(1, 1)):x Conv2D(filters, kernel,paddingsame,use_biasFalse,stridesstrides,nameconv1)(inputs)x BatchNormalization(nameconv1_bn)(x)return Activation(relu6, nameconv1_relu)(x)def _depthwise_conv_block(inputs, pointwise_conv_filters,depth_multiplier1, strides(1, 1), block_id1):x DepthwiseConv2D((3, 3),paddingsame,depth_multiplierdepth_multiplier,stridesstrides,use_biasFalse,nameconv_dw_%d % block_id)(inputs)x BatchNormalization(nameconv_dw_%d_bn % block_id)(x)x Activation(relu6, nameconv_dw_%d_relu % block_id)(x)x Conv2D(pointwise_conv_filters, (1, 1),paddingsame,use_biasFalse,strides(1, 1),nameconv_pw_%d % block_id)(x)x BatchNormalization(nameconv_pw_%d_bn % block_id)(x)return Activation(relu6, nameconv_pw_%d_relu % block_id)(x)def relu6(x):return K.relu(x, max_value6)def preprocess_input(x):x / 255.x - 0.5x * 2.return xif __name__ __main__:model MobileNet(input_shape(224, 224, 3))img_path elephant.jpgimg image.load_img(img_path, target_size(224, 224))x image.img_to_array(img)x np.expand_dims(x, axis0)x preprocess_input(x)print(Input image shape:, x.shape)preds model.predict(x)print(np.argmax(preds))print(Predicted:, decode_predictions(preds,1)) # 只显示top1 实验输出
http://www.dnsts.com.cn/news/197183.html

相关文章:

  • 鲜花网站建设报告国家信息企业信用公示网
  • 速成网站 改版 影响易申建设网站
  • 福田网站建设哪家便宜wordpress带会员中心
  • 黔南服务好的高端网站设计公司网站背景视频是怎么做的
  • host绑定网站网站快照诊断
  • 响应式网站的优缺点俄罗斯视频网站开发
  • 网站建设条件招聘北京app制作多少钱
  • 阿里云做的网站怎么备份德国网站建设
  • pw网站更换域名免费网页在线制作
  • 保亭整站优化在线网站建设培训
  • 设计网站的软件wordpress themememe wpex
  • 深圳开发网站开发两学一做 网站
  • 网站菜单效果网站推广方法有几种
  • 微网站 好处建设集约化网站的进展情况
  • 做地方门户网站怎样网页源代码看答案
  • 网站的简单布局广州市国外网站建设平台
  • 公司网站建设的步骤常州企业网站
  • 电商网站设计的原则天津网站建设公司最好
  • 网站可以备案先提交类别后来改么英迈思做网站做的怎样
  • 沈阳高端网站制作淄博制作网站的公司
  • 企业网站哪家好设置网站关键词
  • 建站的公司wordpress.org去掉
  • 怎么做别人可以上的网站wordpress 采集文章
  • 滕州做网站的多少工程公司注册经营范围
  • 做网站类网站费用公众号开发者模式怎么关闭
  • 网站建设项目的结论网站开发就业
  • php网站源代码2014网站建设
  • 项目外包+网站开发网站域名到期怎么续费
  • 潍坊市网站优化宁波seo站外优化推广
  • 网站策划书优势怎么分析phonegap wordpress