iOS 食谱模型准备¶
本食谱演示了如何为 iOS 应用准备 PyTorch MobileNet v2 图像分类模型,以及如何设置 iOS 项目以使用移动就绪的模型文件。
简介¶
训练完 PyTorch 模型或提供预训练模型后,它通常还不能在移动应用中使用。它需要进行量化(有关详细信息,请参阅 量化食谱),转换为 TorchScript 以便 iOS 应用可以加载它,并针对移动应用进行优化(请参阅 脚本化和针对移动设备优化食谱)。此外,iOS 应用需要正确设置才能启用 PyTorch Mobile 库的使用,然后才能加载和使用模型进行推理。
步骤¶
1. 获取预训练和量化的 MobileNet v2 模型¶
要获取 MobileNet v2 量化模型,只需执行以下操作
import torchvision
model_quantized = torchvision.models.quantization.mobilenet_v2(pretrained=True, quantize=True)
2. 针对移动应用脚本化和优化模型¶
使用脚本或跟踪方法将量化模型转换为 TorchScript 格式
import torch
dummy_input = torch.rand(1, 3, 224, 224)
torchscript_model = torch.jit.trace(model_quantized, dummy_input)
或
torchscript_model = torch.jit.script(model_quantized)
警告
跟踪 方法仅脚本化跟踪期间执行的代码路径,因此它不适用于包含决策分支的模型。有关详细信息,请参阅 脚本化和针对移动设备优化食谱。
然后针对移动设备优化 TorchScript 格式的模型并保存它
from torch.utils.mobile_optimizer import optimize_for_mobile
torchscript_model_optimized = optimize_for_mobile(torchscript_model)
torch.jit.save(torchscript_model_optimized, "mobilenetv2_quantized.pt")
通过以上两个步骤中的 7 行或 8 行代码(取决于是否调用脚本或跟踪方法来获取模型的 TorchScript 格式),我们便得到了一个可以添加到移动应用中的模型。
3. 在 iOS 上添加模型和 PyTorch 库¶
要在 iOS 应用中使用移动设备就绪模型 mobilenetv2_quantized.pt,请创建一个新的 Xcode 项目或在您现有的 Xcode 项目中,然后按照以下步骤操作。
打开 Mac 终端,cd 到您的 iOS 应用的项目文件夹;
如果您的 iOS 应用尚未使用 Cocoapods,请先运行 pod init 生成 Podfile 文件。
从 Xcode 或任何编辑器编辑 Podfile,并在目标下添加以下行。
pod 'LibTorch', '~>1.6.1'
从终端运行 pod install,然后打开项目的 xcworkspace 文件;
从 这里 保存两个文件 TorchModule.h 和 TorchModule.mm,并将它们拖放到您的项目中。如果您的项目基于 Swift,将显示一个标题为“是否要配置 Objective-C 桥接头文件?”的消息框;单击“创建桥接头文件”按钮以创建 Swift 到 Objective-c 桥接头文件,并将 #import “TorchModule.h” 添加到头文件 <your_project_name>-Bridging-Header.h 中;
将模型文件 mobilenetv2_quantized.pt 拖放到项目中。
完成这些步骤后,您就可以成功构建并运行您的 Xcode 项目。要实际编写使用模型的代码,请参考 PyTorch Mobile iOS 代码演练 和两个完整的可运行示例 iOS 应用 HelloWorld 和 iOS 黑客马拉松示例。