tipe/doc/cnn/main.md

4.8 KiB

Main

Compilation

Deux options sont disponibles à la compilation

Une première fonctionnant sous toutes les machines:

make cnn-main

Une seconde utilisant CUDA pour la convolution, qui sera plus rapide, mais ne fonctionnera que sur les machines équipées d'une carte graphique Nvidia (nécessite nvcc disponible sous le paquet cuda ou cuda-tools pour la compilation):

make cnn-main-cuda

Options à la compilation

  • La taille de la couche d'entrée ainsi que la fonction d'activation utilisée sont définissable dans la création du réseau (L'architecture utilisée se définit ici également, LeNet5 étant adaptée uniquement au jeu de données MNIST)
  • La définition du nombre d'époques par défaut se fait dans la définition EPOCHS
  • La définition de la taille des batches se fait dans la définition BATCHES
  • Le multi-threading est activé par défaut, se désactive en enlevant la définition USE_MULTITHREADING (le multithreading ne fonctionne pas pour le moment)
  • Il y a une option pour conserver l'ensemble du jeu de données JPEG dans la mémoire RAM détails

Options spécifiques à CUDA

  • La définition de la taille des blocs peut-être trop élevée pour certaines carte graphiques, il faudra alors réduire l'une des définitions de BLOCKSIZE

Utilisation

Usage: build/cnn-main ( train | recognize | test ) [OPTIONS]

OPTIONS:
	train:
		--dataset | -d (mnist|jpg)	Format du set de données.
	(mnist)	--images  | -i [FILENAME]	Fichier contenant les images.
	(mnist)	--labels  | -l [FILENAME]	Fichier contenant les labels.
	 (jpg) 	--datadir | -dd [FOLDER]	Dossier contenant les images.
		--recover | -r [FILENAME]	Récupérer depuis un modèle existant.
		--epochs  | -e [int]		Nombre d'époques.
		--out     | -o [FILENAME]	Fichier où écrire le réseau de neurones.
	recognize:
		--dataset | -d (mnist|jpg)	Format de l'image à reconnaître.
		--modele  | -m [FILENAME]	Fichier contenant le réseau entraîné.
		--input   | -i [FILENAME]	Image jpeg ou fichier binaire à reconnaître.
	test:
		--modele  | -m [FILENAME]	Fichier contenant le réseau entraîné.
		--dataset | -d (mnist|jpg)	Format du set de données.
	(mnist)	--images  | -i [FILENAME]	Fichier contenant les images.
	(mnist)	--labels  | -l [FILENAME]	Fichier contenant les labels.
	 (jpg) 	--datadir | -dd [FOLDER]	Dossier contenant les images.
		--preview-fails | -p		Afficher les images ayant échoué.

Entraînement

Entraînement du réseau de neurones

Exemple (MNIST):

build/cnn-main train                            \
    --dataset mnist                             \
    --epochs 15                                 \
    --images data/mnist/train-images-idx3-ubyte \
    --labels data/mnist/train-labels-idx1-ubyte \
    --out reseau.bin

Exemple (JPG):

build/cnn-main train                            \
    --dataset jpg                               \
    --epochs 15                                 \
    --datadir data/50States10K/train            \
    --out reseau.bin

Le réseau de neurones entraîné est sauvegardé dans le fichier de sortie à la fin de chaque époque.

Reconnaissance d'images

MNIST

La reconnaissance d'images se fait avec un fichier formaté de la même manière que le jeu de données MNIST.
Le plus simple pour dessiner à la main est d'utiliser le serveur web prévu à cet effet

Note: Le serveur web ne prend pour le moment qu'une option pour dessiner et faire reconnaître par le réseau de neurones simple.
Cependant, l'image dessinée est stockée dans le fichier .cache/image-idx3-ubyte, la faire reconnaître par le réseau convolutif est donc possible avec la commande suivante:

build/cnn-main recognize                \
    --dataset jpg                       \
    --modele reseau.bin                 \
    --input .cache/image-idx3-ubyte     \
    --output json

JPEG

L'image d'entrée doit conserver la même taille que les images ayant servi à entraîner le réseau (256x256 pixels)

Exemple:

build/cnn-main recognize                \
    --dataset jpg                       \
    --modele reseau.bin                 \
    --input image.jpeg                  \
    --output json

Test sur le jeu prévu à cet effet

Exemple (MNIST):

build/cnn-main test                         \
    --dataset mnist                         \
    -i data/mnist/t10k-images-idx3-ubyte    \
    -l data/mnist/t10k-labels-idx1-ubyte    \
    -m reseau.bin

Exemple (JPG):

build/cnn-main test                         \
    --dataset jpg                           \
    --datadir data/50States10K/test         \
    -m reseau.bin