Il ressemble à Matthijs résolu votre problème de base avec son commentaire ci-dessus, mais je peux développer que pour les futurs qui rencontrent ce avec d'autres modèles. Lors de la conversion d'un modèle Caffe en fichier .mlmodel à l'aide de coremltools d'Apple, le convertisseur d'Apple prend à la fois le binaire .caffemodel (contenant la structure du modèle et les poids), ainsi qu'une description du modèle .prototxt basée sur le texte (qui peut avoir un peu plus de contexte que le .caffemodel fait).
Souvent, les modèles formés Caffe auront quelques différents fichiers .prototxt avec eux (deploy.prototxt
, solver.prototxt
, train.prototxt
), et que vous voulez généralement utiliser la deploy.prototxt
(ou prototxt du même nom).
Même si vous le faites, vous pouvez toujours rencontrer une erreur à propos de coremltools étant "Impossible de déduire le nom d'entrée et les dimensions". Les modèles Caffe n'ont pas d'obligation explicite d'indiquer les dimensions d'entrée que le modèle va accepter, donc coremltools essaie de déduire cela à partir de quelques sources différentes. Si ces sources sont manquantes, vous devrez peut-être les éditer dans le fichier .prototxt.
Dans ce qui précède lié deploy_places205.protxt
, cette taille d'entrée est spécifiée par le code suivant en haut du fichier:
input: "data"
input_dim: 10
input_dim: 3
input_dim: 224
input_dim: 224
mais vous pouvez aussi voir ce qui suit dans une de ces descriptions .prototxt:
input: "data"
input_shape {
dim: 1
dim: 3
dim: 227
dim: 227
}
Si vous avez un fichier .prototxt qui manque ce pour son entrée, vous pouvez ajouter une ou l'autre de droite ci-dessus avant la première layer {
instance dans le fichier. Les dimensions sont, dans l'ordre: taille du lot (ignorée par Core ML), canaux de couleur, largeur de l'image, hauteur de l'image. Vous pouvez les ajuster pour correspondre à ce que le réseau attend.
Vous devrez peut-être également vérifier que "données" est la couche d'entrée utilisée par le modèle, recherchez donc la première instance layer {
et vérifiez qu'elle indique bottom: "data"
à l'intérieur.Si le nom de la couche est différent, vous devrez peut-être le modifier ici ou dans le nom de la couche de données.
Vous pouvez également avoir besoin de définir le nom de votre couche de données dans le convertisseur coremltools pour vous assurer qu'il prend le bon. Pour référence, voici le petit script Python que j'utilise pour convertir un modèle comme celui-ci:
import coremltools
coreml_model = coremltools.converters.caffe.convert(('mymodel.caffemodel', 'deploy.prototxt'),
image_input_names = "data",
is_bgr = True,
class_labels='labels.txt'
)
coreml_model.save('MyModel.mlmodel')
Vous n'utilisez probablement pas le bon fichier .prototxt. Généralement, il y en a un appelé xxx_deploy.prototxt. Utilisez celui-là à la place. –
Mais je l'ai eu du site d'Apple. Ils ont créé leur modèle à partir de là, alors comment ça devrait être faux? J'ai obtenu des fichiers de ce lien - http://places.csail.mit.edu/model/googlenet_places205.tar.gz –
J'ai utilisé "deploy_places205.protxt", ce n'est pas l'extension avec ".prototext" mais cette fois cela fonctionne et compile avec succès. Merci @MatthijsHollemans pour vos contributions. Je vais chercher plus dans ce jusqu'à la création de mon propre modèle. –