Darkflow: YOLO 9000

Creado en 9 feb. 2017  ·  41Comentarios  ·  Fuente: thtrieu/darkflow

¡Hola chicos!

¡Gracias por el increíble trabajo!

Estoy buscando el modelo YOLO9000 que pueda clasificar 9000 categorías.

No pude encontrar el YOLO 9000 cfg .

¿Alguien puede ayudar por favor?

> 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

Esperaba algo como classes=9000

help wanted

Comentario más útil

¡Lo tengo funcionando! :)

Ahora mismo estoy tratando de averiguar la mejor manera de estructurar mis cambios para un PR. Veo que muchas cosas se movieron en los últimos días.

Actualmente tengo la mayor parte como darkflow/cython_utils/cy_yolo9000_findboxes.pyx separado, pero probablemente podría colocarlo en cy_yolo2_findboxes.pyx e incorporar otra clave meta en la declaración if del método labels de darkflow/darkflow/yolo/misc.py (y luego haga una división entre la técnica softmax en las cajas de búsqueda antes de saltar al bucle).

Ya entré en la declaración if en el método de las etiquetas en misc.py para agregar un hyponym_map que es un dict que asigna un índice principal a una lista de sus nodos secundarios según los archivos de datos.

Además, actualmente tengo una carpeta de datos / en mi carpeta cfg / y solo me estoy uniendo a la ruta de la configuración y meta['tree'] y meta['map'] para las rutas de archivo.

Si no tienen ninguna opinión, haré las relaciones públicas con lo que tenga sentido para mí, de lo contrario, ¡soy todo oídos!

Todos 41 comentarios

La configuración está aquí . Parece que el autor no proporciona el archivo de peso YOLO9000.

¡Gracias por la rápida respuesta! Intentaré encontrar weights9000 y lo publicaré aquí para ayudar a otros.

El archivo de pesos está aquí: http://pjreddie.com/media/files/yolo9000.weights

¿Conseguiste que esto funcionara? Puse el archivo de pesos y también el archivo de configuración y también descargué el archivo 9k.names. El procesamiento no tomó mucho más tiempo, pero el procesamiento posterior tomó alrededor de 10 veces más que con la configuración normal de yolo.cfg y yolo.weights. Al final, no aparecieron cuadros delimitadores en ninguna de las imágenes de retorno. ¿Estoy haciendo algo mal?

Miré el yolo9000.cfg , resulta que hay más trabajo por hacer. yolo9000 no hace el softmax habitual sino uno agrupado. Muy ocupado en este momento, intentaré trabajar en eso, pero al menos no en esta semana y la próxima.

Sí, no te preocupes en absoluto. Su tiempo de respuesta a estos problemas es increíblemente rápido :) muchas gracias por todo el trabajo que ha puesto en esto, es un proyecto realmente genial. Solo quería asegurarme de que no estaba haciendo algo mal que estaba causando el problema, sin prisa para solucionarlo.

¿Hay alguna novedad?
Tengo el mismo problema que abagshaw.
Posprocesamiento 10 veces más lento y sin cuadros delimitadores.
¿Tengo que cambiar el archivo cfg y cómo?

¡Gracias!

@thtrieu ¿Podemos reabrir este problema hasta que se solucione porque en este momento no creo que darkflow tenga la funcionalidad YOLO 9000?

Es probable que vaya a usar YOLO9000 para mi proyecto de tesis (aunque lo adaptaré en gran medida), y como esta es la única implementación de flujo tensorial de YOLOv2 que puedo encontrar, supongo que usaré esto como base. Agregaré mi implementación cuando esté terminada, pero eso probablemente tomará un par de semanas más, por lo que si alguien tiene más tiempo antes, ¡también me ayudaría enormemente! ;)

Tengo algo de tiempo en mis manos en los próximos días; sin embargo, mi comprensión del ML y lo que realmente está sucediendo detrás de escena aquí es bastante superficial. No estoy exactamente seguro de lo que se debe hacer para que YOLO 9000 funcione; si no es demasiado complicado, ¿alguien podría resumir brevemente lo que se debe hacer y lo intentaré (si es bastante complejo, no se moleste como Dudo que llegue muy lejos :))

@abagshaw, lo que se debe hacer es comprender los siguientes parámetros en .cfg

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

Estos serán leídos en el meta dictado por el código actual, el único código que necesita modificarse es la función de post proceso, que, actualmente no tiene en cuenta meta['random'], meta['tree'], meta['map'] para interpretar el tensor de salida & dibujar cuadros delimitadores.

Pero, ¿no necesitaría una implementación completamente diferente del softmax (debería ser fácil, simplemente divídalo en las diferentes capas del árbol) y de la retropropagación sobre este softmax? (¿Ya que el backprop solo debería ejecutarse sobre los nodos softmax involucrados?)

Sí, lo siento muchachos, creo que esto está un poco sobre mi cabeza Estaba revisando https://github.com/pjreddie/darknet/commit/d2dece3df743c97f2cfbb9bbf0dd0449a8730cec y están sucediendo muchas cosas allí que no entiendo. Seguiré hurgando pero no creo que vaya a llegar muy lejos.

¿Alguna actualización sobre esto?

Sí, lo siento, decidí que sería más rápido pegar la capa de clasificación yolo9000 en un RCNN más rápido en solo un flujo tensorial. Podría pensar en hacer algo juntos como afición cuando termine mi tesis, pero eso no será hasta dentro de 4 meses;)

Maldita sea, eso es una lástima. Estoy tratando de entender cómo funciona todo esto de la clasificación de árboles de WordNet en yolo9000. Ojalá entendiera mejor estas cosas para poder ayudar. Ojalá alguien tenga tiempo de agregar esta funcionalidad pronto :)

Chicos, creé un repositorio para YOLO 9000. Todo se explica aquí. Echale un vistazo:

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

Utiliza darknet en lugar de darkflow, pero creo que debería ser bastante fácil portarlo.

@abagshaw @TheLaurens @saiprabhakar @thtrieu @ frey123

@philipperemy Gracias, tal vez me esté perdiendo algo, pero no estoy seguro de cómo esto nos acerca a la implementación de YOLO9000 en darkflow.

Si tienes ganas de portar YOLO9000 a darkflow, sería genial :) :)

@abagshaw tenerlo funcionando para darknet fue el primer paso. ¡Ahora me voy a centrar en cómo hacer que funcione para darkflow!

@philipperemy ¡Genial! Que nos mantengais :)

@philipperemy ¿ Algún progreso para que YOLO9000 funcione en darkflow? :)

¡Lo siento, todavía no hay un gran progreso! Estoy ocupado con mi trabajo ahora :)

Gracias a todos.

¿Puedo hacer algunas preguntas relacionadas con este tema?
Actual cambio el yolo.cfg para clasificar 2 clases. Para el peso utilizo yolo.weights. Después de entrenar el modelo, funciona bastante bien.

P1: A partir de este problema, parece que necesito un peso diferente para un número diferente de clases. Recuerdo que yolo.weights se usa al menos para 20 clases. Estoy en lo cierto?

P2: ¿Para cuántas clases puedo usar este yolo.weights?

P3: ¿Es posible utilizar el punto de control de un modelo para 2 clases como peso inicial para otro modelo, digamos 3 clases?

Gracias de nuevo.

@ chengs2000 Sus preguntas no están realmente relacionadas con YOLO9000; tal vez publique su pregunta en un nuevo número y se pueda abordar allí.

Hola, a menos que alguien ya esté haciendo esto (¿@philipperemy?), Voy a intentarlo. Informaré de nuevo en unos días con los resultados.

@relh adelante, por favor! No tuve mucho tiempo para concentrarme en esto.

@relh ¿ Algún progreso? 😃

¡Lo tengo funcionando! :)

Ahora mismo estoy tratando de averiguar la mejor manera de estructurar mis cambios para un PR. Veo que muchas cosas se movieron en los últimos días.

Actualmente tengo la mayor parte como darkflow/cython_utils/cy_yolo9000_findboxes.pyx separado, pero probablemente podría colocarlo en cy_yolo2_findboxes.pyx e incorporar otra clave meta en la declaración if del método labels de darkflow/darkflow/yolo/misc.py (y luego haga una división entre la técnica softmax en las cajas de búsqueda antes de saltar al bucle).

Ya entré en la declaración if en el método de las etiquetas en misc.py para agregar un hyponym_map que es un dict que asigna un índice principal a una lista de sus nodos secundarios según los archivos de datos.

Además, actualmente tengo una carpeta de datos / en mi carpeta cfg / y solo me estoy uniendo a la ruta de la configuración y meta['tree'] y meta['map'] para las rutas de archivo.

Si no tienen ninguna opinión, haré las relaciones públicas con lo que tenga sentido para mí, de lo contrario, ¡soy todo oídos!

@relh ¡Impresionante! ¡¡Muchas gracias por tu trabajo en esto !!

Por mis 2 centavos: si su código cy_yolo9000_findboxes.pyx es completamente diferente al que ya está escrito en cy_yolo2_findboxes.pyx crear un nuevo archivo no es un problema, pero si comparten la mayor parte del mismo código, Probablemente sería una mejor idea intentar incorporar los cambios al archivo existente (para evitar agregar código duplicado). Es difícil para mí dar mucha más información sin ver los cambios que ha realizado (no estoy familiarizado con exactamente en qué se diferencia YOLO9000 de YOLOv2), por lo que seguiría su mejor criterio sobre cómo implementar estos cambios.

¡Esperamos las relaciones públicas!

@relh muchas gracias !! ¡Lo siento, estuve muy ocupado recientemente y no tuve tiempo para trabajar en esto!

@relh, esta es una gran noticia. Esperando el PR.

¡Genial! (Espero cerrar este problema).

¿Este problema está cerrado? ¿Tenemos una implementación de tensorflow para YOLO9000? Por favor, indícame lo mismo. Gracias.

Pregunta en este número: pjreddie se refiere a YOLO9000 como YOLOv2 en su sitio web YOLO . Si va a la sección "Novedades de la versión 2" y hace clic en el enlace al documento, se abre el documento YOLO9000.

Entonces, si no hay una implementación de YOLO9000 en Darkflow, ¿qué es exactamente YOLOv2 en el contexto de Darkflow?

Yolo9k es el modelo entrenado en imagenet con el método de aprendizaje del cuadro delimitador, mientras que el yolov2 predeterminado está entrenado en COCO.

@filipperemy

1) parece que su código solo funciona en la CPU, ¿sabe por qué?
2) ¿Cuál es la diferencia con tu proyecto y darknet ahora?

¡Gracias!

El código
Mi proyecto está basado en darknet y contiene todo para ejecutar YOLO9000.

compilado con la bandera de la 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$

y compilado con la bandera de 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%

./darknet detector test cfg / combine9k.data cfg / yolo9000.cfg yolo9000.weights data / person.jpg -thresh .25 -hier .001

¿Alguien puede explicar cuál es la estructura del árbol de etiquetas 9000? En el archivo 9k.tree, por ejemplo, n0000245 -1, n0566538625 4, ¿qué significa -1 y 4? ¿Cómo puedo construir una estructura de árbol con este archivo 9k.tree?

@yaxiongchi
-1 significa la raíz del árbol
4: el índice del nodo padre

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

1NNcoder picture 1NNcoder  ·  3Comentarios

hrshovon picture hrshovon  ·  5Comentarios

ShawnDing1994 picture ShawnDing1994  ·  4Comentarios

LeeroyHannigan picture LeeroyHannigan  ·  4Comentarios

humanova picture humanova  ·  4Comentarios