Concrete Logo
Hamburger button

Machine Learning e iOS

  • Blog
  • 19 de Março de 2018

Machine Learning é uma área que tem se desenvolvido muito nos últimos anos. E é claro que, com isso, as oportunidades para que nós, desenvolvedores iOS, possamos integrar essas novidades aos nossos projetos aumentam. Neste post vamos conversar um pouco sobre as ferramentas disponibilizadas pela Apple para essa integração, desde o Accelerate até o Turi Create.

Eu acredito que há um universo de possibilidades ainda a serem exploradas na interseção entre a tecnologia móvel e Machine Learning (ML). Tomara que esse post te inspire ou ajude a encontrar um jeito legal de usar essa tecnologia nos seus apps. Vamos lá?

Accelerate e Metal

2017 foi um ano incrível pra quem se interessa por esse assunto. Algumas semanas antes do WWDC17 eu estava trabalhando em um projeto em que meus colegas e eu tínhamos que usar redes neurais convolucionais para classificar imagens. Conversando entre um bug e outro, nós começamos a nos perguntar o que nós usaríamos se resolvêssemos fazer o nosso modelo rodar em um iPhone. Foi aí que nós conhecemos o Accelerate e o Metal.

Com essas ferramentas, o que você precisa fazer é treinar o seu modelo usando o seu framework favorito para machine learning e, uma vez que você tenha o seu modelo pronto, é hora de usar o Accelerate ou Metal. Você precisa importar os pesos resultantes do treino no Xcode e usá-los para criar cada camada da sua rede.

Aqui tem um exemplo da Apple mostrando como usar uma rede convolucional usando Accelerate. O código está em C e os pesos estão sendo gerados aleatoriamente. Em um caso real seria necessário carregar os pesos para cada camada.

Aqui tem um exemplo de como você pode usar uma rede neural que reconhece dígitos escritos à mão usando Metal. O projeto é um app com um só ViewController no qual o usuário pode (1) testar a acurácia de um determinado modelo nos dados do MNIST; (2) desenhar um dígito e checar qual é o dígito reconhecido; e (3) selecionar se quer usar a rede Feed-Forward ou a rede de Deep Learning.

Se você baixar o projeto vai ver que os pesos e bias para as camadas estão em arquivos no formato .dat. Com esses dados no XCode você só precisa carregá-los nas camadas.

Para efetuar a predição para um dado input, você deve passar os dados por meio de cada camada até a camada final softmax.

 

Finalmente, basta transformar o resultado da rede em algo que seja legível para um humano e apresentar para o usuário.

Depois de estudar o Accelerate e o Metal, meus colegas e eu chegamos à conclusão de que era bastante trabalho para fazer a rede funcionar no app e nós imaginamos que a Apple deveria apresentar algumas melhorias no WWDC, uma vez que “Machine Learning” era um termo que estava em todos os lugares – e, a propósito, a Google tinha anunciado o TensorFlow Lite, que permite o uso de modelos treinados em TensorFlow nos apps Android.

Mal podíamos esperar pelo WWDC!

Core ML

Craig Federighi apresentando o Core ML no WWDC 2017

A Keynote do WWDC17 foi demais! E, particularmente para mim, a melhor parte foi o anúncio do Core ML, que estava muito além do que eu estava imaginando. Na mesma noite, meu amigo Aleph e eu começamos a colocar a mão na massa pra nos familiarizarmos com as novidades e escrevemos este tutorial.

Se você pretende usar Machine Learning nos seus apps, mas o Accelerate e o Metal pareceram muito trabalhosos e pouco sustentáveis, dá uma olhada nisso.

Com Core ML, você pode treinar o seu modelo em vários frameworks diferentes, como Keras, TensorFlow e Caffe, entre outros. Uma vez treinado o modelo, você usa o coremltools para converter o seu modelo para o formato .mlmodel, que pode ser importado no Xcode.

Com o modelo importado no Xcode, uma classe com o mesmo nome do modelo será gerada automaticamente e basta chamar o método prediction(input) dessa classe. “It just works”!

É claro que você vai encontrar algumas dificuldades para importar o modelo no Xcode ou para preparar os dados pra servir de input para o modelo, mas ainda assim a diferença para a quantidade de trabalho que você teria de fazer no Accelerate ou Metal é imensa.

E para aqueles que querem começar e não sabem exatamente como criar um modelo, dá pra achar alguns modelos pré-treinados aqui e aqui. O primeiro link é a página oficial da Apple com alguns modelos famosos já exportados para o formato .mlmodel e o segundo é um repositório no GitHub com vários modelos criados por desenvolvedores do mundo todo com o qual você pode contribuir. Dá uma olhada!

Agora, se nenhum desses modelos resolve o seu problema e você já tem os dados pra treinar mas não sabe como criar um modelo, a próxima seção é pra você!

(Eu estou começando a parecer com um comercial mal feito, mas eu fiquei realmente animado com isso tudo!)

Turi Create

Os meses se passaram e tudo ia muito bem. Então, em uma tarde qualquer, nos últimos dias da nossa primavera, eu estava dando uma olhada nos updates do GitHub enquanto compilava o projeto e alguém tinha dado uma estrela pra este projeto, chamado Turi Create.

Se você acha que toda essa história de Machine Learning é simplesmente muito complicada, olha só isso!

Nas palavras deles (tradução minha):

“Turi Create simplifica o desenvolvimento de modelos customizados de machine learning. Você não precisa ter um especialista em machine learning para adicionar recomendações, detecção de objetos, classificação de imagens, similaridade de imagens ou classificação de atividade ao seu app.”

Após o lançamento do Core ML, muitos desenvolvedores iOS começaram a estudar Machine Learning, mas realmente a área é enorme e é necessário muito estudo e muita prática até ser capaz de criar os seus próprios modelos.

E se eu dissesse que você pode criar um modelo baseline que você pode começar a usar rapidamente nos seus apps e validar a sua ideia até que você seja capaz de criar o seu próprio modelo ou encontrar um cientista de dados para o seu time? É isso que o Turi Create permite fazer.

Modelos que podem ser criados usando o Turi Create, que estão no README.md

Com poucas linhas de código o seu modelo (um modelo decente) está criado, treinado e importado para o formato .mlmodel.

O projeto é open source, ou seja, você pode contribuir encontrando e reportando bugs, criando issues e até ajudando a consertá-los.

Pessoalmente, eu acho que existe um mundo de possibilidades na interseção entre Machine Learning e Mobile e nunca houve um momento melhor para ser um desenvolvedor que curte trabalhar com essas duas áreas.

2017 foi um ano e tanto para nós e eu espero que nós possamos criar bastante coisa legal usando essas tecnologias este ano e nos próximos. Estou bastante animado pra isso! Se você estiver também, avisa pra gente o que você tem feito =) Ficou alguma dúvida ou tem algum comentário/sugestão? Aproveite os campos abaixo. Até a próxima!

Aqui na Concrete estamos sempre de olho no que há de mais novo em Tecnologia e como podemos aplicar as novidades nos nossos projetos. Quer trabalhar com a gente? Clique aqui.

Este post foi originalmente publicado (em inglês) no Medium pessoal do autor. Clique aqui para ler.