[PYTHON] Un amateur a essayé le Deep Learning en utilisant Caffe (Practice)

introduction

Cet article

  1. Qu'est-ce que le Deep Learning? Présentation
  2. Installez Caffe, l'une des bibliothèques Deep Learning Introduction
  3. Faisons un apprentissage simple en utilisant l'édition pratique de Caffe (cet article) Il est composé de trois

Bien que ce soit également dans le titre, il s'agit d'un article sur un disque laissé par un amateur qui n'est ni un chercheur en Deep Learning ni quoi que ce soit, alors pardonnez-moi toute description erronée et lisez-le. (S'il y a quelque chose qui ne va pas, j'apprécierais que vous le signaliez dans les commentaires) De plus, comme il y a beaucoup de choses que je ne comprends pas de façon inattendue, la version pratique sera mise à jour petit à petit ...

Reconnaître la base de données MNIST (caractères manuscrits)

Dans un premier temps

  1. Apprenez MNIST sur la base d'informations officielles (jusqu'à ce point est écrit dans le tutoriel)
  2. Reconnaître l'image JPEG MNIST 28 * 28 pixels à l'aide du réseau appris (pour une raison non écrite dans le didacticiel) je ferai

Laissez MNIST apprendre

Tracez ce qui est écrit dans Official

Créer une base de données MNIST

Dans l'état d'origine cloné depuis git, il n'y a pas de données de caractères manuscrites à apprendre, je vais donc les déposer ci-dessous En supposant que CAFFE_ROOT est défini comme une variable d'environnement (s'il n'est pas défini, définissez la racine du référentiel caffe sur CAFFE_ROOT).

python


cd $CAFFE_ROOT
./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.sh

Cela devrait, espérons-le, créer deux dossiers sous examples / mnist, mnist_test_lmdb et mnist_train_lmdb, avec une base de données à l'intérieur.

Former à l'aide d'une base de données

Une fois que vous avez créé la base de données, vous pouvez utiliser le réseau et le solveur inclus pour apprendre les caractères manuscrits sans rien faire de spécial. Plus précisément, il se termine par la ligne suivante. Le temps dépend de l'environnement, mais je pense que ce sera fini dans 10 minutes.

python


cd $CAFFE_ROOT
./examples/mnist/train_lenet.sh

Maintenant, si la formation est effectuée correctement, lenet_iter_10000.caffemodel et lenet_iter_5000.caffemodel seront créés sous examples / mnist. La seule différence entre 10000 et 5000 est de savoir si l'itération d'apprentissage est le 10000ème réseau ou le 5000ème réseau.

Voyons comment il est réellement reconnu par le réseau appris MNIST

Si vous apprenez de la base de données selon le didacticiel, vous pouvez voir que le réseau a appris quelque chose, mais si vous n'utilisez pas réellement le réseau, vous ne pouvez pas dire s'il a réussi ou non. Alors, convertissons la base de données ci-dessus, qui stocke 10000 caractères, en JPEG un caractère chacun, donnons-la au réseau et voyons quel type de sortie il s'agira. Les scripts utilisés dans ce chapitre sont sur GitHub, veuillez donc les utiliser si vous le souhaitez.

Rendre la base de données JPEG pour faciliter la compréhension de la cible de reconnaissance

Même si vous regardez la base de données, il est difficile de comprendre quel nombre est quel caractère, alors faites en sorte que les données soient stockées dans la base de données JPEG Cette fois, j'ai fait mon propre script et l'ai fait en JPEG Comme ça (python)

import scipy
import numpy as np
import lmdb
import sys
from caffe.io import caffe_pb2

def convert_to_jpeg(db_dir):
    env = lmdb.open(db_dir)
    datum = caffe_pb2.Datum()
    with env.begin() as txn:
        cursor = txn.cursor()
        for key_val,ser_str in cursor:
            datum.ParseFromString(ser_str)
            print "\nKey val: ", key_val
            print "\nLabel: ", datum.label
            rows = datum.height;
            cols = datum.width;
            img_pre = np.fromstring(datum.data,dtype=np.uint8)
            img = img_pre.reshape(rows, cols)
            file_name = str(key_val) + "_" + str(datum.label) + ".jpg "
            scipy.misc.toimage(img, cmin=0.0, cmax=255.0).save("data/mnist/jpg/" + file_name)

S'il s'agit d'une base de données dans mnist_test_lmdb, 10000 images jpg seront générées en procédant comme suit

python


cd $CAFFE_ROOT
python mnist_jpg_converter.py examples/mnist/mnist_test_lmdb/

Donnez l'image au réseau et voyez le résultat

Réécrivez d'abord python / classify.py fourni avec caffe pour charger le réseau Comme ça.

def main(argv):
    # --Abréviation--

    # Make classifier.
    classifier = caffe.Classifier(args.model_def, args.pretrained_model)

    # Load numpy array (.npy), directory glob (*.jpg), or image file.
    args.input_file = os.path.expanduser(args.input_file)
    print("Loading file: %s" % args.input_file)
    grayimg = caffe.io.load_image(args.input_file, color=False)[:,:,0]
    inputs = [np.reshape(grayimg, (28, 28, 1))]

    print("Classifying %d inputs." % len(inputs))

    # Classify.
    start = time.time()
    predictions = classifier.predict(inputs)
    print("Done in %.2f s." % (time.time() - start))

    # --Abréviation--

Après cela, utilisez ce script

python


cd $CAFFE_ROOT
python lenet_classify.py data/mnist/jpg/00000007_9.jpg result.npy

Si vous le faites, le résultat de la classification sera affiché dans result.npy.

python


python my/show_mnist_result.py result.npy 
[[  6.68664742e-03   2.82594631e-03   8.81279539e-03   1.06628540e-05
    4.27712619e-01   1.90626510e-04   1.27627791e-04   9.20879841e-03
    4.14795056e-02   5.02944708e-01]]

Étant donné que les éléments de la colonne sont classés dans l'ordre de 0, 1, 2, ..., 9, la probabilité pour 9 est d'environ 50%, ce qui est plus élevé que tout autre résultat de classification, de sorte que le réseau apprend correctement. Tu peux vérifier (La prochaine probabilité la plus élevée est 4, mais 9 et 4 se ressemblent, donc je pense que c'est un résultat convaincant.)

Je vous remercie pour votre travail acharné

Les références

Deep Learning with Caffe, se concentrant sur les endroits où vous pouvez facilement trébucher Classification facile des images avec Caffe

Recommended Posts

Un amateur a essayé le Deep Learning en utilisant Caffe (Practice)
Un amateur a essayé le Deep Learning avec Caffe (Introduction)
Un amateur a essayé le Deep Learning avec Caffe (Vue d'ensemble)
J'ai essayé l'apprentissage en profondeur avec Theano
Deep learning 1 Pratique du deep learning
J'ai essayé le deep learning
J'ai essayé d'exécuter le didacticiel de détection d'objets en utilisant le dernier algorithme d'apprentissage en profondeur
Un amateur a trébuché dans le Deep Learning ❷ fait à partir de zéro Note: Chapitre 5
Un amateur a trébuché dans le Deep Learning ❷ fait à partir de zéro Note: Chapitre 2
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 3
J'ai essayé d'héberger un modèle d'apprentissage en profondeur de TensorFlow à l'aide de TensorFlow Serving
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 7
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 5
Un amateur a trébuché dans le Deep Learning ❷ fait de zéro Note: Chapitre 1
Un amateur a trébuché dans le Deep Learning ❷ fait à partir de zéro Note: Chapitre 4
Un amateur a trébuché dans le Deep Learning à partir de zéro.
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 2
J'ai essayé l'apprentissage par renforcement avec PyBrain
Modèle de reconnaissance d'image utilisant l'apprentissage profond en 2016
Prévision du cours des actions à l'aide du Deep Learning (TensorFlow)
[Kaggle] J'ai essayé l'apprentissage d'ensemble avec LightGBM
[Python] Lorsqu'un amateur commence l'apprentissage automatique
J'ai essayé d'héberger le modèle d'apprentissage en profondeur de Pytorch avec TorchServe sur Amazon SageMaker
L'apprentissage en profondeur
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
Les débutants du Deep Learning ont essayé les prévisions météorologiques à partir d'images satellitaires météorologiques à l'aide de Keras
J'ai essayé l'histoire courante de prédire la moyenne Nikkei à l'aide du Deep Learning (backtest)
[Python] Deep Learning: J'ai essayé d'implémenter Deep Learning (DBN, SDA) sans utiliser de bibliothèque.
J'ai essayé d'extraire le dessin au trait de l'image avec Deep Learning
Prévision du cours des actions à l'aide du Deep Learning (TensorFlow) - Partie 2
[Recherche causale / inférence causale] Effectuer une recherche causale (SAM) à l'aide du Deep Learning
Prévision du cours de l'action à l'aide du Deep Learning [acquisition de données]
Mémorandum d'apprentissage profond
Commencer l'apprentissage en profondeur
Apprentissage en profondeur Python
Apprentissage profond × Python
[Bouclier d'épée Pokémon] J'ai essayé de visualiser la base de jugement de l'apprentissage en profondeur en utilisant la classification des trois familles comme exemple
Réflexion sur les tactiques de croissance de type attaque de groupe en utilisant l'apprentissage en profondeur
J'ai essayé d'apprendre mon propre ensemble de données en utilisant Chainer Trainer
J'ai essayé d'obtenir une AMI en utilisant AWS Lambda
J'ai essayé de devenir un Ann Man en utilisant OpenCV
Apprentissage automatique avec des images de catégorie Caffe -1 à l'aide du modèle de référence
[Deep Learning from scratch] J'ai essayé d'expliquer le décrochage
Apprenons en profondeur! Sous Windows (VS2013 + caffe + CUDA7.5 + cudnn5.1)
Collecte et automatisation d'images érotiques à l'aide du deep learning
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
[Deep Learning from scratch] J'ai essayé d'expliquer la confirmation du gradient d'une manière facile à comprendre.