J'utilise le modèle CoreML this pour tester la reconnaissance d'esquisse, mais il ne renvoie aucun résultat. Voici mon code:Modèle CoreML ne renvoyant pas de résultats
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")
}
}
Et la méthode predict()
est appelée à viewDidLoad()
. Lorsque results()
est imprimé en displayPredictions()
, il renvoie le tableau vide []
. Je asked the developer of the model quel format d'image le modèle accepte et il a dit que c'est un 128x128 niveaux de gris, cela pourrait être le problème et si oui, comment puis-je convertir le fichier test.png
en niveaux de gris 128x128. Si vous avez d'autres idées sur le problème, éventuellement un problème avec la conversion du modèle en utilisant coremltools ou toute autre chose, s'il vous plaît faites le moi savoir. Merci pour toute aide.
Est-ce un modèle de classification? Qu'est-ce que Core ML dit que la sortie attendue est (lorsque vous ouvrez le fichier .mlmodel dans Xcode)? Notez que Vision ne semble actuellement pas fonctionner avec les modèles qui ne sont pas des classificateurs. –
Oui, je suis à peu près certain qu'il s'agit d'un classificateur, le modèle attend un 'Image' comme entrée et sort un 'MultiArray '. Donc, je devine qu'il sort l'une des étiquettes dans le fichier [map.txt] (https://github.com/keplerlab/neuralCreativityServer/blob/master/server/caffeModel/map.txt). Je pense que cela a quelque chose à voir avec la conversion/sortie elle-même et pas l'entrée car même quand j'essaie avec certaines des données que le modèle a été formé, il sort toujours le tableau vide. –
Si la sortie est un 'MultiArray', ce n'est pas un classificateur (dans Core ML). Un classificateur dans Core ML renvoie un dictionnaire de 'String: Double'. Lorsque vous avez converti le modèle, avez-vous spécifié 'class_labels = 'map.txt''? Ce –