Como Funciona e Como Treinar YOLOv8

Поділитися
Вставка
  • Опубліковано 21 жов 2024

КОМЕНТАРІ • 62

  • @arthurmemories4611
    @arthurmemories4611 12 днів тому

    Gostei do seu video amigo muito completo e bem atualizado esse campo é o futuro e voce me ajudou a enxergar isto obrigado

  • @gnomioo828
    @gnomioo828 10 місяців тому +2

    Aula sensacional, facilmente a melhor que encontrei no UA-cam sobre o assunto, o professor passa o conteúdo com muita clareza e simplicidade. Obrigado por compartilhar seu conhecimento gigantesco com a gente.

  • @miriamsobral3434
    @miriamsobral3434 7 місяців тому +1

    Caramba! Melhor aula que encontrei! Por favor, continue.

  • @LucasRogério-b9o
    @LucasRogério-b9o 7 місяців тому +1

    Aula muito top, bem explicada! parabéns

  • @joaovitor-by8ux
    @joaovitor-by8ux Місяць тому +1

    video magnífico e muito informativo, me ajudou muito, obrigado!

  • @maurodeboni
    @maurodeboni 8 місяців тому +1

    Ótimo video, seu conhecimento ajudou muitíssimo!👍

  • @samyllerose1955
    @samyllerose1955 8 місяців тому

    continua fazendo videos assim pfv

  • @3ktore
    @3ktore 3 місяці тому

    Animal, meu camarada. Muito bem explicado. Parabéns. Seja feliz.

  • @aprivi
    @aprivi 7 місяців тому

    Parabens pelo video!!

  • @luquinhasguima
    @luquinhasguima 3 місяці тому

    Cara, vídeo animal, parabéns

  • @gusttavocavalcante4982
    @gusttavocavalcante4982 10 місяців тому

    Muito bom. Parabéns

  • @jlgiorio
    @jlgiorio 6 місяців тому

    Sensacional!!!

  • @davidjc8259
    @davidjc8259 Рік тому

    Que aula! Obrigado amigo!

  • @lucaspraciano4640
    @lucaspraciano4640 Рік тому

    Sensacional!!!!

  • @MaxDigitall
    @MaxDigitall 6 місяців тому +1

    parabens pelo o conteúdo, a explicação é boa mas, faltou o ultimo passo o modelo gerado depois do treinamento. no meu caso depois do treinamento do modelo yolov8x.pt de 130MB gerou um modelo de yolov8n.pt de 6MB, durate o treinamente talvez não usou os pesos pré-treinado

    • @ProgramadorArtificial
      @ProgramadorArtificial  6 місяців тому +1

      Obrigado! Os pesos que serão usados durante o treinamento serão os mesmos carregados previamente com comando YOLO(MODELO). Um cuidado que precisa ter é que ao treinar ele irá mostrar no final a pasta onde salvou os resultados, cada vez que rodar o treinamento uma pasta nova chamada "train{num}" será crida, sendo que ele sempre irá priorizar o menor valor, ou seja, se tiver deletado a pasta train4, mas não deletou as anteriores e a train5, o próximo treinamento será armazenado em train4.

  • @SamirSonplay
    @SamirSonplay 6 місяців тому

    Aula muito Top, em um treinamento de larga escala que envolve muita classes e muita imagem, teria alguma forma de otimizar tempo sem usar o labelimg e ter que fazer manualmente todo essa anotação de cada imagem?

    • @ProgramadorArtificial
      @ProgramadorArtificial  6 місяців тому

      Se não tiver um modelo que já consiga atingir bons resultados no seu dataset, não tem escapatória, vai precisar anotar. Uma estratégia boa é anotar algumas imagens, realizar o treinamento e se atingir relativamente bons resultados, utilizá-lo para fazer pré-anotações, tendo o trabalho apenas de arrumar os casos que o modelo errou. Se quiser também pode dar uma olhada na plataforma de anotação CVAT (temos um vídeo no canal falando dele), talvez ache melhor que o LabelImg.

  • @manolo3368
    @manolo3368 19 днів тому

    Hola colega. Le saludo desde Ecuador.
    Quisiera preguntarle o que por favor me ayude con una idea para crear un modelo que estime el peso de cuyes (cobayos) mediante videos en tiempo real.

    • @ProgramadorArtificial
      @ProgramadorArtificial  18 днів тому

      Hola! Si quieres puedes enviarme un correo electrónico para poder entender mejor tu caso. Mi correo electrónico está disponible en el canal de UA-cam sobre

  • @ladislaulopes7405
    @ladislaulopes7405 5 місяців тому +1

    Aula muito boa man, caso eu fosse passar um video e quisesse desenhar a boxes encontradas eu "if result_video:" para identificar se naquele frame contém alguma classe?

    • @ProgramadorArtificial
      @ProgramadorArtificial  5 місяців тому

      Sim, com o primeiro loop ("for result in results_video") você irá percorrer cada um dos frames do vídeo, já para ver se existem objetivos detectados pode olhar o "result.boxes", ele é uma lista, se for vazia é porque não detectou objetos no frame, se tiver, por exemplo, 2 elementos é porque detectou dois objetos no frame, podendo pegar as informações deles como coordenadas do bounding box, classe e confiança. Uma estratégia legal é fazer um loop ("for box in result.boxes"), ou seja, para cada objeto detectado você pode fazer algo.

    • @ladislaulopes7405
      @ladislaulopes7405 5 місяців тому

      ​@@ProgramadorArtificialo "for box in result.boxes" não irá gerar erro caso não tenha nenhum objeto detectado no frame atual?

    • @ProgramadorArtificial
      @ProgramadorArtificial  5 місяців тому

      Não, quando não for detectado objetos no frame atual o código dentro do loop não será executado e nenhum erro irá acontecer.

    • @ladislaulopes7405
      @ladislaulopes7405 5 місяців тому

      @@ProgramadorArtificial man eu rodei assim porem não cria a pasta dos predicts
      results = model.predict(source='video.mp4', # image or video; single value or a list; URL, PIL (RGB), CV2 (BGR), ...
      conf=0.75,
      iou=0.7, # Non-Maximum Supression (NMS)
      imgsz=640,
      show=True,
      save=True,
      save_txt=True, # Save bbox coordenation
      save_conf=True, # save_txt must be True
      save_crop=True,
      project='runs/detect',
      stream=True # Do inference now (False) or after (True)
      )
      tenho que passar de frame a frame?

    • @ProgramadorArtificial
      @ProgramadorArtificial  5 місяців тому

      Foi apresentado duas formas de rodar vídeos:
      - Uma é com "stream=False" que ao rodar já irá fazer a predição do vídeo inteiro, salvando as predições conforme informado nos parâmetros, porém esse método tende a consumir mais memória RAM, então dependendo do computador e do tamanho do vídeo pode não ser viável;
      - Segundo forma é com "stream=True" que irá apenas instânciar o serviço, sendo necessário rodar um loop para ele ser executando, podendo ser "for result in results". Para cada frame ele irá armazenar os resultados em "result" podendo fazer algo com ele. No Jupyter Notebook, foi apenas posto "pass", ou seja, não irá fazer nenhuma operação adicional durante a execução, respeitando apenas os parâmetros (se tiver "save=True" irá salvar as predições).
      Em resumo, como você passou "stream=True", será necessário criar um loop para realizar a execução.

  • @Andre_Villela
    @Andre_Villela 10 місяців тому

    Parabéns pelo vídeo!
    Estou com dúvidas com relação ao treinamento.
    Eu vi que o modo de validação já dá as métricas como mAP.
    Mas, meu dataset é muito pequeno, então a ideia seria treinar o modelo com datasets já existem e usar o meu dataset na pasta de validação.
    Por exemplo:
    Treinamento no VisDrone e Validação no meu dataset. Isso é válido?
    Digo isso porque não estou conseguindo pegar as métricas de IoU se eu uso meu dataset direto para inferência.
    Ele dá certo quanto tenho apenas um objeto. Mas, quando tenho múltiplos objetos de uma mesma classe, a IoU aparece zerada. Mesmo que vendo que a Yolo conseguiu detectar todos os objetos.
    Alguma sugestão?

    • @ProgramadorArtificial
      @ProgramadorArtificial  10 місяців тому +2

      Obrigado!
      Treinamento no VisDrone e Validação no meu dataset. Isso é válido? Acredito que sim, desde que eles tenham as mesmas classes e não sejam totalmente diferentes. Se você quiser localizar cachorros e no VisDrone tiver cachorros, perfeito. Inclusive se no VisDrone tiver mais classes que você precisa, pode removê-las da anotação.
      Não sei se entendi muito bem a sua segunda perguntar. Para avaliar o seu modelo, vc pode fazer de duas formas (o ideal é fazer as duas):
      - Validação: Irá ser executado durante o treinamento ajudando a escolher o melhor modelo;
      - Teste: Será executado depois que o modelo já tiver treinado.
      Como você comentou que o seu dataset é muito pequeno (assumindo que não é possível aumentar) eu faria o teste de treinar com VisDrone usando o seu dataset inteiro como validação para ver o que acontece. Caso queira testar o modelo já treinado, pode utilizar o comando "model.val(split='test')", podendo informar se quer avaliar no dataset de "train", "val" ou "test" (que foi configurado dentro do yaml). Lembrando que as classes no VisDrone e no seu dataset precisam ser iguais e na mesma ordem (mesmo ID).
      Espero ter ajudado :)

  • @vinni8619
    @vinni8619 3 місяці тому

    Estou tentando treinar um modelo YOLOv8 usando GPU CUDA, mas estou encontrando um erro:
    NotImplementedError: Could not run 'torchvision::nms' with arguments from the 'CUDA' backend. This could be because the operator doesn't exist for this backend, or was omitted during the selective/custom build process (if using custom build).
    Este erro sugere que a operação de Non-Maximum Suppression (NMS) da torchvision não está disponível para o backend CUDA no meu ambiente.
    Já tentei atualizar o torch e torchvision, mas o problema persiste. Há alguma outra solução que você recomendaria ou alguma configuração específica que eu possa estar esquecendo?

    • @ProgramadorArtificial
      @ProgramadorArtificial  3 місяці тому +1

      É difícil dizer com certeza, mas vou te dar alguns pontos que acredito que podem ser o motivo:
      - Sua placa de vídeo não é compatível com PyTorch (pode acontecer se for muito antiga ou não for da NVIDIA);
      - Seus drives da placa de vídeo e do CUDA não estão atualizados (ou corretamente instalados), pelo menos não o suficiente para a versão do PyTorch instalada. Ou atualize os drives, ou instale uma versão mais antiga do PyTorch, pode conferir as versões disponíveis e com quais drives são compatíveis neste link: pytorch.org/get-started/previous-versions/
      - Existe algum bug na versão que você está utilizando da ultralytics (biblioteca usada para treinar o YOLO), pode tentar utilizar uma versão mais antiga, inclusive pode utilizada a mesma utilizada no vídeo só para confirmar se não é isso.
      Acredito que um destes pontos pode ser o motivo, se quiser saber mais da instalação dos drives da placa de vídeo e do CUDA temos um vídeo que falamos disso: ua-cam.com/video/ERISkjQNNMI/v-deo.html

    • @vinni8619
      @vinni8619 3 місяці тому +1

      @@ProgramadorArtificial opa, tenho uma 3060 tbm, acabei reinstalando os drives do pytorch, parece que o torch estava rodando na placa de video mas o torchvision tava no cpu, agora esta tudo ok! vlww pela resposta

    • @ProgramadorArtificial
      @ProgramadorArtificial  3 місяці тому

      Showww. Que bom que conseguiu resolver :D

  • @andremedeiros5732
    @andremedeiros5732 10 місяців тому

    Olá, tem algum local em que eu consiga entrar em contato com você ?

    • @ProgramadorArtificial
      @ProgramadorArtificial  10 місяців тому +1

      Se desejar pode me enviar um e-mail. O endereço está disponível na página principal do canal -> "Saiba mais sobre este canal" -> "Ver endereço de e-mail".

  • @marcioaquilles
    @marcioaquilles 11 місяців тому

    Esse Júpiter é igual ao collab? Até quantas épocas posso treinar?

    • @ProgramadorArtificial
      @ProgramadorArtificial  11 місяців тому

      Sim, porém o Jupyter roda no computador local, enquanto o Google Colab roda em um servidor externo. Se quiser rodar no Colab, pode apenas pegar os códigos presentes do Jupyter e passar para lá (só se atentando a instalar as bibliotecas que estiverem faltando). Já a quantidade de épocas depende de qual versão da arquitetura está usando, tempo disponível, complexidade do problema e outros fatos, ou seja, depende de caso para caso. Mas, em geral, paramos de treinar quando o modelo, durante algumas épocas, parou de mostrar crescimento nos resultados. Está área ainda vai muito do experimento, testar algo, ver os resultados e aceita ou faz diferente.

  • @renatin_42
    @renatin_42 Рік тому

    Como seria feita a detecção de objetos num game por exemplo, teria que capturar as imagens de uma GamePlay?

    • @ProgramadorArtificial
      @ProgramadorArtificial  Рік тому +1

      Sim, teria que pegar imagens de dentro do game para fazer as anotações dos objetos que deseja detectar e depois o treinamento. Uma forma é gravar diversas gameplays (para ter diversidade) e depois pegar algumas imagens aleatórias dos vídeos para anotar.

  • @12anjo
    @12anjo 6 місяців тому

    Vc tem alguem video mostrando como criar meu proprio data set para treinar minha ia yolov8???

    • @ProgramadorArtificial
      @ProgramadorArtificial  6 місяців тому +1

      Neste mesmo vídeo às 14:19 mostra qual a estrutura que o dataset precisa estar e logo em seguida, como pode ser feito a anotação utilizando LabelImg (se não quiser usar o LabelImg, também temos um vídeo no canal da ferramenta de anotação CVAT que é bem melhor). Já as imagens são arquivos como, .png e .jpg, ou seja, imagens normais do seu cenário, contendo os objetos que deseja detectar.

    • @12anjo
      @12anjo 6 місяців тому

      @@ProgramadorArtificial fera vc usa discord?? Queria uma ajuda pra saber qual a melhor forna d fazer um projeto.

    • @ProgramadorArtificial
      @ProgramadorArtificial  6 місяців тому

      Se quiser pode me enviar um e-mail. Na página principal do canal no UA-cam, adicionei na descrição/sobre o meu e-mail para contato

  • @ygorsena8376
    @ygorsena8376 Рік тому

    É necessário fazer o label dos arquivos na pasta train e valid? E como separar as imagens, pode-se adotar 70% para train e 20% para valid e 10% para test?

    • @ProgramadorArtificial
      @ProgramadorArtificial  Рік тому +1

      Olá! Sim, como estamos trabalhando com aprendizado supervisionado, é obrigatório fazer anotação dos dados, pois o treinamento consiste em comparar o resultado do modelo a cada época de treinamento com o valor verdadeiro (label), quanto mais distante do valor verdadeiro, maiores os ajustes realizados. Já a separação dos dados não existe uma regra, eu normalmente tento dividir em 70/15/15, porém, 70/20/10 também pode ser adotado. Tudo vai do tamanho do dataset e quão confiante você quer estar de que os resultados do teu modelo são os correspondentes (quanto mais dados em test, maior a chance do resultado corresponder com o que irá acontecer em produção).

  • @craftapple9446
    @craftapple9446 9 місяців тому

    Como eu faco pra criar um codigo para reconhecer se uma pessoa é loira, ruiva, morena... qual caminho devo seguir?

    • @ProgramadorArtificial
      @ProgramadorArtificial  9 місяців тому +1

      Como você quer apenas classificar, acredito que o melhor caminho é dar uma olhada em modelos de classificação. Inclusive temos um vídeo que explicamos o que é este algoritmo e alguns exemplos de como treiná-los: ua-cam.com/video/aTorfSnlUfc/v-deo.html

  • @tomilico
    @tomilico 11 місяців тому

    se meu modelo tiver somente uma classe, eu coloco 'singles_cls=True'? não sei se eu entendi isso dele ser treinado como uma classe somente

    • @ProgramadorArtificial
      @ProgramadorArtificial  11 місяців тому +1

      Não precisa. O "singles_cls" é para quando você anotou o dataset com diversas classes, mas quer treinar como se todas fossem apenas uma. Digamos que você anotou cadeira, sofá e poltrona, mas quer que o modelo apenas reconheça os objetos, sem diferenciá-los, então pode usar o "singles_cls" como True, com isso, o retorno do modelo vai ser a detecção dos objetos normalmente, mas com uma classificação genérica. No seu caso que anotou somente uma classe, não irá fazer diferença se deixar como True ou False.

  • @Migeru10.
    @Migeru10. 5 місяців тому

    Boa noite pessoal estou com algumas duvidas e espero que alguem possa me ajudar, consegui seguir todo o projeto com perfeição até a etapa de validação e teste,
    no video ele esta buscando o labels. cache no entanto no meu não sei por qual motivo busca um tal de path onde não é encontrado as imagens e da uma serie de erros, oque posso fazer para estar resolvendo esse problema?,
    e tambem estou com duvida de como vou colocar os arquivos depois em .names .cfg e .weights para poder rodar exemplo no OpenCV?
    Muito obrigado por enquanto fico a disposição para demais perguntas.

    • @ProgramadorArtificial
      @ProgramadorArtificial  5 місяців тому +1

      Ao realizar a validação e teste ele busca o caminho adicionado no .yaml passado no treinamento (no caso do vídeo é o "custom_dataset.yaml"). Se quiser foi adicionado o dataset na pasta "data", podendo descompactar ele e testar com o dataset que foi utilizado no vídeo, talvez fique mais fácil de entender.
      Depois que realizar o treinamento e quiser rodar inferências em imagens novas, pode apenas importar a biblioteca do ultralytics, instânciar o seu modelo com "model = YOLO({caminho_modelo_treinado.pth})" e por fim rodar "model.predict(img)". Sendo que o "img" pode ser o caminho para a imagem, formato Pillow, formato OpenCV, entre outros. Na sessão "Inferência" dentro do Jupyter Notebook apresentado no vídeo e disponível no repositório que está na descrição possui alguns exemplos.

  • @gnomioo828
    @gnomioo828 9 місяців тому

    Quando rodo o model.train(....), o meu código está voltando o seguinte erro: "AttributeError: 'PosixPath' object has no attribute 'startswith'", o que pode ser?

    • @gnomioo828
      @gnomioo828 9 місяців тому

      Meu yaml: "# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
      path: /home/clodoaldo/Documentos/non_HLB/yolo_test/ # dataset root dir
      train: train # train images (relative to 'path')
      val: valid # val images (relative to 'path')
      #test: test # test images (relative to 'path')
      # Classes
      names:
      0: laranja
      1: alvo"

    • @ProgramadorArtificial
      @ProgramadorArtificial  9 місяців тому +1

      Infelizmente somente olhando para a mensagem de erro não sei dizer o que pode ser. Teria que ver se é erro no seu código ou se for biblioteca na Ultralytics, identificar o que está sendo passado errado. Recomendo utilizar configurações padrões com algum dataset pronto (que tenha na internet de exemplo) só para garantir que o seu ambiente está correto, depois aí, sim, migrar as configurações para o que você deseja.

    • @gnomioo828
      @gnomioo828 9 місяців тому +1

      @@ProgramadorArtificial beleza, muito obrigado.

  • @tomilico
    @tomilico 11 місяців тому

    tô com esse problema de FileNotFoundError acredito por ser que eu abri somente o arquivo jupyter e não a pastar contendo o customdataset que eu criei, eu consigo colocar tudo em uma pastar e abrir no jupyter pra conseguir rodar o modelo tranquilo?

    • @ProgramadorArtificial
      @ProgramadorArtificial  11 місяців тому

      Desculpa não entendi sua pergunta. Um exemplo de estrutura consiste do repositório que disponibilizei na descrição (github.com/ProgramadorArtificial/treinar_yolov8). Praticamente consiste em alterar o "custom_dataset.yaml" com as informações do seu dataset (caminho e classes), lembrando que ele precisa estar no formato do YOLOv8 (pasta com as imagens e outra com as anotações) e rodar o código presente no Jupyter "yolov8.ipynb". Este erro de "FileNotFoundError" deve estar acontecendo provavelmente porque está apontando para alguma pasta ou arquivo que não existe, sem muito contexto não tenho como dizer o que pode ser.

    • @tomilico
      @tomilico 11 місяців тому

      @@ProgramadorArtificial pois é ficou meio confusa mesmo perdão kkkkkk to me esforçando pra dar certo meu projeto de yolo pra faculdade, mas acho que consegui arrumar já, obrigado mesmo assim!

    • @ProgramadorArtificial
      @ProgramadorArtificial  11 місяців тому

      Show, sem problemas. Fico feliz que tenha dado certo :)