Caffeと同様に、CoreMLでもMLFeatureProviderという形式でデータを与え、predictionFromFeaturesを呼び出すことで、float配列から推論を行うことができます。
任意のfloat配列からMLFeatureProviderを取得するには、MLMultiArrayにfloat配列を書き込み、MLMultiArrayを持つNSMutableDictionaryを作成し、NSMutableDictionaryからMLDictionaryFeatureProviderを生成することになります。このとき、ディクショナリのキーはmlmodelの入力層の名前になります。
mlmodelに対してpredictionFromFeaturesを呼び出すことで推論します。
処理結果はMLFeatureProviderで出力されます。ディクショナリのキーは出力層の名前になります。
predictionFromFeaturesとMLFeatureProviderの使い方はcoremltools/coremlpython/のソースコードを参照してください。
CoreMLの出力はdoubleですが、内部的にはMetalPerformanceShaderでhalf floatで実行されるそうです。How can I use half floats with CoreML neural nets?
任意のfloat配列からMLFeatureProviderを取得するには、MLMultiArrayにfloat配列を書き込み、MLMultiArrayを持つNSMutableDictionaryを作成し、NSMutableDictionaryからMLDictionaryFeatureProviderを生成することになります。このとき、ディクショナリのキーはmlmodelの入力層の名前になります。
NSArray *shape = @[@1, [NSNumber numberWithInt:src_w], [NSNumber numberWithInt:src_z], [NSNumber numberWithInt:src_y], [NSNumber numberWithInt:src_x]]; MLMultiArray* data = [[MLMultiArray alloc] initWithShape:shape dataType:MLMultiArrayDataTypeFloat32 error:&error]; int shape_size=1*src_w*src_z*src_y*src_x*sizeof(float); memcpy( data.dataPointer, src, shape_size ); NSMutableDictionary*inputDict = [[NSMutableDictionary alloc] init]; inputDict[key] = data; MLDictionaryFeatureProvider *inFeatures = [[MLDictionaryFeatureProvider alloc] initWithDictionary:inputDict error:&error];
mlmodelに対してpredictionFromFeaturesを呼び出すことで推論します。
idoutFeatures = [model predictionFromFeatures:static_cast (inFeatures) error:&error];
処理結果はMLFeatureProviderで出力されます。ディクショナリのキーは出力層の名前になります。
NSSet*keys = [outFeatures featureNames]; MLFeatureValue *value = [outFeatures featureValueForName:key]; MLMultiArray* res=value.multiArrayValue; double* fsrc = (double*)res.dataPointer; float* fdst = (float*)dest; for( int i=0; i<res.count; i++ ){ fdst[i] = (float)fsrc[i]; }
predictionFromFeaturesとMLFeatureProviderの使い方はcoremltools/coremlpython/のソースコードを参照してください。
CoreMLの出力はdoubleですが、内部的にはMetalPerformanceShaderでhalf floatで実行されるそうです。How can I use half floats with CoreML neural nets?
コメント