CoreML3: Treinamento fácil de Modelo de Classificação de Imagem usando Xcode Create ML

Matheus Domingos
Único
Published in
6 min readOct 13, 2020
Fonte: Unsplash

Create ML foi lançado pela Apple no WWDC19. Ele ajuda você a treinar seu modelo CoreML facilmente. No Create ML você pode treinar modelos para executar tarefas como reconhecer imagens, extrair significado de textos ou encontrar relações entre valores numéricos.

Existem dois tipos de reconhecimento de imagem no Core ML que são: Classificação de Imagem e Detecção de Objetos. Neste tutorial, vamos focar na Classificação de Imagem.

Precisamos preparar 2 coisas:

  1. Xcode (acima da versão 11)
  2. Dataset (massa de dados para treinarmos os modelos)

Que tipo de conjunto de dados precisamos preparar?

Depende do que você quer reconhecer, sua demanda. Neste tutorial, vamos tentar reconhecer os Alimentos Tradicionais Brasileiros 🇧🇷:

  1. Acarajé
  2. Arroz Carreteiro
  3. Feijoada
  4. Pão de queijo

Portanto, precisamos encontrar imagens para cada rótulo (nome de comida) para o nosso conjunto de dados.

Quantas imagens por rótulo?

Na classificação é importante ter muitas variações de imagens para cada rótulo/label, neste tutorial utilizaremos apenas 10 imagens e aplicaremos filtros para ampliar nosso dataset. Outro ponto importante é preparar imagens para testarmos nosso modelo. O recomendado pela Apple é a seguinte distribuição:

  1. 80% para treinamento
  2. 20% para testes

Então vamos dizer que você tem 10 imagens para treinamento. Então você precisa de 2 imagens para testes. No total, são 12 imagens diferentes para cada rótulo/label.

Nota: Mais é sempre melhor. Além disso, equilibre o número de imagens para cada rótulo. Não use 10 imagens para um rótulo e 1000 imagens para outro.

Como está a estrutura do conjunto de dados?

Você precisa criar duas pastas chamadas: TrainingData e TestingData. Dentro da pasta de teste e treinamento, crie subpastas usando seus rótulos/labels como nomes.

É assim que minha estrutura de pasta de conjunto de dados se parece. Dentro da pasta de teste e treinamento tem a mesma estrutura de pasta com arquivos diferentes.

O tamanho importa? 🤨

As imagens não têm que ser do mesmo tamanho umas das outras, nem têm que ser de tamanho algum. No entanto, é melhor usar imagens que tenham no mínimo 299x299 pixels.

Quanto maior a sua imagem, mais tempo será gasto para treinar seu modelo. Isso acontece porque há um processo chamado normalização, e levará tempo para normalizar grandes imagens.

A extensão importa?

Sim, use formatos JPEG e PNG.

Como treinar o modelo CoreML usando um conjunto de dados personalizado?

Abra o CreateML

Abra Xcode > Developer Tool > Create ML.

Crie um Novo Documento

Clique em “Novo Documento” e selecione “Classificador de imagem” e clique em “Próximo”.

Preencha o detalhe do projeto ML

Preencha os detalhes do projeto > Clique em Next > Criar.

Arraste o dataset de treinamento

Arraste o dataset de treinamento no Create ML training input.

Arraste o dataset de teste

Arraste o dataset de testes na entrada de dados de teste Create ML.

Defina o número de iteração de treinamento

O número de iteração padrão é 25. Significa que a iteração do processo de treinamento será tomada 25 vezes. Vou colocar 100 iterações.

Dicas de 💡: Mais iteração. Mais preciso. Mais tempo de treinamento.

Melhorar a precisão do modelo 🎯

Lembra que eu falei no inicio que poderíamos usar filtros para melhorar a precisão de nossos modelos e aumentar nosso dataset? Pois bem, vamos aplicar agora! Com o CreateML você consegue por padrão fazer aumentos como: imagens com ruído, desfoque, corte, exposição, inversão e rotação.

📝 Nota: afetará o tempo de treinamento.

Neste tutorial utilizarei apenas dois aumentos: adicionar ruído e girar.

Hora de treinar! 🚀

Para iniciar o treinamento você só precisa clicar em “Treinar” e esperar até que o processo de treinamento seja feito.

Resultado do treinamento

Aqui está meu resultado de treinamento:

A precisão do treinamento é 100% e a precisão de validação é de 87,5%. O que isso significa? Que precisamos de mais dados para melhorar nossa precisão de validação. Mas isso é bom o suficiente, na verdade!

Já adicionei mais dados, mas a precisão de validação ainda está menor do que a precisão de treinamento? 🤷‍♂️

Sim, é possível que você tenha muitos dados, mas a precisão de validação ainda é significativamente menor do que a precisão do treinamento.

É chamado de overfitting e acontece porque seu modelo aprende muitos detalhes específicos sobre o seu conjunto de treinamento que geralmente não se aplicam a outros exemplos.

Como lidar com esse caso? 😎

Reduza as iterações de treinamento para evitar que o modelo aprenda muito sobre seus dados de treinamento.

Como testar manualmente meu modelo?

Basta clicar na saída (superior direita) e arrastar suas imagens para criar ML.

👊 Note que a imagem que classificou de forma incorreta foi a primeira, demarcando ArrozCarreteiro em um Acarajé. Já sabemos onde esta a falha e neste caso poderemos já reforçar as imagens de Acarajé.

Como exportar o modelo CoreML?

Basta clicar em Output > Get e salvar.

Referências:

Preparei um projeto de leitura de modelos CoreML para vocês testarem com o próprio aparelho o modelo exportado

Confira aqui: https://github.com/MatheusDomingos/MeetupCoreML

Isso é tudo, galera! Obrigado! 🤟

Quer nos ajudar a acabar com a burocracia entre pessoas e empresas usando a tecnologia? Então faça parte do nosso time!

Matheus Domingos é desenvolvedor na Acesso Digital.

--

--