Я преобразовал эту модель Caffee в модель coreML с помощью coremltools.Эта модель предсказывает визуальную запоминаемость изображения.
Я использовал команду преобразования:
coreml_model = coremltools.converters.caffe.convert(('memnet.caffemodel', 'deploy.prototxt', 'mean.binaryproto'), image_input_names='data')
coreml_model.save('MemNet.mlmodel')
В моем проекте Objective-C я использовал этот код:
MemNet* memnet = [[MemNet alloc] init];
VNCoreMLModel* memnetModel = [VNCoreMLModel modelForMLModel: memnet.model error:nil];
VNCoreMLRequest* memnetRq = [[VNCoreMLRequest alloc] initWithModel: memnetModel completionHandler: (VNRequestCompletionHandler) ^(VNRequest *request, NSError *error){
VNCoreMLFeatureValueObservation *result = ((VNCoreMLFeatureValueObservation *)request.results.firstObject);
double prediction = result.featureValue.doubleValue;
}];
NSArray *a = @[memnetRq];
NSDictionary *d = [[NSDictionary alloc] init];
VNImageRequestHandler *handler = [[VNImageRequestHandler alloc] initWithCIImage:image options:d];
NSError* error;
[handler performRequests:a error:&error];
Проблема в том, что в обработчике завершения, когда я получаю результат запроса, тип featureValue
равен MLFeatureTypeMultiArray
Double 1 x 1 x 1 x 1 x 1массив
, а не MLFeatureTypeDouble
, как ожидалось.
Что я должен исправить, чтобы получить значение функции в двойных числах, как и ожидалось?