Classification d'images Tensorflow 2.0 : installation, chargement de données, création et formation du modèle

Publié: 2020-04-21

La classification des images est une catégorie de reconnaissance de formes. Il classe les images en fonction de la relation entre les pixels voisins. En d'autres termes, il utilise des informations contextuelles pour organiser les images et est très populaire parmi les différentes technologies. C'est un sujet important dans Deep Learning, et si vous l'apprenez, vous apprécierez sûrement cet article.

Ici, nous allons effectuer la classification d'images TensorFlow. Nous allons construire un modèle, le former, puis améliorer sa précision pour classer les images de cactus. TensorFlow est une plate-forme d'apprentissage automatique open source et un produit de Google.

Commençons.

Table des matières

Installer TensorFlow 2.0

Tout d'abord, vous devez installer TensorFlow sur Google Colab. Vous pouvez l'installer via pip :

!pip install tensorflow-gpu==2.0.0-alpha0

Ensuite, nous vérifierons l'installation :

importer tensorflow en tant que tf

impression(tf.__version)

# Sortie : 2.0.0-alpha0

La source

Apprendre : les 5 projets TensorFlow les plus populaires pour les débutants

Charger les données

Après la vérification, nous pouvons charger les données en utilisant le tf.data.dataset. Nous allons construire un classificateur qui détermine si une image contient un cactus ou non. Le cactus doit être colonnaire. Nous pouvons utiliser le jeu de données Cactus Aerial Photos à cette fin. Maintenant, nous allons charger les chemins d'accès aux fichiers avec leurs étiquettes :

train_csv = pd.read_csv('données/train.csv')

# Ajouter les noms de fichiers d'image dans train/ avec un chemin relatif

filenames = ['train/' + fname pour fname dans train_csv['id'].tolist()]

labels = train_csv['has_cactus'].tolist()

train_filenames, val_filenames, train_labels, val_labels =

train_test_split(noms de fichiers,

Étiquettes,

train_size=0.9,

état_aléatoire=42)

Une fois que nous avons les étiquettes et les noms de fichiers, nous sommes prêts à créer les objets tf.data.Dataset :

train_data = tf.data.Dataset.from_tensor_slices(

(tf.constant(train_filenames), tf.constant(train_labels))

)

val_data = tf.data.Dataset.from_tensor_slices(

(tf.constant(val_filenames), tf.constant(val_labels))

)

La source

Pour le moment, notre ensemble de données ne contient pas les images réelles. Il n'a que leurs noms de fichiers. Nous aurons besoin d'une fonction pour charger les images nécessaires et les traiter afin de pouvoir effectuer la reconnaissance d'image TensorFlow sur celles-ci.

IMAGE_SIZE = 96 # Taille d'image minimale à utiliser avec MobileNetV2

BATCH_SIZE = 32

# Fonction pour charger et prétraiter chaque image

def _parse_fn (nom de fichier, étiquette) :

img = tf.io.read_file(img)

img = tf.image.decode_jpeg(img)

img = (tf.cast(img, tf.float32)/127.5) – 1

img = tf.image.resize(img, (IMAGE_SIZE, IMAGE_SIZE))

retour img, étiquette

# Exécutez _parse_fn sur chaque exemple dans les ensembles de données train et val

# Mélangez et créez également des lots

train_data = (train_data.map(_parse_fn)

.shuffle(buffer_size=10000)

.batch(BATCH_SIZE)

)

val_data = (val_data.map(_parse_fn)

.shuffle(buffer_size=10000)

.batch(BATCH_SIZE)

)

La source

Construire un modèle

Dans cet exemple de classification d'images TensorFlow, nous allons créer un modèle d'apprentissage par transfert. Ces modèles sont rapides car ils peuvent utiliser des modèles de classification d'images existants qui ont déjà subi une formation. Ils n'ont qu'à recycler la couche supérieure de leur réseau car cette couche spécifie la classe de l'image requise.

Nous utiliserons l'API Keras de TensorFlow 2.0 pour créer notre modèle de classification d'images. Et à des fins d'apprentissage par transfert, nous utiliserons le MobileNetV2 comme détecteur d'attributs. C'est la deuxième version de MobileNet et c'est un produit de Google. Il est plus léger que d'autres modèles tels que Inception et ResNet et peut fonctionner sur des appareils mobiles. Nous allons charger ce modèle sur ImageNet, geler les poids, ajouter une tête de classification et l'exécuter sans sa couche supérieure.

IMG_SHAPE = (IMAGE_SIZE, IMAGE_SIZE, 3)

# Modèle pré-formé avec MobileNetV2

base_model = tf.keras.applications.MobileNetV2(

input_shape=IMG_SHAPE,

include_top=Faux,

poids='imagenet'

)

# Geler les poids du modèle pré-formés

base_model.trainable=Faux

# Responsable classification formable

maxpool_layer = tf.keras.layers.GlobalMaxPooling2D()

prédiction_layer = tf.keras.layers.Dense(1, activation='sigmoïde')

# Tête de classification de couches avec détecteur de caractéristiques

modèle = tf.keras.Sequential([

modèle_de_base,

maxpool_layer,

prédiction_layer

])

taux_d'apprentissage = 0,0001

# Compiler le modèle

model.compile(optimizer=tf.keras.optimizers.Adam(lr=learning_rate),

loss='binary_crossentropy',

metrics=['précision']

)

La source

Vous devez utiliser les optimiseurs TensorFlow si vous comptez entraîner des modèles tf.keras. Les optimiseurs des API tf.keras.optimizers et tf.train sont regroupés dans les tf.keras.optimizers de TensorFlow 2.0. Dans TensorFlow 2.0, de nombreux optimiseurs d'origine de tf.keras ont été mis à niveau et remplacés pour de meilleures performances. Ils nous permettent d'appliquer des optimiseurs sans compromettre les performances et de gagner du temps.

Lire : Tutoriel de détection d'objets TensorFlow pour les débutants

Apprenez des cours de science des données dans les meilleures universités du monde. Gagnez des programmes Executive PG, des programmes de certificat avancés ou des programmes de maîtrise pour accélérer votre carrière.

Formation du modèle

Après avoir construit le modèle, nous pouvons l'enseigner. L'API tf.keras de TensorFlow 2.0 prend en charge l'API tf.data, vous devez donc utiliser les objets tf.data.Dataset à cette fin. Il peut effectuer l'entraînement efficacement et nous n'aurions pas à faire de compromis sur les performances.

num_epochs = 30

steps_per_epoch = round(num_train)//BATCH_SIZE

val_steps = 20

model.fit(train_data.repeat(),

époques=num_époques,

étapes_per_epoch = étapes_per_epoch,

validation_data=val_data.repeat(),

validation_steps=val_steps)

La source

Après 30 époques, la précision du modèle augmente considérablement, mais nous pouvons encore l'améliorer. Rappelez-vous, nous avons mentionné le gel des poids lors de l'apprentissage par transfert ? Eh bien, maintenant que nous avons formé le responsable de la classification, nous pouvons dégeler ces couches et affiner davantage notre ensemble de données :

# Dégelez toutes les couches de MobileNetV2

base_model.trainable=Vrai

# Regeler les calques jusqu'à ce que les calques que nous voulons affiner

pour le calque dans base_model.layers[:100] :

couche.trainable=Faux

# Utilisez un taux d'apprentissage inférieur

lr_finetune = taux_d'apprentissage / 10

# Recompiler le modèle

model.compile(loss='binary_crossentropy',

optimiseur = tf.keras.optimizers.Adam(lr=lr_finetune),

metrics=['précision'])

# Augmenter les époques d'entraînement pour un réglage fin

fine_tune_epochs = 30

total_epochs = num_epochs + fine_tune_epochs

# Affiner le modèle

# Remarque : Définissez initial_epoch pour commencer l'entraînement après l'époque 30 puisque nous

# précédemment formé pendant 30 époques.

model.fit(train_data.repeat(),

étapes_per_epoch = étapes_per_epoch,

époques=total_époques,

époque_initiale = num_époques,

validation_data=val_data.repeat(),

validation_steps=val_steps)

La source

30 époques plus tard, la précision du modèle s'améliore encore. Avec plus d'époques, nous avons constaté une plus grande amélioration de la précision du modèle. Maintenant, nous avons un modèle de reconnaissance d'image TensorFlow approprié qui peut reconnaître les cactus colonnaires dans les images avec une grande précision.

Lisez aussi: Idées de projets Tensorflow pour les débutants

En savoir plus sur la classification d'images TensorFlow

Les API hautement fonctionnelles de TensorFlow et ses capacités en font une technologie puissante que tout programmeur peut utiliser. Ses API de haut niveau suppriment également sa complexité générale, ce qui facilite son utilisation.

Souhaitez-vous en savoir plus sur TensorFlow, la classification d'images et les sujets connexes ? Ensuite, nous vous recommandons de consulter le diplôme PG IIIT-B & upGrad en apprentissage automatique et IA qui est conçu pour les professionnels en activité et offre plus de 450 heures de formation rigoureuse, plus de 30 études de cas et missions, le statut d'anciens élèves IIIT-B, 5+ pratique projets de synthèse pratiques et assistance à l'emploi avec les meilleures entreprises.

Cours d'apprentissage automatique | Apprendre en ligne, IIIT Bangalore‎

DIPLÔME PG EN APPRENTISSAGE MACHINE ET AI AVEC MISE À NIVEAU ET IIIT BANGALORE.
Appliquer maintenant