Tutorial sobre como implantar o Edge no iOS (Core ML)

O que você criará

Neste tutorial, você fará o download de um modelo Core ML personalizado exportado (.mlmodel). Em seguida, executará um app para iOS predefinido que usa o modelo para identificar imagens de flores.

imagem do app modificado

Objetivos

Neste tutorial de apresentação completo, você usará o código para fazer o seguinte:

  • Executar um modelo do Core ML pré-treinado em um app para iOS.

Visão geral

O framework Core ML (em inglês) possibilita usar um modelo de machine learning treinado para classificar dados de entrada. O framework Vision (em inglês) funciona com o Core ML para aplicar modelos de classificação a imagens e pré-processar essas imagens para tornar tarefas de machine learning mais fáceis e confiáveis.

Antes de começar

Faça o download de um modelo geral do Edge

  1. Faça o download de uma pasta que contenha um modelo pré-configurado do Core ML. Você usará esse modelo neste tutorial.

  2. Descompacte o arquivo zip baixado.

  3. Antes de iniciar o tutorial, navegue até o diretório raiz do projeto:

    cd ClassifyingImagesWithVisionAndCoreML
    Você executará todas as amostras de código a seguir nesse diretório.

Treine e exporte um modelo personalizado do Edge

Antes de continuar, conclua o Guia de início rápido do modelo do dispositivo Edge com as seguintes modificações:

  • Use o conjunto de dados de flores ou use seu próprio conjunto de dados.
  • Na etapa Treinar seu modelo, selecione a opção de modelo Edge.
  • Na etapa Exportar o modelo, siga as instruções para exportar um modelo de ML principal.

Você usará o arquivo model.mlmodel do Core ML da flor resultante para executar uma versão personalizada do app atual para iOS.

Configurar o app para iOS

O app de demonstração para iOS requer várias outras ferramentas:

  1. Xcode
  2. Ferramentas de linha de comando do Xcode

Fazer o download do Xcode

Use este link para fazer o download do Xcode no seu computador.

Instalar as ferramentas de linha de comando do Xcode

Para instalar as ferramentas de linha de comando do Xcode, execute o seguinte comando na linha de comando:

xcode-select --install

Abrir o projeto

Abra o projeto com o Xcode. É possível fazer isso por meio da linha de comando ou por meio da IU. Para abrir o projeto por meio da linha de comando, execute o comando a seguir:

open ./Vision+ML\ Example.xcodeproj

Executar o app original

Para iniciar o app no Simulator e receber anotações de imagem, siga estas etapas:

  1. Para iniciar o app, selecione o botão de reprodução ícone de reprodução do xcode no canto superior esquerdo da janela do Xcode.
  2. Forneça uma imagem de previsão para o app. É possível fornecer uma imagem de duas maneiras:
    • Tire uma foto com a câmera do dispositivo ou
    • adicione fotos à biblioteca de fotos do dispositivo arrastando-as e soltando-as na janela do Simulator.

O app exibe as duas principais categorias de classificação na ordem da pontuação de confiança atribuída pelo modelo a cada uma delas.

O resultado exibirá anotações semelhantes às imagens abaixo:

classificações usando o app original genérico: móveis, frutas, plantas

Executar o app personalizado

O aplicativo original usa um modelo Core ML que classifica imagens em uma das 1.000 classes genéricas do ImageNet (animal, frutas, móveis, plantas etc.), usando o MobileNet padrão.

Modifique o app para que ele use o modelo treinado novamente com as seguintes categorias de imagens personalizadas de flores:

  • margarida
  • dente-de-leão
  • rosas
  • girassóis
  • tulipas

Adicionar arquivos de modelo ao projeto

  1. Faça o download do seu modelo personalizado de flores (Core ML exportado model.mlmodel) recebido após concluir o guia de início rápido do modelo de dispositivo do Edge. Os arquivos model.mlmodel e dict.txt da exportação do modelo do Core ML estarão no local do Google Cloud Storage que você especificou.

  2. Renomeie seu modelo personalizado para AutoML.mlmodel.

  3. Exclua o modelo atual do projeto (MobileNet.mlmodel).

  4. Adicione o modelo personalizado ao projeto na pasta Vision+ML Example.

    arraste o modelo personalizado para a imagem do Xcode

  5. Modifique a linha 30 em ImageClassificationViewController. Remova:

    let model = try VNCoreMLModel(for: MobileNet().model)

    Substitua esta linha por:

    let model = try VNCoreMLModel(for: AutoML().model)

Executar seu app de modelo personalizado

Para reiniciar o app no Simulator, selecione o botão de reprodução ícone de reprodução do xcode no canto superior esquerdo da janela do Xcode.

Para testar as modificações, adicione arquivos de imagem do diretório flower_photos/ e receba previsões.

Os resultados serão assim:

imagem do app modificado

As imagens padrão não são de flores.

Para testar o modelo, adicione as imagens de dados de treinamento que você já fez o download ou faça o download de imagens coletadas em uma pesquisa do Google para usar na previsão.

Como funciona?

Agora que o app está em execução, observe o código específico do framework do CoreML e do Vision.

Configurar o Vision com um modelo do Core ML

O Core ML gera automaticamente uma classe Swift que fornece acesso fácil ao seu modelo de ML.

Neste exemplo, o Core ML gera automaticamente a classe MobileNet com base em MobileNetmodel.

  • Extraia a instância de modelo com o seguinte código:

    let model = try VNCoreMLModel(for: MobileNet().model)
  • Crie a solicitação do Vision com o modelo acima e o gerenciador de conclusão. O gerenciador de conclusão manipula a resposta de previsão do modelo.

  • A interface do usuário precisa ser atualizada na linha de execução principal:

    let request = VNCoreMLRequest(model: model, completionHandler: { [weak self] request, error in
    DispatchQueue.main.async {
    guard let results = request.results else {
    self.classificationLabel.text = "Unable to classify image.\n\(error!.localizedDescription)"
    return
    }
    

results sempre estará em VNClassificationObservation, conforme especificado pelo modelo do Core ML neste projeto.

let classifications = results as! [VNClassificationObservation]
})

O gerenciador de conclusão da solicitação do Vision indica se a solicitação foi bem-sucedida ou resultou em um erro. Se for bem-sucedida, a propriedade de resultados conterá objetos VNClassificationObservation que descrevem possíveis classificações identificadas pelo modelo do ML.

  1. Um modelo do ML processa imagens de entrada em uma proporção fixa. No entanto, as imagens de entrada talvez apresentem proporções arbitrárias, de modo que o Vision precise escalonar ou cortar a imagem. Para resultados melhores, defina a propriedade imageCropAndScaleOption da solicitação para corresponder ao layout de imagem com que o modelo foi treinado.

    request.imageCropAndScaleOption = .centerCrop
  2. Crie o VisionRequestHandler com a imagem de entrada usando o seguinte código:

    let handler = VNImageRequestHandler(ciImage: ciImage, orientation: orientation)
  3. Passe o objeto da solicitação para chamar a função de execução do gerenciador.

    do {
    try handler.perform([self.classificationRequest])
    } catch {

    Esse gerenciador detecta erros gerais de processamento de imagem. O gerenciador de conclusão processClassifications(_:error:) do classificationRequest detecta erros específicos do processamento dessa solicitação.

    print("Failed to perform classification.\n\(error.localizedDescription)")
    }

A seguir

Você concluiu um tutorial de um app de classificação de flores do iOS usando um modelo do Core ML exportado do AutoML Vision Edge. Além disso, usou um modelo do Core ML treinado para testar um app de classificação de imagem geral antes de fazer modificações nele e receber anotações de amostra personalizadas de flores. Em seguida, você examinou o código específico do Core ML para entender a funcionalidade subjacente.

Os recursos a seguir ajudam você a aprender sobre os modelos do Core ML e o AutoML Vision Edge: