次の方法で共有


CoreML 名前空間

CoreML 名前空間は、機械学習モデル ランタイムへの比較的高レベルのアクセスを提供します。

クラス

MLArrayBatchProvider

IMLBatchProvider配列によってサポートされる 。

MLCustomLayer_Extensions

プロトコルの省略可能なメソッドの既定の IMLCustomLayer 実装。

MLCustomModel

IMLCustomModel の既定の実装。

MLCustomModel_Extensions

プロトコルの省略可能なメソッドの既定の MLCustomModel 実装。

MLDictionaryConstraint

ディクショナリ キーの種類を制限する値を格納します。

MLDictionaryFeatureProvider

によってNSDictionaryサポートされる のIMLFeatureProvider実装。

MLFeatureDescription

機能の開発者向けの MLModel わかりやすい説明。

MLFeatureValue

変更できない値と MLFeatureType 機能の 。

MLImageConstraint

イメージ フィーチャーの制約を含みます。

MLImageSize

CoreML モデル入力に使用できる 1 つのイメージ サイズについて説明します。

MLImageSizeConstraint

CoreML モデルのイメージ サイズに関する制約の説明。

MLModel

トレーニング済みの機械学習モデルをカプセル化します。

MLModelConfiguration

CoreML 名前空間は、機械学習モデル ランタイムへの比較的高レベルのアクセスを提供します。

MLModelDescription

の開発者向けのわかりやすい説明 MLModel

MLModelErrorExtensions

CoreML.MLModelError 列挙の拡張メソッド。

MLModelMetadata

DictionaryContainerに関連するメタデータを保持する MLModel

MLMultiArray

効率的な多次元配列を表します。

MLMultiArrayConstraint

多次元配列特徴量の制約を含みます。

MLMultiArrayShapeConstraint

モデルで許可される多次元配列の形状に対する制約について説明します。

MLPredictionOptions

予測計算を CPU に制限するかどうかを示す値を格納します。

MLSequence

シーケンスを 1 つの入力としてエンコードします。

MLSequenceConstraint

一連の特徴に対する制約。

インターフェイス

IMLBatchProvider

モデルにバッチでデータを提供するためのプロトコルを定義するインターフェイス。

IMLCustomLayer

カスタム モデル レイヤーに必要なメソッドを定義するインターフェイス。

IMLCustomModel

カスタム CoreML モデルを定義するインターフェイス。

IMLFeatureProvider

入力または出力機能を定義し、その値へのアクセスを許可するインターフェイス。

列挙型

MLComputeUnits

CoreML 名前空間は、機械学習モデル ランタイムへの比較的高レベルのアクセスを提供します。

MLFeatureType

CoreML でサポートされている機能の種類を列挙します。

MLImageSizeConstraintType

の形式を MLImageSizeConstraint列挙します。

MLModelError

Core ML の使用中に発生する可能性があるエラーを列挙します。

MLMultiArrayDataType

に格納されている値の型を MLMultiArray列挙します。

MLMultiArrayShapeConstraintType

の形式を MLMultiArrayShapeConstraint列挙します。

注釈

iOS 11 で導入された CoreML 名前空間を使用すると、scipy-learn、TensorFlow、Azure Custom Vision Cognitive Services などのフレームワークによって生成されるさまざまな機械学習モデルのランタイム クエリを実行できます。 CoreML では、モデルや重みのデバイス上の変更はサポートされていませんが、URL からのモデルの読み込みがサポートされているため、開発者はそれを使用して更新されたモデルをダウンロードできます。

CoreML は、単一の .mlmodel ファイルとして配布される "モデル" に依存しています。 このモデルは、Xcode、Xamarin Studio、またはコマンド ラインの統合ツールを使用して、使用可能な形式にコンパイルされます。 コマンド ラインでは、 を使用して .mlmodel ファイルを xcrun coremlcompiler compile model.mlmodel outputfolder コンパイルできます。 コンパイル済みモデルは、 という modelname.mlmodelc 名前のディレクトリの形式をとります。 その後、モデルは実行時に次のようなコードで読み込まれます。

var bundle = NSBundle.MainBundle;
var assetPath = bundle.GetUrlForResource("MarsHabitatPricer", "mlmodelc");
NSError mlErr;
model = MLModel.Create(assetPath, out mlErr);

CoreML のモデルはかなり "不透明なボックス" であり、広範な API を持っていません。 代わりに、iOS 開発者は、モデルが期待する入力と出力の名前と型を知っている必要があります。 たとえば、画像認識モデルでは、"image" として識別されるサイズ 227 x 227 の が想定 CVPixelBuffer され、"classLabel" として識別される文字列と NSDictionary キーを持つ NSString と の 2 つの出力が含まれます。 double

予測の信頼度を表す範囲 [0,1] の値。

開発者は、ネイティブ表現を の CoreML 互換インスタンスに変換する IMLFeatureProvider 必要があります。 これを行う最も簡単な方法は、 です MLDictionaryFeatureProvider

CVPixelBuffer pixelBuffer = // from image or video stream
var imageValue = MLFeatureValue.Create(pixelBuffer);

var inputs = new NSDictionary<NSString, NSObject>(new NSString("image"), imageValue);

NSError error, error2;
var inputFp = new MLDictionaryFeatureProvider(inputs, out error);
if(error != null)
{
	ErrorOccurred(this, new EventArgsT<string>(error.ToString()));
	return;
}
var outFeatures = model.GetPrediction(inputFp, out error2);
if(error2 != null)
{
	ErrorOccurred(this, new EventArgsT<string>(error2.ToString()));
	return;
}

var predictionsDictionary = outFeatures.GetFeatureValue("classLabelProbs").DictionaryValue;

より複雑ですが、より柔軟な方法は、 を実装 IMLFeatureProvider することです。

public class MarsHabitatPricerInput : NSObject, IMLFeatureProvider
{
	public double SolarPanels { get; set; }
	public double Greenhouses { get; set; }
	public double Size { get; set; }

	public NSSet<NSString> FeatureNames => new NSSet<NSString>(new NSString("solarPanels"), new NSString("greenhouses"), new NSString("size"));

	public MLFeatureValue GetFeatureValue(string featureName)
	{
		switch (featureName)
		{
			case "solarPanels":
				return MLFeatureValue.Create(SolarPanels);
			case "greenhouses":
				return MLFeatureValue.Create(Greenhouses);
			case "size":
				return MLFeatureValue.Create(Size);
			default:
				return MLFeatureValue.Create(0);
		}
	}
}

予測の取得は、 の呼び出しで同期的に GetPrediction 行われます。

NSError prErr;
IMLFeatureProvider outFeatures = model.GetPrediction(pricerInput, out prErr);
double result = outFeatures.GetFeatureValue("price").DoubleValue;

CoreML では現在、次の機能がサポートされています。

種類バリアント作成者:
ニューラル ネットワーク畳み込み、フィードフォワード、リカレント Caffe、Keras、Azure Custom Vision
ツリー アンサンブルランダム フォレスト、ブースト ツリー、デシジョン ツリー scikit-learn、XGBoost
SVMスカラーと多クラス scikit-learn、LIBSVM
一般化された線形モデル線形回帰とロジスティック回帰scikit-learn
パイプライン モデルシーケンシャル チェーン モデル scikit-learn

Apple には、CoreML モデルを作成するためのオープンソース (3 句 BSD ライセンス) Python ツールがあります。 https://pypi.python.org/pypi/coremltools

こちらもご覧ください