Je travaille pour comprendre CoreML. Pour un modèle de démarrage, j'ai téléchargé Yahoo's Open NSFW caffemodel. Vous lui donnez une image, il vous donne un score de probabilité (entre 0 et 1) que l'image contient un contenu inapproprié.Conversion du modèle Caffe en CoreML
En utilisant coremltools, j'ai converti le modèle en .mlmodel et l'a introduit dans mon application. Il apparaît dans Xcode comme ceci:
Dans mon application, je peux passer avec succès une image, et la sortie apparaît comme un MLMultiArray. Là où j'ai du mal à comprendre comment utiliser ce MLMultiArray pour obtenir mon score de probabilité. Mon code est comme ceci:
func testModel(image: CVPixelBuffer) throws {
let model = myModel()
let prediction = try model.prediction(data: image)
let output = prediction.prob // MLMultiArray
print(output[0]) // 0.9992402791976929
print(output[1]) // 0.0007597212097607553
}
Pour référence, le CVPixelBuffer est redimensionnée à la nécessaire 224x224 que le modèle demande (je vais en jouer avec Vision une fois que je peux comprendre cela).
Les deux index que j'ai imprimés sur la console changent si je fournis une image différente, mais leurs scores sont très différents du résultat obtenu si j'exécute le modèle en Python. La même image passée dans le modèle en Python me donne une sortie de 0.16, alors que ma sortie CoreML, par l'exemple ci-dessus, est très différente (et un dictionnaire, contrairement au double résultat de Python) que ce que je m'attends à voir.
Est-ce qu'il y a plus de travail nécessaire pour obtenir un résultat comme je m'y attendais?
Je ne pense pas que vous ayez besoin de redimensionner le tampon manuellement. Je pense que CoreML gère cela pour vous – Guig
Je crois que cela peut seulement être le cas lors de l'utilisation de Vision. Si seulement en utilisant CoreML lui-même, je crois que le tampon doit être redimensionné (je peux confirmer, il jette une erreur si je passe le CVPixelBuffer sans redimensionnement). – ZbadhabitZ
Droite. Sauf si vous aimez écrire, réécrire et conserver le code de gestion d'image, il est beaucoup plus simple d'utiliser Vision pour envoyer des images à votre modèle. – rickster