1
votes

Comment charger un jeu de données d'image en niveaux de gris dans un modèle de réseau mobile

J'essaie de charger un ensemble de données d'image en niveaux de gris (mode-mnist) dans le modèle MobileNet pour prédire les nombres écrits à la main, mais selon ce tutoriel ne peut être chargé que les images RVB. Lorsque j'essaie de nourrir des échantillons de mode-mnist, cela me donne l'erreur suivante

Erreur lors de la vérification de l'entrée: keras_layer_13_input devrait avoir une forme (224, 224, 3) mais a obtenu un tableau avec la forme (224, 224, 1)

Comment résoudre ce problème?


1 commentaires

Bienvenue dans stackoverflow. Veuillez nous montrer un exemple minimal, complet et vérifiable et vous obtiendrez de l'aide


3 Réponses :


0
votes

MobileNet pré-formé ne convient probablement pas pour cette tâche. Vous avez deux problèmes différents. Mobilenet est conçu pour les images Imagenet qui sont des images 224x224 avec 3 canaux de couleur, tandis que l'ensemble de données MNIST est des images 28x28 avec un canal de couleur. Vous pouvez répéter le canal de couleur en RVB:

from PIL import Image

data = np.array([Image.fromarray(x).resize([224,224]) for x in data])

Mais avant cela, vous devez redimensionner les images. Par exemple, vous pouvez utiliser PIL pour redimensionner les images:

# data.shape [70000, 224, 224, 1] -> [70000, 224, 224, 3]
data = np.repeat(data, 3, -1)

Il y a quelques petits détails ici que vous devriez comprendre vous-même. Tels que dtype des images si vous avez chargé à partir de l'ensemble de données en tant que numpy. Vous devrez peut-être convertir les types numpy en entiers avec np.uint8().


7 commentaires

L'équivalent de TensorFlow serait: tf.tile (data, [1, 1, 1, 3]) .


Je charge l'ensemble de données à partir de ce code splits, info = tfds.load ('mnist', with_info = True, as_supervised = True, split = splits) afin que comment appliquer la solution ci-dessus pour cela


Comment redimensionner les images? Ils ne sont pas 224x224 dans mnist!


hub.KerasLayer (CLASSIFIER_URL, input_shape = (224, 224, 3)) voici comment je redimensionne les images


mais cela ne redimensionnera pas les images MNIST. ils ont 28 x 28 pixels.


Alors, quelle est la meilleure façon de faire cela? Ne pouvons-nous pas utiliser le modèle MobileNet pour prédire les images en niveaux de gris?


J'ai essayé d'ajouter plus d'explications. Dans ma solution, j'ai utilisé numpy. Peut-être qu'il existe également d'autres solutions dans le tensorflow. c'est-à-dire tensorflow.org/api_docs/python/tf/image/resize_images



0
votes

essayez ceci, x = np.stack ((x,) * 3, axis = -1) . Veuillez consulter ce lien pour plus de détails: https://github.com /malnakli/ML/blob/master/tf_serving_keras_mobilenetv2/main.ipynb


0 commentaires

0
votes

Mobilenet v2 a besoin de RVB. Vous pourrez peut-être également utiliser la fonction de conversion de PIL.

Essayez ceci:

from PIL import Image
x= Image.open(input_image).resize((96,96)).convert("RGB")

la documentation est ici: https://pillow.readthedocs.io/en/stable/reference/Image.html

p >


0 commentaires