Segmentação de Imagem parte 2: Mask R-CNN

Álvaro Fernando
Álvaro Fernando, Engenheiro de Software Fernando
4 de Maio de 2018
  • #tecnologia

Nessa segunda parte continuamos com a experimentação de ferramentas de segmentação de imagem, e o foco da vez é algo bem recente, com intensa pesquisas e com novidades diárias tanto da academia quanto do mercado.

Utilizando o Mask R-CNN

O projeto Mask R-CNN é uma implementação do artigo publicado, com o mesmo nome, pelo grupo de pesquisa em inteligência artificial do Facebook. Utiliza Python 3, Keras, e TensorFlow.

Os passos para instalar são simples:

  1. Criar um ambiente virtual com python 3.5.2
  2. Instalar as dependências
  3. Clonar o repositório Mask R-CNN
  4. Instalar o pacote pycocotools
  5. Baixar os pesos de uma rede pré-treinada na pasta do projeto
  6. Testar!

Desafio pela frente: uma das dependências é exatamente o TensorFlow e a sua última versão era até então (início de março de 2018) a release candidate 1.6.0 e nesse momento só havia suporte para o CUDA 9.0. Decidimos portanto compilar o TensorFlow direto do código fonte, modificando os arquivos de BUILD para os caminhos corretos das versões das bibliotecas que o CUDA possui, apontando para a instalação na nossa máquina de teste. A modificação foi simples, por exemplo:

De “cuda/lib/libcudart.so.9.0” para “cuda/lib64/libcudart.so.9.1”
De “cuda/lib/libcudart.so.9.0” para “cuda/lib64/libcudart.so.9.1”
De “cuda/lib/libcudart.so.9.0” para “cuda/lib64/libcudart.so.9.1”

Os commits estão neste fork.

Depois seguimos os passos do tutorial da própria documentação do TensorFlow. Atenção para as especificações de caminho passadas no script de ./configure. Seguem um exemplo dos parâmentos que passamos. As respostas que estão em branco foram as que deixamos com a resposta padrão e o caminho ~/tensorflow/bin/python está apontando para o virtualenv que criamos para esse teste:

~/python-workspace/tensorflow$ ./configure
You have bazel 0.11.1 installed.
Please specify the location of python. [Default is ~/tensorflow/bin/python]:
Traceback (most recent call last):
File “<string>”, line 1, in <module>
AttributeError: module ‘site’ has no attribute ‘getsitepackages’
Found possible Python library paths:
~/tensorflow/lib/python3.5/site-packages
Please input the desired Python library path to use. Default is [~/tensorflow/lib/python3.5/site-packages]
Do you wish to build TensorFlow with jemalloc as malloc support? [Y/n]: y
jemalloc as malloc support will be enabled for TensorFlow.
Do you wish to build TensorFlow with Google Cloud Platform support? [Y/n]: n
No Google Cloud Platform support will be enabled for TensorFlow.
Do you wish to build TensorFlow with Hadoop File System support? [Y/n]: n
No Hadoop File System support will be enabled for TensorFlow.
Do you wish to build TensorFlow with Amazon S3 File System support? [Y/n]: n
No Amazon S3 File System support will be enabled for TensorFlow.
Do you wish to build TensorFlow with Apache Kafka Platform support? [y/N]: n
No Apache Kafka Platform support will be enabled for TensorFlow.
Do you wish to build TensorFlow with XLA JIT support? [y/N]: n
No XLA JIT support will be enabled for TensorFlow.
Do you wish to build TensorFlow with GDR support? [y/N]: n
No GDR support will be enabled for TensorFlow.
Do you wish to build TensorFlow with VERBS support? [y/N]: n
No VERBS support will be enabled for TensorFlow.
Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]: n
No OpenCL SYCL support will be enabled for TensorFlow.
Do you wish to build TensorFlow with CUDA support? [y/N]: y
CUDA support will be enabled for TensorFlow.
Please specify the CUDA SDK version you want to use, e.g. 7.0. [Leave empty to default to CUDA 9.0]: 9.1
Please specify the location where CUDA 9.1 toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:
Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 7.0]: 7.1
Please specify the location where cuDNN 7 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:
Do you wish to build TensorFlow with TensorRT support? [y/N]:
No TensorRT support will be enabled for TensorFlow.
Please specify a list of comma-separated Cuda compute capabilities you want to build with.
You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus.
Please note that each additional compute capability significantly increases your build time and binary size. [Default is: 6.1]
Do you want to use clang as CUDA compiler? [y/N]:
nvcc will be used as CUDA compiler.
Please specify which gcc should be used by nvcc as the host compiler. [Default is /usr/bin/gcc]:
Do you wish to build TensorFlow with MPI support? [y/N]:
No MPI support will be enabled for TensorFlow.
Please specify optimization flags to use during compilation when bazel option “ — config=opt” is specified [Default is -march=native]:
Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]:
Not configuring the WORKSPACE for Android builds.
Preconfigured Bazel build configs. You can use any of the below by adding “ — config=<>” to your build command. See tools/bazel.rc for more details.
 — config=mkl # Build with MKL support.
 — config=monolithic # Config for mostly static monolithic build.
Configuration finished

Continuando com o tutorial da documentação do TensorFlow, verificamos que o processo de instalação (com o bazel) pode demorar um pouco e consumir muito da sua máquina. Por aqui, consumiu todos os núcleos e cerca de 2GB de RAM.

Terminada a instalação, então é só testar o script de Hello World do TensorFlow:

### Python
import tensorflow as tf
hello = tf.constant(‘Hello, TensorFlow!’)
sess = tf.Session()
print(sess.run(hello))

SUCESSO!
SUCESSO!

A instalação do pycocotools é bem tranquila. Utilizamos a versão 2.0.0:

pip install pycocotools

Seguimos com os passos e concluímos a instalação. Realmente é incrível como as máscaras são aplicadas às imagens. Veja alguns exemplos:

Depois, semelhante ao YOLO, queríamos testar a detecção das máscaras em um vídeo, seguindo os exemplos desse projeto e vídeo:

E conseguimos também! Bem suave. No nosso ambiente, o vídeo com a detecção de máscaras em “tempo real” ficou bem lenta: cerca de 1,5 a 2 frames por segundos, o que já é muito bom, comparando com o que o pessoal do FAIR têm relatado, conseguindo 5–10 de FPS. Isso depende da sua GPU, claro. Como o FPS estava bem baixo, só tiramos um print da detecção pela Webcam, mas ficou bem louco, empolgante:

Conclusão

Essa foi a nossa brincadeira com YOLO e Mask R-CNN. That’s all folks!

https://media.giphy.com/media/upg0i1m4DLe5q/giphy.gif

PS: Só para registrar, segue um conjunto das melhores mensagens de commit do projeto que falamos na parte 1 dessa séria, darknet:


PS2: Usem emoji em vossos commits também. kkkkkkkkk

  • #tecnologia
Álvaro Fernando
Álvaro Fernando, Engenheiro de Software Fernando

qual é o seu desafio para a gente?

hello@novatics.com.br
Voltar ao topo