Tic商业评论

关注微信公众号【站长自定义模块】,定时推送前沿、专业、深度的商业资讯。

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

  • QQ空间
  • 回复
  • 收藏

使用mobilenet训练自己的数据集(tensorflow版)

lijingle 深度学习 2020-12-15 13:50 4115人围观

mobilenet是卷积神经网络中的一类,并且是为了解决终端运行的神经网络的一类,其特点是兼容效果和速度,毕竟终端的处理能里有限。今天我们使用自己的数据集对mobilenet进行训练,然后将训练的结果在手机端进行展示。

mobilenet相比其他的网络有以下优点:

  1. 网络非常的小
  2. 运行速度非常快
  3. 准确率非常高
  4. 可以很好的平衡资源与准确率

它为什么很重要?主要是现在的神经网络训练基本都是在云端进行执行的,然后将运行的结果,就是图片分类或者检测的结果,发送到网页,或者通过网络发送到你的手机。还是有很多弱点的,例如网络不好,传输速率等问题,这也是5G的到重视的其中一个原因。

变化很快。你的手机上的计算能力正在迅速增长,由于SqueezeNet 和 MobileNet网络的出现 ,计算机视觉所需的网络复杂性正在缩小。

下面是本文主要介绍的内容:

  1. 什么是mobilenet
  2. 怎么用tensorflow训练自己的数据集
  3. 从GraphDef到TFLite的模型转换
  4. MobileNet版本的比较

                         皮卡丘

                                                                    没有皮卡丘

什么是mobilenet

mobilenet是google团队专门为手机端进行设计的分类网络,它充分显示的资源有好的特点,即手机端运行速度也是非常快的,当然准确率也比较高

mobilenet和传统的卷及网络不同,传统的卷积网络是直接使用3x3卷积层,然后进行 batch norm 和 ReLU。mobilenet是将3x3卷积进行拆分为一个3x3 depthwise conv 和一个1x1 pointwise conv,这样可以减少很多的计算量,如果想要了解更详细,可以参考论文或者参考我其它文章。

模型减小的最主要的就是准确率了。这里mobilenet的使用网络的大小可以根据硬件资源进行修改。这是mobilenet最好的地方。

Mobilenet表面有两个参数,我们可以对其进行调整,以适应我们的精确问题的资源/精度权衡:宽度乘法器和分辨率乘法器。宽度乘法器允许我们细化网络,而分辨率乘法器改变了图像的输入维数,减少了每一层的内部表示。Google开源了MobileNet架构,并发布了16个ImageNet checkpoints ,每个检查点对应于不同的参数配置。这给我们提供了一个极好的起点来训练我们自己的分类器,这些分类器非常小,速度也非常快。

怎样在mobilenet上训练自己的数据集

我们今天做的实验是建立一个图像分类器,分类是不是皮卡丘。我们创建数据,就是从kaggle上下载数据,下载地址文件夹如下:

/dataset/
/pikachu/[image1,..]
/no-pikachu/[image1,..]

现在我们可以进行标记我们的图片了,有了tensorflow这会使标记变得比较简单,假设tensorflow已经安装好,然后进行下载下面链接:

#链接
curl https://github.com/tensorflow/hub/blob/master/examples/image_retraining/retrain.py

然后使用下面命令进行训练我们的图片:

python retrain.py \
--image_dir ~/MLmobileapps/Chapter5/dataset/ \
--learning_rate=0.0001 \
--testing_percentage=20 \
--validation_percentage=20 \
--train_batch_size=32 \
--validation_batch_size=-1 \
--eval_step_interval=100 \
--how_many_training_steps=1000 \
--random_scale=30 \
--random_brightness=30 \
--architecture mobilenet_1.0_224 \
--output_graph=output_graph.pb \
--output_labels=output_labels.txt

注意:如果你设置:validation_batch_size 为-1;它将验证整个数据集 。 learning_rate = 0.0001 效果比较好,你也可以自己进行调整。 architecture选项是进行选择mobilenet的版本,值可以为:1.0, 0.75, 0.50, and 0.25,后缀表示图片的分辨率为224.你也可以选择其他的分辨率 224, 192, 160, or 128。

--tfhub_module 需要从https://tfhub.dev/google/imagenet/inception_v3/feature_vector/3下载需要翻墙。所以这里有下载好的,只需要将下载好的文件放到自己文件夹下,然后将路径设为你的路径即可

链接:https://pan.baidu.com/s/1aMSEWuvHQ5jD9SI0chxv5Q 
提取码:e91k

                                                             训练如图

从GraphDef到TFLite的模型转换

Toco转换器用于将TensorFlow GraphDef文件或保存模型转换为TFLite FlatBuffer或图形可视化 。( TOCO是tensorflow的优化转换器 )

我们需要通过命令行参数传递数据。在转换模型时,可以传递一些命令行参数:

--output_file OUTPUT_FILE
Filepath of the output tflite model.
--graph_def_file GRAPH_DEF_FILE
Filepath of input TensorFlow GraphDef.
--saved_model_dir
Filepath of directory containing the SavedModel.
--keras_model_file
Filepath of HDF5 file containing tf.Keras model.
--output_format {TFLITE,GRAPHVIZ_DOT}
Output file format.
--inference_type {FLOAT,QUANTIZED_UINT8}
Target data type in the output
--inference_input_type {FLOAT,QUANTIZED_UINT8}
Target data type of real-number input arrays.
--input_arrays INPUT_ARRAYS
Names of the input arrays, comma-separated.
--input_shapes INPUT_SHAPES
Shapes corresponding to --input_arrays, colon-separated.
--output_arrays OUTPUT_ARRAYS
Names of the output arrays, comma-separated.

现在我们可以使用Toco工具将TensorFlow模型转换为TensorFlow Lite模型:

toco \
--graph_def_file=/tmp/output_graph.pb
--output_file=/tmp/retrained_model.tflite
--input_arrays=Mul
--output_arrays=final_result
--input_format=TENSORFLOW_GRAPHDEF
--output_format=TFLITE
--input_shape=1,${224},${224},3
--inference_type=FLOAT
--input_data_type=FLOAT

类似地,我们可以在类似的应用程序中使用MobileNet模型;

MobileNet版本的比较

在上述两种模型中,使用了不同版本的MobileNet模型。MobileNetV 2主要是更新版本的V1,使得它在性能上更加高效和强大。

                                             Lower is better

MACS是一种多重累加运算,它测量对一幅224×224 RGB图像进行推理所需的计算量。仅从Mac的数量来看,V2的速度几乎是V1的两倍。然而,这不仅仅是关于计算的数量。在移动设备上,内存访问要比计算慢得多。V2只有80%的参数计数,因此V1比V1更好。

从结果上看,我们可以假设V2的速度几乎是V1模型的两倍。在移动设备上,当内存访问受限时,V2的计算能力非常好。

就准确性而言:

在这里,MobileNetV 2比V1稍微好一点, 不是特别明显。



路过

雷人

握手

鲜花

鸡蛋
我有话说......
电话咨询: 135xxxxxxx
关注微信