다음을 통해 공유


CoreML 네임스페이스

CoreML 네임스페이스는 기계 학습 모델 런타임에 상대적으로 높은 수준의 액세스를 제공합니다.

클래스

MLArrayBatchProvider

IMLBatchProvider 배열에서 백업되는 입니다.

MLCustomLayer_Extensions

프로토콜의 선택적 메서드에 IMLCustomLayer 대한 기본 구현입니다.

MLCustomModel

IMLCustomModel의 기본 구현입니다.

MLCustomModel_Extensions

프로토콜의 선택적 메서드에 MLCustomModel 대한 기본 구현입니다.

MLDictionaryConstraint

사전 키의 형식을 제한하는 값을 포함합니다.

MLDictionaryFeatureProvider

IMLFeatureProvider 구현은 에 의해 NSDictionary뒷받침됩니다.

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

시퀀스를 단일 입력으로 인코딩합니다.

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"로 식별되는 크기 227x227을 예상 CVPixelBuffer 할 수 있으며 두 개의 출력이 있을 수 있습니다. "classLabel"로 식별되는 문자열과 NSDictionary 키가 있는 NSStringdouble

예측의 신뢰도를 나타내는 [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

추가 정보