Como criar um detector de objetos em uma imagem usando CoreML
Primeiro, o que é CoreML? — Na WWDC de 2017 a Apple apresentou uma nova proposta: A embarcação em modelos de inteligência artificial em seus apps, por meio de seu novo SDK, o CoreML, que é muito mais acessível e simples que outras versões que existiam. Com a nova ferramenta CreateML, é possível criar e treinar modelos de transcrição de voz, de detecção de objetos, de análise de dados, entre outros.
Mas nesse post a gente vai explorar a funcionalidade mais usada: A de detecção de objetos em uma imagem.
Índice
- Parte 1 – Criação do modelo de detecção de objetos
- Parte 2 – Como aplicar seu modelo em um projeto iOS
Criação do modelo de detecção de objetos
Construção do banco de imagens/dataset
No meu projeto, eu precisava identificar acessórios como óculos de sol e brincos numa pessoa. Agora como ele iria identificar esses objetos se eu não disse pro meu programa o que esses objetos são e as variedades que ele pode ter? É preciso apresentar muitas imagens (e bote muitas nisso) para ensinar o programa o que são os objetos.
Para isso precisamos fazer o seguinte:
- Antes de fazer a busca por imagens, decida logo qual é o conjunto de classes dos objetos que você deseja identificar. Podem ser tanto acessórios numa pessoa, placas de trânsito ou até mesmo raças de cachorro. Obs.: Sempre tente objetos com classes mais parecidas, para o modelo ficar mais completo, e não uma mistura de tipos de árvore e tipos de pizza, por exemplo.
- Crie uma nova pasta chamada "dataset" para armazenar as imagens que você vai procurar.
- Para cada classe que você escolheu salve 30 imagens (no mínimo) que contenham o objeto que você quer. Por exemplo, se uma das minhas classes é "óculos de sol" numa pessoa, tenho que salvar 30 imagens de pessoas usando óculos de sol.
Obs.: Tenha noção do seguinte: quanto maior o número de classes mais vai ser demorada a criação do modelo.
Agora que temos o nosso dataset, o programa precisa saber onde estão os objetos nas imagens, né?
Para isso, vamos precisar usar o Cloud Annotations da IBM
Cloud Annotations
Se você ainda não tem uma conta da IBMCloud, você terá que fazer (gratuitamente) para usufruir o site.
- Clique em "Start a new project" para criar o seu projeto.
- Após escrever o nome do seu projeto, escolha o tipo de anotação. Como queremos identificar simples objetos numa cena, escolha a opção Localization.
- Depois de confirmar, arraste e solte todas as imagens do seu dataset no site. Depois de um tempinho fazendo o upload de todas as imagens, a tela é para estar um pouco parecida com a de baixo.
- Note que seu mouse agora é uma marcação e que a imagem que aparece tem óculos e brincos. Clicando e segurando o mouse, você consegue delimitar o espaço de identificação do objeto. Para os óculos de sol é desse formato:
- Perceba que no canto superior direito apareceu um novo item: Untitled Label. Edite e escreva o nome da classe, à sua escolha. (Use o mesmo nome para todos os objetos da mesma classe)
- Faça o mesmo processo para cada objeto identificado na cena, em todas as imagens do dataset.
- Quando terminar de fazer todas as marcações, é preciso clicar em File e depois em Exportar como Create ML para baixar o arquivo .zip final.
- Descomprima o arquivo e perceba que ele possui todas as imagens e um arquivo chamado _annotations.json. Esse arquivo possui todas as marcações que fizemos no site.
Criando o modelo no Create ML
- Abra o Xcode e percorra o seguinte caminho:
- Após abrir o Create ML selecione New Document para criar o seu novo projeto. Como estamos criando um modelo de recognição de objetos, selecione o template Object Detector
- Arraste a pasta que você exportou do Cloud Annotations (a que contém o arquivo _annotations.json) no espaço Training Data.
- Obs.: Você pode mudar o número máximo de iterações que seu projeto vai ter. Quanto maior for o número, mais bem treinado seu modelo vai ser, porém ele demorará mais tempo para ser computado.
- No meu projeto foi um total de 323 itens de treinamento de 11 classes bastante diferentes e escolhi o máximo de iterações (99.999) para computar e durou aproximadamente sete horas.
- Agora é só clicar em Train no canto superior direito e esperar seu modelo ficar pronto.
Depois de concluir, você pode se divertir testando seu modelo no próprio Create ML ou ir logo exportando o modelo ao seu projeto.