preface
由于项目需要,kevin 要将模型放到手机里面去测试速度,于是乎写了这篇文章,记录这个过程。本来想尝试 ncnn 进行部署,然而流程有些复杂,于是乎在师兄的建议下先用 PyTorch 官方的 Mobile 模块试试,GitHub 仓库里面有很多详细的 demo 展示,直接 clone 下来就行了。
装包配环境
众所周知,将模型放到手机中去测试速度的话呢,肯定得先搞个 APP 出来,目前有安卓开发和 IOS 开发,比较普遍的是安卓开发,因为可以用 JAVA 作为开发语言,IOS 开发的话还需要一个 MAC 笔记本才能做这事,金钱门槛比较高,并且用的也是 Swift 语言,受众比较少。这里我们选择 Android 应用。首先直接安装 Android Studio,安装的过程很省事,并且会将安卓开发需要的两个环境: SDK 和 NDK 都安装好。不过得看网络快不快,毕竟下载的库都在国外,可能会出现错误。
下载完之后就导入项目, PyTorch 官方提供了教程合集,链接在下面,kevin 使用了 PyTorchDemoApp 这个项目进行操作。
代码语言:javascript复制https://github.com/pytorch/android-demo-app.git
在 Gradle 文件夹中有个 gradle_wrapper.properties
文件,似乎每次导入项目都会根据里面提到 gradle 的版本去下载 gradle,大大拖慢时间,后续尝试一下把里面的 distributionUrl
给注释掉 (不能注释,建议改成低一点能成功编译的版本)
#Thu Nov 19 15:33:02 PST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
# distributionUrl=https://services.gradle.org/distributions/gradle-6.1.1-all.zip
按照网上的教程来说的话,直接点击绿色的锤子开始编译,然后将手机通过 USB 线连接到电脑之后点击绿色三角形就可以在真机上进行操作了,然后这些教程就没有后续了,大概率都是抄来抄去的,kevin 在搞的时候就遇到了很多的麻烦,包括但不限于:我的绿色锤子是灰色的。
大多数麻烦都来自配置 Android Studio 环境,各种报错。配置 Android Studio 的具体步骤我已经记不起来了,这里说几个我还记得的错误(怪不得网上的教程到这一步直接就跳过了,因为 Android Studio 的环境确实难搞,很多写博客的我估计他自己压根没有自己尝试过这一步就瞎几把写)。
首先,Gradle 这个东西应该是 AS 里面的一种插件之类的吧,我发现每次新建一个项目他都会给我重新下载一个 Gradle,我暂时不知道这是在干什么的,比较重要的是,我们的 Gradle 的版本是比较重要的,有些版本是不兼容的,搞起来就非常麻烦。每一个项目都有两个 build.gradle
文件,一个在根目录,一个在 app 文件夹里面。我们一般要更改的是根目录下的 build.gradle
。AS 自己下载好 Gradle 之后,一般来说,上方的锤子就会变绿,并且会有一个安卓图标的 app
配置在右边。但是一般情况下直接编译的话是会报错的,会说类似如下的东西。
Minimum supported Gradle version is 6.1.1. Current version is 5.6.2.
经过一番心态爆炸之后我才知道 Android Gradle 插件与 Gradle 版本是有对应关系的,我们得下载对应版本的插件?不然会报错,CNM
AS 中 Gradle 插件版本 | 所需的 Gradle 版本 |
---|---|
1.0.0 - 1.1.3 | 2.2.1 - 2.3 |
1.2.0 - 1.3.1 | 2.2.1 - 2.9 |
1.5.0 | 2.2.1 - 2.13 |
2.0.0 - 2.1.2 | 2.10 - 2.13 |
2.1.3 - 2.2.3 | 2.14.1 |
2.3.0 | 3.3 |
3.0.0 | 4.1 |
3.1.0 | 4.4 |
3.2.0 - 3.2.1 | 4.6 |
3.3.0 - 3.3.3 | 4.10.1 |
3.4.0 - 3.4.3 | 5.1.1 |
3.5.0 - 3.5.4 | 5.4.1 |
3.6.0 - 3.6.4 | 5.6.4 |
4.0.0 | 6.1.1 |
4.1.0 | 6.5 |
我们可以在 File - Project Structure
里面看看我们的配置,跟上面的表不对应的话就说明我们要改一下这个东西
那么在哪里改呢,在根目录下的 build.gradle
里面改,改完之后重新编译一下,不出意外的话又会出错,接下去我们看看又出了什么勾八问题
dependencies {
classpath 'com.android.tools.build:gradle:3.5.2' // 草他