Tensorflow在手机端的部署——官方demo的直接运行(1)
Tensorflow在手机端的部署——官方demo的直接运行(1)
开篇话:
许久没有写些什么了,最近在研究深度学习训练的网络模型在移动设备端的部署问题,针对完全白纸一张的我准备写点资料记录下趟过的坑,期间看了些技术博客,修补个各种bug,怕日后再遇到,因此准备写下来。
准备写个系列篇:就叫Tensorflow在手机端(移动设备)的部署;本文为该系列的第一篇,主要是讲解如何将官网提供的轻量级模型转为安卓端的apk文件,以便手机安装。
首先,我尝试成功的环境是:
win10-64位系统;
Android Studio: 3.2.0 下载链接:Android Studio下载链接
Android SDK:
Android NDK: (先别急着下载)下载链接:Android NDK下载链接
Tensorflow: 下载链接:tensorflow下载链接
预训练的mobilenet v1 轻量化模型文件:mobilenet_quant_v1_224.tflite 和 labels_mobilenet_quant_v1_224.txt
模型下载链接:量化模型下载
step1:安装Android Studio
去上面提供的官方链接去下载你系统对应的版本,我下载的是:android-studio-ide-181.5014246-windows.exe
提供一个国内镜像下载地址https://github.com/inferjay/AndroidDevTools
下载完之后,如果是安装包,可以直接安装即可;如果是解压包,可以解压后,直接运行(安装目录下的studio.exe文件)
我是直接去的官网下载的。
安装过程 如下:
点击Next
勾选Android Virtual Device 点击Next
选择安装目录, 默认是在C盘,强调下安装目录最好是英文的,不要出现中文;
点击Install就可以开始安装了。
安装完成点击Next
点击 Finish
选择Do not import setting后点击OK
提示无法载入Android SDK,没关系,之后下载,此处点击Cancel;
上图点击Next
上图选择Custom自定义(主要是为了更改页面风格,非必须),点击Next
推荐选择Darcula 这个风格,保护视力。点击Next
选择一个SDK安装下载的路径,建议路径不要有空格,最好英文的路径。采用默认路径 风格,要不然后面会提示SDK路径丢失问题。点击Next;
它会在路径目录下下载相应版本的SDK文件。
点击Finish
点击Configure中的SDK Manager
选择SDK Platforms,找到你想下载的安卓版本,现在安卓设备系统几乎都4.0以上,针对自己手机或其他设备进行版本下载,默认是9.0,我还选择了8.1,因为我的设备是这个版本。
选择SDK Tools,勾选NDK进行下载;
上述两步选择完后,点击Apply,然后Accept,点击Next进行下载。
Step2: 用Android Studio打开工程文件
然后用安卓Studio打开现有的一个项目。这个项目我选择的是tensorflow下的一个demo,首先你按照我最上面提供的tensorflow网站下载tensorflow-master文件,我将其解压到桌面,然后将Desktop\tensorflow-master\tensorflow\contrib\lite\java 目录下的demo文件夹拷贝一份放在桌面,用Android Studio打开如下。它会进行同步Sync操作,然后会有事件log提示一些存在的错误。
接下来就事各种披荆斩棘的坑需要填了,总之log中提示需要安装什么,你就点击安装,期间安装过程可能很漫长,一定要耐心,不过也有可能是卡机,可以试着关闭工程,然后重新打开工程,如此反复知道它提示同步完成,如下:
Sync完成后接下来就是Build,期间也是漫长的等待,参考上面的方法可以重新开启工程(因为优势不确定是不是卡机),这也和网速很有关系。如果Build没问题,会提示如下,
Step3:将下载的预先训练的轻量化模型放入目录
将下载的mobilenet_quant_v1_224.tflite以及对应的标签labels_mobilenet_quant_v1_224.txt放到
demo\app\src\main\assets 这个 文件夹下。之后就可以build和run了。
这个模型训练的类别涵盖1000种,包括背景的话1001种。可以选择线程数量,会取前几个概率大的类别进行显示。
点击Run'app',该过程也有可能有错误产生。你需要将手机连接电脑,
手机设置成开发者模式。我的手机是小米的,安卓系统8.1
然后会自动下载安装APP到你手机端。
然后手机端会安装了一个叫TfLite Cam的APP,测试结果如下:
我最后SDK Tools下载的情况如下:其中遇到过NDK版本问题(下述问题4),因此参考网上一个解决方法,选了个版本较低的;
可能遇到的错误如下:
1:Could not find com.android.tools.build:gradle:3.0.1
参考:https://blog.csdn.net/m00123456789/article/details/78917629
https://blog.csdn.net/qq_22703355/article/details/79713363
https://blog.csdn.net/qq_28336351/article/details/74178349
提示找不到gradle:3.0.1
在顶层build.gradle 中,可以看到build.gradle的配置:
-
buildscript {
-
repositories {
-
jcenter()
-
}
-
dependencies {
-
classpath 'com.android.tools.build:gradle:3.0.1'
-
-
// NOTE: Do not place your application dependencies here; they belong
-
// in the individual module build.gradle files
-
}
-
}
将其修改为:
-
buildscript {
-
repositories {
-
jcenter()
-
maven {
-
url 'https://maven.google.com'
-
}
-
}
-
dependencies {
-
classpath 'com.android.tools.build:gradle:3.0.1'
-
-
// NOTE: Do not place your application dependencies here; they belong
-
// in the individual module build.gradle files
-
}
-
}
2:Could not find com.android.support.constraint:constraint-layout:1.0.2错误的解决
出现这个问题是因为Android Studio需要安装插件才可以运行这个包。
解决方法是:
Tools-Android-SDK Manager-选择SDK Tools标签-选中Show Package Details-找到Support Repository-ConstraintLayout for Android
-安装当前系统需要的版本即可。
3:your android sdk is missing, out of date or corrupted
解决方法:
your android sdk is missing, out of date or corrupted,修改Android SDK Location 默认位置,重新安装,(原因是我把原先的sdk全删了),大概等个5~10分钟(据网络不同),直到Android sdk is up to date, -> finish
4:Android Studio 报错显示 mips64el-linux-android-strip 找不到
Sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/linux-x86_64/bin/mips64el-linux-android-strip 找不到, 导致编译报错
也就是说在Sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/linux-x86_64/ 路径下找不到 mips64el-linux-android-strip
如果ndk版本在r17版, 很有可能出现这个问题. 我的解决方案是:
- 先清除 Sdk/ndk-bundle/ 下的内容
- 从 https://developer.android.google.cn/ndk/downloads/older_releases 下载16b版本的ndk到本地, 并解压说, 将解压缩后的所有文件拷贝到Sdk/ndk-bundle/ 目录下
- 重新build工程
参考:https://blog.csdn.net/bylaven/article/details/80331345
AS安装方法参考:
https://www.cnblogs.com/yangfengwu/p/9065406.html
https://www.cnblogs.com/yanglh6-jyx/p/Android_AS_Configuration.html (这个写的很细)
部署参考(TF部署到Android):