[PYTHON] J'ai essayé d'exécuter le didacticiel de détection d'objets en utilisant le dernier algorithme d'apprentissage en profondeur

introduction

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)

Comment il a fallu du temps pour publier cette fois

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.

Résultats d'essais et d'erreurs

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

environnement

Git

brew install git

Python3.6.1

brew install python3

Paramètre PATH

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  

Préparation

cd {Espace de travail}/chainer-SSD/util
python3 setup.py build_ext -i

Courir

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 "

résultat

Chien, voiture et vélo

スクリーンショット 2017-06-21 16.53.06.png

Bicyclettes et personnes en forme de poisson

スクリーンショット 2017-06-21 16.58.01.png

J'ai essayé diverses choses

Voiture et chat

スクリーンショット 2017-06-21 16.56.50.png

Les gens et les oiseaux

スクリーンショット 2017-06-21 17.06.11.png

raton laveur

スクリーンショット 2017-06-21 17.08.17.png * Ne pas reconnaître (?)

Chien en fauteuil roulant

スクリーンショット 2017-06-21 17.09.24.png

Beaucoup de gens

スクリーンショット 2017-06-21 17.10.58.png

Impressions

――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)

Résumé

――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)

Recommended Posts

J'ai essayé d'exécuter le didacticiel de détection d'objets en utilisant le dernier algorithme d'apprentissage en profondeur
J'ai essayé l'apprentissage en profondeur avec Theano
[Pour les débutants] J'ai essayé d'utiliser l'API Tensorflow Object Detection
[Détection d'anomalies] Essayez d'utiliser la dernière méthode d'apprentissage à distance
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
J'ai essayé l'histoire courante de prédire la moyenne Nikkei à l'aide du Deep Learning (backtest)
Un amateur a essayé le Deep Learning avec Caffe (Introduction)
Un amateur a essayé le Deep Learning en utilisant Caffe (Practice)
Un amateur a essayé le Deep Learning avec Caffe (Vue d'ensemble)
J'ai essayé le deep learning
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
J'ai essayé de simuler l'optimisation des publicités à l'aide de l'algorithme Bandit
[TF] J'ai essayé de visualiser le résultat de l'apprentissage en utilisant Tensorboard
[Deep Learning from scratch] J'ai essayé d'expliquer la confirmation du gradient d'une manière facile à comprendre.
[Pour ceux qui veulent utiliser TPU] J'ai essayé d'utiliser l'API de détection d'objets Tensorflow 2
[Bouclier d'épée Pokémon] J'ai essayé de visualiser la base de jugement de l'apprentissage en profondeur en utilisant la classification des trois familles comme exemple
J'ai essayé le tutoriel TensorFlow 1er
J'ai essayé le tutoriel TensorFlow 2ème
J'ai essayé l'apprentissage par renforcement avec PyBrain
J'ai essayé d'utiliser l'API checkio
J'ai essayé d'exécuter le didacticiel TensorFlow avec des commentaires (_TensorFlow_2_0_Introduction pour les débutants)
Détection d'objets par apprentissage profond pour comprendre en profondeur par Keras
J'ai essayé d'héberger le modèle d'apprentissage en profondeur de Pytorch avec TorchServe sur Amazon SageMaker
J'ai essayé d'utiliser l'API BigQuery Storage
J'ai essayé d'extraire le dessin au trait de l'image avec Deep Learning
J'ai couru le tutoriel TensorFlow avec des commentaires (classification du texte des critiques de films)
J'ai essayé la détection d'objets avec YOLO v3 (TensorFlow 2.1) sur le GPU de windows!
vprof - J'ai essayé d'utiliser le profileur pour Python
J'ai essayé d'utiliser PyCaret à la vitesse la plus rapide
J'ai essayé d'utiliser l'API Google Cloud Vision
J'ai essayé de détecter un objet avec M2Det!
J'ai essayé d'utiliser le module Datetime de Python
J'ai essayé d'exécuter Deep Floor Plan avec Python 3.6.10.
J'ai essayé d'utiliser le filtre d'image d'OpenCV
J'ai essayé d'utiliser la bibliothèque de programmation fonctionnelle toolz
[Deep Learning from scratch] J'ai implémenté la couche Affine
J'ai installé et utilisé la bibliothèque Deep Learning Chainer
J'ai essayé d'exécuter l'application sur la plateforme IoT "Rimotte"
J'ai essayé le tutoriel MNIST de tensorflow pour les débutants.
J'ai essayé d'apprendre mon propre ensemble de données en utilisant Chainer Trainer
[Linux] J'ai essayé d'utiliser le logiciel de statistiques génétiques PLINK
J'ai essayé de regrouper les données ECG en utilisant la méthode K-Shape
J'ai essayé d'obtenir une AMI en utilisant AWS Lambda
J'ai essayé d'approcher la fonction sin en utilisant le chainer
J'ai essayé de devenir un Ann Man en utilisant OpenCV
J'ai essayé d'utiliser l'API de Sakenowa Data Project
[Python] J'ai essayé d'exécuter un serveur local en utilisant flask
[Deep Learning from scratch] J'ai essayé d'expliquer le décrochage
J'ai étudié l'algorithme d'apprentissage de renforcement du trading d'algorithmes
J'ai essayé d'identifier la langue en utilisant CNN + Melspectogram
J'ai essayé de compléter le graphe de connaissances en utilisant OpenKE
J'ai essayé d'exécuter l'exemple de code du module Ansible
J'ai essayé de comparer la précision des modèles d'apprentissage automatique en utilisant kaggle comme thème.
J'ai essayé de trier les objets de l'image du plat de steak-① Détection d'objets
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser argparse