[PYTHON] Machen Sie eine Santa-Kennung aus einem Santa-Bild

Einführung

Menschlichkeit von allen, Hallo. Ich bin Yaguchi, der für die Software von Virtual YouTuber Hiro Rinkai verantwortlich ist.

Dieses Mal werde ich den "Santa Identifier" erklären, der im Video aufgenommen wurde.

v Es ist ein Link zum YouTube-Video. Bitte schau es dir an, wenn du magst, und abonniere den Kanal, wenn es dir gefällt. v

[Hiro Rinkai] Kann ich mit einem Santa-Klassifikator Weihnachtsmann werden?

Der Quellcode ist auf github verfügbar. Es ist ein sehr kurzer Code, also schauen Sie bitte zuerst dort nach.

https://github.com/hyaguchi947d/santa_recognition

Problemstellung

Als Problem habe ich es so eingestellt, dass es "zwischen den Illustrationen des Weihnachtsmanns und den Illustrationen des Nicht-Weihnachtsmanns unterscheidet". Aufgrund der Tatsache, dass wir das Video einmal pro Woche fertigstellen, haben wir nur einen Tag Zeit, um den Datensatz tatsächlich zu erstellen, zu codieren und zu validieren. Entwerfen Sie also mit dem minimalen Satz.

Bilddatensatz

Dies ist der schwierigste Teil. Weil wir ein kommerzielles Unternehmen sind und Video-Posting eine Verkaufsaktivität ist. Verwenden Sie mit anderen Worten nichts anderes als Daten, die eindeutig als im Handel erhältlich gekennzeichnet sind.

Also habe ich es zuerst mit 20 Blättern nach den Regeln von "Irasutoya" gemacht. Da die Daten zu voreingenommen sind, haben wir sie aus "Pixabay" und "Material Good" hinzugefügt. Am Ende gab es insgesamt 58 Blätter von 29 + 29.

Darüber hinaus wurden sowohl positive als auch negative Daten in train: test = 22: 7 unterteilt. Auch in diesem Fall werden die Verteilungsquellendaten so aufgeteilt, dass sie nicht verzerrt sind.

Bitte beachten Sie, dass wir Datensätze nicht weitergeben oder verknüpfen, da sie gegen die Regeln verstoßen.

Über die anzuwendende Methode

Ich hatte beschlossen, den Inhalt des Videos in drei Schritten zu löschen Das einfachste Farbhistogramm zuerst, Das letzte ist YOLO v3, das ich für tiefes Lernen verwendet habe. Es ist eines der mittleren, aber ich war mit HOG ratlos, aber ich entschied mich für Bag of Visual Words. Um den Inhalt des Schreibens von Code selbst zu minimieren Was kann mit OpenCV in etwa einer Stunde implementiert werden? Oder es gab eine Bedingung, dass es betrieben werden konnte, ohne es zu implementieren.

Implementierung

Farbhistogramm

Das gegebene Problem ist eine einfache Klassifizierung in zwei Klassen. Wie auch immer, solange Sie das Farbhistogramm erhalten können Der Rest kann von SVM beurteilt werden.

Machen wir es also schnell mit OpenCV Python und scikit-learn.

Es gibt ein Tutorial zum Erstellen eines Farbhistogramms in OpenCV. https://docs.opencv.org/master/dd/d0d/tutorial_py_2d_histogram.html

SVM hat auch ein leicht verständliches Tutorial zum Scikit-Lernen. https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

Was Sie tun, ist sehr einfach

def color_hist_from_file(imgfile):
    img = cv.imread(imgfile)
    hist = cv.calcHist([img], [0, 1, 2], None, [8, 8, 8], [0, 256, 0, 256, 0, 256])
    hist_1d = hist.flatten()[1:-1]  # remove bins with (0,0,0) and (255,255,255)
    n_hist_1d = hist_1d / np.linalg.norm(hist_1d)
    return n_hist_1d

In dieser Funktion wird ein Histogramm (8 * 8 * 8 = 512 Dimensionen) erzeugt, das jeden bgr-Kanal in 8 unterteilt. Der 510-dimensionale Vektor ohne den ersten und den letzten Behälter (Schwarzweiß, da es sich um die Hintergrundfarbe handelt) wird normalisiert und als Vektor für die Klassifizierung verwendet.

SVM-Lernen ist eine Liste positiver und negativer Beispiele. Generieren Sie eine Liste der entsprechenden Beschriftungen (diesmal 1 und 0).

trains = hist_train_p + hist_train_n
labels = [1] * len(hist_train_p) + [0] * len(hist_train_n)

clf = svm.SVC()
clf.fit(trains, labels)

Nur das.

Bag of Visual Words

Es gab kein anständiges OpenCV-Tutorial.

Da es sich jedoch um einen Algorithmus handelt, den ich selbst implementiert habe, ist das Schlimmste irgendwie Ich dachte, aber ich war ein wenig besorgt und konnte das OpenCV verwenden.

Dieser Artikel war hilfreich. https://hazm.at/mox/machine-learning/computer-vision/recipes/similar-image-retrieval.html

Zusätzlich wird AKAZE für die Feature-Punkte verwendet. Dies liegt daran, dass SIFT und SURF durch Patente geschützt sind. (Ich denke, diese Geschichte wird sich in drei Monaten wiederholen, aber zu diesem Zeitpunkt.)

Als Verfahren, --Berechnen Sie Schlüsselpunkte und Deskriptoren der AKAZE-Funktionspunkte des Lehrerbildes

YOLO v3

Ich habe Darknet benutzt. das ist alles.

Übrigens habe ich VoTT verwendet, um Datensätze zu generieren. Seit es v2 wurde, konnten keine YOLO-Daten generiert werden. V1 hatte es schwer damit, weil es fehlerhaft war (irgendwie leckte ein kommentiertes Bild).

Über experimentelle Ergebnisse

Farbhistogramm

Wenn Sie nur ein Histogramm + SVM nehmen, Selbst wenn die Helligkeit am Begrenzungsteil geringfügig abweicht, wird sie in den angrenzenden Behälter eingegeben. In einigen Fällen war die Ähnlichkeit äußerst gering. Oder stellen Sie die Behälter so ein, dass sie sich ein wenig überlappen Benachbarte Behälter sind nahe beieinander und es sind Maßnahmen erforderlich, aber ich hatte keine Zeit.

Deshalb sende ich eine Illustration von Santa Hiro, der Gegenstand der Identifizierung ist. Als ich zum ersten Mal Santa Kleidung in FF0000 schrieb, war ich nicht mehr Santa. Ich habe die Farbe ein wenig angepasst und auf DD0000 geändert.

Bag of Visual Words

Zuerst habe ich es nur auf Graustufen gemacht, Ich habe 3 BoVWs erstellt, indem ich sie für jeden RGB-Kanal getrennt und auch verbunden habe. Die Ergebnisse waren nahezu unverändert.

Einer der Gründe, warum ich mich mit HOG verlaufen habe, ist Weil es viele Vektorgrafiken gab (Hiro Rinne ist auch Vektorgrafiken) Ich dachte, dass die Kante einen Vorteil haben würde.

Wie im Video ausgeführt, Ich denke, es war einfach eine Frage des Stils, die ich nicht gut identifizieren konnte.

YOLO v3

Wie die für die Stimme verantwortliche Person im Video gab, Ich wünschte, ich hätte mich hier getrennt.

Übrigens habe ich zuerst versucht, nur eine Klasse von Santa zu identifizieren, Damit ist es zu einem humanoiden Illustrationsdetektor geworden, der auch alle nicht Santa erkennt. Ich hatte bisher 20 Stunden lang ungefähr 30.000 Epochen gelernt, aber ich habe es einmal und weggeworfen Ich machte 2 Klassen und fing in ungefähr 20000 Epochen für 15 Stunden von vorne an. (Erfahrungsgemäß reichen 20000 Epochen für die Diskriminierungsleistung aus.) Es dauert jedoch nicht viel Zeit, weil ich nur warte.

Wieder wurde mir klar, dass die Farben nicht so stark herauskamen.

abschließend

Solange wir es im Wochenprogramm einführen Ich hatte keine Zeit, dem Ergebnis zuzustimmen, aber Als Ergebnis musste ich eine Pointe als Unterhaltung setzen, also Das Skript selbst wurde so geschrieben, dass es in jedes Ergebnis fallen kann. Es ist jedoch nicht möglich, ungenaue oder schlampige Dinge zu versenden Ich habe versucht, genügend Inhalte zu packen, um innerhalb von 10 Minuten einen Vortrag zu halten.

Wie erwartet ist es schwierig, diese Dichte jede Woche bereitzustellen Die Geschichte von apt Technologie kann etwa einmal im Monat sein, Wir freuen uns auf Ihre weitere Unterstützung von Hiro Rinkai.

Recommended Posts

Machen Sie eine Santa-Kennung aus einem Santa-Bild
Python / Machen Sie ein Diktat aus einer Liste.
Erstellen Sie einen Kaskadenklassifizierer mit Google Colaboratory
Erster Bildklassifikator
Lass uns ein Squashspiel machen
Erstellen Sie eine Kopie einer Google Drive-Datei aus Python
[PyTorch] Tutorial (japanische Version) ④ ~ TRAINING A CLASSIFIER (Bildklassifizierung) ~
Generieren Sie aus Textdaten ein vertikales Bild eines Romans
Machen Sie einen Funktionsdekorateur
Extrahierter Text aus dem Bild
Erstellen Sie eine Distanzmatrix
Ich mache ein Passwort!
Machen wir einen Spot Sale Service 8 (Image Uploader Edition)
So nehmen Sie ein aufgenommenes Bild aus einem Video auf (OpenCV)
Machen Sie einen Nyan-Knopf
Mach ein Spiel im Tetris-Stil!
Erstellen Sie einen Base64-Decoder
Holen Sie sich ein Bild von einer Webseite und ändern Sie die Größe
Erstellen Sie mit matplotlib eine GIF-Animation aus einer Seriennummerndatei
Versuchen Sie, einen Kubernetes-Pod aus einem GitLab Container Registry-Image zu erstellen
Erstellen Sie eine GCE-Instanz aus einem GCR Docker-Image mithilfe von Terraform
Machen wir einen Discord Bot.
Erstellen Sie ein Blueqat-Backend ~ Teil 1
Erstellen Sie ein Blueqat-Backend ~ Teil 2
Stellen Sie MeCab in Python 3 zur Verfügung
Entfernen Sie den Rahmen aus dem Bild
[PyTorch Tutorial ④] AUSBILDUNG EINES KLASSIFIERERS
[Django] Erstellen Sie ein Pulldown-Menü
Machen Sie einen LINE BOT (Chat)
Erstellen Sie ein Lesezeichen in Python
Machen Sie eine Lotterie mit Python
Machen Sie Responder zu einem Daemon (Dienst)
Machen Sie ein Feuer mit kdeplot
Das Bild ist Namekuji
Erstellen Sie einen Berechnungsbohrdruck
Suchen Sie mit Pythonista3 nach einem Bild von der Kamerarolle
Lassen Sie uns ein Kindle-Buch erstellen, das mathematische Formeln aus TeX-Dateien visualisiert
Versuchen Sie, mit Python3 eine Zeichenfolge aus einem Bild zu extrahieren
So erstellen Sie eine .dylib-Bibliothek aus einer .a-Bibliothek mit OSX (El Capitan)
Stellen Sie eine Anfrage von der Gerätefarm (Appium Python) an das API-Gateway
Ich möchte eine Parameterliste aus CloudFormation-Code (yaml) erstellen.
Ich habe versucht, ein Standbild aus dem Video auszuschneiden
Erstellen eines Gesichtsbilddatensatzes für maschinelles Lernen (3: Gesichtsbildgenerierung aus Kandidatenbildern Teil 1)