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.
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)
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.
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.
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)
Mal sehen, das Ergebnis.
Erstens im Fall des Transferlernens. Der Übergang der Genauigkeit ist so.
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.
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.
Ich machte ein Foto von meiner Gitarre und versuchte zu raten. Ich habe das Modell mit Übertragung verwendet.
Jazzmaster
LesPaul
** Akogi **
Es scheint richtig zu funktionieren.
Was ist mit einer Gitarre, die nicht in den Trainingsdaten enthalten ist?
Duo Sonic
Es ist ein überzeugendes Ergebnis, da es das gleiche Studentenmodell wie Mustang ist.
** Geheimnisvolle Gitarre mit eingebautem Lautsprecher (hergestellt von Crews, Modell unbekannt) **
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, ...
Aus irgendeinem Grund fliegt V. Hmm. .. Ich frage mich, wo ich gesucht und gedacht habe.
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