模型训练
确保你的模型已训练完成(如 PyTorch、TensorFlow/Keras 格式)。
转换为 Core ML 格式
使用 coremltools
将模型转换为 .mlmodel
格式:
import coremltools as ct
# 示例:转换 PyTorch 模型
model = torch.load('your_model.pth')
traced_model = torch.jit.trace(model, torch.randn(1, 3, 224, 224)) # 输入样例
mlmodel = ct.convert(
traced_model,
inputs=[ct.ImageType(shape=(1, 3, 224, 224))] # 根据模型调整
)
mlmodel.save('YourModel.mlmodel')
2. 集成到 Xcode 项目
导入模型文件
将 .mlmodel
文件拖入 Xcode 工程,确保勾选 Target Membership。
自动生成模型类
Xcode 会自动生成模型的 Swift 类(如 YourModel.swift
),可通过类名调用模型。
3. 编写推理代码
在 Swift 中加载模型并进行预测:
import UIKit
import CoreML
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 加载模型
guard let model = try? YourModel(configuration: MLModelConfiguration()) else {
fatalError("模型加载失败")
}
// 准备输入(示例:图像输入)
if let image = UIImage(named: "test_image"),
let buffer = image.toCVPixelBuffer() { // 需要扩展 UIImage 到 CVPixelBuffer
let input = YourModelInput(image: buffer)
// 执行推理
do {
let output = try model.prediction(input: input)
print("预测结果:", output.classLabel)
} catch {
print("推理失败:", error)
}
}
}
}
// 扩展:将 UIImage 转换为 CVPixelBuffer
extension UIImage {
func toCVPixelBuffer() -> CVPixelBuffer? {
// 实现图像尺寸调整和格式转换逻辑
// 参考:https://developer.apple.com/documentation/corevideo/cvpixelbuffer
}
}
4. 优化性能
模型量化
在转换时降低精度以减少模型大小:
mlmodel = ct.convert(..., compute_units=ct.ComputeUnit.ALL)
mlmodel = ct.models.neural_network.quantization_utils.quantize_weights(mlmodel, nbits=8)
启用 GPU/ANe 加速
在 MLModelConfiguration
中设置:
let config = MLModelConfiguration()
config.computeUnits = .all // 使用 CPU/GPU/神经引擎
let model = try YourModel(configuration: config)
5. 测试与调试
使用模拟器和真机测试
检查内存占用和推理速度。
性能分析工具
使用 Xcode 的 Instruments(特别是 Time Profiler 和 Metal System Trace)优化性能。