[PYTHON] Apprentissage automatique avec des images de catégorie Caffe -1 à l'aide du modèle de référence

※ WIP。

introduction

objectif

Classez les images Caltech en utilisant le modèle de référence de Caffe (* le modèle utilisé dans des articles célèbres pour lesquels le réglage des paramètres a été effectué). Le but est de produire la sortie suivante sous une forme concrètement visible.

(Image. Vous pouvez continuer lorsque l'implémentation est terminée avec succès)

Procédure approximative

** ÉTAPE1. ** Téléchargez l'ensemble de données d'image à classer ** STEP2. ** Extraire des entités à partir d'images dans un jeu de données ** ÉTAPE3. ** Former les SVM pour classer les entités extraites par SVM linéaires ** ÉTAPE 4. ** Classer en fonction de la quantité de fonctionnalités avec SVM formé

1. Téléchargez l'ensemble de données d'image à classer

Aller à la page suivante et télécharger. http://www.vision.caltech.edu/Image_Datasets/Caltech101/#Download

2. Extraire des entités à partir d'images dans l'ensemble de données

2-1. Télécharger le modèle de référence

$ scripts/download_model_binary.py models/bvlc_reference_caffenet

2-2. Implémentation de code pour l'extraction de caractéristiques d'image

Extraire les données d'objets des images à l'aide d'un modèle de référence. Tout comme les couleurs sont représentées par trois nombres, RVB, les caractéristiques d'une image sont représentées par ** 4096 nombres ** dans ce modèle. En 2-2., Entrée: données jpg, sortie: 4096 données numériques, créez un script pour effectuer divers traitements.

Créez ce qui suit dans le répertoire racine de caffe.

feature_extraction.py


#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os, os.path, numpy as np, caffe

# path to git-cloned caffe dir
CAFFE_DIR  = os.getenv('CAFFE_ROOT')

MEAN_FILE  = os.path.join(CAFFE_DIR, 'python/caffe/imagenet/ilsvrc_2012_mean.npy')
MODEL_FILE = os.path.join(CAFFE_DIR, 'models/bvlc_reference_caffenet/deploy.prototxt')
PRETRAINED = os.path.join(CAFFE_DIR, 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel')

LAYER = 'fc7'
INDEX = 4

class FeatureExtraction:

    def __init__(self):
        net = caffe.Classifier(MODEL_FILE, PRETRAINED)
        caffe.set_mode_cpu()
        net.transformer.set_mean('data', np.load(MEAN_FILE))
        net.transformer.set_raw_scale('data', 255)
        net.transformer.set_channel_swap('data', (2,1,0))
        self.net = net

    def extract_features(self):
        imageDirPath = sys.argv[1]
        previousLabelName = ''
        labelIntValue = 0
        for root, dirs, files in os.walk(imageDirPath):
            for filename in files:
                if filename == '.DS_Store': 
                    continue
                fullPath  = os.path.join(root, filename)
                dirname   = os.path.dirname(fullPath)
                labelName = dirname.split("/")[-1]
                if labelName != previousLabelName:
                    labelIntValue += 1
                    previousLabelName = labelName
                image = caffe.io.load_image(fullPath)
                feat = self.extract_features_from_image(image)
                self.print_feature_with_libsvm_format(labelIntValue, feat)

    def build_test_data(self, imagePaths):
        for fullPath in imagePaths:
            image = caffe.io.load_image(fullPath)
            feat = self.extract_features_from_image(image)
            self.print_feature_with_libsvm_format(-1, feat)

    def extract_features_from_image(self, image):
        self.net.predict([image])
        feat = self.net.blobs[LAYER].data[INDEX].flatten().tolist()
        return feat 

    def print_feature_with_libsvm_format(self, labelIntValue, feat):
        formatted_feat_array = [str(index+1)+':'+str(f_i) for index, f_i in enumerate(feat)]
        print str(labelIntValue) + " " + " ".join(formatted_feat_array)

2-3. Exportez les données de fonction de toutes les images téléchargées dans STEP1 dans un fichier

Préparez un script pour l'exécution ci-dessus

exec.py


#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from feature_extraction import FeatureExtraction 
FeatureExtraction().extract_features()

Exécutez ce qui suit pour créer des données d'objet (feature.txt).

python


$ python exec.py path/to/images_dir > feature.txt

Sur la machine à portée de main, la première ligne

(10, 3, 227, 227)

Sera inclus. Ce ne sont pas des données de caractéristiques, c'est comme une impression de déchets dans un autre processus, alors supprimez-les.

Supplément: à propos du format des données d'entité en sortie

Dans STEP3., SVM est appris par libsvm. Afin d'être manipulé par libsvm, il est nécessaire d'écrire les données de fonctionnalité dans le format suivant.

...
4 1:0.89 2:0.19 3:0.10 ...  4096:0.77 
1 1:0.01 2:0.99 3:0.11 ...  4096:0.97 
...

1 données

(numéro d'étiquette) 1:Valeur numérique du premier montant de caractéristique 2:Valeur numérique de la deuxième quantité de fonction...

Il est exprimé sous la forme de. Dans feature.txt, il y a autant de lignes que le nombre d'images.

3. Former les SVM pour classer les entités extraites par des SVM linéaires.

Le célèbre paquet libsvm est utilisé pour SVM. L'explication de libsvm et svm est ici gentille.

3-1. Installation de libsvm

$ brew install libsvm

3-2. Apprentissage

Former SVM. Tapez la commande suivante.

$ svm-scale -s scale.txt feature.txt > feature.scaled.txt
$ svm-train -c 0.03 feature.scaled.txt caltech101.model

svm-scale est une commande à mettre à l'échelle avec libsvm, et svm-train est une commande à apprendre. La signification de chaque fichier est la suivante.

4. Classification des catégories par SVM formé

4-1. Expérimentez avec les mêmes données qu'un essai

$ cp feature.txt feature_test.txt
$ svm-scale -r scale.txt feature_test.txt > feature_test.scaled.txt
$ svm-predict feature_test.scaled.txt caltech101.model result.txt

... la précision est mauvaise! débogage maintenant ...

Candidat de l'étape suivante

Espérons que les trois seront en août. .. ..

Liste des URL référencées

Dans tout le flux

libsvm

FAQ

Q1. Qu'est-ce que python / caffe / imagenet / ilsvrc_2012_mean.npy?

A. Image moyenne. Voir ci-dessous.

http://qiita.com/uchihashi_k/items/8333f80529bb3498e32f

Q2. SVM est-il un classificateur binaire?

A. La classification à valeurs multiples est également possible. libsvm compte avec désinvolture le nombre de classes de données d'enseignants que vous avez saisies et fait un bon travail en créant un classificateur à valeurs multiples si nécessaire ... ce n'était pas une belle histoire.

Recommended Posts

Apprentissage automatique avec des images de catégorie Caffe -1 à l'aide du modèle de référence
Amplifiez les images pour l'apprentissage automatique avec Python
Chargez le modèle caffe avec Chainer et classez les images
[Python] Collectez des images avec Icrawler pour l'apprentissage automatique [1000 feuilles]
[Apprentissage automatique] Classification de texte à l'aide du modèle Transformer (classificateur basé sur l'attention)
Modèle d'apprentissage automatique prenant en compte la maintenabilité
L'apprentissage automatique appris avec Pokemon
Apprentissage automatique avec Python! Préparation
Démineur d'apprentissage automatique avec PyTorch
Commencer avec l'apprentissage automatique Python
Essayez le machine learning à la légère avec Kaggle
Installez Caffe sur OSX 10.10 et classez les images par modèle de référence
J'ai essayé l'apprentissage automatique avec liblinear
Apprentissage automatique par python (1) Classification générale
SVM essayant l'apprentissage automatique avec scikit-learn
Analyse inverse du modèle d'apprentissage automatique
[Apprentissage automatique] Regroupez les articles Yahoo News avec le modèle de sujet MLlib (LDA).
Créer un modèle d'apprentissage à l'aide de MNIST
Gestion des modèles d'apprentissage automatique pour éviter de se quereller avec le côté commercial
Machine learning d'inspiration quantique avec des réseaux de tenseurs
Validez le modèle d'entraînement avec Pylearn2
Démarrez avec l'apprentissage automatique avec SageMaker
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
Développement d'applications à l'aide d'Azure Machine Learning
API REST du modèle réalisé avec Python avec Watson Machine Learning (édition CP4D)
J'ai essayé de visualiser le modèle avec la bibliothèque d'apprentissage automatique low-code "PyCaret"
Signifie mémo lorsque vous essayez de faire de l'apprentissage automatique avec 50 images
<Subject> Machine learning Chapitre 3: Modèle de régression logistique
Prévision du cours des actions à l'aide de l'apprentissage automatique (scikit-learn)
Prédire la demande de puissance avec l'apprentissage automatique, partie 2
[Apprentissage automatique] Classification des sujets LDA à l'aide de scikit-learn
Sklearn de données déséquilibrées avec apprentissage automatique k-NN
[Apprentissage automatique] Prédiction FX à l'aide de l'arbre de décision
Modèle de reconnaissance d'image utilisant l'apprentissage profond en 2016
Une histoire sur l'apprentissage automatique avec Kyasuket
Conseils pour utiliser python + caffe avec TSUBAME
[Shakyo] Rencontre avec Python pour l'apprentissage automatique
<Cours> Machine learning Chapitre 1: Modèle de régression linéaire
Obtenir un modèle de référence à l'aide de Django Serializer
Apprentissage automatique avec Pytorch sur Google Colab
<Cours> Machine learning Chapitre 2: Modèle de régression non linéaire
Prévision du cours des actions à l'aide de l'apprentissage automatique (édition de retour)
Utilisation de MLflow avec Databricks ③ --Gestion du cycle de vie des modèles -
Construction d'environnement AI / Machine Learning avec Python
[Apprentissage automatique] Analyse de régression à l'aide de scicit learn
Un débutant en apprentissage automatique a essayé de créer un modèle de prédiction de courses de chevaux avec python
Apprentissage automatique
J'ai essayé d'implémenter diverses méthodes d'apprentissage automatique (modèle de prédiction) en utilisant scicit-learn
Création d'un modèle d'estimation de position pour la compétition d'intelligence humaine de loup à l'aide de l'apprentissage automatique
[Apprentissage automatique] Créez un modèle d'apprentissage automatique en effectuant un apprentissage par transfert avec votre propre ensemble de données
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
Classification des images de guitare par apprentissage automatique Partie 1
Une histoire sur l'apprentissage automatique simple avec TensorFlow
Apprentissage automatique à partir de Python Personal Memorandum Part2
Astuces de fourniture de données utilisant deque dans l'apprentissage automatique
Algorithme EM modèle mixte gaussien [apprentissage automatique statistique]
Un amateur a essayé le Deep Learning avec Caffe (Introduction)
Un amateur a essayé le Deep Learning en utilisant Caffe (Practice)