web-dev-qa-db-fra.com

Détection d'objets à l'aide de Keras: un moyen simple pour un R-CNN ou YOLO plus rapide

On a peut-être répondu à cette question mais je n'ai pas trouvé de réponse simple à cela. J'ai créé un convnet en utilisant Keras pour classer les personnages des Simpsons ( jeu de données ici ).
J'ai 20 classes et en donnant une image en entrée, je renvoie le nom du personnage. C'est assez simple. Mon jeu de données contient des images avec le personnage principal dans l'image et n'a que le nom du personnage comme étiquette.

Maintenant, je voudrais ajouter une demande de détection d'objet, c'est-à-dire dessiner un cadre de délimitation autour des caractères de l'image et prédire de quel caractère il s'agit. Je ne veux pas utiliser de fenêtre coulissante car c'est très lent. J'ai donc pensé à utiliser plus rapidement RCNN ( github repo ) ou YOLO ( github repo ). Dois-je avoir à ajouter les coordonnées du cadre de sélection pour chaque image de mon ensemble d'entraînement? Existe-t-il un moyen de détecter des objets (et d'obtenir des boîtes englobantes dans mon test) sans donner les coordonnées de l'ensemble d'apprentissage?

En somme, je voudrais créer un modèle de détection d'objet simple, je ne sais pas s'il est possible de créer un YOLO plus simple ou un RCNN plus rapide.

Merci beaucoup pour toute aide.

13
A. Attia

Le but de yolo ou rcnn plus rapide est d'obtenir les boîtes englobantes. Donc, en bref, oui, vous devrez étiqueter les données pour les former.

Prendre un raccourci:

  • 1) Étiquetez une poignée de boîtes englobantes (disons 5 par caractère).
  • 2) Entraînez-vous plus rapidement rcnn ou yolo sur le très petit ensemble de données.
  • 3) Exécutez votre modèle sur l'ensemble de données complet
  • 4) Il obtiendra un certain droit, se trompe beaucoup.
  • 5) Entraînez le rcnn le plus rapide sur ceux qui sont correctement délimités, votre ensemble d'entraînement devrait être beaucoup plus grand maintenant.
  • 6) répétez jusqu'à ce que vous obteniez le résultat souhaité.
13
Andrew Tu

Vous avez peut-être déjà une architecture appropriée en tête: " Maintenant, je voudrais ajouter une détection d'objet, c'est-à-dire dessiner un cadre de délimitation autour des caractères de l'image et prédire de quel caractère il s'agit."

Vous venez donc de diviser la tâche en deux parties:
1. Ajouter un détecteur d'objets pour la détection de personne afin de renvoyer les boîtes englobantes
2. Classer les boîtes englobantes à l'aide du convnet que vous avez déjà formé

Pour la partie 1, vous devriez être prêt à utiliser un détecteur de fonctionnalité (par exemple un convnet pré-formé sur COCO ou Imagenet) avec un détecteur d'objet (toujours YOLO et Faster-RCNN) sur le dessus pour détecter les personnes. Cependant, vous pouvez constater que les personnes dans les "dessins animés" (disons que les Simpsons sont des personnes) ne sont pas correctement reconnues car le détecteur de fonctionnalités n'est pas formé sur des images basées sur des dessins animés mais sur des images réelles. Dans ce cas, vous pouvez essayer de re-former quelques couches du détecteur de caractéristiques sur les images de dessins animés afin d'apprendre les caractéristiques des dessins animés, selon le ( transfert d'apprentissage méthodologie.

4
Michelagio