CoreML: Deep Learning embarcada – e em tempo real – no seu iPhone

Você que já conhece sobre este tema, talvez tenha achado o título bastante otimista. Bem, essa é a idéia! Para você que gostaria de entender mais sobre o assunto, seja muito bem vindo e qualquer dúvida fique à vontade para entrar em contato comigo, pelos comentários.

Captura e identificação de objetos usando o modelo MobileNets

Neste artigo você verá:

  • O que é CoreML?
  • Quais são as limitações do framework?
  • Quais são os modelos computacionais suportados?
  • Os prós e contras
  • iDeepVision — Projeto showcase completo com 5 modelos de Deep Neural Networks para a identificação de objetos

Deep Learning é um dos temas em tecnologia mais divulgado nos últimos anos. Não é uma proposta recente, entretanto vem ganhando cada vez mais espaço. Modelos computacionais de inteligência, capazes de aprender padrões complexos, com alta capacidade de processamento e precisão nos resultados. Este artigo trata exatamente deste assunto, mas não executando dentro de uma poderosa cloud com GPU mas de dentro do seu próprio smartphone. =D

Vamos lá! O que é o CoreML?

Apresentado no WWDC 2017 em Junho deste ano, o CoreML é a proposta da Apple para embarcar modelos computacionais de inteligência em seus dispositivos. Uma forma simplificada para que os desenvolvedores possam explorar ao máximo as inovações em Machine Learning.

A Apple já havia nos presenteado com os frameworks Metal CNN e o BNN para a construção de Redes Neurais Convolucionais, mas com o CoreML ficou muito mais fácil a construção de aplicações mobile inteligentes.

Essa inovação está presente a partir do iOS 11.

 

Nestes passos iniciais, as aplicações mais comuns foram na área de Detecção de Objetos em tempo real. Que se trata de uma aplicação bastante interessante e que nos dá a oportunidade para a criação de soluções ainda mais complexas.

Nesta abordagem, sua utilização é muito simples: basta carregar os modelos pré-treinados em formato .mlmodel e executar a função de predição.

Por exemplo, o modelo ResNet50, uma rede neural residual profunda para o reconhecimento de imagem, com 50 camadas (mais detalhes em: Deep Residual Learning for Image Recognition), pode ser utilizada da seguinte forma:

Inicializa um novo objeto a partir da classe do modelo:

let model = ResNet50()

Obtém uma imagem e, através do objeto model instanciado anteriormente, executa a predição, resulta a classe que foi identificada na imagem.

let pixelBuffer: CVPixelBuffer = /*Instância da nova imagem*/
if let prediction = try? model.prediction(image: pixelBuffer) {
    print(prediction.classLabel) 
}

O processo de instância do modelo e execução da detecção pode ser visto abaixo através da imagem extraída da apresentação oficial no WWDC 2017

Processo de identificação de de imagens com CoreML — Fonte: Apresentação oficial WWDC 2017

Importante destacar que o CoreML irá decidir por você se precisará o usar a CPU ou GPU, além disso, ao contrário do Metal, você pode executá-lo usando o simulador, facilitando ainda mais o processo de desenvolvimento.

E as limitações?

Apesar de ser uma abordagem fantástica, temos que conhecer bem as suas limitações e saber tomar a decisão de utilizar corretamente o framework.

Conheça abaixo as principais limitações do CoreML:

  • Os tipos de modelos suportados são apenas para o aprendizado supervisionado. Logo, modelos não supervisionados e por reforço estão fora desta abordagem inicial do framework
  • Você precisa carregar modelos pré-treinados, não sendo possível o treinamento dentro do dispositivo.
  • Só serão executados os modelos que possuem as camadas suportadas pelo CoreML, caso utilize alguma camada na sua deep neural que não seja suportada, ele não será executado.
  • Você não verá as saídas produzidas pelas camadas intermediárias, apenas o resultado final da camada de saída
  • Você não determinará se sua aplicação usará a CPU ou GPU (mais indicado), e terá que confiar que o framework escolherá a melhor forma de executar seu modelo.
  • Você não terá o controle total sobre como o CoreML está processando seu modelo. Se isso for importante para seu projeto, talvez queira usar diretamente o Metal Performance Shader
  • Não é open source =/

Atualmente quais os modelos suportados?

Com o CoreML você pode integrar uma grande variedade de modelos de Machine Learning em suas aplicações mobile.

No próprio site da Apple você poderá baixar os mais famosos modelos para identificação de imagens e detecção de objetos, como: Inception v3, MobileNet, SqueezeNet, ResNet50, VGG16

Modelos implementados no projeto showcase — iDeepVision

Apesar da aplicação mais comumente divulgada ser a detecção de objetos, podemos utilizar o CoreML em outras soluções, como por exemplo: Outras redes neurais do tipo CNN, RNN, Feed Forward, Regressão linear e logística, Árvores de Decisão, Suporte Vector Machines (SVM).

Como funciona o .mlmodel?

Como já dito anteriormente, para executar você precisa de um modelo no formato .mlmodel.

Primeiramente você precisa entender que para converter um modelo pré-treinado para mlmodel você irá usar a ferramenta coremltools, um pacote Python que irá facilitar sua vida. Então, tendo em vista que o mlmodel é baseado no modelo de serialização de arquivo protobuf. A Apple nos disponibiliza o arquivo de especificação completo do CoreML aqui.

Ao abrir o arquivo Model.proto, você verá algo parecido com a imagem abaixo:

import public “ArrayFeatureExtractor.proto”;
import public “CategoricalMapping.proto”;
import public “DictVectorizer.proto”;
import public “FeatureTypes.proto”;
import public “FeatureVectorizer.proto”;
import public “GLMRegressor.proto”;
import public “GLMClassifier.proto”;
import public “Identity.proto”;
import public “Imputer.proto”;
import public “NeuralNetwork.proto”;
import public “Normalizer.proto”;
import public “OneHotEncoder.proto”;
import public “Scaler.proto”;
import public “SVM.proto”;
import public “TreeEnsemble.proto”;
package CoreML.Specification;

Tudo o que for suportado pelo CoreML você verá neste arquivo. Dai você me pergunta: “É possível ver a arquitetura dos modelos de deep neural networks também para ver suas camadas e estrutura?” Sim! Absolutamente.

Perceba, portanto, que não estamos tratando de uma caixa preta, pois você conseguirá entender como o modelo funciona e quais os resultados esperados de sua execução.

Quer começar a criar aplicações mais inteligentes?

Estou disponibilizando no github um projeto completo, contando com os cinco modelos principais de detecção de objetos e identificação de imagens.

O projeto foi chamado de iDeepVision, fazendo uma alusão aos projetos apple ( “i” ) somado a proposta principal de visão computacional utilizando Deep Neural Netwoks.

https://github.com/jgabriellima/ideepvision

Deixe seu comentário e no próximo artigo, mostrarei a implementação passo a passo do projeto.

Prós e contras de usar o CoreML

Você precisa entender que o CoreML não faz mágica. Apesar de ser uma proposta muito interessante e que surgiu no momento certo da evolução tecnológica, nesta seção vou apresentar alguns prós e contras que lhe guiarão na melhor decisão sobre como utilizar o framework.

Prós:

  • Suporta a conversão de modelos construídos a partir das principais plataformas disponíveis no mercado, como: Keras e Caffe
  • Além de Deep Learning, suporta os modelos clássicos de Machine Learning
  • Fácil de integrar e usar, onde a principal limitação fica a critério da sua própria imaginação.

Contras:

  • Funciona apenas a partir do iOS 11
  • Você terá pouco controle sobre sua execução. A API é bastante básica e se limita em carregar o modelo e executá-lo.
  • A ferramenta de conversão coremltools, atualmente suporta apenas alguns pacotes de treinamento, deixando de fora o famoso e muito utilizado Tensorflow.

Já existiram outras propostas de embarcar os modelos de deeplearning!

E todas são muito interessantes! Algumas mais complexas de implementar e integrar em sua aplicação, entretanto merecem estar aqui por sua notoriedade e contribuição para a evolução da tecnologia.

Abaixo você verá a lista dessas principais propostas:

Considerações Finais

A apresentação oficial pode ser baixada aqui e aqui

Se você gostou, deixe um feedback! No próximo artigo vou mostrar a construção passo-a-passo da aplicação showcase iDeepVision para que você entenda com detalhes como implementar um novo projeto com um modelo de deep neural network embarcado.

 

About João Gabriel Lima

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *