Criar ML no iOS



A inteligência artificial está se aproximando a cada ano; ontem, estava disponível apenas para um número limitado de pessoas. Hoje, podemos criar modelos de aprendizado de máquina e usá-los em nossos projetos. Neste artigo, apresentaremos as ferramentas Criar ML e tentaremos treinar o modelo para classificar imagens.

Mas antes de começar, um pouco de história e explicação. Na conferência anual para desenvolvedores WWDC2018, a Apple apresentou as ferramentas para trabalhar com o Machine Learning Create ML. O modelo treinado em Criar ML é o resultado da aplicação de um algoritmo de aprendizado de máquina a um conjunto de dados de treinamento. Os modelos não ocupam muito espaço (cerca de 3Mb), para que possam ser armazenados no projeto. Inicialmente, foi proposto o treinamento de modelos usando Playgrounds no Xcode 10 e o trabalho suportado com imagens, texto e tabelas. Ao iniciar os playgrounds do projeto, era necessário importar a biblioteca CreateML e executar o MLImageClassifierBuilder (caso treinássemos o modelo para classificar imagens).

import CreateMLUI

let builder = MLImageClassifierBuilder()
builder.showInLineView()

Em 2019, a Apple introduziu uma ferramenta completamente nova para trabalhar com modelos de aprendizado de máquina, separando-a do Playgrounds. Tornou-se possível treinar modelos sem uma única linha de código. A lista de tipos de dados foi reabastecida com sons e atividades. No total, são apresentados 5 tipos de dados e 9 modelos de modelo. Vejamos cada tipo de dados e quais modelos podemos obter como resultado.

Imagens


imagem

Ao treinar usando imagens, dois modelos estão disponíveis - Classificador de imagens (classificador de imagens) e Detector de objetos (detector de objetos).

O Classificador de imagens é usado para classificar imagens com base em seu conteúdo. Depois de treinar o modelo, podemos identificar um objeto na imagem e atribuí-lo a algum tipo. Por exemplo, para identificar animais em imagens e até distinguir qual flor é retratada na fotografia. Em Criar ML, o modelo do Image Classifier usa treinamento de transferência . O treinamento de transferência é a capacidade de combinar um modelo pré-treinado com dados do usuário, o que permite treinar modelos em um pequeno número de imagens.

O Detector de objetos é um modelo de aprendizado profundo. Permite identificar vários objetos na imagem, como pessoas, edifícios, carros. E tudo isso em uma imagem. Também deve ser adicionado que, ao treinar os modelos do Detector de objetos, a GPU do computador é usada.

Sons


imagem

Ao trabalhar com sons, apenas um modelo está disponível para criar um modelo - Classificador de Som (classificador de som). O Sound Classifier é um novo modelo e permite determinar o som mais dominante no fluxo de áudio. Por exemplo, você pode determinar qual instrumento soa em áudio. O Sound Classifier, como o Image Classifier, usa treinamento de transferência.

Atividade


imagem
A atividade é representada por apenas um modelo - Classificador de Atividade. O Activity Classifier é um novo modelo em Create ML e é usado para classificar dados de movimento de um acelerômetro e giroscópio.

Esses modelos são modelos de aprendizado profundo e são treinados usando a GPU de um computador.

Texto


imagem

O texto é representado por dois modelos: Classificador de Texto (classificador de texto) e Marcador de Palavras (marcador de palavras).

O Classificador de texto é usado para identificar frases, parágrafos e até artigos inteiros com base em seu conteúdo. O Marcador de Palavras é usado para marcar palavras ou reconhecer qualquer nome no texto.

Tabelas


imagem

As tabelas são representadas por três modelos: Regressor tabular (regressor de tabela), Classificador tabular (classificador de tabela) e Recomendador (recomendador).

O regressor tabular é um modelo que pode prever um valor numérico com base em alguns dados. Por exemplo, você pode treinar um modelo que irá prever o clima.

O Classificador tabular classifica os objetos com base em seus recursos. Por exemplo, você pode treinar um modelo para determinar o tamanho da roupa em uma loja online com base em vários parâmetros do usuário. Um modelo funciona com tipos como número inteiro, duplo, sequência e comprimento se o destino for um valor discreto.

O Recomendador permite que você recomende o conteúdo com base no comportamento do usuário, e todos os cálculos são realizados diretamente no dispositivo.

Agora que nos familiarizamos com todos os modelos disponíveis, podemos começar a criar nosso primeiro modelo de aprendizado de máquina. Vamos começar com o Image Classifier.

Classificador de imagens


Você já assistiu a série HBO Silicon Valley? Em uma das séries da quarta temporada, eles mostraram um aplicativo que reconhece "cachorros-quentes" e "não cachorros-quentes" nas imagens. Usando o Image Classifier, você pode criar um análogo deste aplicativo. Mas primeiro você precisa preparar os dados para treinar o modelo. Arquivo com imagens aqui .

Alguns requisitos para o treinamento do modelo do Image Classifier. As imagens não devem ter menos de 299 x 299 pixels. Os kits de treinamento devem conter pelo menos 10 imagens, mas quanto mais, melhor. Agora sabemos que, ao treinar o Classificador de imagens, é usado o treinamento de transferência, que permite treinar modelos em um pequeno número de imagens. O número de imagens para cada conjunto deve ser igual; caso contrário, haverá uma mudança para uma das categorias. Aproximadamente 80% das imagens são usadas para treinar o modelo e os 20% restantes para teste. Além disso, as imagens não devem ser repetidas, ou seja, na pasta com imagens para treinamento, não deve haver imagens que serão utilizadas posteriormente nos testes. Os nomes das pastas de treinamento serão usados ​​como identificadores para as respectivas classes,ao usar modelos. Meu exemplo usa os nomes HotDog ou NotHotDog. Os nomes das imagens em si não desempenham nenhum papel; eles podem ser chamados como desejar. Eu os designei com números de série.

Agora que nossos dados estão prontos, podemos começar a treinar o modelo. Para trabalhar com o Create ML, precisamos do Xcode 11 ou superior. Vou usar o Xcode 11.3.1. Para executar a ferramenta Criar ML, você precisa ir para Xcode -> Open Developer Tool -> Create ML. Aparecerá uma janela onde você pode selecionar uma existente ou criar um novo projeto. Selecione novo documento. Em seguida, você precisa selecionar um modelo, no nosso caso, usaremos o Image Classifier. Dê um nome ao nosso projeto, clique em Avançar e selecione o local onde o projeto será armazenado. Um ambiente de trabalho é aberto para trabalhar com o modelo.

imagem

Como podemos ver, este é um projeto completamente separado, onde você pode criar e treinar vários modelos. O nome do projeto (Projeto) é exibido no inspetor à esquerda, clicando nele para exibir informações sobre o projeto e permitir que você o edite. Mais abaixo, o Model Sources contém todos os modelos usados ​​em nosso projeto. Vamos agora olhar para a seção Entradas de dados na janela principal da ferramenta.

Dados de treinamento - aqui você precisa adicionar imagens para modelos de treinamento. Dados de validação - aqui você pode adicionar um conjunto de imagens para testar o treinamento do modelo (no meu caso, deixei o Auto). Dados de teste - aqui você precisa adicionar imagens para testar o modelo que não estava envolvido no treinamento do modelo.

Na seção Parâmetros, você pode especificar o número máximo de iterações executadas em uma única imagem durante o treinamento do modelo. E na seção Aprimoramentos, você pode selecionar os efeitos que se sobrepõem às imagens.

Agora que nos familiarizamos com o Create ML, podemos começar a treinar nosso primeiro modelo. Simplesmente arrastamos a pasta Dados do treinamento (o nome pode ser qualquer) para a guia Dados do treinamento. Agora clique em Train. O processo de aprendizado começa.

imagem

Então, levei cerca de 27 segundos para treinar, e o modelo está quase pronto. Após o treinamento, você pode avaliar quão bem o modelo classifica as imagens do conjunto de Dados de Treinamento. Como o modelo é treinado nessas imagens, ele as classifica bem. No meu caso, o modelo identificou todas as imagens do conjunto de treinamento e 97% das imagens do conjunto de teste. Chegou a hora do teste.

imagem

Vá para a guia Testes. Assim como os dados para o treinamento do modelo, basta arrastar a pasta Testing Data para a janela Testing Data. De fato, poderíamos configurar uma pasta com imagens para teste antes de iniciar o treinamento. Mas, pela linearidade do processo, faremos isso de maneira diferente. Clique em Modelo de Teste. De acordo com os resultados do teste, o modelo enfrentou 98%.

imagem

Acessando Saída, você pode verificar o desempenho do modelo sem adicioná-lo ao seu projeto. Para fazer isso, adicione imagens de cachorro-quente e não de cachorro-quente e verifique o resultado. Adicionei uma imagem de uma salada e um cachorro-quente e, nos dois casos, o modelo funcionou bem. Obviamente, para projetos sérios, pode ser necessário mais dados para treinamento, mais iterações e assim por diante. Mas para um projeto de teste isso será suficiente. Para salvar o modelo, basta transferi-lo da Saída para a pasta desejada.

imagem

Agora, sugiro tentar integrar o modelo em um projeto de teste, disponível aqui. Um modelo já foi adicionado ao projeto, mas você pode usar qualquer outro classificador. Isso não interromperá o aplicativo, pois os modelos são intercambiáveis ​​e você pode usar vários modelos no projeto. Basta transferir o modelo finalizado para o projeto.

imagem

Na seção Modelo de aprendizado de máquina, você pode encontrar informações sobre o modelo. Esta informação pode ser especificada no projeto da ferramenta Criar ML. Observe que o modelo que treinamos ocupa apenas 17 KB. Além disso, na seção Classe de modelo, somos avisados ​​de que uma classe Swift será criada com o nome MyImageClassifier, não é recomendável tocar em nada lá, pois isso pode afetar o aplicativo. A seção Previsão descreve os parâmetros de entrada e o que obtemos como resultado. Caso você esteja usando um modelo que não ensinou, na seção Experimentação, você pode verificar o modelo, basta transferir a imagem.

imagem

Vá para a classe ImageClassifierService, aqui você pode ver como o modelo é inicializado.

private func makeImageClassifierModel() -> VNCoreMLModel? {
  return try? VNCoreMLModel(for: MyImageClassifier().model)
}

Simples o suficiente, certo? Em seguida, você precisa criar, processar e executar uma solicitação de classificação.

private func makeClassifierRequest(for model: VNCoreMLModel, ciImage: CIImage) {
    let request = VNCoreMLRequest(model: model) { [weak self] request, error in
      self?.handleClassifierResults(request.results)
    }
    
    let handler = VNImageRequestHandler(ciImage: ciImage)
    DispatchQueue.global(qos: .userInteractive).async {
      do {
        try handler.perform([request])
      } catch {
        self.onDidUpdateState?(.requestFailed)
      }
    }
  }

Resta apenas processar o resultado.

  private func handleClassifierResults(_ results: [Any]?) {
    guard let results = results as? [VNClassificationObservation],
      let firstResult = results.first else {
      onDidUpdateState?(.requestFailed)
      return
    }
    
    DispatchQueue.main.async { [weak self] in
      let confidence = (firstResult.confidence * 100).rounded()
      let resultModel = ClassifierResultModel(identifier: firstResult.identifier, confidence: Int(confidence))
      self?.onDidUpdateState?(.receiveResult(resultModel: resultModel))
    }
  }

Agora podemos executar o aplicativo e verificar a precisão do modelo.

imagem

Como podemos ver, o modelo está indo bem. Agora vamos tentar mostrar ao nosso modelo uma imagem de não um cachorro-quente e ver como ela lida com isso.

imagem

Como podemos ver, o modelo define a imagem do hambúrguer como "não um cachorro-quente". Proponho confundir um pouco o modelo e adicionar uma imagem de um cachorro em uma fantasia de cachorro-quente.

imagem

E aqui, nosso modelo treinado faz um excelente trabalho.

Conclusão


Neste breve artigo, apresentamos a ferramenta Criar ML. Aprendeu com que tipos ele trabalha e quais padrões a ferramenta usa. Eles também tentaram treinar seu modelo. A parte mais difícil na criação de um modelo de aprendizado de máquina é encontrar e preparar dados para o aprendizado. Você não pode treinar modelos, mas use modelos já treinados. Por exemplo, existem modelos prontos que funcionam com imagens e texto. Existem muitos modelos personalizados no github.
Imagens para modelos de treinamento também são fáceis de encontrar, por exemplo, arquivos do Google . Mas se você precisar treinar um modelo para tarefas direcionadas de maneira restrita, precisará coletar imagens e criar seus arquivos.

All Articles