1、背景
2017年,谷歌发布了一个专门针对移动设备优化的Tensorflow版本——Tensorflow Lite,并于年末开放了开发者预览版。
当前ML,DL系统通常软件服务商的服务端为用户进行服务,而此次Google希望能将一部分相关处理转移到用户的移动设备上,从而减轻服务端的压力。同时,并且一些需要学习的用户数据涉及用户的敏感信息,并不适合通过网络连接发送给服务商,因此利用Tensorflow Lite可以使得在设备本地进行模型的train与inference。
当前ML,DL系统通常软件服务商的服务端为用户进行服务,而此次Google希望能将一部分相关处理转移到用户的移动设备上,从而减轻服务端的压力。同时,并且一些需要学习的用户数据涉及用户的敏感信息,并不适合通过网络连接发送给服务商,因此利用Tensorflow Lite可以使得在设备本地进行模型的train与inference。
2、特点
TensorFlow Lite具有的特点如下:
- 轻量级:允许小 binary size 和快速初始化/启动的设备端机器学习模型进行推断。
- 跨平台:运行时的设计使其可以在不同的平台上运行,如目前支持的android和 iOS。
- 快速:专为移动设备进行优化,包括大幅提升模型加载时间,支持硬件加速。
3、运行环境
ide:Android Studio最新版本:3.1.3
SDK:Android SDK 高于26
NDK:16以上
JDK:jdk1.8以上
如果没有配置好,建议安装Android Studio最新版本3.1.3后进行sdk、ndk升级。
4、下载demo进行编译
4.1 下载
4.2 导入Android studio编译
下面是导入后的目录结构:
build的时候你会遇到很多问题,这个时候你需要修改project的build.gradle以及APP的build.gradle
project的build.gradle文件修改后的代码:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
mavenCentral()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
APP的build.gradle文件修改后的代码:
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
buildToolsVersion "27.0.3"
defaultConfig {
applicationId "android.example.com.tflitecamerademo"
// Required by Camera2 API.
minSdkVersion 21
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
lintOptions {
abortOnError false
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
aaptOptions {
noCompress "tflite"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
repositories {
maven {
url 'https://google.bintray.com/tensorflow'
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:support-annotations:27.1.1'
implementation 'com.android.support:support-v13:27.1.1'
implementation 'org.tensorflow:tensorflow-lite:1.9.0'
testImplementation 'junit:junit:4.12'
}
def modelDownloadUrl = "https://storage.googleapis.com/download.tensorflow.org/models/tflite/mobilenet_v1_224_android_quant_2017_11_08.zip"
def localCache = "build/intermediates/mobilenet_v1_224_android_quant_2017_11_08.zip"
def targetFolder = "src/main/assets"
task downloadModel(type: DownloadUrlTask) {
doFirst {
println "Downloading ${modelDownloadUrl}"
}
sourceUrl = "${modelDownloadUrl}"
target = file("${localCache}")
}
task unzipModel(type: Copy, dependsOn: 'downloadModel') {
doFirst {
println "Unzipping ${localCache}"
}
from zipTree("${localCache}")
into "${targetFolder}"
}
// Ensure the model file is downloaded and extracted before every build
preBuild.dependsOn unzipModel
class DownloadUrlTask extends DefaultTask {
@Input
String sourceUrl
@OutputFile
File target
@TaskAction
void download() {
ant.get(src: sourceUrl, dest: target)
}
}
其中TensorFlow Lite的最新版本库是:
org.tensorflow:tensorflow-lite:1.9.0
最新的里面有setNumThreads()方法的实现。
如果有什么问题请QQ联系我。