移动Pytorch
随着应用程序继续要求降低延迟,在边缘设备上运行ML变得越来越重要。它也是隐私保护技术的一个基本元素。
从PyTorch 1.3开始,PyTorch支持从Python到iOS和Android部署的端到端工作流。
- 提供涵盖在移动应用程序中合并ML所需的常见预处理和集成任务的api
- 支持QNNPACK量化内核库和ARM cpu
- 构建级优化和选择性编译取决于用户应用程序所需的运算符(即,只为所需的运算符支付二进制大小)
- 进一步提高移动CPU和GPU的性能和覆盖率
了解更多信息开始使用Android或iOS。
1.Android
如何使用PyTorch Android API。此应用程序在静态映像上运行TorchScript序列化的TorchVision pretrained resnet18模型,静态映像打包在应用程序中为android
1.1 安装
$pip install torchvision
要序列化模型,可以使用HelloWorld应用程序根文件夹中的python脚本:
import torch
import torchvision
model = torchvision.models.resnet18(pretrained=True)
model.eval()
example = torch.rand(1, 3, 224, 224)
traced_script_module = torch.jit.trace(model, example)
traced_script_module.save("app/src/main/assets/model.pt")
如果一切正常,我们应该在android应用程序的assets文件夹中生成model-model.pt。它将作为资产打包在android应用程序中,并可以在设备上使用。
1.2. 源代码下载
git clone https://github.com/pytorch/android-demo-app.git
cd HelloWorldApp
如果已经安装了Android SDK和Android NDK,则可以使用以下命令将此应用程序安装到连接的Android设备或模拟器:
./gradlew installDebug
我们建议您在Android Studio 3.5.1+中打开此项目。目前,PyTorch Android和demo应用程序使用的是3.5.0版本的Android gradle插件,只有Android Studio 3.5.1及更高版本支持该插件。使用Android Studio,您将能够安装Android NDK和Android SDK和androidstudio用户界面。
1.3. Gradle dependencies
build.gradle: 包含pytorch_android
repositories {
jcenter()
}
dependencies {
implementation 'org.pytorch:pytorch_android:1.4.0'
implementation 'org.pytorch:pytorch_android_torchvision:1.4.0'
}
1.4. Reading image from Android Asset
第一步,我们使用标准的android API读取image.jpgto android.graphics.Bitmap。
Bitmap bitmap = BitmapFactory.decodeStream(getAssets().open("image.jpg"));
1.5. Loading TorchScript Module
Module module = Module.load(assetFilePath(this, "model.pt"));
1.6. 准备输入
Tensor inputTensor = TensorImageUtils.bitmapToFloat32Tensor(bitmap,
TensorImageUtils.TORCHVISION_NORM_MEAN_RGB, TensorImageUtils.TORCHVISION_NORM_STD_RGB);
TensorImageUtils#bitmaptofloat32传感器方法使用android.graphics.Bitmap作为源创建torchvision格式的张量。