Aula sensacional, facilmente a melhor que encontrei no KZbin sobre o assunto, o professor passa o conteúdo com muita clareza e simplicidade. Obrigado por compartilhar seu conhecimento gigantesco com a gente.
@miriamsobral34349 ай бұрын
Caramba! Melhor aula que encontrei! Por favor, continue.
@LucasRogério-b9o9 ай бұрын
Aula muito top, bem explicada! parabéns
@arthurmemories46112 ай бұрын
Gostei do seu video amigo muito completo e bem atualizado esse campo é o futuro e voce me ajudou a enxergar isto obrigado
@maurodeboni10 ай бұрын
Ótimo video, seu conhecimento ajudou muitíssimo!👍
@joaovitor-by8ux3 ай бұрын
video magnífico e muito informativo, me ajudou muito, obrigado!
@3ktore5 ай бұрын
Animal, meu camarada. Muito bem explicado. Parabéns. Seja feliz.
@ProgramadorArtificial5 ай бұрын
:D
@samyllerose19559 ай бұрын
continua fazendo videos assim pfv
@aprivi9 ай бұрын
Parabens pelo video!!
@gusttavocavalcante4982 Жыл бұрын
Muito bom. Parabéns
@luquinhasguima5 ай бұрын
Cara, vídeo animal, parabéns
@engdjmc Жыл бұрын
Que aula! Obrigado amigo!
@lucaspraciano4640 Жыл бұрын
Sensacional!!!!
@jlgiorio8 ай бұрын
Sensacional!!!
@SamirSonplay8 ай бұрын
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?
@ProgramadorArtificial8 ай бұрын
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.
@MaxDigitall8 ай бұрын
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
@ProgramadorArtificial8 ай бұрын
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.
@ladislaulopes74057 ай бұрын
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?
@ProgramadorArtificial7 ай бұрын
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.
@ladislaulopes74057 ай бұрын
@@ProgramadorArtificialo "for box in result.boxes" não irá gerar erro caso não tenha nenhum objeto detectado no frame atual?
@ProgramadorArtificial7 ай бұрын
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.
@ladislaulopes74057 ай бұрын
@@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?
@ProgramadorArtificial7 ай бұрын
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.
@vinni86195 ай бұрын
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?
@ProgramadorArtificial5 ай бұрын
É 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: kzbin.info/www/bejne/e4OshJ6ghrOBg6s
@vinni86195 ай бұрын
@@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
@ProgramadorArtificial5 ай бұрын
Showww. Que bom que conseguiu resolver :D
@Andre_Villela Жыл бұрын
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 Жыл бұрын
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 :)
@renatin_42 Жыл бұрын
Como seria feita a detecção de objetos num game por exemplo, teria que capturar as imagens de uma GamePlay?
@ProgramadorArtificial Жыл бұрын
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.
@manolo33682 ай бұрын
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.
@ProgramadorArtificial2 ай бұрын
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 KZbin sobre
@12anjo8 ай бұрын
Vc tem alguem video mostrando como criar meu proprio data set para treinar minha ia yolov8???
@ProgramadorArtificial8 ай бұрын
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.
@12anjo8 ай бұрын
@@ProgramadorArtificial fera vc usa discord?? Queria uma ajuda pra saber qual a melhor forna d fazer um projeto.
@ProgramadorArtificial8 ай бұрын
Se quiser pode me enviar um e-mail. Na página principal do canal no KZbin, adicionei na descrição/sobre o meu e-mail para contato
@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 Жыл бұрын
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).
@marcioaquilles Жыл бұрын
Esse Júpiter é igual ao collab? Até quantas épocas posso treinar?
@ProgramadorArtificial Жыл бұрын
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.
@gnomioo82811 ай бұрын
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?
@gnomioo82811 ай бұрын
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"
@ProgramadorArtificial11 ай бұрын
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.
@gnomioo82811 ай бұрын
@@ProgramadorArtificial beleza, muito obrigado.
@andremedeiros5732 Жыл бұрын
Olá, tem algum local em que eu consiga entrar em contato com você ?
@ProgramadorArtificial Жыл бұрын
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".
@tomilico Жыл бұрын
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 Жыл бұрын
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.7 ай бұрын
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.
@ProgramadorArtificial7 ай бұрын
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.
@tomilico Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
@@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 Жыл бұрын
Show, sem problemas. Fico feliz que tenha dado certo :)
@craftapple944611 ай бұрын
Como eu faco pra criar um codigo para reconhecer se uma pessoa é loira, ruiva, morena... qual caminho devo seguir?
@ProgramadorArtificial11 ай бұрын
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: kzbin.info/www/bejne/l4XSo5mJo9GInMU