[PYTHON] Maschinelles Lernen mit Bildern der Kategorie Caffe -1 unter Verwendung eines Referenzmodells

※ WIP。

Einführung

Tor

Klassifizieren Sie Caltech-Bilder anhand des Caffe-Referenzmodells (* das Modell, das in bekannten Veröffentlichungen verwendet wurde, für die die Parametereinstellung abgeschlossen wurde). Ziel ist es, die folgende Ausgabe als konkrete sichtbare Form zu erzeugen.

(Bild. Sie können fortfahren, wenn die Implementierung erfolgreich abgeschlossen wurde.)

Grobe Prozedur

** SCHRITT 1. ** Laden Sie den zu klassifizierenden Bilddatensatz herunter ** SCHRITT 2. ** Extrahieren Sie Features aus Bildern in einem Datensatz ** SCHRITT 3. ** Trainieren Sie SVMs, um extrahierte Features durch lineare SVMs zu klassifizieren. ** SCHRITT 4. ** Klassifizierung anhand der Merkmalsmenge mit geschultem SVM

1. Laden Sie den zu klassifizierenden Bilddatensatz herunter

Wechseln Sie zur folgenden Seite und laden Sie sie herunter. http://www.vision.caltech.edu/Image_Datasets/Caltech101/#Download

2. Extrahieren Sie Features aus Bildern im Datensatz

2-1. Referenzmodell herunterladen

$ scripts/download_model_binary.py models/bvlc_reference_caffenet

2-2. Implementierung von Code zum Extrahieren von Bildmerkmalen

Extrahieren Sie Feature-Daten von Bildern mithilfe eines Referenzmodells. So wie Farben durch drei Zahlen, RGB, dargestellt werden, werden die Merkmale eines Bildes in diesem Modell durch ** 4096 Zahlen ** dargestellt. In 2-2., Eingabe: JPG-Daten, Ausgabe: 4096 numerische Daten, erstellen Sie ein Skript, um verschiedene Verarbeitungen durchzuführen.

Erstellen Sie Folgendes im Stammverzeichnis von 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. Exportieren Sie die Funktionsdaten aller in STEP1 heruntergeladenen Bilder in eine Datei

Bereiten Sie ein Skript für die obige Ausführung vor

exec.py


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

Führen Sie die folgenden Schritte aus, um Feature-Daten (feature.txt) zu erstellen.

python


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

Auf der Maschine zur Hand die erste Zeile

(10, 3, 227, 227)

Wird mit inbegriffen sein. Dies sind keine Feature-Daten, es ist wie ein Müllabdruck in einem anderen Prozess, also löschen Sie ihn.

...
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::...

In STEP3. Wird SVM von libsvm gelernt. Um von libsvm verarbeitet zu werden, müssen die Feature-Daten im folgenden Format geschrieben werden. Eine Daten werden in Form der Nummer des Etiketts, des numerischen Werts der ersten Merkmalsmenge und des numerischen Werts der 22. Merkmalsmenge dargestellt. In feature.txt gibt es so viele Zeilen wie die Anzahl der Bilder.

3. Trainieren Sie SVMs, um die extrahierten Features durch lineare SVMs zu klassifizieren.

Das berühmte libsvm-Paket wird für SVM verwendet. Die Erklärung von libsvm und svm ist hier nett.

3-1. Installation von libsvm

$ brew install libsvm

3-2. Lernen

Zug SVM. Geben Sie den folgenden Befehl ein.

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

svm-scale ist ein Befehl zum Skalieren mit libsvm, und svm-train ist ein Befehl zum Lernen. Die Bedeutung jeder Datei ist wie folgt.

4. Kategorieklassifizierung durch geschultes SVM

4-1. Experimentieren Sie mit denselben Daten wie bei einem Versuch

$ 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

... Genauigkeit ist schlecht! jetzt debuggen ...

Nächster Schritt Kandidat

Hoffentlich werden alle drei im August sein. .. ..

Referenzierte URL-Liste

Im ganzen Fluss

libsvm

FAQ

Q1. Was ist Python / Caffe / Imagenet / ilsvrc_2012_mean.npy?

A. Durchschnittliches Bild. Siehe unten.

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

Frage 2: Ist SVM ein binärer Klassifikator?

A. Eine mehrwertige Klassifizierung ist ebenfalls möglich. libsvm zählt beiläufig die Anzahl der eingegebenen Klassen von Lehrerdaten und erstellt bei Bedarf einen mehrwertigen Klassifikator. Es war keine süße Geschichte.

Recommended Posts

Maschinelles Lernen mit Bildern der Kategorie Caffe -1 unter Verwendung eines Referenzmodells
Verstärken Sie Bilder für maschinelles Lernen mit Python
Laden Sie das Kaffeemodell mit Chainer und klassifizieren Sie die Bilder
[Python] Sammeln Sie Bilder mit Icrawler für maschinelles Lernen [1000 Blatt]
[Maschinelles Lernen] Textklassifizierung mit dem Transformer-Modell (Aufmerksamkeitsbasierter Klassifikator)
Modell des maschinellen Lernens unter Berücksichtigung der Wartbarkeit
Maschinelles Lernen mit Pokemon gelernt
Maschinelles Lernen mit Python! Vorbereitung
Maschinelles Lernen Minesweeper mit PyTorch
Beginnend mit maschinellem Python-Lernen
Versuchen Sie es mit Kaggle leicht maschinell
Installieren Sie Caffe unter OSX 10.10 und klassifizieren Sie Bilder nach Referenzmodell
Ich habe maschinelles Lernen mit liblinear versucht
Maschinelles Lernen mit Python (1) Gesamtklassifizierung
SVM versucht maschinelles Lernen mit Scikit-Learn
Inverse Analyse des maschinellen Lernmodells
[Maschinelles Lernen] Cluster-Yahoo-News-Artikel mit MLlib-Themenmodell (LDA).
Erstellen eines Lernmodells mit MNIST
Management von Modellen für maschinelles Lernen, um Streitigkeiten mit der Unternehmensseite zu vermeiden
Quanteninspiriertes maschinelles Lernen mit Tensornetzwerken
Validieren Sie das Trainingsmodell mit Pylearn2
Beginnen Sie mit dem maschinellen Lernen mit SageMaker
"Scraping & maschinelles Lernen mit Python" Lernnotiz
Anwendungsentwicklung mit Azure Machine Learning
REST-API eines mit Python erstellten Modells mit Watson Machine Learning (CP4D-Edition)
Ich habe versucht, das Modell mit der Low-Code-Bibliothek für maschinelles Lernen "PyCaret" zu visualisieren.
Bedeutet Memo, wenn versucht wird, maschinelles Lernen mit 50 Bildern durchzuführen
<Subjekt> Maschinelles Lernen Kapitel 3: Logistisches Regressionsmodell
Aktienkursprognose mit maschinellem Lernen (Scikit-Learn)
Vorhersage des Strombedarfs durch maschinelles Lernen Teil 2
[Maschinelles Lernen] LDA-Themenklassifizierung mit Scikit-Learn
Unausgeglichenes Datenlernen mit maschinellem Lernen k-NN
[Maschinelles Lernen] FX-Vorhersage unter Verwendung des Entscheidungsbaums
Bilderkennungsmodell mit Deep Learning im Jahr 2016
Eine Geschichte über maschinelles Lernen mit Kyasuket
Tipps zur Verwendung von Python + Caffe mit TSUBAME
[Shakyo] Begegnung mit Python zum maschinellen Lernen
<Kurs> Maschinelles Lernen Kapitel 1: Lineares Regressionsmodell
Holen Sie sich ein Referenzmodell mit Django Serializer
Maschinelles Lernen mit Pytorch in Google Colab
<Kurs> Maschinelles Lernen Kapitel 2: Nichtlineares Regressionsmodell
Aktienkursprognose mit maschinellem Lernen (Return Edition)
Verwenden von MLflow mit Databricks ③ - Modelllebenszyklusmanagement -
Aufbau einer KI / maschinellen Lernumgebung mit Python
[Maschinelles Lernen] Regressionsanalyse mit Scicit Learn
Ein Anfänger des maschinellen Lernens versuchte, mit Python ein Vorhersagemodell für Pferderennen zu erstellen
Maschinelles Lernen
Ich habe versucht, verschiedene Methoden für maschinelles Lernen (Vorhersagemodell) mithilfe von Scicit-Learn zu implementieren
Erstellen eines Positionsschätzungsmodells für den Intelligenzwettbewerb menschlicher Wölfe mithilfe von maschinellem Lernen
[Maschinelles Lernen] Erstellen Sie ein Modell für maschinelles Lernen, indem Sie Transferlernen mit Ihrem eigenen Datensatz durchführen
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
Klassifizierung von Gitarrenbildern durch maschinelles Lernen Teil 1
Eine Geschichte über einfaches maschinelles Lernen mit TensorFlow
Maschinelles Lernen beginnend mit Python Personal Memorandum Part2
Datenversorgungstricks mit deque beim maschinellen Lernen
Gaußscher EM-Algorithmus mit gemischtem Modell [statistisches maschinelles Lernen]
Ein Amateur versuchte Deep Learning mit Caffe (Einführung)
Ein Amateur versuchte Deep Learning mit Caffe (Übung)