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.
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
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.
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?
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.
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.
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
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?
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.
@@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?
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.
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?
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 :)
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?
É 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
@@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
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".
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.
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.
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.
É 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?
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).
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
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.
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.
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.
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?
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.
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?
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.
@@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!
Gostei do seu video amigo muito completo e bem atualizado esse campo é o futuro e voce me ajudou a enxergar isto obrigado
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.
Caramba! Melhor aula que encontrei! Por favor, continue.
Aula muito top, bem explicada! parabéns
video magnífico e muito informativo, me ajudou muito, obrigado!
Ótimo video, seu conhecimento ajudou muitíssimo!👍
continua fazendo videos assim pfv
Animal, meu camarada. Muito bem explicado. Parabéns. Seja feliz.
:D
Parabens pelo video!!
Cara, vídeo animal, parabéns
Muito bom. Parabéns
Sensacional!!!
Que aula! Obrigado amigo!
Sensacional!!!!
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
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.
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?
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.
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.
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
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?
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.
@@ProgramadorArtificialo "for box in result.boxes" não irá gerar erro caso não tenha nenhum objeto detectado no frame atual?
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.
@@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?
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.
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?
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 :)
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?
É 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
@@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
Showww. Que bom que conseguiu resolver :D
Olá, tem algum local em que eu consiga entrar em contato com você ?
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".
Esse Júpiter é igual ao collab? Até quantas épocas posso treinar?
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.
Como seria feita a detecção de objetos num game por exemplo, teria que capturar as imagens de uma GamePlay?
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.
Vc tem alguem video mostrando como criar meu proprio data set para treinar minha ia yolov8???
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.
@@ProgramadorArtificial fera vc usa discord?? Queria uma ajuda pra saber qual a melhor forna d fazer um projeto.
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
É 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?
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).
Como eu faco pra criar um codigo para reconhecer se uma pessoa é loira, ruiva, morena... qual caminho devo seguir?
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
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
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.
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.
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.
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?
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"
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.
@@ProgramadorArtificial beleza, muito obrigado.
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?
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.
@@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!
Show, sem problemas. Fico feliz que tenha dado certo :)