[PYTHON] Ein Modell, das die Gitarre mit fast.ai identifiziert

In dieser Zeit können Sie durch Online-Kurse neue Fähigkeiten erlernen. Ich habe kürzlich die Deep Learning-Spezialisierung abgeschlossen, die von Andrew Ng an der Coursera unterrichtet wurde. Dies war eine großartige Lernerfahrung. Es gibt viele Erklärungen der Mathematik, und das erste Modell ist vollständig mit Python / Numpy erstellt. Während Sie die Lektion fortsetzen, können Sie auch Tensorflow und Keras verwenden. Es wird ein Lernstil sein, die Grundlagen der Theorie fest zu studieren und zu nutzen.

Fast.ai, das seit mehreren Jahren ein heißes Thema ist, ist jedoch genau das Gegenteil. Dies ist ein "Lass es uns zuerst tun" -Ansatz. Es ist aufregend zu sehen, wie einfach es ist, mit der grundlegenden fast.ai-Bibliothek ein Modell für künstliche Intelligenz zu erstellen.

Basierend auf den Akkorden aus Lektion 1 von fast.ai habe ich ein Modell erstellt, das die Gitarre identifizieren kann. Entschuldigung für diejenigen, die nicht viel über Gitarren wissen, aber dieses Beispiel ist wahrscheinlich von geringem Nutzen!

Vor der Vorbereitung des Modells haben wir zunächst Bilddaten von vier Gitarrentypen gesammelt.

Der Grund für die Wahl dieser vier Typen ist, dass die Gitarren eine unterschiedliche Körperform und Kopfform haben. Da es sich um sehr beliebte Gitarren handelt, war es auch einfach, Bilder zu sammeln. Vielen Dank für Ihre Google-Suche. Ich habe Ordner für jeden Gitarrentyp erstellt und Hunderte davon gesammelt.

Importieren Sie zunächst fastai.vision. Legen Sie den Pfad fest, in dem Sie die Daten gespeichert haben, und definieren Sie die Klasse. Der Klassenname stimmt mit dem Ordnernamen überein.


from fastai.vision import *

path = Path('data/guitars')
classes = ['gibson_les_paul', 'fender_telecaster', 'fender_stratocaster', 'explorer']

fast.ai bietet eine Methode zur einfachen Vorbereitung der Daten. Mit einer Methode können Sie die Änderungen festlegen, die im Bild widergespiegelt werden sollen (z. B. Drehung zur Datenerweiterung), die Größe ändern und das Verhältnis von Trainings- und Validierungsdatensätzen festlegen. Weitere Informationen finden Sie auf der API-Detailseite.


data = ImageDataBunch.from_folder(path, train=".", valid_pct=0.2,
                                 ds_tfms=get_transforms(), size=224, num_workers=4, bs=16).normalize(imagenet_stats)

Es ist auch möglich, Beispieldaten anzuzeigen!


data.show_batch(rows=3, figsize=(7,8))

Images.png

Das Lernen selbst ist sehr einfach. Es kann basierend auf dem CNN-Modell trainiert werden, das in zwei Codezeilen trainiert wird.


learn = cnn_learner(data, models.resnet34, metrics=error_rate)
learn.fit_one_cycle(4)

Das Ergebnis des Lernens ist wie folgt. 90% System! Ist es nicht der Stand der Technik der Gitarrenidentifikations-Engine? Es kann das einzige Modell sein.

TrainingDone.PNG

Sie können auch Schulungsprobleme und die Ergebnisse von Validierungsdatensätzen anzeigen.


interp = ClassificationInterpretation.from_learner(learn)
interp.plot_confusion_matrix()

ConfusionMatrix.PNG

Das ist Verwirrungsmatrix! Telecaster und Stratocaster sind sicherlich am gemischtesten. Sie können auch Bilder anzeigen, die das Modell nicht richtig vorhergesagt hat.


losses,idxs = interp.top_losses()
interp.plot_top_losses(9, figsize=(15,15))

Guitars.PNG

Sicher gibt es viele Bilder, die schwer zu beurteilen sind. Das Bild oben links ist in erster Linie ein Gitarrenkoffer. Ganz rechts in der Mitte befindet sich wahrscheinlich die Stratocaster, aber das Bild ist zu beschnitten und für das Modell schwierig. Das Bild unten rechts ist für Menschen schwer zu beurteilen. Es ist eine andere Gitarre. Das heißt, die Trainings- und Validierungsdaten enthalten Rauschen. "Müll rein, Müll raus". Als zukünftige Verbesserung werden wir die Daten sauberer machen und lernen. Sie können auch mehr erfahren, indem Sie die Parameter des importierten Modells aufheben, aber es braucht natürlich Zeit.

Lassen Sie uns eine Vorhersage mit einem Modell machen.


img = open_image(path/'gibson_les_paul'/'00000059.jpg')
pred_class,pred_idx,outputs = learn.predict(img)

Diese Gitarre.

download.png

Das Vorhersageergebnis lautet: Kategorie gibson_les_paul

: v: Pipong Pipong: v:

Um das in Meine App erstellte Modell zu verwenden, können Sie das Modell exportieren und mit einfachem Python-Code in eine API konvertieren.

Die meisten der oben genannten Inhalte stammen aus Fast.ai Lektion 1. Es ist erstaunlich, wie einfach es ist, so schnell gute Ergebnisse zu erzielen. Außerdem ist der Unterricht kostenlos! es wird empfohlenKlicken Sie auf diesen Link für Fast.ai-Lektionen!

Recommended Posts

Ein Modell, das die Gitarre mit fast.ai identifiziert
Die Geschichte, eine harte Zeit mit der gemeinsamen Menge HTTP_PROXY = ~ zu haben
Ein Memo, dass ich den Datenspeicher mit Python berührt habe
Kalibrieren Sie das Modell mit PyCaret
[Golang] Ein Programm, das die Runde mit Zufallszahlen bestimmt
Analysieren Sie das Themenmodell, mit GensimPy3 Romanautor zu werden
Erstellen Sie mit PySide einen Modelliterator
Validieren Sie das Trainingsmodell mit Pylearn2
Ich habe ein Programm erstellt, das den Tierkreis mit tkinter automatisch berechnet
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Über die Sache, dass Fackelzusammenfassung wirklich verwendet werden kann, wenn ein Modell mit Pytorch erstellt wird
Tweet die Wettervorhersage mit Bot
[Python] Ein Programm, das Treppen mit # erstellt
Eine Geschichte, die die Gegenwart von Qiita mit Qiita API + Elasticsearch + Kibana visualisiert
Klasse, die die API von DMM trifft
Lassen Sie uns die Hyperparameter des Modells mit scikit-learn abstimmen!
Das LXC Web Panel, das LXC mit einem Browser bedienen kann, war wunderbar
Extrahieren Sie mit Python Zeilen, die den Bedingungen entsprechen, aus einer Textdatei
Achtung Seq2 Führen Sie das Dialogmodell mit Seq aus
Durchsuche das Labyrinth mit dem Python A * -Algorithmus
Eine typisierte Welt, die mit Python beginnt
Implementieren Sie ein Modell mit Status und Verhalten
[Python] Ein Programm, das die Partitur rundet
Probieren Sie TensorFlows RNN mit einem Basismodell aus
Ich möchte eine API erstellen, die ein Modell mit einer rekursiven Beziehung im Django REST Framework zurückgibt
Ein Artikel, der nur eine kleine HTTP-Anfrage mit dem Befehl curl versucht
Rund um die Authentifizierung von PyDrive2, einem Paket zum Betreiben von Google Drive mit Python
Die Geschichte der Erstellung einer Webanwendung, die umfangreiche Lesungen mit Django aufzeichnet
Implementierung eines Modells, das Wechselkurse (Dollar-Yen-Kurs) durch maschinelles Lernen vorhersagt
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Tweet die Wettervorhersage mit Bot Teil 2
Finden Sie mit NumPy die Position über dem Schwellenwert
Memo, mit dem ein Diagramm zum Plotten animiert wurde
Belichtung des DCGAN-Modells für Cifar 10 mit Keras
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
Folgen Sie der AR-Markierung mit einem 2-Achsen-Servo
Vorhersage des heißen Sommers mit linearem Regressionsmodell
Programm zur Suche nach demselben Bild
Lösen des Lorenz 96-Modells mit Julia und Python
Speichern Sie das Objekt in einer Datei mit pickle
Laden Sie die TensorFlow-Modelldatei .pb mit readNetFromTensorflow ().
Implementieren Sie mit stan ein zeitdiskretes logistisches Regressionsmodell
Erstellen Sie ein Übersetzungswerkzeug mit dem Translate Toolkit
Die Geschichte, die zur Installation von Pip passt
Ein Shell-Programm, das eine Fibonacci-Sequenz anzeigt
Ich habe eine Twitter-App erstellt, die die Zeichen der Vorverbindung mit Heroku entschlüsselt (Fehler).
Ich habe versucht, mit dem Seq2Seq-Modell von TensorFlow so etwas wie einen Chatbot zu erstellen
Eine Geschichte, die fehlgeschlagen ist, als versucht wurde, das Suffix mit rstrip aus einem String zu entfernen
Überprüfen Sie die Wirkung des Urlaubs als Gegenmaßnahme gegen das neue Koronavirus mit dem SEIR-Modell
[Python] Lassen Sie nur Elemente im Array, die mit einer bestimmten Zeichenfolge beginnen
Es scheint, dass eine neue Lotterie mit einer Gesamtpunktzahl in der Sportlotterie beginnen wird.
Versuchen Sie, mit Python eine Wellenform (Audiospektrum) zu erstellen, die sich entsprechend dem Klang bewegt
Ein Skript, das so lange sucht, bis die entsprechende URL mit einem Hatena-Lesezeichen versehen ist
Erstellt ein Narrbild für das Modell der Untertitelgenerierung
Eine Geschichte, die den Aufwand für Betrieb / Wartung reduziert
[Python] Ein Programm, das die Anzahl der Täler zählt
Simulieren Sie ein gutes Weihnachtsdatum mit einem Python-optimierten Modell
So erstellen Sie ein Untermenü mit dem Plug-In [Blender]
Überwachen Sie das Trainingsmodell mit TensorBord auf Jupyter Notebook