Darkflow: YOLO 9000

Créé le 9 févr. 2017  ·  41Commentaires  ·  Source: thtrieu/darkflow

Bonjour gars!

Merci pour le travail incroyable!

Je recherche le modèle YOLO9000 pouvant classer 9000 catégories.

Je n'ai pas trouvé le YOLO 9000 cfg .

Quelqu'un peut-il aider s'il vous plaît?

> find . -name '*.cfg' -exec cat {} \; | grep "classes"
classes=4
classes=20
classes=80
classes=2
classes=4
classes=20
classes=20
classes=4
classes=4
classes=20
classes=4
classes=2
classes=80
classes=4
classes=20
classes=80
classes=20
classes=20
classes=80

Je m'attendais à quelque chose comme classes=9000

help wanted

Commentaire le plus utile

Je l'ai fait fonctionner ! :)

J'essaie juste de trouver la meilleure façon de structurer mes modifications pour un RP. Je vois que beaucoup de choses ont bougé ces derniers jours.

J'en ai actuellement la plupart sous forme de darkflow/cython_utils/cy_yolo9000_findboxes.pyx séparé, mais je pourrais probablement l'intégrer dans le cy_yolo2_findboxes.pyx et incorporer une autre clé méta dans l'instruction if de la méthode labels de darkflow/darkflow/yolo/misc.py (puis faites une séparation entre la technique softmax dans les boîtes de recherche avant de sauter dans la boucle).

Je suis déjà entré dans l'instruction if dans la méthode des labels dans misc.py pour ajouter un hyponym_map qui est un dict mappant un index parent à une liste de ses nœuds enfants par les fichiers de données.

De plus, j'ai actuellement un dossier data/ dans mon dossier cfg/ et je joins simplement le chemin de la configuration et meta['tree'] et meta['map'] pour les chemins de fichiers.

Si vous n'avez aucune contribution, je ferai les relations publiques avec ce qui a du sens pour moi, sinon je suis tout ouïe !

Tous les 41 commentaires

La configuration est ici , il semble que l'auteur ne fournisse pas le fichier de poids YOLO9000.

Merci pour la réponse rapide! Je vais essayer de trouver le weights9000 et le posterai ici pour aider les autres.

Le fichier des poids est ici : http://pjreddie.com/media/files/yolo9000.weights

As-tu réussi à faire fonctionner ça ? J'ai mis le fichier de poids ainsi que le fichier de configuration et j'ai également téléchargé le fichier 9k.names. Le traitement n'a pas pris trop de temps, mais le post-traitement a pris environ 10 fois plus longtemps qu'avec la configuration normale de yolo.cfg et yolo.weights. À la fin, aucune boîte englobante n'est apparue dans aucune des images de retour. Est-ce que je fais quelque chose de mal?

J'ai regardé le yolo9000.cfg , il s'avère qu'il y a encore du travail à faire. yolo9000 ne fait pas le softmax habituel mais un groupé. Très occupé en ce moment, je vais essayer de travailler là-dessus mais au moins pas cette semaine et la prochaine.

Ouais pas de soucis du tout. Vos temps de réponse à ces problèmes sont incroyablement rapides :) merci beaucoup pour tout le travail que vous avez consacré à cela - c'est un projet vraiment chouette. Je voulais juste m'assurer que je ne faisais pas quelque chose de mal qui causait le problème - pas de précipitation du tout pour régler ce problème.

Y a-t-il des nouvelles?
J'ai le même problème qu'abagshaw.
Post-traitement 10 fois plus lent et sans cadres de délimitation.
Dois-je modifier le fichier cfg et comment ?

Merci!

@thtrieu Pouvons-nous rouvrir ce problème jusqu'à ce qu'il soit résolu car pour le moment, je ne pense pas que darkflow ait la fonctionnalité YOLO 9000?

Je vais probablement utiliser YOLO9000 pour mon projet de thèse (même si je vais l'adapter fortement), et comme c'est la seule implémentation tensorflow de YOLOv2 que je peux trouver, je suppose que je vais l'utiliser comme base. J'ajouterai mon implémentation quand elle sera terminée, mais cela prendra probablement quelques semaines de plus, donc si quelqu'un a plus de temps plus tôt, cela m'aiderait énormément aussi ! ;)

J'ai du temps libre dans les prochains jours - mais ma compréhension du ML et de ce qui se passe réellement dans les coulisses ici est assez superficielle. Je ne sais pas exactement ce qu'il faut faire pour que YOLO 9000 fonctionne - si ce n'est pas trop compliqué, quelqu'un pourrait-il brièvement décrire ce qui doit être fait et je vais essayer (si c'est assez complexe, ne vous embêtez pas car Je doute que j'irai très loin :) )

@abagshaw ce qu'il faut faire est de comprendre les paramètres suivants dans .cfg

random=1
tree=data/9k.tree
map = data/coco9k.map

Ceux-ci seront lus dans le dict meta par le code actuel, le seul code qui doit être modifié est la fonction post-process, qui, actuellement ne prend pas en compte meta['random'], meta['tree'], meta['map'] pour interpréter le tenseur de sortie & dessiner des cadres de délimitation.

Mais n'aurait-il pas besoin d'une implémentation complètement différente du softmax (cela devrait être facile, il suffit de le diviser sur les différentes couches de l'arbre) et de la rétropropagation sur ce softmax ? (car le backprop ne devrait fonctionner que sur les nœuds softmax impliqués ?)

Ouais désolé les gars - je pense que c'est un peu au-dessus de ma tête. Je parcourais https://github.com/pjreddie/darknet/commit/d2dece3df743c97f2cfbb9bbf0dd0449a8730cec et il s'y passe beaucoup de choses que je ne comprends pas. Je vais continuer à fouiner mais je ne pense pas que je vais aller très loin.

Des mises à jour à ce sujet ?

Oui, désolé, j'ai décidé qu'il serait plus rapide de simplement coller la couche de classification yolo9000 sur un RCNN plus rapide en tensorflow. Je pourrais envisager de faire quelque chose ensemble une fois ma thèse terminée, mais ce ne sera pas avant 4 mois ;)

Drat - c'est dommage. J'essaie de comprendre comment fonctionne toute cette classification d'arborescence WordNet dans yolo9000. J'aurais aimé mieux comprendre ce genre de choses pour pouvoir aider. J'espère que quelqu'un aura le temps d'ajouter cette fonctionnalité bientôt :)

Les gars, j'ai créé un référentiel pour YOLO 9000. Tout est expliqué ici. Vérifiez-le:

https://github.com/philipperemy/yolo-9000

Il utilise darknet au lieu de darkflow mais je pense qu'il devrait être assez facile de le porter.

@abagshaw @TheLaurens @saiprabhakar @thtrieu @frey123

@philipperemy Merci, peut-être qu'il me manque quelque chose - mais je ne sais pas comment cela nous rapproche de la mise en œuvre de YOLO9000 dans darkflow?

Si vous avez envie de porter YOLO9000 sur darkflow, ce serait génial :) :)

@abagshaw le faire fonctionner pour darknet était la première étape. Maintenant, je vais me concentrer sur la façon de le faire fonctionner pour darkflow !

@philipperemy Super ! Tenez-nous au courant :)

@philipperemy Des progrès pour faire fonctionner YOLO9000 dans darkflow ? :)

Désolé toujours pas de gros progrès ! Je suis occupé par mon travail maintenant :)

Merci a tous.

Puis-je poser quelques questions liées à ce sujet?
Courant je change le yolo.cfg pour classer 2 classes. Pour le poids, j'utilise yolo.weights. Après avoir formé le modèle, cela fonctionne plutôt bien.

Q1 : D'après ce problème, il semble que j'ai besoin d'un poids différent pour un nombre différent de classes. Je me souviens que yolo.weights est utilisé au moins pour 20 classes. Ai-je raison?

Q2 : Pour combien de cours puis-je utiliser ce yolo.weights ?

Q3 : Est-il possible d'utiliser le point de contrôle d'un modèle pour 2 classes comme poids de départ pour un autre modèle, disons 3 classes ?

Merci encore.

@chengs2000 Vos questions ne sont pas vraiment liées à YOLO9000 - postez peut-être votre question dans un nouveau numéro et elle pourra y être traitée.

Salut, à moins que quelqu'un ne le fasse déjà (@philipperemy?), je vais essayer. Je reviendrai dans quelques jours avec les résultats.

@relh vas-y s'il

@relh Des progrès ? 😃

Je l'ai fait fonctionner ! :)

J'essaie juste de trouver la meilleure façon de structurer mes modifications pour un RP. Je vois que beaucoup de choses ont bougé ces derniers jours.

J'en ai actuellement la plupart sous forme de darkflow/cython_utils/cy_yolo9000_findboxes.pyx séparé, mais je pourrais probablement l'intégrer dans le cy_yolo2_findboxes.pyx et incorporer une autre clé méta dans l'instruction if de la méthode labels de darkflow/darkflow/yolo/misc.py (puis faites une séparation entre la technique softmax dans les boîtes de recherche avant de sauter dans la boucle).

Je suis déjà entré dans l'instruction if dans la méthode des labels dans misc.py pour ajouter un hyponym_map qui est un dict mappant un index parent à une liste de ses nœuds enfants par les fichiers de données.

De plus, j'ai actuellement un dossier data/ dans mon dossier cfg/ et je joins simplement le chemin de la configuration et meta['tree'] et meta['map'] pour les chemins de fichiers.

Si vous n'avez aucune contribution, je ferai les relations publiques avec ce qui a du sens pour moi, sinon je suis tout ouïe !

@relh Génial ! Merci beaucoup pour votre travail là-dessus !!

Pour mes 2 cents : si votre code cy_yolo9000_findboxes.pyx est entièrement différent de celui déjà écrit dans cy_yolo2_findboxes.pyx création d'un nouveau fichier n'est pas un problème - mais s'ils partagent la plupart du même code, il serait probablement une meilleure idée d'essayer d'intégrer vos modifications dans le fichier existant (pour éviter d'ajouter du code en double). Il m'est difficile de donner beaucoup plus d'informations sans voir les modifications que vous avez apportées (je ne sais pas exactement en quoi YOLO9000 diffère de YOLOv2) - j'irais donc avec votre meilleur jugement sur la façon d'appliquer ces changements.

J'attends les RP avec impatience !

@relh merci beaucoup !! Désolé j'étais très occupé récemment et je n'ai pas eu le temps de travailler dessus !

@relh c'est une excellente nouvelle. Dans l'attente du PR.

Génial! (Dans l'attente de clore ce problème).

Ce problème est-il clos ? Avons-nous une implémentation de tensorflow pour YOLO9000 ? Veuillez m'indiquer la même chose. Merci.

Question dans ce numéro : pjreddie fait référence à YOLO9000 en tant que YOLOv2 sur son site Web YOLO . Si vous allez dans la section "Quoi de neuf dans la version 2" et cliquez sur le lien vers le papier, cela ouvre le papier YOLO9000.

Donc, s'il n'y a pas d'implémentation de YOLO9000 dans Darkflow, qu'est-ce que YOLOv2 exactement dans le contexte de Darkflow ?

Yolo9k est le modèle formé sur imagenet avec la méthode d'apprentissage de la boîte englobante alors que le yolov2 par défaut est formé sur COCO.

@philipperemy

1) semble que votre code ne fonctionne que sur le processeur, savez-vous pourquoi ?
2) quelle est la différence avec votre projet et darknet maintenant ?

Merci!

Le code
Mon projet est basé sur darknet et contient tout pour exécuter YOLO9000.

compilé avec le drapeau CPU :

seb@PHQ-4035-En:~/projects/stockshot/darknet$ ./darknet detector test cfg/combine9k.data cfg/yolo9000.cfg yolo9000.weights data/person.jpg
layer     filters    size              input                output
    0 conv     32  3 x 3 / 1   544 x 544 x   3   ->   544 x 544 x  32
    1 max          2 x 2 / 2   544 x 544 x  32   ->   272 x 272 x  32
    2 conv     64  3 x 3 / 1   272 x 272 x  32   ->   272 x 272 x  64
    3 max          2 x 2 / 2   272 x 272 x  64   ->   136 x 136 x  64
    4 conv    128  3 x 3 / 1   136 x 136 x  64   ->   136 x 136 x 128
    5 conv     64  1 x 1 / 1   136 x 136 x 128   ->   136 x 136 x  64
    6 conv    128  3 x 3 / 1   136 x 136 x  64   ->   136 x 136 x 128
    7 max          2 x 2 / 2   136 x 136 x 128   ->    68 x  68 x 128
    8 conv    256  3 x 3 / 1    68 x  68 x 128   ->    68 x  68 x 256
    9 conv    128  1 x 1 / 1    68 x  68 x 256   ->    68 x  68 x 128
   10 conv    256  3 x 3 / 1    68 x  68 x 128   ->    68 x  68 x 256
   11 max          2 x 2 / 2    68 x  68 x 256   ->    34 x  34 x 256
   12 conv    512  3 x 3 / 1    34 x  34 x 256   ->    34 x  34 x 512
   13 conv    256  1 x 1 / 1    34 x  34 x 512   ->    34 x  34 x 256
   14 conv    512  3 x 3 / 1    34 x  34 x 256   ->    34 x  34 x 512
   15 conv    256  1 x 1 / 1    34 x  34 x 512   ->    34 x  34 x 256
   16 conv    512  3 x 3 / 1    34 x  34 x 256   ->    34 x  34 x 512
   17 max          2 x 2 / 2    34 x  34 x 512   ->    17 x  17 x 512
   18 conv   1024  3 x 3 / 1    17 x  17 x 512   ->    17 x  17 x1024
   19 conv    512  1 x 1 / 1    17 x  17 x1024   ->    17 x  17 x 512
   20 conv   1024  3 x 3 / 1    17 x  17 x 512   ->    17 x  17 x1024
   21 conv    512  1 x 1 / 1    17 x  17 x1024   ->    17 x  17 x 512
   22 conv   1024  3 x 3 / 1    17 x  17 x 512   ->    17 x  17 x1024
   23 conv  28269  1 x 1 / 1    17 x  17 x1024   ->    17 x  17 x28269
   24 detection
mask_scale: Using default '1.000000'
Loading weights from yolo9000.weights...Done!
data/person.jpg: Predicted in 13.577125 seconds.
Tuareg: 25%
wild horse: 27%
goat herder: 82%
Shetland pony: 86%
German shepherd: 48%
Gordon setter: 51%
seb@PHQ-4035-En:~/projects/stockshot/darknet$

et compilé avec le drapeau GPU :

seb@PHQ-4035-En:~/projects/stockshot/darknet$ ./darknet detector test cfg/combine9k.data cfg/yolo9000.cfg yolo9000.weights data/person.jpg
layer     filters    size              input                output
    0 conv     32  3 x 3 / 1   544 x 544 x   3   ->   544 x 544 x  32
    1 max          2 x 2 / 2   544 x 544 x  32   ->   272 x 272 x  32
    2 conv     64  3 x 3 / 1   272 x 272 x  32   ->   272 x 272 x  64
    3 max          2 x 2 / 2   272 x 272 x  64   ->   136 x 136 x  64
    4 conv    128  3 x 3 / 1   136 x 136 x  64   ->   136 x 136 x 128
    5 conv     64  1 x 1 / 1   136 x 136 x 128   ->   136 x 136 x  64
    6 conv    128  3 x 3 / 1   136 x 136 x  64   ->   136 x 136 x 128
    7 max          2 x 2 / 2   136 x 136 x 128   ->    68 x  68 x 128
    8 conv    256  3 x 3 / 1    68 x  68 x 128   ->    68 x  68 x 256
    9 conv    128  1 x 1 / 1    68 x  68 x 256   ->    68 x  68 x 128
   10 conv    256  3 x 3 / 1    68 x  68 x 128   ->    68 x  68 x 256
   11 max          2 x 2 / 2    68 x  68 x 256   ->    34 x  34 x 256
   12 conv    512  3 x 3 / 1    34 x  34 x 256   ->    34 x  34 x 512
   13 conv    256  1 x 1 / 1    34 x  34 x 512   ->    34 x  34 x 256
   14 conv    512  3 x 3 / 1    34 x  34 x 256   ->    34 x  34 x 512
   15 conv    256  1 x 1 / 1    34 x  34 x 512   ->    34 x  34 x 256
   16 conv    512  3 x 3 / 1    34 x  34 x 256   ->    34 x  34 x 512
   17 max          2 x 2 / 2    34 x  34 x 512   ->    17 x  17 x 512
   18 conv   1024  3 x 3 / 1    17 x  17 x 512   ->    17 x  17 x1024
   19 conv    512  1 x 1 / 1    17 x  17 x1024   ->    17 x  17 x 512
   20 conv   1024  3 x 3 / 1    17 x  17 x 512   ->    17 x  17 x1024
   21 conv    512  1 x 1 / 1    17 x  17 x1024   ->    17 x  17 x 512
   22 conv   1024  3 x 3 / 1    17 x  17 x 512   ->    17 x  17 x1024
   23 conv  28269  1 x 1 / 1    17 x  17 x1024   ->    17 x  17 x28269
   24 detection
mask_scale: Using default '1.000000'
Loading weights from yolo9000.weights...Done!
data/person.jpg: Predicted in 0.060738 seconds.
African: 25%
worker: 82%
horse: 86%
working dog: 48%
hunting dog: 50%

./test du détecteur darknet cfg/combine9k.data cfg/yolo9000.cfg yolo9000.weights data/person.jpg -thresh .25 -hier .001

quelqu'un peut-il expliquer quelle est la structure de l'arbre d'étiquettes 9000? Dans le fichier 9k.tree, par exemple le n0000245 -1, n0566538625 4, que signifient les -1 et 4 ? Comment construire une arborescence avec ce fichier 9k.tree ?

@yaxiongchi
-1 signifie la racine de l'arbre
4 : l'indice du nœud père

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

hrshovon picture hrshovon  ·  5Commentaires

pribadihcr picture pribadihcr  ·  5Commentaires

Khobzer picture Khobzer  ·  5Commentaires

bareblackfoot picture bareblackfoot  ·  5Commentaires

ma3252788 picture ma3252788  ·  3Commentaires