【发布时间】:2020-08-07 19:21:17
【问题描述】:
我已经训练模型从图像中识别矩形。我工作得很好,但只使用特定的图像(因为我认为取决于特定的纵横比)。 例如:
在此处输入图片描述 但是当我开始使用相同的图像但尺寸不同时,它就不起作用了。
有人能告诉我为什么会这样吗?我该如何解决?
我如何提出请求:
let requestHandler = VNImageRequestHandler(cgImage: cgImage, orientation: image.cgImageOrientation, options: [:])
self.request = VNCoreMLRequest(model: model) { (request, error) in
guard let observations = request.results as? [VNRecognizedObjectObservation] else {
return
}
self.visualizeObservations(observations: observations)
print(observations)
}
request.imageCropAndScaleOption = .scaleFill
DispatchQueue.global(qos: .background).async {
do {
try requestHandler.perform([self.request])
} catch let error as NSError {
print("Error in performing Image request: \(error)")
}
}
另外,我想知道,在什么情况下,模型可以在 CreateML GUI 中检测到对象,但不能在屏幕上显示相同的图像?
更新: 我已经找到了解决方案。 根本原因是无效的输出,当我改变时
let requestHandler = VNImageRequestHandler(cgImage: cgImage, orientation: image.cgImageOrientation, options: [:])
到
let requestHandler = VNImageRequestHandler(data: image.jpegData(compressionQuality: 1)!, orientation: image.cgImageOrientation, options: [:])
解决问题。
【问题讨论】:
-
您可以通过在许多不同尺寸的图像上训练模型来修复它。
-
@MatthijsHollemans 感谢您的回复。也许你知道,在哪些情况下模型可以在 CreateML GUI 中检测到对象,但不能使用 VNImageRequest 检测同一图像?
-
确保您在 Vision 请求中使用了正确的
imageCropAndScaleOption(请参阅VNCoreMLModel)。
标签: ios machine-learning coreml