首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CoreML框架从CoreML工具中生成了不同的结果

CoreML框架从CoreML工具中生成了不同的结果
EN

Stack Overflow用户
提问于 2017-06-28 02:21:26
回答 2查看 508关注 0票数 2

我一直在iOS11中按照CoreML的例子开发图像识别应用程序。然而,我注意到在ios中调用模型时的结果与在mac/python中使用coremltools时的结果有所不同。我认为不同之处可能在于图像加载部分。Python代码使用Pillow加载图像,而xcode使用CoreImage。我粘贴的关键代码如下所示。希望有人能帮助指出这个问题。

另外,输入图像是299*299 jpg。所以在这两个实现中都不应该发生任何大小调整。谢谢。

python代码

代码语言:javascript
复制
import coremltools  
from PIL import Image  
from keras.preprocessing import image  
import numpy as np  

IMG_PATH='./test.jpg'  
img = image.load_img(IMG_PATH)  
model=coremltools.models.MLModel("./Inceptionv3.mlmodel")  
res = model.predict({'image':img}) 

ios代码

代码语言:javascript
复制
self.image = [CIImage imageWithContentsOfURL:fileURL];  
self.model = [[[Inceptionv3 alloc] init] model];  

VNCoreMLModel *m = [VNCoreMLModel modelForMLModel: self.model error:nil];  
VNCoreMLRequest *rq = [[VNCoreMLRequest alloc] initWithModel: m completionHandler: (VNRequestCompletionHandler) ^(VNRequest *request, NSError *error){  
    NSArray *results = [request.results copy];  
    NSString *top_results = @"";  
    for(int index = 0; index < kNumResults; index++)  
    {  
        VNClassificationObservation *res = ((VNClassificationObservation *)(results[index]));  
         NSString *tmp = [top_results stringByAppendingFormat: @"- %d %.4f %@\n ", index, res.confidence,res.identifier];  
         top_results = [tmp copy];  
    }  
    self.label_prob = [top_results copy];  
}];  

NSDictionary *d = [[NSDictionary alloc] init];  
NSArray *a = @[rq];  
VNImageRequestHandler *handler = [[VNImageRequestHandler alloc] initWithCIImage:self.image options:d];  

dispatch_queue_t myCustomQueue;  
myCustomQueue = dispatch_queue_create("com.example.MyCustomQueue", NULL);  

dispatch_sync(myCustomQueue, ^{  
    [handler performRequests:a error:nil];  
});  

区别:

CoreML top-5军装: 0.254365套西装,西装服装: 0.198099件温莎领带: 0.077577件防弹背心: 0.068461本漫画书: 0.022226本

coremltools top-5军装: 0.458214044571防弹背心: 0.115854650736西装,西装: 0.115854650736温莎领带: 0.0413092523813皮鞋: 0.0201325211674

为了测试,测试图像original被预先调整为299*299。

EN

回答 2

Stack Overflow用户

发布于 2018-07-07 05:11:03

我也遇到过类似的问题,但使用的是用Xcode10的CreateML工具创建的模型。虽然CreateML为我提供了出色的精确度和召回率,但当我将该模型与Vision框架一起使用时,我发现性能非常差。

一次偶然的机会,我发现如果在将图像传递给请求处理程序之前将其转换为数据,则可以获得更好的性能。这就是:

性能较差: let handler = VNImageRequestHandler(cgImage: myCGImage, options: [:])

良好性能: let imageData = UIImagePNGRepresentation(UIImage(cgImage: myCGImage)!)! let handler = VNImageRequestHandler(data: imageData, options: [:])

不知道为什么会这样。

票数 0
EN

Stack Overflow用户

发布于 2019-04-28 21:00:28

我也遇到过类似的问题,我认为这与在macOS和IOS设备上使用不同的Float有关。不幸的是,我没有找到解决问题的方法,因为这似乎是系统级别的问题。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44787302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档