[('Russian_Blue', 0.58100362140429651),
('British_Shorthair', 0.22552991563514049),
('Abyssinian', 0.057159848358045016),
('Bombay', 0.043851502320485049),
('Egyptian_Mau', 0.030686072815385441)])]
Katzenerkennung mit OpenCV hat das Gesicht einer Katze erkannt, aber dieses Mal werde ich Deep-Learning-Technologie verwenden, um die Katzenrasse zu identifizieren.
Wenn Sie interessiert sind, werden die technischen Details auf dem Blog geschrieben.
Hier wird eine Technik namens ** Deep Convolutional Neural Network (DCNN) ** auf die allgemeine Objekterkennung angewendet, um die Katzenrasse zu identifizieren. Das Problem in diesem Bereich heißt ** Feinkörnige visuelle Kategorisierung (FGVC) **, wodurch die Zieldomäne (diesmal die Katzenrasse) eingegrenzt wird. Es ist schwierig, eine hohe Genauigkeit zu erreichen, da es sich um visuell ähnliche Dinge handelt.
Es gibt mehrere DCNN-Implementierungen, aber hier verwenden wir eine Bibliothek namens Caffe (* Die Bibliothek selbst ist eine Open-Source-BSD-2-Klausel-Lizenz, die ImageNet-Daten jedoch Beachten Sie, dass es nicht kommerziell ist. Die Ausgabe der mittleren Schicht (verborgene Schicht) von DCNN wird als Merkmalsmenge von 4096 Dimensionen extrahiert und ein geeigneter Klassifizierer wird verwendet, der sie als Merkmal verwendet, um eine Vorhersage zu treffen. Ich denke, es wäre einfacher, die Scikit-Learn-Implementierung für den Klassifikator zu verwenden.
Der Quellcode wird auf GitHub veröffentlicht. Wenn Sie interessiert sind, lesen Sie ihn bitte. Die folgende Verarbeitung ist implementiert. (Es ist ein gekritzeltes Befehlszeilentool, keine Bibliothek.)
:octocat: cat-fancier/classifier at master · wellflat/cat-fancier
Nehmen wir einen Benchmark mit dem von der Universität Oxford veröffentlichten Tierbilddatensatz.
Da es 12 Klassen sind, wird es eine leichte Aufgabe sein. Dieses Mal werden wir 1800 zum Lernen und 600 zum Verifizieren verwenden. Es scheint, dass die Anzahl der zu lernenden Bilder 150 pro Klasse beträgt, was gering zu sein scheint. Wenn es sich jedoch um 12 Klassen handelt, kann selbst diese Anzahl eine angemessene Genauigkeit ergeben. Da die Anzahl der Daten gering ist, selbst wenn Sie eine Rastersuche mit einem billigen VPS durchführen, ist das Lernen in etwa zehn Minuten abgeschlossen. Hier werden nur die Klassifizierungsergebnisse von SVM-RBF aufgelistet.
## SVM RBF Kernel
SVC(C=7.7426368268112693, cache_size=200, class_weight=None, coef0=0.0,
degree=3, gamma=7.7426368268112782e-05, kernel='rbf', max_iter=-1,
probability=False, random_state=None, shrinking=True, tol=0.001,
verbose=False)
precision recall f1-score support
Abyssinian 0.84 0.91 0.88 47
Bengal 0.84 0.83 0.84 46
Birman 0.72 0.79 0.75 52
Bombay 0.98 0.98 0.98 46
British_Shorthair 0.82 0.75 0.78 53
Egyptian_Mau 0.87 0.87 0.87 61
Maine_Coon 0.87 0.89 0.88 45
Persian 0.85 0.91 0.88 45
Ragdoll 0.76 0.76 0.76 41
Russian_Blue 0.84 0.82 0.83 57
Siamese 0.81 0.69 0.75 55
Sphynx 0.94 0.96 0.95 52
avg / total 0.85 0.84 0.84 600
Im Fall von SVM-RBF betrug die Genauigkeit 84,5%. Die Genauigkeit einiger langhaariger Typen wie Teppichpuppen ist gering, aber ich denke, dass es in Ordnung ist, wenn die Genauigkeit bisher mit 1800 Lerndaten erreicht werden kann. Der Blog veröffentlicht auch die Ergebnisse anderer Klassifikatoren, aber ich denke, es ist realistischer, lineare SVM oder logistische Regression für große Datenmengen zu verwenden, da das Problem der Vorhersagegeschwindigkeit besteht.
Es ist zu beachten, dass das neuronale Netzwerk automatisch effektive Merkmale zur Erkennung findet (lernt), ohne handgefertigte Merkmale zu verwenden. Dieses Mal wurde DCNN als Feature-Extraktor verwendet, aber die Feinabstimmung wird verwendet, um das gesamte Netzwerk mithilfe anderer Lehrerdaten zu optimieren, wobei die Parameter des Modells verwendet werden, die auf umfangreichen Lehrerdaten wie ImageNet als Anfangswerte basieren. Wenn Sie ein Modell verwenden, das mit einer Technik namens (Feinabstimmung) erstellt wurde, können Sie möglicherweise mit höherer Genauigkeit klassifizieren. Ich habe verschiedene Dinge ausprobiert, aber diese Aufgabe zeigte keine signifikante Verbesserung der Genauigkeit für die Zeit (und die Speichernutzung), die zum Erstellen des Modells erforderlich ist. Ich glaube nicht, dass es Schwierigkeiten bei der Feinabstimmung gibt, wenn Sie dem Tutorial auf der offiziellen Website von Caffe folgen.
Deep CNN ist häufig in berühmten Wettbewerben wie ILSVRC zu sehen. Ich denke, dass die Anzahl der Fälle, in denen Deep Learning auf Produktebene wie Webdienste und Apps verwendet wird, in Zukunft stetig zunehmen wird. Sobald eine praktische Methode festgelegt ist, wird Geld für die Datenerfassung ausgegeben.
[('Abyssinian', 0.621), ('Bengal', 0.144), ('Sphynx', 0.087)]
Abessinierwahrscheinlichkeit 62,1%, Bengalenwahrscheinlichkeit 14,4%, Sphinxwahrscheinlichkeit 8,7%
Recommended Posts