[PYTHON] Klassifizierung von Gitarrenbildern durch maschinelles Lernen Teil 1

Zusammenfassung

Einführung

Dieser Artikel ist eine Aufzeichnung der kostenlosen Forschung während der Sommerferien von Alafor Engineer. Ich forderte heraus, Gitarrenbilder mit CNN zu klassifizieren. Es gibt nicht viele technisch neue Geschichten, aber es scheint unwahrscheinlich, dass es einen Fall von Gitarre als Thema gab, also werde ich die Ergebnisse irgendwie veröffentlichen.

Umgebung

Es ist ein PC zu Hause.

Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
Memory: 32GB
Geforce GTX 1080 (Founders Edition)
Ubuntu 16.04
Python 3.5.3
Keras(backend: Tensorflow)

Datensatzvorbereitung

Der Datensatz wurde aus einer Websuche entfernt und manuell in verschiedenen Beschriftungen geändert. Es gibt 13 Arten von Etiketten unten.

Der Grund, warum die Etiketten in Richtung des Fender / Gibson-Solid-Modells voreingenommen sind, ist, dass es einfach war, beschriftete Bilder zu beschaffen, sodass es keine tiefe Bedeutung gibt.

Dieses Mal werden 250 Bilder für jede Klasse vorbereitet, 50 zufällig ausgewählte Bilder werden als Verifizierungsmuster verwendet und die verbleibenden 200 werden als Lernmuster verwendet.

Ein Modell bauen

Keras hat 50 Ebenen von ResNet als Voreinstellung (?), Also habe ich beschlossen, es vorerst zu verwenden. Da es sich um ein Klassifizierungsmodell mit 1000 Klassen handelt, wird die vollständig verbundene Schicht herausgeschnitten (`` `include_top = False```) und die vollständig verbundene Schicht für die gewünschte Klassifizierung wird verbunden. Das Verbindungsteil ist ein Minimum, vollständig verbunden 1 Schicht + Softmax.

resnet = ResNet50(include_top=False, input_shape=(224, 224, 3), weights="imagenet")
h = Flatten()(resnet.output)
model_output = Dense(len(classes), activation="softmax")(h)
model = Model(resnet.input, model_output)

Wenn Sie hier "weight =" imagenet "" festlegen, wird das Trainingsergebnis mit ImageNet als Anfangswert des Gewichts festgelegt. Wenn Sie aus diesem Zustand heraus lernen, wird die Feinabstimmung, dh das Transferlernen, fortgesetzt. Übrigens werden wir diesmal nicht die trainierten Ebenen einfrieren, sondern die Gewichte aller Ebenen während des Trainings aktualisieren.

Mit weight = None werden die Gewichte mit Zufallszahlen initialisiert. Mit anderen Worten, Sie lernen von Grund auf ohne Übergänge.

Dieses Mal habe ich mit und ohne Metastasierung experimentiert.

Lernen

Da es relativ wenige Beispielbilder gibt, müssen die Daten für das Training aufgeblasen werden. Dieses Mal implementieren wir die Datenerweiterung mit ImageDataGenerator von Keras.

train_gen = ImageDataGenerator(
    rotation_range=45.,
    width_shift_range=0.2,
    height_shift_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    vertical_flip=True)

train_flow = train_gen.flow_from_directory(
    directory="./image/train",
    batch_size=32,
    target_size=(224, 224),
    classes=[_["key"] for _ in classes]
)

Es ist sehr einfach, die Trainingsdaten durch Affin-Konvertierung aufzublasen. ~~ Darüber hinaus ist das Laden der Bilddatei + Augmentation eine nette Spezifikation, die parallel und asynchron zum Lernen ausgeführt wird. Persönlich dachte ich, dass es sich allein lohnt, Keras zu verwenden. ~~ </ font>

** Ergänzungen / Korrekturen: ** In Keras wird die Datenvorverarbeitung parallel und asynchron zum Lernen ausgeführt [Keras-Lernmodulfunktion (mithilfe von OrderedEnqueuer / GeneratorEnqueuer in fit_generator)](https://github.com/fchollet/keras/ blob / 135efd66d00166ca6df32f218d086f98cc300f1e /keras/engine/training.py#L1834-L2096), eine Funktion, die nicht von ImageDataGenerator bereitgestellt wurde. Es war ein irreführender Ausdruck aufgrund meines Missverständnisses, also werde ich es korrigieren.

Für die Optimierung haben wir Momentum + SGD nach ResNets Originalarbeit übernommen.

optimizer = SGD(decay=1e-6, momentum=0.9, nesterov=True)

Ich habe auch Adam usw. ausprobiert, aber wie es auf der Straße heißt, war Momentum + SGD hervorragend für ResNet.

Dieses Mal werden wir die Genauigkeit der Überprüfung für jeden Schritt überprüfen, wobei 1000 Mini-Batch-Lernen von 32 Proben als ein Schritt erfolgt. Das Training wird abgebrochen, wenn die Überprüfungsgenauigkeit konvergiert hat. (Frühes Anhalten)

es_cb = EarlyStopping(patience=20)

Lernergebnis

Mal sehen, das Ergebnis.

Erstens im Fall des Transferlernens. Der Übergang der Genauigkeit ist so. trans.PNG

Blau ist die Lernkurve und Orange ist die Verifizierungskurve.

Obwohl die Verifizierungsgenauigkeit flattert, werden die Lerngenauigkeit von 99,9% und die Verifizierungsgenauigkeit von 100% in 36 Schritten markiert. Danach wird die Genauigkeit erhöht oder verringert, aber vorerst werden wir diesen Schnappschuss aus dem 36. Schritt als Ergebnis verwenden. Die 36 Schritte dauerten übrigens ca. 5 Stunden.

Auf der anderen Seite, wenn es keine Übertragung gibt. non_trans.PNG

Im Vergleich zum Lerntransfer ist der Lernfortschritt langsam und die Genauigkeit nicht gut. Die beste Punktzahl ist 99% Lerngenauigkeit und 84% Überprüfungsgenauigkeit. Es ist ersichtlich, dass es eine große Diskrepanz in der Genauigkeit zwischen Training und Verifikation gibt und die Generalisierungsleistung des Modells gering ist.

Der Effekt des Transferlernens ist enorm.

Lassen Sie mich dies und das schließen

Ich machte ein Foto von meiner Gitarre und versuchte zu raten. Ich habe das Modell mit Übertragung verwendet.

Jazzmaster jm.jpg

LesPaul lp.jpg

** Akogi ** ac.jpg

Es scheint richtig zu funktionieren.

Was ist mit einer Gitarre, die nicht in den Trainingsdaten enthalten ist?

Duo Sonic ds.jpg

Es ist ein überzeugendes Ergebnis, da es das gleiche Studentenmodell wie Mustang ist.

** Geheimnisvolle Gitarre mit eingebautem Lautsprecher (hergestellt von Crews, Modell unbekannt) ** xx.jpg

Es sieht nicht nach Jaguar aus. Dann ist es schwer zu sagen, wie es aussieht, aber ich habe das Gefühl, dass Les Paul und Telecaster noch näher sind. Es scheint, dass sich die Art und Weise, die Eigenschaften zu verstehen, ein wenig von der des Menschen unterscheidet.

Lassen Sie uns zum Schluss ein wenig damit spielen.

Wenn Sie mit dem Malwerkzeug ein wenig auf Jazzmaster kritzeln, ... jm2.jpg

Aus irgendeinem Grund fliegt V. Hmm. .. Ich frage mich, wo ich gesucht und gedacht habe.

Impressionen

Ich habe zum ersten Mal versucht, Bilder mit Deep Learning zu erkennen, und sie waren genauer als erwartet. Es gibt viele Fälle, in denen die Kennzeichnung und Klassifizierung von Produkten auf der EC-Website und der Auktionsseite von Musikinstrumenten falsch ist. Ich denke, Sie sollten dies aus diesem Grund überprüfen.

Es wurde auch bestätigt, dass das Transferlernen aus einem allgemeinen Bildklassifizierungsmodell für die Bildklassifizierung einer bestimmten Domäne wirksam ist.

Andererseits konnten wir das Problem des Deep Learning bestätigen, dass es schwierig ist, Fehlklassifizierungen zu korrigieren, da wir die Grundlage und die Bewertungskriterien der Ausgabe nicht kennen. Dieses Modell zeigt die Instabilität, dass der ideale Eingang (rauschfreies Bild) zwar mit hoher Genauigkeit klassifiziert werden kann, die Beurteilung sich jedoch bei geringem Rauschen stark ändert. Durch das absichtliche Hinzufügen von Rauschen zum Eingang während des Trainings scheint ein robusteres Modell generiert zu werden. Ich würde es daher gerne ausprobieren, wenn ich Zeit habe. (⇒ Ich habe es versucht.) Es scheint eine Technik namens Grad-CAM zu geben, die den Punkt des Interesses des Modells abschätzt, daher möchte ich es zusammen ausprobieren und die Änderungen sehen.

Ich habe dieses Mal ResNet-50 als Modell verwendet, aber ich habe (irgendwie) das Gefühl, dass ein leichteres Modell für diese Art von Klassifizierungsaufgabe verwendet werden kann. Deshalb habe ich ein flaches Netzwerk im Netzwerk verwendet, um das Modell durch Destillation zu verkleinern. Ich möchte auch herausfordern.

Recommended Posts

Klassifizierung von Gitarrenbildern durch maschinelles Lernen Teil 1
Klassifizierung von Gitarrenbildern durch maschinelles Lernen Teil 2
Klassifikation des maschinellen Lernens
Algorithmus für maschinelles Lernen (Implementierung einer Klassifizierung mit mehreren Klassen)
EV3 x Pyrhon Maschinelles Lernen Teil 3 Klassifizierung
Maschinelles Lernen eines jungen Ingenieurs Teil 1
Python & Machine Learning Study Memo ⑤: Klassifikation von Ayame
Analyse der gemeinsamen Raumnutzung durch maschinelles Lernen
[Übersetzung] scikit-learn 0.18 Einführung in maschinelles Lernen durch Tutorial scikit-learn
Maschinelles Lernen eines jungen Ingenieurs Teil 2
Angemessene Preisschätzung von Mercari durch maschinelles Lernen
Vorhersage kurzlebiger Arbeiten von Weekly Shonen Jump durch maschinelles Lernen (Teil 2: Lernen und Bewertung)
Vorhersage kurzlebiger Arbeiten von Weekly Shonen Jump durch maschinelles Lernen (Teil 1: Datenanalyse)
Techniken im Zusammenhang mit maschinellem Lernen / Klassifizierung
Grundlagen des maschinellen Lernens (Denkmal)
Lernen mit dem Lehrer 1 Grundlagen des Lernens mit dem Lehrer (Klassifizierung)
Bedeutung von Datensätzen für maschinelles Lernen
Überwachtes maschinelles Lernen (Klassifikation / Regression)
4 [/] Vier Arithmetik durch maschinelles Lernen
Leistungsüberprüfung der Datenvorverarbeitung für maschinelles Lernen (numerische Daten) (Teil 2)
Vorhersage des Vorhandenseins oder Nichtvorhandenseins von Untreue durch maschinelles Lernen
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
Leistungsüberprüfung der Datenvorverarbeitung für maschinelles Lernen (numerische Daten) (Teil 1)
Ich habe versucht, die Yin- und Yang-Klassifikation hololiver Mitglieder durch maschinelles Lernen zu überprüfen
Bedeutung des maschinellen Lernens und des Mini-Batch-Lernens
Maschinelles Lernen mit Python (1) Gesamtklassifizierung
Zusammenfassung des maschinellen Lernens von Python-Anfängern
Maschinelles Lernen ③ Zusammenfassung des Entscheidungsbaums
Klassifikation und Regression beim maschinellen Lernen
Lassen Sie Hisakos Gitarre durch maschinelles Lernen durch ihre eigene ersetzen.
Memorandum of Scraping & Machine Learning [Entwicklungstechnik] von Python (Kapitel 4)
Memorandum of Scraping & Machine Learning [Entwicklungstechnik] von Python (Kapitel 5)
Schritt-für-Schritt-Approximation von Bildern mit niedrigem Rang durch HOSVD
Niedrigrangige Approximation des Bildes durch Tucker-Zerlegung
Algorithmus für maschinelles Lernen (Verallgemeinerung der linearen Regression)
Multi-Class Multi-Label-Klassifizierung von Bildern mit Pytorch
Vorhersage des Strombedarfs durch maschinelles Lernen Teil 2
Deep Learning 2 durch Implementierung gelernt (Bildklassifizierung)
Kontrolle eines Sandwich-Mannes durch maschinelles Lernen ver4
[Lernnotiz] Grundlagen des Unterrichts mit Python
Verstärken Sie Bilder für maschinelles Lernen mit Python
[Maschinelles Lernen] LDA-Themenklassifizierung mit Scikit-Learn
Ist es möglich, mit Aktienkursvorhersage durch maschinelles Lernen zu essen [Maschinelles Lernen Teil 1]
Gesichtserkennung durch Sammeln von Bildern von Angers.
2020 Empfohlen 20 Auswahlmöglichkeiten für einführende Bücher zum maschinellen Lernen
[Fehler] Finde Maki Horikita durch maschinelles Lernen
Vier Betriebsregeln mit maschinellem Lernen 6 [Kommerziell]
Maschinelles Lernen
Zusammenfassung der Klassifizierung und Implementierung von Algorithmen für maschinelles Lernen
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 13 Grundlagen des neuronalen Netzwerks
Bedeutet Memo, wenn versucht wird, maschinelles Lernen mit 50 Bildern durchzuführen
[Maschinelles Lernen] Liste der häufig verwendeten Pakete
Python & maschinelles Lernen Lernnotiz Machine: Maschinelles Lernen durch Rückausbreitung
Python-Lernnotiz für maschinelles Lernen von Chainer bis zum Ende von Kapitel 2
Bestimmen Sie die Authentizität von veröffentlichten Artikeln durch maschinelles Lernen (Google Prediction API).
Maschinelles Lernen: Bilderkennung von MNIST mithilfe von PCA und Gaussian Native Bayes
Kapitel 6 Überwachtes Lernen: Klassifizierung pg212 ~ [Lernen Sie, indem Sie sich mit Python bewegen! Neues Lehrbuch für maschinelles Lernen]
Ich habe versucht, das Vorhandensein oder Nichtvorhandensein von Schnee durch maschinelles Lernen vorherzusagen.
Implementierung eines Modells, das Wechselkurse (Dollar-Yen-Kurs) durch maschinelles Lernen vorhersagt