Darkflow: YOLO 9000

Criado em 9 fev. 2017  ·  41Comentários  ·  Fonte: thtrieu/darkflow

Ola pessoal!

Obrigado pelo trabalho incrível!

Estou procurando o modelo YOLO9000 que pode classificar 9.000 categorias.

Não consegui encontrar o YOLO 9000 cfg .

Alguém pode ajudar 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

Eu esperava algo como classes=9000

help wanted

Comentários muito úteis

Eu fiz funcionar! :)

No momento, estou apenas tentando descobrir a melhor forma de estruturar minhas mudanças para um RP. Vejo que muitas coisas mudaram nos últimos dias.

Atualmente, tenho a maior parte dele como um darkflow/cython_utils/cy_yolo9000_findboxes.pyx separado, mas provavelmente poderia rolá-lo para cy_yolo2_findboxes.pyx e incorporar outra chave meta na instrução if do método labels de darkflow/darkflow/yolo/misc.py (e então faça uma divisão entre a técnica de softmax nas caixas de localização antes de pular para o loop).

Eu já fui para a instrução if no método de rótulos em misc.py para adicionar um hyponym_map que é um dict que mapeia um índice pai para uma lista de seus nós filhos por arquivos de dados.

Além disso, atualmente tenho uma pasta de dados / em meu cfg / pasta e estou apenas juntando o caminho da configuração e meta['tree'] e meta['map'] para os caminhos de arquivo.

Se vocês não tiverem participação, farei o PR com o que fizer sentido para mim, senão sou todo ouvidos!

Todos 41 comentários

A configuração está aqui , parece que o autor não fornece o arquivo de peso YOLO9000.

Obrigado pela resposta rápida! Vou tentar encontrar o weight9000 e postá-lo aqui para ajudar outras pessoas.

O arquivo de pesos está aqui: http://pjreddie.com/media/files/yolo9000.weights

Você conseguiu fazer isso funcionar? Coloquei o arquivo de pesos e também o arquivo de configuração e baixei o arquivo 9k.names também. O processamento não demorou muito, mas o pós-processamento levou cerca de 10 vezes mais do que com a configuração normal de yolo.cfg e yolo.weights. No final, nenhuma caixa delimitadora apareceu em qualquer uma das imagens de retorno. Estou fazendo algo errado?

Olhei para yolo9000.cfg e descobri que há mais trabalho a fazer. yolo9000 não faz o softmax usual, mas sim agrupado. Muito ocupado agora, vou tentar trabalhar nisso, mas pelo menos não nesta semana e na próxima.

Sim, não se preocupe. Seu tempo de resposta a esses problemas é muito rápido :) Muito obrigado por todo o trabalho que você colocou nisso - é um projeto realmente legal. Eu só queria ter certeza de que não estava fazendo algo errado que estava causando o problema - sem pressa para resolver isso.

Existe alguma notícia?
Eu tenho o mesmo problema que abagshaw.
Pós-processamento 10x mais lento e sem caixas delimitadoras.
Tenho que alterar o arquivo cfg e como?

Obrigado!

@thtrieu Podemos reabrir esse problema até que seja corrigido, porque no momento não acho que o darkflow tenha a funcionalidade do YOLO 9000?

Provavelmente irei usar YOLO9000 para meu projeto de tese (embora eu vá adaptá-lo fortemente), e como esta é a única implementação de fluxo de tensor de YOLOv2 que posso descobrir, suponho que usarei isso como base. Adicionarei minha implementação quando estiver concluída, mas isso provavelmente levará mais algumas semanas, então, se alguém tiver mais tempo antes, isso me ajudará tremendamente também! ;)

Eu tenho algum tempo em minhas mãos nos próximos dias - no entanto, meu entendimento sobre ML e o que realmente está acontecendo nos bastidores aqui é muito superficial. Não tenho certeza do que precisa ser feito para que o YOLO 9000 funcione - se não for muito complicado, alguém poderia descrever brevemente o que precisa ser feito e eu tentarei (se for muito complexo, não se preocupe como Duvido que chegue muito longe :))

@abagshaw o que precisa ser feito é entender os seguintes parâmetros em .cfg

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

Eles serão lidos no meta dict pelo código atual, o único código que precisa ser modificado é a função de pós-processo, que atualmente não leva em consideração meta['random'], meta['tree'], meta['map'] para interpretar o tensor de saída & desenhar caixas delimitadoras.

Mas não seria necessária uma implementação totalmente diferente do softmax (deve ser fácil, apenas dividi-lo nas diferentes camadas da árvore) e da retropropagação sobre este softmax? (como o backprop só deve ser executado sobre os nós softmax envolvidos?)

Sim, desculpe pessoal - acho que isso está um pouco além da minha cabeça. Eu estava vasculhando https://github.com/pjreddie/darknet/commit/d2dece3df743c97f2cfbb9bbf0dd0449a8730cec e há muita coisa acontecendo lá que eu não entendo. Vou continuar bisbilhotando, mas não acho que irei muito longe.

Alguma atualização sobre isso?

Sim, desculpe, eu decidi que seria mais rápido apenas colar a camada de classificação yolo9000 no RCNN mais rápido em apenas tensorflow. Eu posso pensar em fazer algo juntos quando minha tese terminar, mas isso não será por mais 4 meses;)

Droga - isso é muito ruim. Estou tentando entender como toda essa coisa de classificação de árvore do WordNet funciona no yolo9000. Eu gostaria de ter entendido essas coisas melhor para poder ajudar. Espero que alguém tenha tempo para adicionar essa funcionalidade em breve :)

Pessoal, criei um repositório para o YOLO 9000. Tudo está explicado aqui. Confira:

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

Ele usa darknet em vez de darkflow, mas acho que deve ser bem fácil portá-lo.

@abagshaw @TheLaurens @saiprabhakar @thtrieu @ frey123

@philipperemy Obrigado, talvez eu esteja faltando alguma coisa - mas não tenho certeza de como isso nos deixa mais perto de implementar o YOLO9000 no darkflow?

Se você quiser portar o YOLO9000 para o darkflow, seria incrível :) :)

@abagshaw tê-lo funcionando para darknet foi o primeiro passo. Agora vou me concentrar em como fazer isso funcionar para o darkflow!

@philipperemy Ótimo! Mantenha-nos informados :)

@philipperemy Algum progresso em fazer o YOLO9000 funcionar no darkflow? :)

Desculpe, ainda não houve grande progresso! Estou ocupado com meu trabalho agora :)

Obrigado a todos.

Posso fazer algumas perguntas relacionadas a este tópico?
Atual mudo o yolo.cfg para classificar 2 classes. Para o peso, uso yolo.weights. Depois de treinar o modelo, ele funciona muito bem.

Q1: a partir deste problema, parece que preciso de pesos diferentes para diferentes números de classes. Lembro que yolo.weights é usado pelo menos por 20 aulas. Estou certo?

P2: Para quantas classes posso usar este yolo.weights?

Q3: É possível usar o ponto de verificação de um modelo para 2 classes como o peso inicial para outro modelo, digamos 3 classes?

Obrigado novamente.

@ chengs2000 Suas perguntas não estão realmente relacionadas ao YOLO9000 - talvez poste sua pergunta em uma nova edição e ela possa ser respondida lá.

Olá, a menos que alguém já esteja fazendo isso (@philipperemy?), Vou tentar. Apresentarei um relatório em alguns dias com os resultados.

@relh vá em frente, por favor! Não tive muito tempo para me concentrar nisso.

@relh Algum progresso? 😃

Eu fiz funcionar! :)

No momento, estou apenas tentando descobrir a melhor forma de estruturar minhas mudanças para um RP. Vejo que muitas coisas mudaram nos últimos dias.

Atualmente, tenho a maior parte dele como um darkflow/cython_utils/cy_yolo9000_findboxes.pyx separado, mas provavelmente poderia rolá-lo para cy_yolo2_findboxes.pyx e incorporar outra chave meta na instrução if do método labels de darkflow/darkflow/yolo/misc.py (e então faça uma divisão entre a técnica de softmax nas caixas de localização antes de pular para o loop).

Eu já fui para a instrução if no método de rótulos em misc.py para adicionar um hyponym_map que é um dict que mapeia um índice pai para uma lista de seus nós filhos por arquivos de dados.

Além disso, atualmente tenho uma pasta de dados / em meu cfg / pasta e estou apenas juntando o caminho da configuração e meta['tree'] e meta['map'] para os caminhos de arquivo.

Se vocês não tiverem participação, farei o PR com o que fizer sentido para mim, senão sou todo ouvidos!

@relh incrível! Muito obrigado pelo seu trabalho nisso !!

Para meus 2 centavos: Se o seu código cy_yolo9000_findboxes.pyx for totalmente diferente do que já foi escrito em cy_yolo2_findboxes.pyx criar um novo arquivo não é um problema - mas se eles compartilharem a maior parte do mesmo código, isso provavelmente seria uma ideia melhor tentar incluir suas alterações no arquivo existente (para evitar adicionar código duplicado). É difícil para mim dar muito mais informações sem ver as alterações que você fez (não estou familiarizado exatamente com como o YOLO9000 difere do YOLOv2) - então, eu faria seu melhor julgamento sobre como implementar essas alterações.

Ansioso pelo PR!

@relh muito obrigado !! Desculpe, eu estive muito ocupado recentemente e não tive tempo para trabalhar nisso!

@relh, esta é uma ótima notícia. Ansioso para o PR.

Ótimo! (Estou ansioso para encerrar este problema).

Este problema foi encerrado? Temos uma implementação de tensorflow para YOLO9000? Por favor, aponte-me para o mesmo. Obrigado.

Pergunta nesta edição: pjreddie se refere a YOLO9000 como YOLOv2 em seu site YOLO . Se você acessar a seção "Novidades na versão 2" e clicar no link do artigo, o artigo YOLO9000 será aberto.

Portanto, se não há implementação de YOLO9000 no Darkflow, o que exatamente é YOLOv2 no contexto do Darkflow?

Yolo9k é o modelo treinado em imagenet com o método de aprendizagem de caixa delimitadora, enquanto o yolov2 padrão é treinado em COCO.

@philipperemy

1) parece que seu código só funciona na CPU, sabe por quê?
2) Qual é a diferença com seu projeto e darknet agora?

Obrigado!

O código
Meu projeto é baseado em darknet e contém tudo para rodar YOLO9000.

compilado com sinalizador de 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$

e compilado com a bandeira 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 0,25 -hier 0,001

alguém pode explicar qual é a estrutura da árvore de 9000 rótulos? No arquivo 9k.tree, por exemplo, n0000245 -1, n0566538625 4, o que significa -1 e 4? Como posso construir uma estrutura de árvore com este arquivo 9k.tree?

@yaxiongchi
-1 significa a raiz da árvore
4: o índice do nó pai

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

halt9 picture halt9  ·  3Comentários

jubjamie picture jubjamie  ·  4Comentários

hrshovon picture hrshovon  ·  5Comentários

ManojPabani picture ManojPabani  ·  4Comentários

Khobzer picture Khobzer  ·  5Comentários