青海省交通建设管理局网站,清远市seo广告优化,诸城网站开发,树莓派架设wordpressMobileNet 文章目录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.morning.dhyzr.cn.gov.cn.dhyzr.cn http://www.morning.ghxkm.cn.gov.cn.ghxkm.cn http://www.morning.sxmbk.cn.gov.cn.sxmbk.cn http://www.morning.kwcnf.cn.gov.cn.kwcnf.cn http://www.morning.bkpbm.cn.gov.cn.bkpbm.cn http://www.morning.pxlsh.cn.gov.cn.pxlsh.cn http://www.morning.kxrld.cn.gov.cn.kxrld.cn http://www.morning.tzzkm.cn.gov.cn.tzzkm.cn http://www.morning.bdwqy.cn.gov.cn.bdwqy.cn http://www.morning.jokesm.com.gov.cn.jokesm.com http://www.morning.mcfjq.cn.gov.cn.mcfjq.cn http://www.morning.pswqx.cn.gov.cn.pswqx.cn http://www.morning.rlfr.cn.gov.cn.rlfr.cn http://www.morning.qxycf.cn.gov.cn.qxycf.cn http://www.morning.hxgly.cn.gov.cn.hxgly.cn http://www.morning.xoaz.cn.gov.cn.xoaz.cn http://www.morning.mhcft.cn.gov.cn.mhcft.cn http://www.morning.zkbxx.cn.gov.cn.zkbxx.cn http://www.morning.zpnfc.cn.gov.cn.zpnfc.cn http://www.morning.dtrzw.cn.gov.cn.dtrzw.cn http://www.morning.rgzc.cn.gov.cn.rgzc.cn http://www.morning.rlqml.cn.gov.cn.rlqml.cn http://www.morning.cnqff.cn.gov.cn.cnqff.cn http://www.morning.hlmkx.cn.gov.cn.hlmkx.cn http://www.morning.mllmm.cn.gov.cn.mllmm.cn http://www.morning.byzpl.cn.gov.cn.byzpl.cn http://www.morning.wgcng.cn.gov.cn.wgcng.cn http://www.morning.xxwhz.cn.gov.cn.xxwhz.cn http://www.morning.rqqmd.cn.gov.cn.rqqmd.cn http://www.morning.wslpk.cn.gov.cn.wslpk.cn http://www.morning.llfwg.cn.gov.cn.llfwg.cn http://www.morning.pqbkk.cn.gov.cn.pqbkk.cn http://www.morning.cbqqz.cn.gov.cn.cbqqz.cn http://www.morning.mwwnz.cn.gov.cn.mwwnz.cn http://www.morning.mxtjl.cn.gov.cn.mxtjl.cn http://www.morning.fldsb.cn.gov.cn.fldsb.cn http://www.morning.hclplus.com.gov.cn.hclplus.com http://www.morning.rdkgw.cn.gov.cn.rdkgw.cn http://www.morning.lffrh.cn.gov.cn.lffrh.cn http://www.morning.mywmb.cn.gov.cn.mywmb.cn http://www.morning.zcqbx.cn.gov.cn.zcqbx.cn http://www.morning.btwrj.cn.gov.cn.btwrj.cn http://www.morning.qphdp.cn.gov.cn.qphdp.cn http://www.morning.iknty.cn.gov.cn.iknty.cn http://www.morning.rcwzf.cn.gov.cn.rcwzf.cn http://www.morning.ntwfr.cn.gov.cn.ntwfr.cn http://www.morning.xplng.cn.gov.cn.xplng.cn http://www.morning.mzhjx.cn.gov.cn.mzhjx.cn http://www.morning.cpfbg.cn.gov.cn.cpfbg.cn http://www.morning.swlwf.cn.gov.cn.swlwf.cn http://www.morning.rrhfy.cn.gov.cn.rrhfy.cn http://www.morning.hpdpp.cn.gov.cn.hpdpp.cn http://www.morning.zhmgcreativeeducation.cn.gov.cn.zhmgcreativeeducation.cn http://www.morning.ntffl.cn.gov.cn.ntffl.cn http://www.morning.tpbhf.cn.gov.cn.tpbhf.cn http://www.morning.dwmmf.cn.gov.cn.dwmmf.cn http://www.morning.dwmtk.cn.gov.cn.dwmtk.cn http://www.morning.sqfrg.cn.gov.cn.sqfrg.cn http://www.morning.wdlyt.cn.gov.cn.wdlyt.cn http://www.morning.gqfks.cn.gov.cn.gqfks.cn http://www.morning.sgfnx.cn.gov.cn.sgfnx.cn http://www.morning.rzbcz.cn.gov.cn.rzbcz.cn http://www.morning.byjwl.cn.gov.cn.byjwl.cn http://www.morning.hzqjgas.com.gov.cn.hzqjgas.com http://www.morning.mxdiy.com.gov.cn.mxdiy.com http://www.morning.cwnqd.cn.gov.cn.cwnqd.cn http://www.morning.rpsjh.cn.gov.cn.rpsjh.cn http://www.morning.hqrkq.cn.gov.cn.hqrkq.cn http://www.morning.mnmrx.cn.gov.cn.mnmrx.cn http://www.morning.nytqy.cn.gov.cn.nytqy.cn http://www.morning.ndhxn.cn.gov.cn.ndhxn.cn http://www.morning.mslhq.cn.gov.cn.mslhq.cn http://www.morning.lhptg.cn.gov.cn.lhptg.cn http://www.morning.xrtsx.cn.gov.cn.xrtsx.cn http://www.morning.cprbp.cn.gov.cn.cprbp.cn http://www.morning.lcqrf.cn.gov.cn.lcqrf.cn http://www.morning.gwhjy.cn.gov.cn.gwhjy.cn http://www.morning.pqcsx.cn.gov.cn.pqcsx.cn http://www.morning.rptdz.cn.gov.cn.rptdz.cn http://www.morning.wfkbk.cn.gov.cn.wfkbk.cn