coreml は何をしますか?
iOSアプリにCore MLモデルを統合し、デバイス上で機械学習推論を実行します。モデルの読み込み(.mlmodel、.mlpackage、.mlmodelc)、自動生成クラスとMLFeatureProviderを用いた予測、計算ユニット設定(CPU、GPU、Neural Engine)、MLTensor、VNCoreMLRequest、MLComputePlan、マルチモデルパイプライン、デプロイ戦略をカバーします。Core MLモデルの読み込み時、予測の実行時、計算ユニットの設定時、またはモデルのパフォーマンスプロファイリング時に使用します。
モデルの読み込み
Core MLモデルは.mlmodel(コンパイル済み)または.mlpackage(パッケージ形式)として読み込めます。コンパイル済みモデルは.mlmodelc形式で、読み込みが高速化されます。
let model = try MLModel(contentsOf: modelURL)
予測の実行
自動生成されたクラスを使用するか、MLFeatureProviderプロトコルを実装して予測を行います。
自動生成クラスを使用
let model = try MyModel(configuration: config)
let output = try model.prediction(input: MyModelInput(feature: value))
MLFeatureProviderを使用
let inputFeatures = try MLDictionaryFeatureProvider(dictionary: ["input": value])
let output = try model.prediction(from: inputFeatures)
計算ユニット設定
MLModelConfigurationのcomputeUnitsプロパティで推論に使用するハードウェアを指定します。
let config = MLModelConfiguration()
config.computeUnits = .all // CPU, GPU, Neural Engineをすべて使用
// 他のオプション: .cpuOnly, .cpuAndGPU, .cpuAndNeuralEngine
let model = try MLModel(contentsOf: modelURL, configuration: config)
MLTensorの使用
MLTensorはテンソル形式のデータを直接扱えます。
let tensor = MLTensor(shape: [1, 224, 224, 3], dataType: .float32)
VNCoreMLRequestとの統合
Visionフレームワークと統合し、画像認識を効率的に実行します。
let model = try VNCoreMLModel(for: MyModel().model)
let request = VNCoreMLRequest(model: model) { request, error in
// 結果を処理
}
MLComputePlanによるプロファイリング
モデルのパフォーマンスを分析します。
let plan = try MLComputePlan(for: model)
print(plan.performanceMetrics)
マルチモデルパイプライン
複数のモデルを連結してパイプラインを構築できます。
let pipeline = try MLModelPipeline(models: [model1, model2, model3])
let output = try pipeline.prediction(from: input)
デプロイ戦略
モデルをバンドルとしてアプリに含めるか、ダウンロードしてからコンパイルする方法があります。
バンドル
アプリのバンドルに直接モデルファイルを含めます。
ダウンロードとコンパイル
let compiledURL = try MLModel.compileModel(at: downloadedModelURL)
let model = try MLModel(contentsOf: compiledURL)
注意事項
- モデルのサイズと複雑さに応じてパフォーマンスが変わります。
MLComputePlanで事前にプロファイリングすることを推奨します。 - 計算ユニットの設定はターゲットデバイスのハードウェアに依存します。Neural EngineはA12以降のチップで利用可能です。
- モデルをダウンロードする場合は、ユーザーのプライバシーとネットワーク使用量に注意してください。