Respostas no Fórum
- AutorPosts
Olá Lucas!
Isso, na verdade essa forma que você sugere inicialmente é para manter os elementos separados e portanto seria para Segmentação de Instâncias. Nesse caso nós estamos concatenando máscaras das imagens do dataset pois queremos fazer a Segmentação Semântica. Já se a ideia é fazer a segmentação de instâncias (e diferenciar cada instância do objeto) então o caminho seria não juntar as máscaras, mas sim mantê-las separadas para cada anotação individual.
Olá Daiana!
Após executar o comando “!pip install Pillow==9.1.0” clique no botão [Restart Runtime] que irá aparecer na tela, na saída da célula onde esse comando foi executado (ou selecione manualmente a opção “Reiniciar ambiente de execução” no menu ao topo) e após aguardar poucos segundos você pode executar normalmente o restante do código, na ordem como está no Colab. Eu fiz aqui nesse seu Colab que você mandou e funcionou tudo certinho.
Olá Júlio!
É possível sim. Um maneira de fazer isso e provavelmente garantir maior confiabilidade seria fazer a detecção da pessoa antes (através de um detector de objetos robusto como o YOLO) – em seguida, através das coordenadas retornadas você irá extrair a região de interesse (ROI) de cada pessoa e para cada região será feita a estimação de pose. Ou seja, será passado para a rede neural a imagem da região de interesse apenas – e a região de cada pessoa. Para isso basta fazer um laço de repetição para percorrer cada detecção/pessoa (pode usar o mesmo usado para desenhar a caixa delimitadora sobre a imagem) e para cada iteração passar a imagem da região para a rede fazer o pose-estimation; assim, ao final vai garantir que será feito para cada pessoa presente na imagem/frame (caso tenha dúvidas de como extrair certa região de interesse da imagem a partir das coordenadas veja aqui).
Outra maneira (se deseja mesmo um código meio pronto) poderia ser feita assim: https://github.com/nicknochnack/MultiPoseMovenetLightning/blob/main/MultiPose%20MoveNet%20Tutorial.ipynb
- Esta resposta foi modificada 2 anos, 10 meses atrás por
Gabriel Alves.
Olá!
Isso mesmo, uma abordagem nesse caso seria treinar a rede neural para que ela seja capaz de detectar na imagem (classificação+localização) o objeto que você deseja – para isso, você deve fornecer à rede imagens de treinamento, com anotações informando qual coordenada na imagem o objeto está presente.
No entanto, esse problema que você busca resolver é um pouco mais complexo mesmo devido ao fato do “objeto” a ser detectado possuir uma possibilidade de assumir infinitas formas. No entanto, mesmo assim as manchas possuem um certo padrão em seu formato, claro que uma pode não ser idêntica à outra mas ainda assim algumas vão se assemelhar bastante. Então pode ser que usando essa abordagem você consiga bons resultados, só seria necessário reunir um dataset bem grande (o máximo que você conseguir, eu diria pelo menos 2500 amostras). Para fazer a criação do set e anotação, qualquer dúvida veja o curso sobre Detecção de Objetos com YOLO, lá mostramos todo o processo de criação de um dataset.
Mas talvez antes de reunir as imagens você queira testar com uma abordagem diferente, como a detecção com Blobs, que por um lado não necessita horas de treinamento de uma rede neural, porém pode ser necessário alguns ajustes para ‘calibrar’ bem o algoritmo. Dê uma olhada aqui nesse artigo que mostra já uma maneira boa de como aplicar essa técnica: https://towardsdatascience.com/image-processing-with-python-blob-detection-using-scikit-image-5df9a8380ade
Acredito que com essa abordagem você poderia conseguir resultados até melhores do que treinando com uma rede neural. Além dessa detecção por blob, sugiro dar uma olhada em técnicas de segmentação de imagem, mostramos todas as principais no curso Segmentação de Imagens com Python. Com essas você poderia também conseguir bons resultados, basta definir um bom limiar e usar o conjunto certo de técnicas de pré-processamento.
Olá Breno!
Para resolver isso você pode usar em conjunto ao tracking um detector de objetos preciso como o YOLO. Usando um detector de objetos você consegue filtrar bem qual a classe do objeto que deseja fazer o tracking e evitar que apareça objetos distintos.
Aliás, para facilitar tem um repositório que já implementa essas duas técnicas juntas, dê uma olhada: https://github.com/ankit16-py/YOLOv3-KCF-Fast-Object-Tracker
Opa que ótimo =)
Disponha!
Olá! Depende das configurações que você usou, qual dos materiais que você usou como referência?
Pode também estar ocorrendo devido a algum erro na versão que você baixou, mas antes recomendo revisar as configurações que você definiu para treinamento e também testar outros valores (como por exemplo aqui).
Como esse é um erro bem específico acho que talvez não encontre uma solução que resolva ele de modo fácil, portanto o que você pode fazer além de tentar outra versão (se isso não ajudar) é alterar manualmente o código e fazer algumas pequenas modificações necessárias para que não ocorra esse problema e assim consiga prosseguir com o treinamento. Para esse erro em específico, talvez isso aqui seja o suficiente para evitar o problema.
1 de junho de 2022 às 22:12 em resposta a: Criação de um modelo customizado de pilha de madeira #35111Olá! A cada 1000 iterações treinadas o darknet salva os pesos em um arquivo .weights dentro daquele diretório que você especificou para salvar o backup do modelo treinado. Então se você treinou 3000 iterações é para ter lá yolov4_custom_1000.weights, yolov4_custom_2000.weights e yolov4_custom_3000.weights (por exemplo, considerando que definiu o nome do arquivo como “yolov4_custom”) – e além disso tem o “_last.weights” (com os ultimos pesos salvos) e o “_best.weights” (contendo os pesos da iteração onde o darknet definiu como os que obtiveram melhores resultados).
Quantos arquivos diferentes foram salvos para você? É assim que você vai saber até quantas iterações foi treinado.
Se não apareceu o bounding box de nada mesmo diminuindo consideravelmente o threshold então parece que ocorreu algum problema na definição do treinamento, pode ter sido na etapa onde define-se as configurações do modelo treinado ou até mesmo na criação do dataset. Mas antes, sugiro você fazer um teste, montando um dataset com outros 2 objetos (exatamente como mostramos em aula, usando o dataset OID) e assim fazer o passo a passo lá, fazendo isso verifique se ele vai treinar certinho ou não. Seria só para fins de teste mesmo, pois provavelmente é algum detalhezinho na criação do dataset ou nas configurações do arquivo .cfg (por isso veja se definiu os valores seguindo aquelas fórmulas que mostramos em aula).
Fazendo esses testes acredito que vai descobrir onde está o problema, mas caso não consiga é só avisar.
26 de maio de 2022 às 11:16 em resposta a: Criação de um modelo customizado de pilha de madeira #34967Olá Bruno!
Experimente reduzir o limiar da confiança da detecção, para ele exibir detecções “menos confiáveis”. Pois pode ser que ainda seja necessário treinar mais até conseguir deixar o detector mais preparado e assim mais “confiante” da detecção. Ou, pode ser ainda que a partir de certo estágio do treinamento ele decaiu a precisão, é bem difícil mas não impossível de acontecer e vai depender da complexidade do dataset e de quantas iterações você treinou (se puder informar esse valor).
Se mesmo reduzindo ele não mostrar, ou exibir detecções muito erradas, talvez seja algum problema ali na criação do dataset, ou ainda na definição das variáveis do arquivo de configuração (aquele que é usado para definir como o modelo será treinado).Então por isso recomendo antes só revisar isso e qualquer dúvida avise. Baixando o limiar da confiança você vai conseguir saber se o problema é devido a ainda não estar treinado o suficiente ou se foi algum problema ali na configuração do treinamento.
Olá, verifique se está fazendo certo o processamento dos seus dados, eles estão incompatíveis com o shape que você definiu ali. Não sei se você está usando algum tutorial de referência ou se está tentando por conta própria mas é bom só revisar essa parte, até porque dependendo como for vai ser necessário fazer umas mudanças na declaração do modelo. Tem que ver se foi o reshape corretamente, pois como pode ver ali na mensagem de erro, há essa discrepância em relação ao que você definiu já que o esperado seria 28×28 e não 784 (28×28).
Se realmente estiver certo o pré-processamento, outra solução poderia ser passar para a função Dense o shape do input do modelo para ser o numero do shape do set, tipo assim:
input_shape=(x_train.shape[1]) (isso você adicionaria entre o primeiro e o segundo parâmetro do tf.keras.layers.Dense)
Olá Matheus,
Para uma classificação não binária (ou seja, para múltiplas classes) é utilizada a função de ativação softmax. Já se for classificação multi-label (o que significa que um mesmo pode pertencer a 2 classes distintas ou mais) então a função permanece a sigmoide.
Disponha, Bruno!
Olá Ítalo!
Primeiramente, ficamos felizes que esteja gostando do curso!
Sobre sua dúvida, se você quer usar o PointRend em um dataset personalizado é um pouco diferente, é uma técnica mais especifica então não da para implementar usando as mesmas funções que apresentamos na seção sobre treinamento. Então você vai precisar utilizar algumas funções do Detectron2. Aqui nessa discussão tem algumas referências sobre como fazer: https://github.com/facebookresearch/detectron2/issues/1017
(aqui tem mais informações também sobre o treinamento).
Olá Bruno, que bom que esteja gostando dos cursos! =)
Sobre sua dúvida, para fazer o que você deseja pode utilizar as técnicas de segmentação de instâncias ou utilizar um detector de objetos como o YOLO, que provavelmente nesses cenários dará resultados mais precisos. E para fazer a contagem dos objetos dê uma olhada no curso Detecção de Movimentos, lá tem uma seção onde mostra como implementar um contador de carros e caminhões em vídeos, basta adaptar para o objeto que você precisa.
E em relação à sua outra dúvida, se refere à projetos práticos? Em quase todos os cursos (mais pro final) tem uma seção onde mostra algum projeto de como pode ser usado em um cenário real, como o curso de OCR por exemplo. Em outros fazemos em forma de mini projetos durante o curso (como você pode ver nesse curso sobre segmentação), com vários mini projetos ao longo das aulas, nesse caso é mais apropriado pois como pôde ver são muitas técnicas a serem abordadas.
- Esta resposta foi modificada 2 anos, 11 meses atrás por
Gabriel Alves.
Opa, esse erro acontece quando o programa não encontra o arquivo no diretório especificado. Verifique se o diretório que você informou no comando é exatamente o mesmo que está em execução no Colab – e se o balloon_dataset.zip está mesmo naquela pasta (ou seja, verifique se os nomes das pastas são exatamente aqueles, é normal que o nome de pelo menos uma das pastas possa estar diferente para você). Se após conferir que o diretório está correto e ainda assim o problema persistir, então peço que compartilhe aqui seu Colab, pois pode ter outra coisa em seu código interferindo.
- Esta resposta foi modificada 2 anos, 10 meses atrás por
- AutorPosts