[PYTHON] Exécutez l'imagenet de Chainer [de manière fiable]

introduction

À propos de cet article

J'ai réussi à faire fonctionner imagenet en regardant certains sites, alors je l'ai écrit pour conserver le contenu. De nombreux sites ont exécuté l'exemple de chaîne, mais il est possible qu'il reste bloqué en raison de différences de versions et de codes, je vais donc résumer l'environnement dans lequel il a été réellement exécuté et la littérature (article) utilisée à ce moment-là.

Cible

La personne qui a fait l'échantillon de mnist. Débutant (car je suis aussi débutant)

Site référencé

Mémorandum pour démarrer la classification des images avec le chainer (v1.14.0)

Le NIN de Chainer vous permet d'apprendre et de reconnaître en profondeur votre propre jeu d'images

Construction de l'environnement à l'aide de pyenv (Mac OS)

CPickle.UnpicklingError in Chainer

procédure

Environnement

Tout le contenu cette fois a été réalisé sur MacOS. Je voulais le faire avec python3, mais il semble que le site ci-dessus utilisait 2.x, j'ai donc utilisé Anaconda 2.1.0 (python2.7.13). J'ai installé anaconda 2.1.0 avec pyenv et construit l'environnement. La version chainer utilisait chainer == 1.20.0.1.

Tout d'abord

Empruntez les outils de git publiés dans le premier article.

git clone https://github.com/shi3z/chainer_imagenet_tools.git

Réécrivez le code comme dans le deuxième article. Il est plus facile de faire ces deux choses en premier.

Préparation d'image, données de l'enseignant et données de test

Vous pouvez utiliser votre ensemble de données préféré pour les images. Tout doit être utilisable tant qu'il est [nom du répertoire / nom de la classe de classification / fichier réel]. La première chose à faire est de créer des données d'enseignant de classification et des données de test à partir de l'ensemble de données. Git clone le programme fourni par le deuxième article et l'utilise.

wget http://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz


Pour préparer l'ensemble de données. Utilisation du code fourni par le deuxième article

python make_train_data.py 101_ObjectCategories

Ce faisant, le répertoire images qui collecte les données d'image et les trois fichiers train.txt, test.txt et label.txt sont générés. En regardant le contenu, le train et le test décrivent le chemin vers l'image et le numéro de la classe de classification à laquelle elle appartient.

Redimensionnement d'image

Les images étant disjointes, il est nécessaire de la réduire à la dimension d'entrée de ce réseau de neurones. À cette fin, crop.py est préparé dans l'article. L'image générée est enregistrée dans les images de recadrage. Ici, le chemin vers l'image est décrit dans train.txt et test.txt mentionnés ci-dessus, mais comme l'image utilisée cette fois est cropimages, remplacez-la par images-> cropimages à l'aide d'un éditeur ou autre.

Phase d'apprentissage

Ici, utilisez compute_mean.py qui existe dans [examples / imagenet /] de chainer pour générer un fichier de moyenne.

python compute_mean.py train.txt

Générez un fichier moyen avec. Réécrivez également le programme en vous référant à ce dernier article. Le contenu est réécrit ici, mais grosso modo, cela change l'utilisation de pickel pour enregistrer le modèle dans le sérialiseur. Il semble bon d'étudier ce domaine en regardant le document chainer. La classe réelle du réseau neuronal est décrite dans nin.py. En personnalisant cela, vous pouvez apprendre à utiliser le réseau neuronal que vous avez défini.

Même si vous atteignez ce point, certaines personnes recevront une erreur liée à cPickel tel quel. Par conséquent, reportez-vous à cPickle.UnpicklingError in Chainer et lisez le fichier moyen autour des lignes 68-70.

mean_image = np.load(args.mean) #Lire le fichier moyen

Réécrivez dans. Vous devriez enfin pouvoir le faire.

python train_imagenet.py -E 10 train.txt test.txt 2>&1 | tee log

Cette exécution génère un fichier modèle. (Dump du réseau neuronal après l'entraînement)

Exécution de la classification d'images

Dans l'article publié au début, le modèle de sortie est utilisé pour expérimenter avec des données autres que les données de test pour voir si la classification fonctionne. La procédure consiste à redimensionner et classer l'image à tester. Quant à l'image, l'image de la moto dans l'article est utilisée telle quelle

wget http://www.trago.co.uk/ekmps/shops/tragoshop/images/wk-650i-motorbike-35kw-restricted-version-for-a2-license-available-white-blue-35677-p.jpg

mv wk-650i-motorbike-35kw-restricted-version-for-a2-license-available-white-blue-35677-p.jpg bike.jpg 

mkdir resized

Tout ce que tu as à faire c'est courir

python resize.py bike.jpg
python inspection.py resized/bike.jpg

Vous devriez voir le résultat à l'écran.

Impressions

Il existe de nombreux matériaux sur le marché, vous pouvez donc facilement profiter de l'apprentissage automatique en déplaçant les échantillons. Je suis désolé de vouloir l'exécuter sur python3 au lieu de python2.x. Dans les prochains articles, j'aimerais découper des visages dans des images et classer les personnes qui les utilisent.

L'exemple de code de chainer semble avoir de nombreux fichiers, mais seuls train_imagenet.py et nin.py ont été utilisés pour la formation, et comme c'est le code pour créer et tester les données des enseignants, si vous lisez principalement ces codes Je pense que c'est facile à comprendre.

Recommended Posts

Exécutez l'imagenet de Chainer [de manière fiable]
Chargement et test du modèle imagenet entraîné de Chainer