La dernière fois, j'ai créé un classificateur de visage en utilisant un réseau neuronal convolutif (CNN), mais en réalité ce n'est que le début de l'apprentissage automatique. J'ai appris que le monde progressait à une vitesse fulgurante. J'ai appris que le patron qui a tué sa vie est en fait le plus faible des 10 000 ennemis ou plus.
Il semble que de nouveaux algorithmes sont publiés chaque année et que des concours sont organisés pour concourir pour la précision de la reconnaissance, et la principale raison de ces progrès est d'améliorer la précision de la reconnaissance et la vitesse de traitement. Parmi eux, j'ai essayé de déplacer le tutoriel de Single Shot MultiBox Detector (SSD) qui est le dernier algorithme cette fois.
Pour ceux qui veulent lire les progrès détaillés de l'industrie, la page suivante est très facile à comprendre. SSD: Single Shot MultiBox Detector (ECCV2016) En résumé CNN → R-CNN → FAST R-CNN → FASTER R-CNN → SSD (ici et maintenant)
J'y ai été accro pendant environ 5 jours, et il y avait un problème que je n'ai pas pu trouver d'indice pour résoudre le résultat. C'est parce que l'implémentation elle-même utilise Python, mais le fait est qu'il y a tellement de choix de bibliothèques nécessaires pour l'implémenter.
Au début, je pensais qu'il était implémenté en utilisant Tesnorflow, mais il y a aussi du code qui semble être trop incompréhensible, et ce n'est pas intéressant uniquement dans le but de le déplacer involontairement, donc le code est toujours minimal Keras J'ai décidé de déplacer ce que j'ai mis en œuvre.
Code de référence Kuras n'a eu aucun problème, mais c'est un mécanisme qui reconnaît directement la vidéo et nécessite OpenCV, FFmpeg, GTK2. De la conclusion, bien qu'OpenCV et FFmpeg aient été installés en utilisant Homebrew, GTK2 n'a pas été construit dans OpenCV et la vidéo n'a pas été chargée.
J'ai essayé de modifier et de réécrire diverses choses, et j'ai essayé diverses choses telles que des options de construction et des choses comme celle-ci, mais en conclusion, l'OpenCV de Homebrew semblait être configuré de sorte que GTK ne puisse pas être construit. Article qui a conduit à la conclusion de l'abandon
Au fait, j'ai essayé depuis la construction, mais j'ai abandonné le chemin parce que la construction de FFmpeg était très gênante comme on l'a dit auparavant.
Sur la base de ce qui précède, j'ai décidé d'essayer celui utilisant Chainer. Cela peut détecter des images fixes, pas des vidéos. 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 {Espace de travail}
git clone https://github.com/ninhydrin/chainer-SSD.git
cd {Espace de travail}/chainer-SSD/util
python3 setup.py build_ext -i
Deux images pour l'exécution sont incluses, alors exécutons ceci en premier.
cd {Espace de travail}/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 "
――Il y avait une limite à la précision de détection d'environ 3 objets par image. --Si l'objet de l'image est trop petit, il ne sera pas détecté. (Je pense que c'est parce que je redimensionne) ――Il semble que la précision des objets arrière, latéraux et flous ne soit pas encore très élevée. (Peut-être qu'il n'y a pas assez d'apprentissage) ――La vitesse ne change pas parce que je ne pensais pas qu'elle était si lente pour une image. (Expérience d'environ 5 secondes)
――Je voudrais lire le code source, apprendre les données d'image d'origine et réessayer. ――Je voudrais essayer la reconnaissance directement à partir de la vidéo ou de la caméra. (S'il existe un moyen simple de construire sur Mac ou CentOS)