目前已经出现的很多的可以在移动端使用的框架caffe2、TensorFlow Lite、CNNdroid、百度MDL(mobile-deep-learning)、腾讯NCNN、亚马逊 MXNet等,我们可以直接在移动端进行开发,但是由于手机运行速度的限制我们将模型的训练过程还是放置在电脑上进行,在手机上我们可以调用训练好的模型,完成测试部分。这就需要我们在训练模型时将模型保存为Android可以调用的格式,但是对于已经训练好的模型我们就需要进行模型格式的转化。
下面我将通过我的例子讲解一下TensorFlow模型转化的过程:
我的程序使用的是TensorFlow框架,移动端使用Android studio进行开发。而想要在移动端使用TensorFlow的代码,可以通过在新建项目路径./app/build.gradle里添加代码下面一行代码实现:
implementation 'org.tensorflow:tensorflow-android:+'
但是这种的对于模型的调用需要很多的模型文件,而已经出现的移动端深度学习框架TensorFlow Lite可以更加方便的进行调用,所以我们使用这一框架,将已经训练好的模型转化为.tflite格式,然后在Android studio中配置环境,调用模型经行测试。其中关键部分是转化的过程。
转化过程:
(一)生成PB文件
我们需要做的是将训练的.pb模型转化为.tflite模型,而对于任意一个已经训练完成的TensorFlow模型都会生成几个文件如图1所示,.meta文件保存了当前图结构;.index文件保存了当前参数名;.data文件保存了当前参数值。但由于保存模型时候的格式问题,PB模型不一定存在,所以需要生成PB模型文件。
图1:模型文件
上图中根据命名习惯的不同结果可能会有略微的差别,前面的相同部分在有些文件中是synthia_498000.ckpt;而在大部分的程序中,PB模型文件是不存在的,所以我们需要利用这些文件生成PB模型;
使用代码实现:
saver = tf.train.import_meta_graph("./pre_trained_model/synthia_498000.meta", clear_devices=True)
output_nodes = ['planeMask_and_planeParam_prediction/depth_net/mask/ResizeBilinear', 'planeMask_and_planeParam_prediction/dept