CoreML 네임스페이스
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
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 키가 있는 NSString 및 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