Ich verwende this CoreML-Modell, um Skizzenerkennung zu testen, aber es gibt keine Ergebnisse zurück. Hier ist mein Code:CoreML-Modell gibt keine Ergebnisse zurück
func predict(){
guard let image = UIImage(named: "test.png") else{
print("Image not found")
return
}
do{
let model = try VNCoreMLModel(for: sketch2().model)
let request = VNCoreMLRequest(model: model, completionHandler: displayPredictions)
let handler = VNImageRequestHandler(cgImage: (image.cgImage!))
try handler.perform([request])
}catch{
}
}
func displayPredictions(request: VNRequest, error: Error?) {
if let results = request.results as? [VNClassificationObservation]{
print(results)
}else{
print("some error")
}
}
Und die predict()
Methode wird in viewDidLoad()
genannt. Wenn results()
in displayPredictions()
gedruckt wird, gibt es das leere Array []
zurück. I asked the developer of the model Welches Format des Bildes das Modell akzeptiert und er sagte, dass es eine 128x128 Graustufen ist, könnte dies das Problem sein und wenn ja, wie würde ich die test.png
Datei in eine 128x128 Graustufen konvertieren. Wenn Sie weitere Ideen zu dem Problem haben, möglicherweise ein Problem mit der Konvertierung des Modells mit coremltools oder irgendetwas anderem, lassen Sie es mich bitte wissen. Danke für jede Hilfe.
Ist es ein Klassifizierungsmodell? Was sagt Core ML die erwartete Ausgabe ist (wenn Sie die .mlmodel-Datei in Xcode öffnen)? Beachten Sie, dass Vision derzeit anscheinend nicht mit Modellen arbeitet, die _nicht_ Klassifikatoren sind. –
Ja, ich bin ziemlich sicher, dass es ein Klassifikator ist, das Modell erwartet ein 'Image' als Eingabe und gibt ein 'MultiArray ' aus. Ich vermute also, dass es eines der Labels in der [map.txt-Datei] (https://github.com/keplerlab/neuralCreativityServer/blob/master/server/caffeModel/map.txt) ausgibt. Ich denke, es hat etwas mit der Umwandlung/Ausgabe selbst und nicht mit der Eingabe zu tun, selbst wenn ich mit einigen der Daten experimentiere, auf denen das Modell trainiert wurde, gibt es immer noch das leere Array aus. –
Wenn die Ausgabe ein 'MultiArray' ist, dann ist es kein Klassifizierer (in Core ML). Ein Klassifikator in Core ML gibt ein Dictionary von 'String: Double' zurück. Haben Sie bei der Konvertierung des Modells "class_labels = 'map.txt'" angegeben? –