Letztes Mal habe ich einen Gesichtsklassifikator unter Verwendung eines Faltungs-Neuronalen Netzwerks (CNN) erstellt, aber in Wirklichkeit ist dies nur der Anfang des maschinellen Lernens. Ich habe gelernt, dass die Welt mit enormer Geschwindigkeit voranschreitet. Ich habe erfahren, dass der Boss, der sein Leben getötet hat, tatsächlich der schwächste der 10.000 oder mehr Feinde ist.
Es scheint, dass jedes Jahr neue Algorithmen veröffentlicht werden und Wettbewerbe stattfinden, um um die Erkennungsgenauigkeit zu konkurrieren. Der Hauptgrund für den Fortschritt ist die Verbesserung der Erkennungsgenauigkeit und der Verarbeitungsgeschwindigkeit. Unter anderem habe ich versucht, das Tutorial des Single Shot MultiBox Detector (SSD) zu verschieben, der diesmal der neueste Algorithmus ist.
Für diejenigen, die die detaillierten Fortschritte in der Branche lesen möchten, ist die folgende Seite sehr einfach zu verstehen. SSD: Single Shot MultiBox Detector (ECCV2016) Zusammenfassend CNN → R-CNN → SCHNELL R-CNN → SCHNELLER R-CNN → SSD (hier und jetzt)
Ich war ungefähr 5 Tage lang süchtig danach und es gab ein Problem, bei dem ich keinen Hinweis finden konnte, um das Ergebnis zu lösen. Das liegt daran, dass die Implementierung selbst Python verwendet, aber Tatsache ist, dass so viele Bibliotheksoptionen erforderlich sind, um es zu implementieren.
Zuerst dachte ich, dass es mit Tesnorflow implementiert wurde, aber es gibt auch Code, der zu unverständlich zu sein scheint, und es ist nicht nur zum Zweck des unfreiwilligen Verschiebens interessant, so dass der Code immer noch minimal Keras ist. Ich habe beschlossen, das, was ich implementiert habe, zu verschieben.
Referenzcode Kuras hatte kein Problem, aber dies ist ein Mechanismus, der das Video direkt erkennt und OpenCV, FFmpeg, GTK2 benötigt. Obwohl OpenCV und FFmpeg mit Homebrew installiert wurden, wurde GTK2 nicht in OpenCV erstellt und das Video wurde nicht geladen.
Ich habe versucht, verschiedene Dinge zu bearbeiten und umzuschreiben, und verschiedene Dinge wie Build-Optionen und ähnliches ausprobiert, aber abschließend schien Homebrews OpenCV so eingestellt zu sein, dass GTK nicht erstellt werden konnte. Artikel, der zum Abschluss des Aufgebens führte
Übrigens habe ich es mit dem Build versucht, aber ich habe den Weg aufgegeben, weil der Build von FFmpeg, wie gesagt, sehr mühsam war.
Aufgrund der obigen Ausführungen habe ich mich entschlossen, die mit Chainer zu testen. Dadurch können Standbilder und keine Videos erkannt werden. chainer-SSD
Git
brew install git
Python3.6.1
brew install python3
if [ -d $(brew --prefix)/lib/python3.6/site-packages ];then
export PYTHONPATH=$(brew --prefix)/lib/python3.6/site-packages:$PYTHONPAT
fi
Cython
pip3 install cython
Numpy
pip3 install numpy
Chainer
pip3 install chainer
Matplotlib
pip3 install matplotlib
git clone
cd {Arbeitsplatz}
git clone https://github.com/ninhydrin/chainer-SSD.git
cd {Arbeitsplatz}/chainer-SSD/util
python3 setup.py build_ext -i
Zwei Bilder zur Ausführung sind enthalten, also lassen Sie uns dies zuerst ausführen.
cd {Arbeitsplatz}/chainer-SSD
python3 demo.py img/dog.jpg
/usr/local/lib/python3.6/site-packages/skimage/transform/_warps.py:84: UserWarning: The default mode, 'constant', will be changed to 'reflect' in skimage 0.15.
warn("The default mode, 'constant', will be changed to 'reflect' in "
――Die Erkennungsgenauigkeit war auf etwa 3 Objekte pro Bild begrenzt. --Wenn das Objekt im Bild zu klein ist, wird es nicht erkannt. (Ich denke, das liegt daran, dass ich die Größe ändere) ――Es scheint, dass die Genauigkeit des Rückens, der Seiten und der unscharfen Objekte noch nicht sehr hoch ist. (Vielleicht gibt es nicht genug zu lernen) ――Die Geschwindigkeit ändert sich nicht, weil ich nicht das Gefühl hatte, dass sie für ein Bild so langsam ist. (Erfahrung ca. 5 Sekunden)
――Ich möchte den Quellcode lesen, die Originalbilddaten lernen und es erneut versuchen. ――Ich möchte die Erkennung direkt vom Video oder der Kamera versuchen. (Wenn es eine einfache Möglichkeit gibt, auf Mac oder CentOS zu bauen)
Recommended Posts