概述
基于Win 10_Linux子系统的Tensorflowlite(.tflite模型)转换
一、前言
本篇文章是通过在windows平台下的Linux子系统实现tflite模型的转换,执行后面操作的前提是,你已经在win10平台拥有了完整的tensorflow运行和训练的环境,win10平台的tensorflow的配置和训练不在本篇文章的介绍范围,如果有问题,欢迎在评论区留言。
另:目前tflite模型仅支持ssd模型的转换,所以在训练和转换的过程中请选择ssd_mobilenet模型得出的.ckpt模型文件。
二、配置
1、平台参数
- 系统:win10 20H2
- 子系统:Ubuntu 20.04 LTS
- CPU:I7-8750H
- GPU:GTX1070 Max-q
- 内存:16GB
2、软件环境
win 10平台
- 环境管理:Anaconda 3 64-bit
- Python版本:3.6.12
- Protobuf版本:3.13.0
- C++平台:Visual Studio 2019 专业版
- CUDA版本:10.0
- cudnn版本:7.6.0
- Tensorflow:Tensorflow_gpu 1.15.0
注:关于软件环境系各版本的选择可以参考我之前写的文章。
Ubuntu平台
- 环境管理:Anaconda 3
- Python版本:3.6.12
- Protobuf版本:3.10.0
- bazel版本:3.7.2
三、子系统安装
1、在控制面板中开启子系统选项
勾选完成后,需要重启系统。
2、在windows商店搜素Linux,选择需要的linux版本,我这里选择的是Ubuntu 20.04 LTS。
注:在安装之前需要确保电脑系统盘有足够的空余。子系统是安装在系统盘中的,接下来所有在子系统中安装的组件均会占用系统盘空间。初步估计要有至少30GB左右的空余。
3、设置Linux
第一次启动子系统需要等待一段时间。
初次设置完成后,就可以设置子系统的的用户名和密码,就像完整版的Linux一样的设置。
设置完用户名和密码之后,需要重置一下root密码,运行以下命令进行重置
sudo passwd root
四、安装Anaconda (可选)
这一步是可选的,我是为了更方便对python环境进行管理,所以在子系统中安装了Anaconda。
(1) 下载Linux平台的Anaconda
在win 10中下载安装包,在子系统中访问该目录进行安装。
注:在子系统中进入/mnt/目录下,即可看到对应的windows 平台的盘符,然后进入安装包的下载位置,运行命令进行安装。
(2)安装
默认的安装位置是/root/anaconda3。
注:在安装最后一步,anaconda默认是no,这块要输入yes,不然后面会出现问题。安装完成后,重启子系统窗口,这个时候在用户名最最前面会出现‘(base)’。
(3)创建环境
运行以下命令在子系统中创建环境。
conda create --name <env_name> <package_names>
例如:conda create –-name tf python==3.6.10
注:在子系统命令提示版的复制和粘贴的快捷键是
ctrl+shift+c ##复制
ctrl+shift+v ##粘贴
子系统支持与主系统的复制和粘贴的操作。
(4)激活环境
运行以下命令,激活环境。
source activate <env_name>
五、安装tensorflow
通过pip install 命令进行安装。这里推荐使用tensorflow 1.x版本。
注:虽然说是挂载在windows平台下的子系统,但是子系统无法调用独显,所以在这里安装CPU版的tensorflow,但是对后期没有影响,因为并不需要在子系统上进行训练,在子系统上进行的操作都不涉及GPU硬件加速。
六、安装bazel
这里推荐一篇文章,这篇文章中写的很详细,可以进行参考。
https://www.jianshu.com/p/d92913173d5b
推荐使用第二种方法,即使用bazel自定义apt存储库的方式进行安装,便于之后安装和更新。如果在安装依赖包中出现过程,运行apt-get update命令更新一下,然后重新安装依赖包。
七、下载tensorflow项目和models项目
git clone https://github.com/tensorflow/tensorflow.git ## tensorflow项目
git clone https://github.com/protocolbuffers/protobuf.git ## models项目
八、安装protobuf
(1)下载
git clone https://github.com/protocolbuffers/protobuf.git
(2)安装依赖包
sudo apt-get install autoconf automake libtool curl make g++
如果在安装过程中,出现找不到包的情况,运行apt-get update更新一下再安装。
(3)安装
进入protobuf文件夹,分别运行以下命令进行安装
./configure
make
make check
make install
这里会花费较长的时间,可以乘着这个时间休息一下,干点别的事情。
(4)检查是否安装成功
运行命令 protoc –version,出现以下提示即表明成功
如果出现以下报错
运行命令export LD_LIBRARY_PATH=/usr/local/lib
九、对models项目进行编译
进入model下载目录,在./models/research/目录下,运行以下命令
protoc object_detection/protos/*.proto --python_out=.
如果没有报错即表明编译成功。
十、 安装objection_detection
(1)进入models/research/,并运行以下命令
python setup.py build
python setup.py install
(2)进入models/research/slim/,并运行以下命令
sudo rm BUILD
python setup.py build
python setup.py install
(3)进入models/research/objection_detection/builders/,并运行以下命令
python model_builder_tf1_test.py
如果出现以下记过即表明安装成功
如果出现提示缺少组件,通过pip install 命令进行安装。
十一、.ckpt模型转换.pb
在子系统中,进入models/research/objection_detection/目录下,执行export_tflite_ssd_graph.py脚本,指定相关参数。
在这中间遇到一个问题,在Ubuntu 20.04 LTS 子系统无法识别移动硬盘。
十二、运行bazel将.pb模型转换.tflite
进入之前下载的tensorflow项目目录下,运行以下命令进行转换
bazel run -c opt tensorflow/lite/toco:toco --
--input_file=$OUTPUT_DIR/tflite_graph.pb
--output_file=$OUTPUT_DIR/detect.tflite
--input_shapes=1,300,300,3
--input_arrays=normalized_input_image_tensor
--output_arrays='TFLite_Detection_PostProcess','TFLite_Detection_PostProcess:1','TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3'
--inference_type=QUANTIZED_UINT8
--mean_values=128
--std_values=128
--change_concat_input_ranges=false
--allow_custom_ops
注:修改上述命令中的相关文件的输入输出路径,其余的均不用修改。然后等待编译完成即可。
至此,你就可以在你指定的目录下找到一个.tflite文件了。
十三、结尾
利用这种方式进行模型转换的好处在于,你已经拥有了一个完整的基于win 10平台的带有GPU的tensorflow编译和训练平台,而又不想重新再折腾一个Linux系统的人。这个方式相较于那些在win 10上架设一个虚拟机能够更高效的运行(个人观点)。并且从安装、配置和操作等步骤来说较为简单。最极端的情况下,哪天一不小心操作失误,导致子系统崩溃,最多就是直接卸载再重新安装就好,比重新安装一个系统要简单快速很多。而且最重要的是子系统可以直接访问windows平台下的路径,这对于打通主系统和子系统的壁垒有很大的好处,而且说是子系统,其实完全可以将它当做是Terminal来使用,对于惯用win10的人来说学习成本也不是很高。
最后,希望这篇文章能给你带来些许的帮助,如果在执行操作的过程中遇到什么问题,欢迎在评论区进行提问。如果各位有兴趣,之后可能会出一个tensorflow官方给出安卓的实例的配置和操作说明的文章,感谢大脚的支持。
最后
以上就是激昂唇膏为你收集整理的基于Win 10_Linux子系统的Tensorflowlite(.tflite模型)转换的全部内容,希望文章能够帮你解决基于Win 10_Linux子系统的Tensorflowlite(.tflite模型)转换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复