Cinco fatos importantes para personalizar seu primeiro modelo de aprendizado de máquina com o MediaPipe Model Maker

MAI 04, 2023
Jen Person Developer Relations Engineer

Se você está lendo este blog, provavelmente tem interesse em criar um modelo personalizado de aprendizado de máquina (ML). Recentemente, eu passei por esse processo ao criar um detector de cães personalizado para acompanhar o codelab Criar um app personalizado da Web para detecção de objetos com o MediaPipe. Como qualquer nova tarefa de codificação, o processo exigiu algumas tentativas e erros até que eu entendesse o que estava fazendo. Para minimizar a parte dos erros de sua experiência de "tentativa e erro", tenho o prazer de compartilhar com você cinco conclusões da minha experiência de treinamento de modelo.


1. A preparação dos dados é demorada. Reserve tempo para ela.

A preparação dos dados para o treinamento será diferente para cada tipo de modelo a ser personalizado. Em geral, há uma etapa para a aquisição dos dados e outra para a anotação desses dados.

Aquisição de dados

Encontrar pontos de dados suficientes que representem adequadamente um caso de uso pode ser um desafio. Primeiro, porque você quer ter certeza de que tem o direito de usar as imagens ou os textos incluídos nos dados. Verifique o licenciamento dos dados antes do treinamento. Uma maneira de resolver isso é fornecer seus próprios dados. Por acaso, eu tenho centenas de fotos dos meus cães, e selecioná-las para o meu detector de objetos foi fácil. Você também pode buscar conjuntos de dados existentes no Kaggle. Existem muitas opções no Kaggle que abrangem uma ampla gama de casos de uso. Com sorte, você encontrará um conjunto de dados existente que atenda às suas necessidades e talvez já tenha anotações!

Anotação de dados

O MediaPipe Model Maker aceita dados nos quais cada entrada tenha um arquivo XML correspondente listando as anotações. Por exemplo:

Existem vários programas de software que podem ajudar com a anotação. Isso é especialmente útil quando você precisa destacar áreas específicas das imagens. Alguns programas de software são projetados para permitir a colaboração. Uma IU intuitiva e instruções para anotadores significam que você pode contar com a ajuda de outras pessoas. Uma opção comum de código aberto é o Label Studio, que eu usei para anotar minhas imagens.

Portanto, saiba que esta etapa vai tomar muito tempo, e lembre-se de que ela levará mais tempo do que você espera.

2. Simplifique seu modelo personalizado.

Se você é como eu, já tem uma ideia maravilhosamente ótima e planejada para seu primeiro modelo personalizado. Meu cachorro Ben foi a inspiração para meu primeiro modelo. Ele veio de um abrigo local de golden retrievers, mas quando fiz um teste de DNA, descobri que ele é 0% golden retriever! Minha primeira ideia foi criar um detector de golden retrievers, uma solução que pudesse dizer se um cão era um golden retriever "original" ou "genérico". Achei que poderia ser divertido ver o que o modelo achava do Ben, mas rapidamente percebi que teria que adquirir muito mais imagens de cães do que eu ja tinha para poder utilizar o modelo também com outros cães. E eu teria que ter certeza de que ele seria capaz de identificar com precisão os golden retrievers de todas as tonalidades. Depois de horas nessa tarefa, percebi que precisava simplificar as coisas. Foi quando decidi tentar criar uma solução apenas para meus três cães. Eu tinha muitas fotos à escolha, então selecionei aquelas que mostravam melhor os detalhes dos cães. Essa foi uma solução muito mais bem-sucedida e uma ótima prova de conceito para meu modelo de golden retriever, porque eu me recusava a abandonar essa ideia.

Estas são algumas maneiras de simplificar seu primeiro modelo personalizado:

  1. Comece com menos rótulos. Escolha de duas a cinco classes para atribuir aos dados.
  2. Deixe de lado os casos extremos. Se você tem formação em engenharia de software, costuma prestar atenção e abordar todos os casos extremos. No aprendizado de máquina, você pode acabar introduzindo erros ou comportamentos estranhos ao tentar fazer o treinamento para casos extremos. Por exemplo, eu não escolhi nenhuma foto dos cães na qual a cabeça deles não estivesse visível. É claro que eu posso querer um modelo capaz de detectar meus cães mesmo que estejam de costas e visíveis apenas pela metade. Mas eu deixei as fotos parciais de cães fora do meu treinamento, e o modelo ainda é capaz de detectá-las.
5things2
O app da Web ainda identifica o ACi em uma imagem, mesmo quando a cabeça dele não está visível
  1. Inclua alguns casos extremos nos testes e na prototipagem para ver como o modelo lida com eles. Mas não se preocupe com os casos extremos além disso.
  2. Ter um pouco de dados já ajuda muito. Como o MediaPipe Model Maker usa o aprendizado por transferência, você precisa de muito menos dados para o treinamento do que se estivesse treinando um modelo do zero. Considere ter 100 exemplos para cada classe. Você talvez possa fazer o treinamento com menos de 100 exemplos se não houver muitas iterações possíveis dos dados. Por exemplo: meu colega treinou um modelo para detectar dois bonequinhos do Android diferentes. Ele não precisou de muitas fotos porque não há muitos ângulos para visualizar os bonequinhos. Você poderá precisar de mais de 100 exemplos para começar caso precise de mais para mostrar as possíveis iterações dos dados. Por exemplo, um golden retriever pode ter várias cores. Podem ser necessárias várias dezenas de exemplos para cada cor a fim de garantir que o modelo seja capaz de identificar as cores com precisão, o que resultaria em mais de 100 exemplos.

Portanto, em sua primeira experiência de treinamento de ML, lembre-se de simplificar, simplificar e simplificar.

Simplifique.

Simplifique.

3. Considere que haverá várias iterações de treinamento.

Por mais que eu queira afirmar com segurança que você obterá os resultados certos com seu modelo no primeiro treinamento, isso provavelmente não acontecerá. A escolha cuidadosa de exemplos de dados e anotações com certeza elevará sua taxa de sucesso, mas há muitos fatores que podem mudar o comportamento do modelo. Talvez você precise começar com uma arquitetura de modelo diferente para alcançar a acurácia desejada. Ou você pode tentar uma divisão diferente de dados de treinamento e validação. Talvez seja necessário adicionar outros exemplos ao conjunto de dados. Felizmente, o aprendizado por transferência com o MediaPipe Model Maker geralmente leva vários minutos, e você pode reverter novas iterações rapidamente.

4. Prototipe fora do app.

Ao terminar de treinar um modelo, você provavelmente não verá a hora de adicioná-lo ao app. No entanto, eu recomendo experimentar o modelo no MediaPipe Studio primeiro, por estes motivos:

  1. Sempre que você fizer uma mudança no app, provavelmente precisará aguardar a conclusão de alguma etapa de compilação e/ou build. Mesmo com uma recarga automática, pode haver um tempo de espera. Portanto, se você decidir que deseja ajustar uma opção de configuração, como o limite de pontuação, precisará esperar um pouco a cada ajuste feito, e esse tempo poderá aumentar. Não vale a pena o tempo extra para esperar que um app inteiro seja compilado quando você está apenas tentando testar um componente. Com o MediaPipe Studio, você pode experimentar as opções e ver os resultados com uma latência muito baixa.
  2. Se você não obtiver os resultados esperados, não poderá determinar com segurança se o problema está no modelo, na configuração da tarefa ou no app.

Com o MediaPipe Studio, eu consegui experimentar rapidamente diferentes limites de pontuação em várias imagens para determinar qual limite devia usar no app. Também eliminei meu próprio app da Web como um fator para esse desempenho.

5things3

5. Faça mudanças incrementais.

Depois de adquirir dados de qualidade, simplificar o caso de uso e fazer o treinamento e a prototipagem, talvez você precise repetir o ciclo para obter o resultado certo. Quando isso acontecer, escolha apenas uma parte do processo para mudar e faça uma pequena mudança. No meu caso, muitas fotos dos meus cães foram tiradas no mesmo sofá azul. Se o modelo começasse a considerar esse sofá, já que ele muitas vezes estava dentro da caixa delimitadora, isso poderia afetar a maneira como ele categorizaria as imagens nas quais os cães não estivessem no sofá. Em vez de jogar fora todas as fotos no sofá, eu removi apenas algumas e adicionei mais umas dez de cada cão fora do sofá. Isso melhorou muito meus resultados. Se você tentar fazer uma grande mudança logo de cara, poderá acabar introduzindo novos problemas em vez de resolvê-los.

Comece a personalizar agora mesmo.

Com essas dicas em mente, é hora de você personalizar sua própria solução de ML! Você pode personalizar a classificação de imagens, o reconhecimento de gestos, a classificação de textos ou o modelo de detecção de objetos para usar no MediaPipe Tasks.

Se você quiser compartilhar os aprendizados adquiridos no treinamento de seu primeiro modelo, poste os detalhes no LinkedIn junto com um link para esta postagem do blog e, depois, marque-me. Mal posso esperar para ver o que você vai aprender e criar!