Seminar Mod09 - Sujet (1) Partie I
Seminar Mod09 - Sujet (1) Partie I
Seminar Mod09 - Sujet (1) Partie I
Deep Learning 02
Séminaire
Module09
Deep Learning 02 Séminaire
Séminaire Module 09 - Deep Learning02
Projet for fun - Automatisation d'un jeu vidéo Maplestory (Démo)
Prétraitement des images
Classification des images et augmentation des données
Entraînement avec différents types de modèles et Tests
Style transfer- Générer votre peinture
[Demo]Visualisation des couches de représentation dans CNN
on utilisera un mini projet en python distribué avec le sujet fast-style-transfer-master.zip
Codez vous même
[Complémentaire]Création par l'IA - Une autre approche GAN (Generative adversarial network)
Génération des objets(visage, chien, peinture, etc)
De-noise/ (mosaic, brouillard, image inpainting,etc)
Génération des données pour aider Supervised Learning - Data augmentation
Handwriting Digit Classification with CNN - Classification des chiffres manuscrites avec CNN
Explication des données
Construction d'un CNN avec KERAS (En utilisant l'exemple du cours - Chapitre 2.8)
Importer les packages nécessaires
Layer 1
A la sortie de la couche CONV1, quelle est la forme d'activation de nos données? Combien de
paramètres a-t-on besoin pour cette couche?
A la sortie de la couche POOL1, quelle est la forme d'activation de nos données? Combien de
paramètres a-t-on besoin pour cette couche?
Layer 2
A la sortie de la couche CONV2, quelle est la forme d'activation de nos données? Combien de
paramètres a-t-on besoin pour cette couche?
A la sortie de la couche POOL2, quelle est la forme d'activation de nos données? Combien de
paramètres a-t-on besoin pour cette couche?
Couches Flatten, FC3 & 4, SoftMax
Compiler le modèle
Classification des chiffres manuscrites avec model_CNNsimple
Vectorisation des données
Préparation de train set, test set
One-Hot Encoding
Entraînement du modèle
Visualiser la précision du modèle
Conclusion
Créez votre propre CNN à partir de zéro et essayez d'atteindre la plus grande précision possible sur MNIST.
Autres pistes d'amélioration du modèle?
Le jeu de données CALTECH-101 (sous-ensemble)
Télécharger et désarchiver le jeu de données CALTECH-101
Importer tous les packages nécessaires
StridedNet
Construisez une fonction build qui prend 6 paramètres:
Préparation base de données
Préparation de training
Implémentation ResNet-50
Importer tous les packages nécessaires
Mise en œuvre du bloc d'identité
Mise en œuvre du bloc convolutif
Mise en œuvre de ResNet-50
Ajouter les couhches de sorties, Fully Connected. Compiler et entraîner le modèle
Conclusion
Rétropropagation dans les réseaux de neurones convolutifs
Introduction
Rétropropagation de la couche convolutive
Calcul de dA
Calcul de dW
Calcul de db
Implémentation de la rétropropagation de CONV
Rétropropagation de la couche de Pooling
Max pooling
Implémentez create_mask_from_window().
Average pooling
Implémentez la fonction ci-dessous pour distribuer également une valeur dz à travers une matrice
de forme dimensionnelle.
Pooling backward
Séminaire Module 09
- Deep Learning02
L'un des systèmes anti-bot est le système des "runes". Il s'agit des puzzles de touches fléchées dans le jeu
qui sont activés chaque 15mins lorsque vous êtes en train de "farming". L'objective est donc de détecter
correctement la direction de chaque flèche.
pathToSave = "samples_arrows/test_File/arrows/"
path1 = pathToSave+"arrow_"+str(int(count))+"_0.png"
path2 = pathToSave+"arrow_"+str(int(count))+"_1.png"
path3 = pathToSave+"arrow_"+str(int(count))+"_2.png"
path4 = pathToSave+"arrow_"+str(int(count))+"_3.png"
cv.imwrite(path1, v1)
cv.imwrite(path2, v2)
cv.imwrite(path3, v3)
cv.imwrite(path4, v4)
model_CNNsimple = Sequential()
#CONV 1
model_CNNsimple.add(Conv2D(32, kernel_size = 3, padding="valid", activation =
"relu", strides=(1,1), input_shape=(90,90,1)))
#MAXPOOLING 1
model_CNNsimple.add(MaxPooling2D(pool_size=(2, 2), padding="valid", strides=
(2,2)))
#CONV 2
model_CNNsimple.add(Conv2D(128, kernel_size = 3, padding="valid", activation =
"relu", strides=(1,1)))
#MAXPOOLING 2
model_CNNsimple.add(MaxPooling2D(pool_size=(2, 2), padding="valid", strides=
(2,2)))
# COUCHE FLA
model_CNNsimple.add(Flatten())
# COUCHE FC3
model_CNNsimple.add(Dense(128))
# COUCHE FC4
model_CNNsimple.add(Dense(64))
# COUCHE SOFTMAX
model_CNNsimple.add(Dense(4, activation = "softmax"))
def cut_image_return_arrows(img):
# top: 230
# left: 520
# bottom: 310
# right:590
img_cropped1 = img[225:315, 505: 595]
img_cropped2 = img[225:315, 595: 685]
img_cropped3 = img[225:315, 685: 775]
img_cropped4 = img[225:315, 775: 865]
# self.left:self.right, self.top:self.bottom
# self.top, self.left, self.bottom, self.right
# 520 230 590 310
bgr1 = cv.cvtColor(img_cropped1, cv.COLOR_BGRA2BGR)
hsv1 = cv.cvtColor(bgr1, cv.COLOR_BGR2HSV)
h1, s1, v1 = cv.split(hsv1)
testFullImagePath = os.listdir("samples_arrows/test_File")
dataTotalImgs = []
for testImg in testFullImagePath:
data = []
data1 = []
data2 = []
data3 = []
data4 = []
predicLabels = ["down", "left", "right", "up"]
finalPredictions = []
if testImg.endswith(".png") or testImg.endswith(".jpg"):
# extract the class label from the filename
imagePath = "samples_arrows/test_File/" + testImg
image = cv.imread(imagePath)
# for i in range(4):
# finalPredictions.append(predicLabels[np.argmax(predictions[i])])
# print(finalPredictions)
# for i in range(4):
# for_cov_ai = data[i]
# X_std, X_mean, X_cov = get_normed_mean_cov(for_cov_ai)
# X_OutPut_CNN = X_std - X_mean
# X_OutPut_CNN = X_OutPut_CNN.reshape(1, 90, 90, 1)
# predictions = model_CNNsimple.predict(X_OutPut_CNN)
# finalPredictions.append(predicLabels[np.argmax(predictions[0])])
# print(finalPredictions)
for i in range(4):
for_cov_ai = data[i]
X_std, X_mean, X_cov = get_normed_mean_cov(for_cov_ai)
X_OutPut_CNN = X_std - X_mean
X_OutPut_CNN = X_OutPut_CNN.reshape(1, 90, 90, 1)
predictions = reconstructed_model.predict(X_OutPut_CNN)
finalPredictions.append(predicLabels[np.argmax(predictions[0])])
print(finalPredictions)
2 Style transfer- Générer votre peinture
transfer-master.zip
Si vous n'arrivez pas, il y aura une démo et une explication du projet dans l'après midi.
explication: https://iq.opengenus.org/vgg19-architecture/
1.
2.
3.
...
2.4 [Complémentaire]Création par l'IA - Une autre approche GAN (Generative
adversarial network)
Applications:
Directe:
https://github.com/hezhangsprinter/ID-CGAN
2.4.3 Génération des données pour aider Supervised Learning - Data augmentation
Encore une fois, chaque ligne représente une image de taille 28*28 pixels qui est aplati à 1 * 784. Vous
pouvez tracer par exemple l'image correspondante à la 500e image(ligne). Chaque dimension représente
donc un pixel sur une position spécifique contrairement au cas précédent.
Nous allons re-traiter ce sujet qu'on avait vu dans le module 08 et 09(Classification des chiffres
manuscrites), mais cette fois ci avec l'outil de Deep learning soit CNN. Et vers la fin de cette partie, vous
allez pouvoir comparer la performance entre les différents modèles: Régression logistique pure, Régression
logistique avec PCA, K-MEANS, SVM. CNN.
3.2 Construction d'un CNN avec KERAS (En utilisant l'exemple du cours -
Chapitre 2.8)
Disons que vous entrez une image de 28 x 28 x 1, et que vous essayez de faire une reconnaissance de
chiffres manuscrits.
La couche CONV1 utilise 32 filtres de 5 x 5 et une foulée de 1, et aucun padding, la fonction d'activation
sera "ReLU".
La couche POOL1 sera un max-pooling avec une région deux par deux et un stride de deux. Aucun
padding sera nécessaire.
3.2.2.1 A la sortie de la couche CONV1, quelle est la forme d'activation de nos données? Combien de
paramètres a-t-on besoin pour cette couche?
3.2.2.2 A la sortie de la couche POOL1, quelle est la forme d'activation de nos données? Combien de
paramètres a-t-on besoin pour cette couche?
3.2.3 Layer 2
La couche CONV2 utilise 128 filtres de 3 x 3 et une foulée de 1, et aucun padding, la fonction
La couche POOL2 sera un max-pooling avec une région deux par deux et un stride de deux. Aucun
padding sera nécessaire.
3.2.3.1 A la sortie de la couche CONV2, quelle est la forme d'activation de nos données? Combien de
paramètres a-t-on besoin pour cette couche?
3.2.3.2 A la sortie de la couche POOL2, quelle est la forme d'activation de nos données? Combien de
paramètres a-t-on besoin pour cette couche?
Dans la section précédente, nous avons réussi à construire le modèle "model_CNNsimple" en utilisant la
classe Conv2D de l'API Keras et l'a compilé. Nous allons maintenant l'utiliser pour résoudre notre problème
de classification des chiffres manuscrites.
Importons les packages nécessaires et importons également les fichiers train et test, pour rappel, le fichier
"train.csv" contient 42000 images de taille 28 28 ainsi leur étiquettes. et le fichier "test.csv" contient donc
28000 images de taille 28 28 sans étiquette.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from PIL import Image
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
trainData = pd.read_csv("train.csv")
testData = pd.read_csv("test.csv")
D'après ce que vous avez vu pendant le séminaire du module 09, utilisez la méthode to_numpy() ,
reshape() , construisez vous les tenseurs d'entrée pour le modèle: model_CNNsimple.
Essentiellement, nous allons convertir ces ensembles de données(vecTrain_Label qui contient les 1,...,9) en
un ensemble de 10 nombres à entrer dans le réseau de neurones. Une fois cela fait, nous imprimerons la
nouvelle étiquette de la rame pour la première image.
Utilisez la méthode to_categorical() pour faire cette transition de y_train et y_test . Vous devez avoir
à la fin deux outputs:
y_train_one_hot
y_test_one_hot
#One-Hot Encoding
from keras.utils import to_categorical
### START CODE HERE ###
Model.fit(
x=None,
y=None,
batch_size=None,
epochs=1,
verbose="auto",
callbacks=None,
validation_split=0.0,
validation_data=None,
shuffle=True,
class_weight=None,
sample_weight=None,
initial_epoch=0,
steps_per_epoch=None,
validation_steps=None,
validation_batch_size=None,
validation_freq=1,
max_queue_size=10,
workers=1,
use_multiprocessing=False,
)
Les arguments:
x: Input data.
y: Target data.
Remarque: dans notre modèle, pour simplifier, vous aurez juste besoin de remplir les 4 paramètres clés se
situent au dessus.
Exécuter le code suivant pour visualiser la précision de notre modèle dans chaque époque et en fin de
conclure.
plt.title('Model Accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Val'], loc='upper left')
plt.show()
3.4 Conclusion
3.5 Créez votre propre CNN à partir de zéro et essayez d'atteindre la plus
grande précision possible sur MNIST.
“
Hint: Essayons dans un premier temps d'ajouter les couches Dropout