Tutoriel Keras

Quโ€™est-ce que Keras ?

Keras est une bibliothรจque de rรฉseau neuronal Open Source รฉcrite en Python qui s'exรฉcute sur Theano ou Tensorflow. Il est conรงu pour รชtre modulaire, rapide et facile ร  utiliser. Il a รฉtรฉ dรฉveloppรฉ par Franรงois Chollet, ingรฉnieur chez Google. Keras ne gรจre pas les calculs de bas niveau. Au lieu de cela, il utilise une autre bibliothรจque pour le faire, appelรฉe ยซ Backend.

Keras est un wrapper d'API de haut niveau pour l'API de bas niveau, capable de s'exรฉcuter sur TensorFlow, CNTK ou Theano. L'API Keras de haut niveau gรจre la faรงon dont nous crรฉons des modรจles, dรฉfinissons des couches ou configurons plusieurs modรจles d'entrรฉe-sortie. ร€ ce niveau, Keras compile รฉgalement notre modรจle avec des fonctions de perte et d'optimisation, un processus de formation avec une fonction d'ajustement. Kรฉras dans Python ne gรจre pas les API de bas niveau telles que la crรฉation du graphe de calcul, la crรฉation de tenseurs ou d'autres variables, car elles ont รฉtรฉ gรฉrรฉes par le moteur ยซ backend ยป.

Quโ€™est-ce quโ€™un back-end ?

Backend est un terme en Keras qui effectue tous les calculs de bas niveau tels que les produits tensoriels, les convolutions et bien d'autres choses ร  l'aide d'autres bibliothรจques telles que Tensorflow ou Theano. Ainsi, le ยซ moteur backend ยป effectuera le calcul et le dรฉveloppement des modรจles. Tensorflow est le ยซ moteur backend ยป par dรฉfaut mais nous pouvons le modifier dans la configuration.

Theano, Tensorflow et back-end CNTK

Backend de Thรฉano

Theano est un projet open source dรฉveloppรฉ par le groupe MILA de l'Universitรฉ de Montrรฉal, Quรฉbec, Canada. C'รฉtait le premier framework largement utilisรฉ. C'est un Python Bibliothรจque qui aide ร  la crรฉation de tableaux multidimensionnels pour les opรฉrations mathรฉmatiques ร  l'aide de Numpy ou Scipy. Theano peut utiliser des GPU pour des calculs plus rapides, il peut รฉgalement crรฉer automatiquement des graphiques symboliques pour le calcul des gradients. Sur son site Web, Theano affirme qu'il peut reconnaรฎtre des expressions numรฉriquement instables et les calculer avec des algorithmes plus stables, ce qui est trรจs utile pour nos expressions instables.

Back-end de TensorFlow

Dโ€™un autre cรดtรฉ, Tensorflow est lโ€™รฉtoile montante du framework dโ€™apprentissage profond. Dรฉveloppรฉ par l'รฉquipe Brain de Google, il s'agit de l'outil d'apprentissage en profondeur le plus populaire. Avec de nombreuses fonctionnalitรฉs, les chercheurs contribuent ร  dรฉvelopper ce cadre ร  des fins d'apprentissage en profondeur.

Back-end de CNTK

Un autre moteur backend pour Keras est The Microsoft Boรฎte ร  outils cognitive ou CNTK. Il s'agit d'un cadre d'apprentissage profond open source dรฉveloppรฉ par Microsoft ร‰quipe. Il peut fonctionner sur plusieurs GPU ou sur plusieurs machines pour former un modรจle d'apprentissage profond ร  grande รฉchelle. Dans certains cas, CNTK a รฉtรฉ signalรฉ plus rapidement que d'autres frameworks tels que Tensorflow ou Theano. Ensuite, dans ce didacticiel Keras CNN, nous comparerons les backends de Theano, TensorFlow et CNTK.

Comparaison des backends

Nous devons faire un benchmark afin de connaรฎtre la comparaison entre ces deux backends. Comme vous pouvez le voir dans La rรฉfรฉrence de Jeong-Yoon Lee, les performances de 3 backends diffรฉrents sur diffรฉrents matรฉriels sont comparรฉes. Et le rรฉsultat est que Theano est plus lent que lโ€™autre backend, est-il rapportรฉ 50 fois plus lent, mais la prรฉcision est proche les unes des autres.

Une autre test de rรฉfรฉrence est effectuรฉ par Jasmeet Bhatia. Il a signalรฉ que Theano est plus lent que Tensorflow pour certains tests. Mais la prรฉcision globale est presque la mรชme pour chaque rรฉseau testรฉ.

Ainsi, entre Theano, Tensorflow et CTK, il est รฉvident que TensorFlow est meilleur que Theano. Avec TensorFlow, le temps de calcul est beaucoup plus court et CNN est meilleur que les autres.

Suivant dans ce Keras Python tutoriel, nous dรฉcouvrirons la diffรฉrence entre Keras et TensorFlow (Keras et Tensorflow).

Keras et Tensorflow

Paramรจtres Keras Tensorflow
Type Wrapper API de haut niveau API de bas niveau
Complexitรฉ Facile ร  utiliser si vous Python langue Vous devez apprendre la syntaxe d'utilisation de certaines fonctions Tensorflow
Interet Dรฉploiement rapide pour crรฉer un modรจle avec des couches standards Vous permet de crรฉer un graphique informatique arbitraire ou des couches de modรจle
Outils Utilise un autre outil de dรฉbogage API tel que TFDBG Vous pouvez utiliser les outils de visualisation Tensorboard
Communautรฉ De grandes communautรฉs actives Grandes communautรฉs actives et ressources largement partagรฉes

Avantages de Keras

Dรฉploiement rapide et facile ร  comprendre

Keras est trรจs rapide pour crรฉer un modรจle de rรฉseau. Si vous souhaitez crรฉer un modรจle de rรฉseau simple avec quelques lignes, Python Keras peut vous aider. Regardez l'exemple Keras ci-dessous :

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential()
model.add(Dense(64, activation='relu', input_dim=50)) #input shape of 50
model.add(Dense(28, activation='relu')) #input shape of 50
model.add(Dense(10, activation='softmax'))

Grรขce ร  la convivialitรฉ de l'API, nous pouvons facilement comprendre le processus. ร‰crire le code avec une fonction simple et pas besoin de dรฉfinir plusieurs paramรจtres.

Support de grande communautรฉ

De nombreuses communautรฉs d'IA utilisent Keras pour leur cadre de Deep Learning. Beaucoup dโ€™entre eux publient leurs codes ainsi que des tutoriels destinรฉs au grand public.

Avoir plusieurs backends

Vous pouvez choisir Tensorflow, CNTK et Theano comme backend avec Keras. Vous pouvez choisir un backend diffรฉrent pour diffรฉrents projets en fonction de vos besoins. Chaque backend a son propre avantage unique.

Dรฉploiement multiplateforme et facile du modรจle

Avec une variรฉtรฉ d'appareils et de plates-formes pris en charge, vous pouvez dรฉployer Keras sur n'importe quel appareil comme

  • iOS avec CoreML
  • Android avec Tensorflow Android,
  • Navigateur Web avec prise en charge .js
  • Moteur cloud
  • Raspberry Pi

Prise en charge de plusieurs GPU

Vous pouvez entraรฎner Keras sur un seul GPU ou utiliser plusieurs GPU ร  la fois. Parce que Keras dispose d'une prise en charge intรฉgrรฉe du parallรฉlisme des donnรฉes, ce qui lui permet de traiter de gros volumes de donnรฉes et d'accรฉlรฉrer le temps nรฉcessaire ร  leur formation.

Inconvรฉnients du Keras

Impossible de gรฉrer l'API de bas niveau

Keras ne gรจre que les API de haut niveau qui s'exรฉcutent sur d'autres frameworks ou moteurs backend tels que Tensorflow, Theano ou CNTK. Ce n'est donc pas trรจs utile si vous souhaitez crรฉer votre propre couche abstraite ร  des fins de recherche car Keras dispose dรฉjร  de couches prรฉconfigurรฉes.

Installation de Keras

Dans cette section, nous examinerons les diffรฉrentes mรฉthodes disponibles pour installer Keras

Installation directe ou environnement virtuel

Quel est le meilleur? Installation directe sur le python actuel ou utilisation d'un environnement virtuel ? Je suggรจre d'utiliser un environnement virtuel si vous avez de nombreux projets. Vous voulez savoir pourquoi ? En effet, diffรฉrents projets peuvent utiliser une version diffรฉrente d'une bibliothรจque keras.

Par exemple, j'ai un projet qui nรฉcessite Python 3.5 en utilisant OpenCV 3.3 avec l'ancien backend Keras-Theano mais dans l'autre projet, je dois utiliser Keras avec la derniรจre version et un Tensorflow comme backend avec Python Prise en charge de 3.6.6

Nous ne voulons pas que les bibliothรจques Keras entrent en conflit, n'est-ce pas ? Nous utilisons donc un environnement virtuel pour localiser le projet avec un type spรฉcifique de bibliothรจque ou nous pouvons utiliser une autre plateforme telle que Cloud Service pour effectuer notre calcul ร  notre place, comme Amazon Service Web.

Installation de Keras sur Amazon Services Web (AWS)

Amazon Web Service est une plate-forme qui propose des services et des produits Cloud Computing destinรฉs aux chercheurs ou ร  toute autre fin. AWS loue son matรฉriel, son rรฉseau, sa base de donnรฉes, etc. afin que nous puissions l'utiliser directement depuis Internet. L'un des services AWS les plus populaires ร  des fins d'apprentissage en profondeur est le Amazon Service d'apprentissage profond d'image machine ou DL

Pour des instructions dรฉtaillรฉes sur l'utilisation d'AWS, reportez-vous ร  ceci tutoriel

Note sur l'AMI : Vous disposerez de l'AMI suivante

Installation de Keras sur AWS

AWS Deep Learning AMI est un environnement virtuel dans le service AWS EC2 qui aide les chercheurs ou les praticiens ร  travailler avec le Deep Learning. DLAMI propose des moteurs de petits processeurs jusqu'ร  des moteurs multi-GPU haute puissance avec CUDA, cuDNN prรฉconfigurรฉs et est livrรฉ avec une variรฉtรฉ de cadres d'apprentissage en profondeur.

Si vous souhaitez l'utiliser instantanรฉment, vous devez choisir Deep Learning AMI car elle est prรฉinstallรฉe avec les frameworks d'apprentissage profond populaires.

Mais si vous souhaitez essayer un cadre d'apprentissage profond personnalisรฉ pour la recherche, vous devez installer l'AMI Deep Learning Base car elle est livrรฉe avec des bibliothรจques fondamentales telles que CUDA, cuDNN, des pilotes GPU et d'autres bibliothรจques nรฉcessaires pour fonctionner avec votre environnement d'apprentissage profond.

Comment installer Keras sur Amazon SageMaker

Amazon SageMaker est une plateforme d'apprentissage en profondeur pour vous aider ร  former et ร  dรฉployer un rรฉseau d'apprentissage en profondeur avec le meilleur algorithme.

En tant que dรฉbutant, c'est de loin la mรฉthode la plus simple pour utiliser Keras. Vous trouverez ci-dessous un processus permettant d'installer Keras sur Amazon SageMaker :

ร‰tape 1) Ouvrez Amazon SageMaker

Dans la premiรจre รฉtape, ouvrez le Amazon Faiseur de sauge console et cliquez sur Crรฉer une instance de notebook.

Installez Keras sur Amazon SageMaker

ร‰tape 2) Entrez les dรฉtails

  1. Entrez le nom de votre bloc-notes.
  2. Crรฉez un rรดle IAM. Cela crรฉera un rรดle AMI Amazon Rรดle IAM sous la forme de AmazonSageMaker-Executionrole-AAAAMMJJ|HHmmSS.
  3. Enfin, choisissez Crรฉer une instance de notebook. Aprรจs quelques instants, Amazon Sagemaker lance une instance de notebook.

Installez Keras sur Amazon SageMaker

Note: Si vous souhaitez accรฉder aux ressources de votre VPC, dรฉfinissez l'accรจs Internet direct comme activรฉ. Sinon, cette instance de notebook n'aura pas d'accรจs Internet, il est donc impossible de former ou d'hรฉberger des modรจles

ร‰tape 3) Lancez l'instance

Cliquez sur Ouvrir pour lancer l'instance

Installez Keras sur Amazon SageMaker

ร‰tape 4) Commencez ร  coder

In Jupyter, Cliquez sur Nouveau> conda_tensorflow_p36 et vous รชtes prรชt ร  coder

Installez Keras sur Amazon SageMaker

Installer Keras sous Linux

Pour activer Keras avec Tensorflow comme moteur backend, nous devons d'abord installer Tensorflow. Exรฉcutez cette commande pour installer tensorflow avec CPU (pas de GPU)

pip install --upgrade tensorflow

si vous souhaitez activer la prise en charge GPU pour tensorflow, vous pouvez utiliser cette commande

pip install --upgrade tensorflow-gpu

Installer Keras sur Linux

vรฉrifions Python pour voir si notre installation rรฉussit en tapant

user@user:~$ python
Python 3.6.4 (default, Mar 20 2018, 11:10:20) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
>>>

s'il n'y a pas de message d'erreur, le processus d'installation est rรฉussi

Installer Keras

Aprรจs avoir installรฉ Tensorflow, commenรงons ร  installer keras. Tapez cette commande dans le terminal

pip install keras

il commencera ร  installer Keras ainsi que toutes ses dรฉpendances. Vous devriez voir quelque chose comme ceci :

Installer Keras

Nous avons maintenant Keras installรฉ dans notre systรจme !

Vรฉrification

Avant de commencer ร  utiliser Keras, nous devons vรฉrifier si nos Keras utilisent Tensorflow comme backend en ouvrant le fichier de configuration :

gedit ~/.keras/keras.json

tu devrais voir quelque chose comme รงa

{
    "floatx": "float32",
    "epsilon": 1e-07,
    "backend": "tensorflow",
    "image_data_format": "channels_last"
}

comme vous pouvez le voir, le ยซ backend ยป utilise tensorflow. Cela signifie que les keras utilisent Tensorflow comme backend comme prรฉvu

et maintenant exรฉcutez-le sur le terminal en tapant

user@user:~$ python3
Python 3.6.4 (default, Mar 20 2018, 11:10:20) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import keras
Using TensorFlow backend.
>>> 

Comment installer Keras sur Windows

Avant d'installer Tensorflow et Keras, nous devrions installer Python, pip et virtualenv. Si vous avez dรฉjร  installรฉ ces bibliothรจques, vous devez passer ร  l'รฉtape suivante, sinon procรฉdez comme suit :

Installer Python 3 en tรฉlรฉchargeant ร  partir de ceci lien

Installez pip en exรฉcutant ceci.

Installez virtualenv avec cette commande

pip3 install โ€“U pip virtualenv

Installer Microsoft Visuel C++ Mise ร  jour redistribuable 2015 3

Ensuite, exรฉcutez ce script

pip3 install virtualenv

Configurer l'environnement virtuel

Ceci est utilisรฉ pour isoler le systรจme de travail avec le systรจme principal.

virtualenv โ€“-system-site-packages โ€“p python3 ./venv

Activer l'environnement

.\venv\Scripts\activate

Aprรจs avoir prรฉparรฉ l'environnement, l'installation de Tensorflow et Keras reste la mรชme que celle de Linux. Ensuite, dans ce didacticiel Deep Learning avec Keras, nous dรฉcouvrirons les principes fondamentaux de Keras pour le Deep Learning.

Fondamentaux de Keras pour l'apprentissage profond

La structure principale de Keras est le modรจle qui dรฉfinit le graphe complet d'un rรฉseau. Vous pouvez ajouter davantage de couches ร  un modรจle existant pour crรฉer un modรจle personnalisรฉ dont vous avez besoin pour votre projet.

Voici comment crรฉer un modรจle sรฉquentiel et quelques couches couramment utilisรฉes en apprentissage profond

1. Modรจle sรฉquentiel

from keras.models import Sequential
from keras.layers import Dense, Activation,Conv2D,MaxPooling2D,Flatten,Dropout

model = Sequential()

2. Couche convolutive

C'est un Keras Python exemple de couche convolutive comme couche d'entrรฉe avec la forme d'entrรฉe de 320x320x3, avec 48 filtres de taille 3ร—3 et utilise ReLU comme fonction d'activation.

input_shape=(320,320,3) #this is the input shape of an image 320x320x3
model.add(Conv2D(48, (3, 3), activation='relu', input_shape= input_shape))

un autre type est

model.add(Conv2D(48, (3, 3), activation='relu'))

3. MaxPooling Couche

Pour sous-รฉchantillonner la reprรฉsentation d'entrรฉe, utilisez MaxPool2d et spรฉcifiez la taille du noyau

model.add(MaxPooling2D(pool_size=(2, 2)))

4. Couche dense

ajouter une couche entiรจrement connectรฉe en spรฉcifiant simplement la taille de sortie

model.add(Dense(256, activation='relu'))

5. Couche d'abandon

Ajout d'une couche d'abandon avec une probabilitรฉ de 50 %

model.add(Dropout(0.5))

Compiler, former et รฉvaluer

Aprรจs avoir dรฉfini notre modรจle, commenรงons ร  les former. Il est nรฉcessaire de compiler d'abord le rรฉseau avec la fonction de perte et la fonction d'optimisation. Cela permettra au rรฉseau de modifier les poids et de minimiser les pertes.

model.compile(loss='mean_squared_error', optimizer='adam')

Maintenant, pour commencer la formation, utilisez fit pour alimenter le modรจle en donnรฉes de formation et de validation. Cela vous permettra de former le rรฉseau par lots et de dรฉfinir les รฉpoques.

model.fit(X_train, X_train, batch_size=32, epochs=10, validation_data=(x_val, y_val))

Notre derniรจre รฉtape consiste ร  รฉvaluer le modรจle avec les donnรฉes de test.

score = model.evaluate(x_test, y_test, batch_size=32)

Essayons d'utiliser une rรฉgression linรฉaire simple

import keras
from keras.models import Sequential
from keras.layers import Dense, Activation
import numpy as np
import matplotlib.pyplot as plt 
 
x = data = np.linspace(1,2,200)
y = x*4 + np.random.randn(*x.shape) * 0.3


model = Sequential()
model.add(Dense(1, input_dim=1, activation='linear'))

model.compile(optimizer='sgd', loss='mse', metrics=['mse'])

weights = model.layers[0].get_weights()
w_init = weights[0][0][0]
b_init = weights[1][0]
print('Linear regression model is initialized with weights w: %.2f, b: %.2f' % (w_init, b_init)) 


model.fit(x,y, batch_size=1, epochs=30, shuffle=False)

weights = model.layers[0].get_weights()
w_final = weights[0][0][0]
b_final = weights[1][0]
print('Linear regression model is trained to have weight w: %.2f, b: %.2f' % (w_final, b_final))

predict = model.predict(data)

plt.plot(data, predict, 'b', data , y, 'k.')
plt.show()

Aprรจs avoir entraรฎnรฉ les donnรฉes, le rรฉsultat devrait ressembler ร  ceci

Rรฉgression Linรฉaire

avec le poids initial

Linear regression model is initialized with weights w: 0.37, b: 0.00

et poids final

Linear regression model is trained to have weight w: 3.70, b: 0.61

Affiner les modรจles prรฉ-entraรฎnรฉs dans Keras et comment les utiliser

Pourquoi nous utilisons les modรจles Fine Tune et quand nous les utilisons

Le rรฉglage fin est une tรขche consistant ร  peaufiner un modรจle prรฉ-entraรฎnรฉ de telle sorte que les paramรจtres s'adaptent au nouveau modรจle. Lorsque lโ€™on veut sโ€™entraรฎner ร  partir de zรฉro sur un nouveau modรจle, nous avons besoin dโ€™une grande quantitรฉ de donnรฉes, afin que le rรฉseau puisse retrouver tous les paramรจtres. Mais dans ce cas, nous utiliserons un modรจle prรฉ-entraรฎnรฉ donc les paramรจtres sont dรฉjร  appris et auront un poids.

Par exemple, si nous voulons entraรฎner notre propre modรจle Keras pour rรฉsoudre un problรจme de classification mais que nous ne disposons que d'une petite quantitรฉ de donnรฉes, nous pouvons rรฉsoudre ce problรจme en utilisant un Transfert d'apprentissage + Mรฉthode de rรฉglage fin.

En utilisant un rรฉseau et des poids prรฉ-entraรฎnรฉs, nous n'avons pas besoin de former l'ensemble du rรฉseau. Nous avons juste besoin de former la derniรจre couche utilisรฉe pour rรฉsoudre notre tรขche, ce que nous appelons la mรฉthode de rรฉglage fin.

Prรฉparation du modรจle de rรฉseau

Pour le modรจle prรฉ-entraรฎnรฉ, nous pouvons charger une variรฉtรฉ de modรจles que Keras a dรฉjร  dans sa bibliothรจque, tels que :

  • VGG16
  • CrรฉationV3
  • ResNet
  • Rรฉseau mobile
  • Xception
  • CrรฉationResNetV2

Mais dans ce processus, nous utiliserons le modรจle de rรฉseau VGG16 et imageNet comme poids pour le modรจle. Nous allons affiner un rรฉseau pour classer 8 types diffรฉrents de classes ร  l'aide d'images de Ensemble de donnรฉes d'images naturelles Kaggle

Architecture du modรจle VGG16

Architecture du modรจle VGG16

source

Tรฉlรฉchargement de nos donnรฉes sur le compartiment AWS S3

Pour notre processus de formation, nous utiliserons une image d'images naturelles provenant de 8 classes diffรฉrentes telles que les avions, la voiture, le chat, le chien, la fleur, le fruit, la moto et la personne. Tout d'abord, nous devons tรฉlรฉcharger nos donnรฉes sur Amazon Seau S3.

Amazon Compartiment S3

ร‰tape 1) Aprรจs vous รชtre connectรฉ ร  votre compte S3, crรฉons un bucket en pointant Crรฉer Bucket

Tรฉlรฉchargement de donnรฉes vers le compartiment AWS S3

ร‰tape 2) Choisissez maintenant un nom de compartiment et votre rรฉgion en fonction de votre compte. Assurez-vous que le nom du compartiment est disponible. Aprรจs ce clic Crรฉer.

Tรฉlรฉchargement de donnรฉes vers le compartiment AWS S3

ร‰tape 3) Comme vous pouvez le constater, votre Bucket est prรชt ร  รชtre utilisรฉ. Mais comme vous pouvez le voir, l'accรจs n'est pas public, c'est bien pour vous si vous souhaitez le garder privรฉ pour vous-mรชme. Vous pouvez modifier ce bucket pour l'accรจs public dans les propriรฉtรฉs du bucket.

Tรฉlรฉchargement de donnรฉes vers le compartiment AWS S3

ร‰tape 4) Vous commencez maintenant ร  tรฉlรฉcharger vos donnรฉes d'entraรฎnement sur votre bucket. Ici, je vais tรฉlรฉcharger le fichier tar.gz qui contient des images pour le processus de formation et de test.

Tรฉlรฉchargement de donnรฉes vers le compartiment AWS S3

ร‰tape 5) Cliquez maintenant sur votre fichier et copiez le Lien afin que nous puissions le tรฉlรฉcharger.

Tรฉlรฉchargement de donnรฉes vers le compartiment AWS S3

Prรฉparation des donnรฉes

Nous devons gรฉnรฉrer nos donnรฉes de formation ร  l'aide de Keras ImageDataGenerator.

Vous devez dโ€™abord tรฉlรฉcharger en utilisant wget avec le lien vers votre fichier depuis S3 Bucket.

!wget https://s3.us-east-2.amazonaws.com/naturalimages02/images.tar.gz		
!tar -xzf images.tar.gz

Aprรจs avoir tรฉlรฉchargรฉ les donnรฉes, commenรงons le processus de formation.

from keras.preprocessing.image import ImageDataGenerator
import numpy as np
import matplotlib.pyplot as plt

train_path = 'images/train/'
test_path = 'images/test/'
batch_size = 16
image_size = 224
num_class = 8


train_datagen = ImageDataGenerator(validation_split=0.3,
                                   shear_range=0.2,
                                   zoom_range=0.2,
                                   horizontal_flip=True)

train_generator = train_datagen.flow_from_directory(
                        directory=train_path,
                        target_size=(image_size,image_size),
                        batch_size=batch_size,
                        class_mode='categorical',
                        color_mode='rgb',
                        shuffle=True)

Les donnรฉes d'imageGenerator crรฉera une donnรฉe X_training ร  partir d'un rรฉpertoire. Le sous-rรฉpertoire de ce rรฉpertoire sera utilisรฉ comme classe pour chaque objet. L'image sera chargรฉe avec le mode couleur RVB, avec le mode classe catรฉgorielle pour les donnรฉes Y_training, avec une taille de lot de 16. Enfin, mรฉlangez les donnรฉes.

Voyons nos images au hasard en les traรงant avec matplotlib

x_batch, y_batch = train_generator.next()

fig=plt.figure()
columns = 4
rows = 4
for i in range(1, columns*rows):
    num = np.random.randint(batch_size)
    image = x_batch[num].astype(np.int)
    fig.add_subplot(rows, columns, i)
    plt.imshow(image)
plt.show()

Prรฉparation des donnรฉes

Aprรจs cela, crรฉons notre modรจle de rรฉseau ร  partir de VGG16 avec le poids prรฉ-entraรฎnรฉ imageNet. Nous allons geler ces couches afin qu'elles ne puissent pas รชtre entraรฎnรฉes afin de nous aider ร  rรฉduire le temps de calcul.

Crรฉer notre modรจle ร  partir de VGG16

import keras
from keras.models import Model, load_model
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.preprocessing.image import ImageDataGenerator
from keras.applications.vgg16 import VGG16


#Load the VGG model
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(image_size, image_size, 3))

print(base_model.summary())

    # Freeze the layers 
for layer in base_model.layers:
    layer.trainable = False
 
# # Create the model
model = keras.models.Sequential()

# # Add the vgg convolutional base model
model.add(base_model)
 
# # Add new layers
model.add(Flatten())
model.add(Dense(1024, activation='relu'))
model.add(Dense(1024, activation='relu'))
model.add(Dense(num_class, activation='softmax'))
 
# # Show a summary of the model. Check the number of trainable parameters    
print(model.summary())

Comme vous pouvez le voir ci-dessous, le rรฉsumรฉ de notre modรจle de rรฉseau. ร€ partir d'une entrรฉe des couches VGG16, nous ajoutons ensuite 2 couches entiรจrement connectรฉes qui extrairont 1024 fonctionnalitรฉs et une couche de sortie qui calculera les 8 classes avec l'activation softmax.

Layer (type)                 Output Shape              Param #   
=================================================================
vgg16 (Model)                (None, 7, 7, 512)         14714688  
_________________________________________________________________
flatten_1 (Flatten)          (None, 25088)             0         
_________________________________________________________________
dense_1 (Dense)              (None, 1024)              25691136  
_________________________________________________________________
dense_2 (Dense)              (None, 1024)              1049600   
_________________________________________________________________
dense_3 (Dense)              (None, 8)                 8200      
=================================================================
Total params: 41,463,624
Trainable params: 26,748,936
Non-trainable params: 14,714,688

Entraรฎnement

# # Compile the model
from keras.optimizers import SGD

model.compile(loss='categorical_crossentropy',
          optimizer=SGD(lr=1e-3),
          metrics=['accuracy'])

# # Start the training process
# model.fit(x_train, y_train, validation_split=0.30, batch_size=32, epochs=50, verbose=2)

# # #save the model
# model.save('catdog.h5')

history = model.fit_generator(
        train_generator,
        steps_per_epoch=train_generator.n/batch_size,
        epochs=10)
        
model.save('fine_tune.h5')

# summarize history for accuracy
import matplotlib.pyplot as plt

plt.plot(history.history['loss'])
plt.title('loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['loss'], loc='upper left')
plt.show()

Rรฉsultats

Epoch 1/10
432/431 [==============================] - 53s 123ms/step - loss: 0.5524 - acc: 0.9474 
Epoch 2/10
432/431 [==============================] - 52s 119ms/step - loss: 0.1571 - acc: 0.9831
Epoch 3/10
432/431 [==============================] - 51s 119ms/step - loss: 0.1087 - acc: 0.9871
Epoch 4/10
432/431 [==============================] - 51s 119ms/step - loss: 0.0624 - acc: 0.9926
Epoch 5/10
432/431 [==============================] - 51s 119ms/step - loss: 0.0591 - acc: 0.9938
Epoch 6/10
432/431 [==============================] - 51s 119ms/step - loss: 0.0498 - acc: 0.9936
Epoch 7/10
432/431 [==============================] - 51s 119ms/step - loss: 0.0403 - acc: 0.9958
Epoch 8/10
432/431 [==============================] - 51s 119ms/step - loss: 0.0248 - acc: 0.9959
Epoch 9/10
432/431 [==============================] - 51s 119ms/step - loss: 0.0466 - acc: 0.9942
Epoch 10/10
432/431 [==============================] - 52s 120ms/step - loss: 0.0338 - acc: 0.9947

Entraรฎnement

Comme vous pouvez le constater, nos pertes ont รฉtรฉ considรฉrablement rรฉduites et la prรฉcision est proche de 100 %. Pour tester notre modรจle, nous avons sรฉlectionnรฉ des images au hasard sur Internet et les avons placรฉes dans le dossier de test avec une classe diffรฉrente ร  tester.

Tester notre modรจle

model = load_model('fine_tune.h5')

test_datagen = ImageDataGenerator()
train_generator = train_datagen.flow_from_directory(
                        directory=train_path,
                        target_size=(image_size,image_size),
                        batch_size=batch_size,
                        class_mode='categorical',
                        color_mode='rgb',
                        shuffle=True)

test_generator = test_datagen.flow_from_directory(
                        directory=test_path, 
                        target_size=(image_size, image_size),
                        color_mode='rgb',
                        shuffle=False,
                        class_mode='categorical',
                        batch_size=1)

filenames = test_generator.filenames
nb_samples = len(filenames)

fig=plt.figure()
columns = 4
rows = 4
for i in range(1, columns*rows -1):
    x_batch, y_batch = test_generator.next()

    name = model.predict(x_batch)
    name = np.argmax(name, axis=-1)
    true_name = y_batch
    true_name = np.argmax(true_name, axis=-1)

    label_map = (test_generator.class_indices)
    label_map = dict((v,k) for k,v in label_map.items()) #flip k,v
    predictions = [label_map[k] for k in name]
    true_value = [label_map[k] for k in true_name]

    image = x_batch[0].astype(np.int)
    fig.add_subplot(rows, columns, i)
    plt.title(str(predictions[0]) + ':' + str(true_value[0]))
    plt.imshow(image)
plt.show()

Et notre test est comme indiquรฉ ci-dessous ! Une seule image est prรฉdite fausse sur un test de 1 images !

Modรจle de test

Rรฉseau neuronal de reconnaissance faciale avec Keras

Pourquoi nous avons besoin de reconnaissance

Nous avons besoin de reconnaissance pour nous permettre de reconnaรฎtre ou d'identifier plus facilement le visage d'une personne, le type d'objet, l'รขge estimรฉ d'une personne ร  partir de son visage, ou mรชme de connaรฎtre les expressions faciales de cette personne.

Rรฉseau neuronal de reconnaissance faciale avec Keras

Peut-รชtre rรฉalisez-vous qu'ร  chaque fois que vous essayez de marquer le visage de votre ami sur une photo, la fonctionnalitรฉ de Facebook l'a fait pour vous, c'est-ร -dire qu'elle marque le visage de votre ami sans que vous ayez besoin de le marquer au prรฉalable. Il s'agit de la reconnaissance faciale appliquรฉe par Facebook pour nous permettre de marquer plus facilement nos amis.

Alors, comment รงa marche? Chaque fois que nous marquons le visage de notre ami, l'IA de Facebook l'apprendra et tentera de le prรฉdire jusqu'ร  obtenir le bon rรฉsultat. Le mรชme systรจme que nous utiliserons pour crรฉer notre propre reconnaissance faciale. Commenรงons ร  crรฉer notre propre reconnaissance faciale ร  l'aide du Deep Learning

Modรจle de rรฉseau

Nous utiliserons un modรจle de rรฉseau VGG16 mais avec un poids VGGFace.

Architecture du modรจle VGG16

Modรจle de rรฉseau

Quโ€™est-ce que VGGFace ? il s'agit de l'implรฉmentation Keras de la reconnaissance faciale profonde introduite par Parkhi, Omkar M. et al. ยซ Reconnaissance faciale profonde. ยป BMVC (2015). Le framework utilise VGG16 comme architecture rรฉseau.

Vous pouvez tรฉlรฉcharger le VGGFace depuis github

from keras.applications.vgg16 import VGG16
from keras_vggface.vggface import VGGFace

face_model = VGGFace(model='vgg16', 
                weights='vggface',
                input_shape=(224,224,3)) 
face_model.summary()

Comme vous pouvez le voir le rรฉsumรฉ du rรฉseau

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, 224, 224, 3)       0         
_________________________________________________________________
conv1_1 (Conv2D)             (None, 224, 224, 64)      1792      
_________________________________________________________________
conv1_2 (Conv2D)             (None, 224, 224, 64)      36928     
_________________________________________________________________
pool1 (MaxPooling2D)         (None, 112, 112, 64)      0         
_________________________________________________________________
conv2_1 (Conv2D)             (None, 112, 112, 128)     73856     
_________________________________________________________________
conv2_2 (Conv2D)             (None, 112, 112, 128)     147584    
_________________________________________________________________
pool2 (MaxPooling2D)         (None, 56, 56, 128)       0         
_________________________________________________________________
conv3_1 (Conv2D)             (None, 56, 56, 256)       295168    
_________________________________________________________________
conv3_2 (Conv2D)             (None, 56, 56, 256)       590080    
_________________________________________________________________
conv3_3 (Conv2D)             (None, 56, 56, 256)       590080    
_________________________________________________________________
pool3 (MaxPooling2D)         (None, 28, 28, 256)       0         
_________________________________________________________________
conv4_1 (Conv2D)             (None, 28, 28, 512)       1180160   
_________________________________________________________________
conv4_2 (Conv2D)             (None, 28, 28, 512)       2359808   
_________________________________________________________________
conv4_3 (Conv2D)             (None, 28, 28, 512)       2359808   
_________________________________________________________________
pool4 (MaxPooling2D)         (None, 14, 14, 512)       0         
_________________________________________________________________
conv5_1 (Conv2D)             (None, 14, 14, 512)       2359808   
_________________________________________________________________
conv5_2 (Conv2D)             (None, 14, 14, 512)       2359808   
_________________________________________________________________
conv5_3 (Conv2D)             (None, 14, 14, 512)       2359808   
_________________________________________________________________
pool5 (MaxPooling2D)         (None, 7, 7, 512)         0         
_________________________________________________________________
flatten (Flatten)            (None, 25088)             0         
_________________________________________________________________
fc6 (Dense)                  (None, 4096)              102764544 
_________________________________________________________________
fc6/relu (Activation)        (None, 4096)              0         
_________________________________________________________________
fc7 (Dense)                  (None, 4096)              16781312  
_________________________________________________________________
fc7/relu (Activation)        (None, 4096)              0         
_________________________________________________________________
fc8 (Dense)                  (None, 2622)              10742334  
_________________________________________________________________
fc8/softmax (Activation)     (None, 2622)              0         
=================================================================
Total params: 145,002,878
Trainable params: 145,002,878
Non-trainable params: 0
_________________________________________________________________
Traceback (most recent call last):

nous ferons un Transfert d'apprentissage + Rรฉglage fin pour rendre la formation plus rapide avec de petits ensembles de donnรฉes. Tout dโ€™abord, nous allons geler les couches de base afin quโ€™elles ne puissent pas รชtre entraรฎnรฉes.

for layer in face_model.layers:
    layer.trainable = False

puis nous ajoutons notre propre calque pour reconnaรฎtre nos visages de test. Nous ajouterons 2 couches entiรจrement connectรฉes et une couche de sortie avec 5 personnes ร  dรฉtecter.

from keras.models import Model, Sequential
from keras.layers import Input, Convolution2D, ZeroPadding2D, MaxPooling2D, Flatten, Dense, Dropout, Activation

person_count = 5

last_layer = face_model.get_layer('pool5').output

x = Flatten(name='flatten')(last_layer)
x = Dense(1024, activation='relu', name='fc6')(x)
x = Dense(1024, activation='relu', name='fc7')(x)
out = Dense(person_count, activation='softmax', name='fc8')(x)

custom_face = Model(face_model.input, out)

Voyons le rรฉsumรฉ de notre rรฉseau

Layer (type)                 Output Shape              Param #
=================================================================
input_1 (InputLayer)         (None, 224, 224, 3)       0
_________________________________________________________________
conv1_1 (Conv2D)             (None, 224, 224, 64)      1792
_________________________________________________________________
conv1_2 (Conv2D)             (None, 224, 224, 64)      36928
_________________________________________________________________
pool1 (MaxPooling2D)         (None, 112, 112, 64)      0
_________________________________________________________________
conv2_1 (Conv2D)             (None, 112, 112, 128)     73856
_________________________________________________________________
conv2_2 (Conv2D)             (None, 112, 112, 128)     147584
_________________________________________________________________
pool2 (MaxPooling2D)         (None, 56, 56, 128)       0
_________________________________________________________________
conv3_1 (Conv2D)             (None, 56, 56, 256)       295168
_________________________________________________________________
conv3_2 (Conv2D)             (None, 56, 56, 256)       590080
_________________________________________________________________
conv3_3 (Conv2D)             (None, 56, 56, 256)       590080
_________________________________________________________________
pool3 (MaxPooling2D)         (None, 28, 28, 256)       0
_________________________________________________________________
conv4_1 (Conv2D)             (None, 28, 28, 512)       1180160
_________________________________________________________________
conv4_2 (Conv2D)             (None, 28, 28, 512)       2359808
_________________________________________________________________
conv4_3 (Conv2D)             (None, 28, 28, 512)       2359808
_________________________________________________________________
pool4 (MaxPooling2D)         (None, 14, 14, 512)       0
_________________________________________________________________
conv5_1 (Conv2D)             (None, 14, 14, 512)       2359808
_________________________________________________________________
conv5_2 (Conv2D)             (None, 14, 14, 512)       2359808
_________________________________________________________________
conv5_3 (Conv2D)             (None, 14, 14, 512)       2359808
_________________________________________________________________
pool5 (MaxPooling2D)         (None, 7, 7, 512)         0
_________________________________________________________________
flatten (Flatten)            (None, 25088)             0
_________________________________________________________________
fc6 (Dense)                  (None, 1024)              25691136
_________________________________________________________________
fc7 (Dense)                  (None, 1024)              1049600
_________________________________________________________________
fc8 (Dense)                  (None, 5)                 5125
=================================================================
Total params: 41,460,549
Trainable params: 26,745,861
Non-trainable params: 14,714,688

Comme vous pouvez le voir ci-dessus, aprรจs la couche pool5, elle sera aplatie en un seul vecteur de caractรฉristiques qui sera utilisรฉ par la couche dense pour la reconnaissance finale.

Prรฉparer nos visages

Maintenant, prรฉparons nos visages. J'ai crรฉรฉ un annuaire composรฉ de 5 personnes cรฉlรจbres

  • Jack Ma
  • Jason Statham
  • Johnny Depp
  • Robert Downey Jr
  • Rowan Atkinson

Chaque dossier contient 10 images, pour chaque processus de formation et d'รฉvaluation. Il sโ€™agit dโ€™une trรจs petite quantitรฉ de donnรฉes, mais cโ€™est lร  le dรฉfi, nโ€™est-ce pas ?

Nous utiliserons l'aide de l'outil Keras pour nous aider ร  prรฉparer les donnรฉes. Cette fonction parcourra le dossier de l'ensemble de donnรฉes, puis le prรฉparera afin qu'il puisse รชtre utilisรฉ dans la formation.

from keras.preprocessing.image import ImageDataGenerator
batch_size = 5
train_path = 'data/'
eval_path = 'eval/'

train_datagen = ImageDataGenerator(rescale=1./255,
                                   shear_range=0.2,
                                   zoom_range=0.2,
                                   horizontal_flip=True)

valid_datagen = ImageDataGenerator(rescale=1./255,
                                   shear_range=0.2,
                                   zoom_range=0.2,
                                   horizontal_flip=True)

train_generator = train_datagen.flow_from_directory(
                        train_path,
                        target_size=(image_size,image_size),
                        batch_size=batch_size,
                        class_mode='sparse',
                        color_mode='rgb')

valid_generator = valid_datagen.flow_from_directory(
    directory=eval_path,
    target_size=(224, 224),
    color_mode='rgb',
    batch_size=batch_size,
    class_mode='sparse',
    shuffle=True,
)

Former notre modรจle

Commenรงons notre processus de formation en compilant notre rรฉseau avec fonction de perte et optimiseur. Ici, nous utilisons sparse_categorical_crossentropy comme fonction de perte, avec l'aide de SGD comme optimiseur d'apprentissage.

from keras.optimizers import SGD

custom_face.compile(loss='sparse_categorical_crossentropy',
                         optimizer=SGD(lr=1e-4, momentum=0.9),
                         metrics=['accuracy'])

history = custom_face.fit_generator(
        train_generator,
        validation_data=valid_generator,
        steps_per_epoch=49/batch_size,
        validation_steps=valid_generator.n,
        epochs=50)

custom_face.evaluate_generator(generator=valid_generator)
        
custom_face.save('vgg_face.h5')
Epoch 25/50
10/9 [==============================] - 60s 6s/step - loss: 1.4882 - acc: 0.8998 - val_loss: 1.5659 - val_acc: 0.5851
Epoch 26/50
10/9 [==============================] - 59s 6s/step - loss: 1.4882 - acc: 0.8998 - val_loss: 1.5638 - val_acc: 0.5809
Epoch 27/50
10/9 [==============================] - 60s 6s/step - loss: 1.4779 - acc: 0.8597 - val_loss: 1.5613 - val_acc: 0.5477
Epoch 28/50
10/9 [==============================] - 60s 6s/step - loss: 1.4755 - acc: 0.9199 - val_loss: 1.5576 - val_acc: 0.5809
Epoch 29/50
10/9 [==============================] - 60s 6s/step - loss: 1.4794 - acc: 0.9153 - val_loss: 1.5531 - val_acc: 0.5892
Epoch 30/50
10/9 [==============================] - 60s 6s/step - loss: 1.4714 - acc: 0.8953 - val_loss: 1.5510 - val_acc: 0.6017
Epoch 31/50
10/9 [==============================] - 60s 6s/step - loss: 1.4552 - acc: 0.9199 - val_loss: 1.5509 - val_acc: 0.5809
Epoch 32/50
10/9 [==============================] - 60s 6s/step - loss: 1.4504 - acc: 0.9199 - val_loss: 1.5492 - val_acc: 0.5975
Epoch 33/50
10/9 [==============================] - 60s 6s/step - loss: 1.4497 - acc: 0.8998 - val_loss: 1.5490 - val_acc: 0.5851
Epoch 34/50
10/9 [==============================] - 60s 6s/step - loss: 1.4453 - acc: 0.9399 - val_loss: 1.5529 - val_acc: 0.5643
Epoch 35/50
10/9 [==============================] - 60s 6s/step - loss: 1.4399 - acc: 0.9599 - val_loss: 1.5451 - val_acc: 0.5768
Epoch 36/50
10/9 [==============================] - 60s 6s/step - loss: 1.4373 - acc: 0.8998 - val_loss: 1.5424 - val_acc: 0.5768
Epoch 37/50
10/9 [==============================] - 60s 6s/step - loss: 1.4231 - acc: 0.9199 - val_loss: 1.5389 - val_acc: 0.6183
Epoch 38/50
10/9 [==============================] - 59s 6s/step - loss: 1.4247 - acc: 0.9199 - val_loss: 1.5372 - val_acc: 0.5934
Epoch 39/50
10/9 [==============================] - 60s 6s/step - loss: 1.4153 - acc: 0.9399 - val_loss: 1.5406 - val_acc: 0.5560
Epoch 40/50
10/9 [==============================] - 60s 6s/step - loss: 1.4074 - acc: 0.9800 - val_loss: 1.5327 - val_acc: 0.6224
Epoch 41/50
10/9 [==============================] - 60s 6s/step - loss: 1.4023 - acc: 0.9800 - val_loss: 1.5305 - val_acc: 0.6100
Epoch 42/50
10/9 [==============================] - 59s 6s/step - loss: 1.3938 - acc: 0.9800 - val_loss: 1.5269 - val_acc: 0.5975
Epoch 43/50
10/9 [==============================] - 60s 6s/step - loss: 1.3897 - acc: 0.9599 - val_loss: 1.5234 - val_acc: 0.6432
Epoch 44/50
10/9 [==============================] - 60s 6s/step - loss: 1.3828 - acc: 0.9800 - val_loss: 1.5210 - val_acc: 0.6556
Epoch 45/50
10/9 [==============================] - 59s 6s/step - loss: 1.3848 - acc: 0.9599 - val_loss: 1.5234 - val_acc: 0.5975
Epoch 46/50
10/9 [==============================] - 60s 6s/step - loss: 1.3716 - acc: 0.9800 - val_loss: 1.5216 - val_acc: 0.6432
Epoch 47/50
10/9 [==============================] - 60s 6s/step - loss: 1.3721 - acc: 0.9800 - val_loss: 1.5195 - val_acc: 0.6266
Epoch 48/50
10/9 [==============================] - 60s 6s/step - loss: 1.3622 - acc: 0.9599 - val_loss: 1.5108 - val_acc: 0.6141
Epoch 49/50
10/9 [==============================] - 60s 6s/step - loss: 1.3452 - acc: 0.9399 - val_loss: 1.5140 - val_acc: 0.6432
Epoch 50/50
10/9 [==============================] - 60s 6s/step - loss: 1.3387 - acc: 0.9599 - val_loss: 1.5100 - val_acc: 0.6266

Comme vous pouvez le constater, la prรฉcision de notre validation atteint 64 %, ce qui est un bon rรฉsultat pour une petite quantitรฉ de donnรฉes d'entraรฎnement. Nous pouvons amรฉliorer cela en ajoutant plus de calques ou en ajoutant plus d'images d'entraรฎnement afin que notre modรจle puisse en apprendre davantage sur les visages et obtenir plus de prรฉcision.

Testons notre modรจle avec une image test

Image de test

from keras.models import load_model
from keras.preprocessing.image import load_img, save_img, img_to_array
from keras_vggface.utils import preprocess_input

test_img = image.load_img('test.jpg', target_size=(224, 224))
img_test = image.img_to_array(test_img)
img_test = np.expand_dims(img_test, axis=0)
img_test = utils.preprocess_input(img_test)
predictions = model.predict(img_test)
predicted_class=np.argmax(predictions,axis=1)

labels = (train_generator.class_indices)
labels = dict((v,k) for k,v in labels.items())
predictions = [labels[k] for k in predicted_class]
print(predictions)
['RobertDJr']

en utilisant la photo de Robert Downey Jr. comme photo de test, cela montre que le visage prรฉdit est vrai !

Prรฉdiction en utilisant Live Cam !

Et si nous testions nos compรฉtences en lโ€™implรฉmentant avec une entrรฉe provenant dโ€™une webcam ? En utilisant OpenCV avec la cascade Haar Face pour trouver notre visage et avec l'aide de notre modรจle de rรฉseau, nous pouvons reconnaรฎtre la personne.

La premiรจre รฉtape consiste ร  prรฉparer votre visage et celui de vos amis. Plus nous avons de donnรฉes, meilleur est le rรฉsultat !

Prรฉparez et entraรฎnez votre rรฉseau comme ร  l'รฉtape prรฉcรฉdente. Une fois la formation terminรฉe, ajoutez cette ligne pour obtenir l'image d'entrรฉe de la camรฉra.

#Load trained model
from keras.models import load_model
from keras_vggface import utils
import cv2

image_size = 224
device_id = 0 #camera_device id 

model = load_model('my faces.h5')

#make labels according to your dataset folder 
labels = dict(fisrtname=0,secondname=1) #and so on
print(labels)

cascade_classifier = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
camera = cv2.VideoCapture(device_id)

while camera.isOpened():
    ok, cam_frame = camera.read()
    if not ok:
        break
    
    gray_img=cv2.cvtColor(cam_frame, cv2.COLOR_BGR2GRAY)
    faces= cascade_classifier.detectMultiScale(gray_img, minNeighbors=5)

    for (x,y,w,h) in faces:
        cv2.rectangle(cam_frame,(x,y),(x+w,y+h),(255,255,0),2)
        roi_color = cam_frame [y:y+h, x:x+w]
        roi color = cv2.cvtColor(roi_color, cv2.COLOR_BGR2RGB)
        roi_color = cv2.resize(roi_color, (image_size, image_size))
        image = roi_color.astype(np.float32, copy=False)
        image = np.expand_dims(image, axis=0)
        image = preprocess_input(image, version=1) # or version=2
        preds = model.predict(image)
        predicted_class=np.argmax(preds,axis=1)

        labels = dict((v,k) for k,v in labels.items())
        name = [labels[k] for k in predicted_class]

        cv2.putText(cam_frame,str(name), 
                    (x + 10, y + 10), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,0,255), 2)
        
    cv2.imshow('video image', cam_frame)
    key = cv2.waitKey(30)
    if key == 27: # press 'ESC' to quit
        break

camera.release()
cv2.destroyAllWindows()

Quel est le meilleur? Keras ou Tensorflow

Keras offre la simplicitรฉ lors de l'รฉcriture du script. On peut commencer ร  รฉcrire et comprendre directement avec Keras car ce n'est pas trop difficile ร  comprendre. Il est plus convivial et facile ร  mettre en ล“uvre, pas besoin de crรฉer de nombreuses variables pour exรฉcuter le modรจle. Nous nโ€™avons donc pas besoin de comprendre tous les dรฉtails du processus backend.

D'un autre cรดtรฉ, Tensorflow correspond aux opรฉrations de bas niveau qui offrent une flexibilitรฉ et des opรฉrations avancรฉes si vous souhaitez crรฉer un graphique ou un modรจle de calcul arbitraire. Tensorflow peut รฉgalement visualiser le processus ร  l'aide de Tableau Tenseur et un outil de dรฉbogage spรฉcialisรฉ.

Donc, si vous souhaitez commencer ร  travailler avec le deep learning sans trop de complexitรฉ, utilisez Keras. Parce que Keras offre une simplicitรฉ et une convivialitรฉ ร  utiliser et facile ร  mettre en ล“uvre que Tensorflow. Mais si vous souhaitez รฉcrire votre propre algorithme dans un projet ou une recherche d'apprentissage en profondeur, vous devez plutรดt utiliser Tensorflow.

Rรฉsumรฉ

Rรฉsumons donc tout ce dont nous avons discutรฉ et fait dans ce tutoriel.

  • Keras dans une API de haut niveau utilisรฉe pour faciliter les rรฉseaux d'apprentissage en profondeur ร  l'aide d'un moteur backend.
  • Keras est facile ร  utiliser et ร  comprendre avec le support Python, ce qui le rend plus naturel que jamais. C'est bon pour les dรฉbutants qui souhaitent en savoir plus sur l'apprentissage profond et pour les chercheurs qui souhaitent une API facile ร  utiliser.
  • Le processus d'installation est simple et vous pouvez utiliser un environnement virtuel ou utiliser une plateforme externe telle que AWS.
  • Keras est รฉgalement livrรฉ avec diffรฉrents types de modรจles de rรฉseau, ce qui nous permet d'utiliser plus facilement le modรจle disponible pour prรฉ-entraรฎner et affiner notre propre modรจle de rรฉseau.
  • En outre, il existe de nombreux didacticiels et articles sur l'utilisation de Keras provenant de codes de communautรฉs du monde entier ร  des fins d'apprentissage en profondeur.

Rรฉsumez cet article avec :