Deep Learning::Introdução ao Novo Coneccionismo

keras-logo-small-2018
Página de Introdução ao Deep Learning

Redes Neurais Convolucionais (CNNs ou ConvNets) são um tipo especial de redes neurais de múltiplas camadas projetadas para reconhecer padrões visuais diretamente de pixels de  imagens utilizando um mínimo de preprocessamento.

Por que CNNs produziram uma revolução na Visão Computacional?  CNNs deitaram por terra o tradicional modelo em passos de abstração crescente da pipeline de processamento de imagens: filtragem, simplificação, extração de caracterísiticas e classificação. CNNs podem ser treinadas para fazer isso tudo de forma integrada, com resultados muito superiores.

Por que os resultados de CNNs são superiores? A extração de caracterísitcas, no modelo tradicional, é estática e dependente de algoritmos prontos. Alguns deles são extremamente complexos como SIFT, SURF ou ORB, e que, para descrever o conteúdo das imagens, extraem determinados tipos de características dessas imagens ou de partes delas resultantes de uma simplificação (ex.: segmentação) realizada anteriormente.  Extratores de caractercterísitcas não são adaptativos: eles são algoritmos projetados para funcionarem de uma determinada maneira com muito esforço por pessoas ao longo de anos de pesquisa. Se o conjunto de extratores de caracterísitca que você está usando para descrever o conteúdo de suas imagens não é capaz de gerar características discriminantes para o seu problema, isto é, que permitam distingüir adequadamente entre as diferentes categorias de imagem em seu problema particular (ex.: caminhões, motos e bicicletas), não adianta nada o resto de sua pipeline (filtros, simplificadores, classificadores) ser maravilhoso. Nenhum classificador vai ser capaz de classificar adequadamente imagens que tenham sido descritas com base em conjuntos de características que não conseguem dizer algo de útil para diferenciar entre suas categorias.  As camadas convolucionais das CNNs, por outro lado, aprendem descritores de características específicos, customizados para os exemplos de treinamento que você fornece ao treinar a rede.  Isso acontece de forma integrada aos outros passos do processo de interpretação ou de classificação de uma imagem. Dessa forma uma CNN com a arquitetura correta e que tenha sido adequadamente treinada substitui uma pipeline de processamento de imagens inteira.

O que vamos aprender nesta parte da Disciplina? Nós vamos entender o que é uma CNN e o que a diferencia das Redes Neurais tradicionais. Vamos também aprender a usar algumas ferramentas de desenvolvimento de CNNs e analisar vários tipos de arquiteturas de CNNs e descobrir para que tipos de problemas servem. O enfoque será prático, voltado à resolução de problemas reaproveitando código e modelos existentes. Apresentaremos a teoria sempre que for necessário.

Por que escolhemos Keras?

O objetivo desta disciplina é ensinar Visão Computacional e não tópicos avançados em redes convolucionais. CNNs são ferramentas e não o objetivo de aprendizado. Keras é uma biblioteca de Redes Neurais em Python, simples de usar construída sobre plataformas consagradas como Theano e TensorFlow e que permite a prototipagem rápida de ideias e modelos: é o amniente ideal para o desenvolvedor de aplicações usando CNNs realizar a prototipagem e adaptação com modelos existentes. A não ser que você esteja realizando alguma pesquisa de ponta em modelos de redes neurais, Keras vai lhe prover todos os recursos de forma rápida. Tem a vantagem de possuir muitos exemplos, tutoriais e coisas prontas para você reusar. 

Outra Plataformas: Material do LAPIX/INCoD

Se você está procurando usar outras plataformas, aqui há material e tutoriais para as principais:

  1. Deep Learning com OpenCV: DNN
  2. Deep Learning::Tensor Flow Puro
  3. Deep Learning::PyTorch & fast.ai

Se você não tem um bom computador em casa, veja aqui as alternativas:

  1. Deep Learning::Usando a Nuvem para seus Trabalhos

Olhe também nossa seção abaixo Como executar na Nuvem?

Tutoriais de Keras

Intros!

Nesta seção vamos dirigir exercícios introdutórios ao uso de Keras com TensorFlow. Se você deseja outra coisa, procure por outros exemplos mais abaixo.

  1. Redes Neurais Tradicionais: vamos fazer alguns testes usando o simulador de TensorFlow
  2. Satya Mallick: Deep learning using Keras – The Basics
  3. Medium::Understanding Convolutional Neural Networks(CNNs)
  4. CVTricks Keras tutorial: Practical guide from getting started to developing complex deep neural network
  5. Tutorial passo-a-passo do Towards Data Science: Building a Convolutional Neural Network (CNN) in Keras
  6. Tutorial bem introdutório do Towards Data Science: Build Your Own Convolution Neural Network in 5 mins – An introduction to CNN and code (Keras)
  7. PyImagesearch: Keras Tutorial: How to get started with Keras, Deep Learning, and Python – Tutorial interessante: vai logo para o uso de um conjunto de treinamento customizado do aluno
  8. TensorFlow: Learn and use machine learning
  9. DataCamp: Keras Tutorial: Deep Learning in Python
  10. Medium::Convolutional Neural Networks: Training a Convolutional Network from Scratch (pun totally intended)
  11. Aprendizagem de Máquina é Divertido! Parte 3 – Deep Learning e Redes Neuronais Convolutivas – Um raríssimo texto em Português do Prof. Josenildo Costa da Silva do IFMA)

Para começar

Aqui há bastante material focando em Keras…

  1. Deep Learning::Instalando Keras
    Para usar Keras adequadamente você vai necessitar de TensorFlow:

    1. Deep Learning::Tensor Flow::Instalando em Linux
    2. Deep Learning::Preparando seu Computador para usar TensorFlow em GPU
  2. Deep Learning::Callbacks para Salvar Resultados Intermediários e Visualizar na Web com TensorBoard

tensorBoard-grafico

TensorBoard sobre resultados gerados com Keras

Preparando seu Computador

  1. Medium::Setting up a Ubuntu 18.04.1 LTS system for deep learning and scientific computing
  2. Towards Data Science::How to Setup a Python Environment for Machine Learning

Modelos e Arquiteturas

Adquira uma visão panorâmica:

  1. Revisão dos Modelos: The History Began from AlexNet: A Comprehensive Survey on Deep Learning Approaches, 2018
  2. Revisão focada em Imagens: Deep Convolutional Neural Networks for Image Classification: A Comprehensive Review. Waseem Rawat and Zenghui Wang. Neural Computation
    Volume 29 | Issue 9 | September 2017, p.2352-2449
  3. Medium: CNN Architectures: LeNet, AlexNet, VGG, GoogLeNet, ResNet and more ….
  4. CV-Tricks: ResNet, AlexNet, VGGNet, Inception: Understanding various architectures of Convolutional Networks

Visualização de Representação Interna e Resultados Intermediários de CNNs

No processamento de imagens tradicional estamos acostumados a aplicar convoluções específicas, pré-definidas, sobre imagens e imediatamente ver os resultados. A título de exemplo, a figura abaixo mostra diferentes combinações de Gaussiano e Laplaciano sobre uma imagem.

LaplacianofGaussianEdgeDetection

Em CNNs isso é diferente: Redes neurais backpropagation foram durante muitos anos criticadas por serem soluções caixa-preta onde a representação interna do que foi aprendido não é acessível.  CNNs, no entanto, aprendem convoluções customizadas e o resultado dessas convoluções pode ser visualizado! Basta acessar as ativações das diferentes camadas da rede, para diferentes imagens de entrada. Abaixo alguns exemplos de como fazer isto:

  1. Towards Data Science::Understanding your Convolution network with Visualizations
  2. Se você deseja visualizar representações intermediárias e ativações, aqui há toques de como fazer isto em Keras puro: Towards Data Science::Visualizing intermediate activation in Convolutional Neural Networks with Keras
  3. Aula: Stanford CS231n::Visualizing what ConvNets learn
      1. Veja todas as 16 aulas aqui: Lecture Collection | Convolutional Neural Networks for Visual Recognition (Spring 2017) – Stanford University School of Engineering

Adiante você pode ver a imagem de um triângulo e as representações que a rede neural convolucional aprendeu para este triângulo em diferentes camadas (são figuras do segundo material acima – lá há mais detalhes e ilustrações:

visu0

visu1

visu2

Stanford CS231n::Lecture 12 | Visualizing and Understanding:

Links de Visualização de Representação em Redes

  1. t-SNE visualization of CNN codes (t-Distributed Stochastic Neighbor Embedding (t-SNE) é uma forma de quantificação de vetores não linear)
  2. deepvis::Understanding Neural Networks Through Deep Visualization
    1. Git da ferramenta: https://github.com/yosinski/deep-visualization-toolbox
  3. Visualização do processo de treinamento (código de CNN em JavaScript) de Andrej Karpathy: ConvNetJS CIFAR-10 demo
    1. API JS para CNNs de Karpathy: https://cs.stanford.edu/people/karpathy/convnetjs/
    2. Git: https://github.com/karpathy/convnetjs

Links

Keras Básico

  1.  Keras: The Python Deep Learning library

Aprendendo a Melhor Arquitetura: Neural Architecture Search (NAS)

  1. Artigo original sobre Neural Architecture Search (NAS): Barret Zoph, Vijay Vasudevan, Jonathon Shlens, Quoc V. Le: Learning Transferable Architectures for Scalable Image Recognition, ArXiv, 2017
  2. Towards Data Science::AutoKeras: The Killer of Google’s AutoML
  3. Towards Data Science::Everything you need to know about AutoML and Neural Architecture Search
  4. Artigo obre AutoKeras: Auto-Keras: Haifeng Jin, Qingquan Song, Xia Hu: Efficient Neural Architecture Search with Network Morphism, ArXiv, 2018
  5. Página Oficial do Autokeras: http://autokeras.com/
  6. Github do Autokeras: https://github.com/jhfjhfj1/autokeras
  7. NAS para Tensor Flow: Efficient Neural Architecture Search via Parameter Sharing
  8. NAS para Pytorch: PyTorch implementation of “Efficient Neural Architecture Search via Parameters Sharing” 

Como executar na Nuvem?

Montar a sua estação de processamento em GPU para Deep Learning é algo caro e um investimento com altíssima taxa de depreciação, considerando-se a velocidade com a qual novos modelos de GPU são lançados e a taxa com que novos modelos, cada vez maiores, de redes neurais, são desenvolvidos. Uma estação do preço de um carro daqui há dois anos pode estar tão depreciada que não servirá para mais nenhuma pesquisa séria. Por que não alugar um espaço com hardware de última geração para desenvolver o que você quer?

Uma série de provedores de serviços em nuvem vem oferecendo a possibilidade de desenvolver, treinar e executar CNNs em susas nuvens, geralmente em ambientes especiais, separados dos outros serviços em nuvem. Características:

  1. Custos e Uso Gratuito: Praticamente todos oferecem pacotes grátis para você testar ou uso gratuito em partes do processo de desenvolvimento, como por exemplo modelagem e debugação. Alguns, como GoogleCloud, dão crédito inicial para quem tem conta Google, outros possuem sistema de créditos em troca de divulgação e propaganda, como Paperspace. Alguns tem uma armadilha associada: as redes serão parcialmente baseadas em bibliotecas proprietárias e só vão rodar naquela nuvem, obrigando você a continuar alugando os serviços depois ao invés de fazer o deply em sua máquina no seu lab. Olhe bem o que vai usar.
  2. Ferramentas de desenvolvimento: a maioria oferece IDEs de desenvolvimento baseadas em Jupyter Notebooks. Uma exceção é IBM Watson Studio, que oferece uma ferramenta de programação visual para modelagem, estilo Scratch ou Blockly.
  3. Frameworks: Supostamente todos deveriam suportar todos os principais frameworks, mas isso é variável. Google vai fazer propaganda de TensorFlow e tornar o uso desse mais fácil, por exemplo. Em algumas palatformas você tem de instalar tudo o que sua máquina virtual vai usar, outras geram máquinas virtuais com tudo pré-instalado.

GoogleCloud

  1. Usando Google Colaboratory:
    1. Hackernoon: Train Your Machine Learning Models on Google’s GPUs for Free — Forever
    2. Medium::Using Google Colab for MNIST with fastai v1
  2. Se você tem uma conta Google, você tem direito a 300 horas de processamento na Google Cloud:
    1. Como estamos usando TensorFlow, é possível inclusive usar a nova arquitetura de TPU da Google: https://cloud.google.com/tpu/
    2. https://www.blog.google/products/google-cloud/google-cloud-offer-tpus-machine-learning/
    3. https://blog.goodaudience.com/how-to-use-google-cloud-tpus-177c3a025067?gi=37469eca628c
    4. https://www.theregister.co.uk/2018/06/20/google_cloud_tpus/
    5. Na Internet está cheio de turoriais de como usar TensorFlow pela interface

Paperspace

Paperspace tem sido bastante discutido e citado.  Tem suporte especial aos cursos do fast.ai.

  1. Site: https://www.paperspace.com/
  2. Ambiente de desenvolvimento: Gradient
  3. Tutorial -> Towards Data Science: How to use Paperspace to train your Deep Neural Networks

BigML

BigML é diferente dos outros provedores em nuvem pelo fato de não estar associado a nenhuma grande empresa de processamento de dados ou fabricante de computadores, sendo uma empresa voltada a esse fim. Em função disso possui vários programas acadêmicos que se deve explorar e também a vantagem de ser agnóstico a plataforma e framework: Aqui você pode desenvolver, treinar e rodar tudo e depois levar para casa.

  1. Site: https://bigml.com/
  2. BigML for Education

Amazon Web Services – AWS

  1. AWS
    1. Oferece suporte especial a TensorFlow
  2. Amazon EC2
  3. Amazon SageMaker: A fully-managed platform that enables developers and data scientists to quickly and easily build, train, and deploy machine learning models at any scale and removes all the barriers that typically slow down developers who want to use machine learning.
    1. SageMaker oferece uma grande variedade de configurações de hardware virtual para você usar: https://aws.amazon.com/sagemaker/pricing/instance-types/
  4. Amazon Machine Learning Developer Guide

FloydHub

FloydHub é uma plataforma para desenvolvimento e execução de CNNs extremamente simples:

  1. Site: https://www.floydhub.com/
  2. FloydHub Workspace é uma IDE de desenvolvimento online (baseada em Jupyter): https://www.floydhub.com/product/build
  3. Suporta TensorFlow, Keras, Caffe e Pytorch

Microsoft Azure Machine Learning Studio

  1. Site: https://azure.microsoft.com/en-us/services/machine-learning-studio/
  2. Possui uma ferramenta: Azure AI -Artificial intelligence productivity for virtually every developer and scenario
  3. Exemplo: Defect detection with image analysis

IBM Watson Studio

  1. IBM’s experiment-centric deep learning service within Watson Studio allows data scientists to visually design their neural networks and scale out their training runs while auto-allocation means paying only for the resources utilized.
  2. Tutorial: Generate restaurant reviews using deep learning

Disscussão dos Provedores

  1. Medium: AWS vs Paperspace vs FloydHub : Choosing your cloud GPU partner
  2. Top 5 Machine Learning-as-a-Service providers

Videos Introdutórios

Se você não sabe nada acerca de Redes Neurais, assista este video primeiro, que vai levá-lo, em um exemplo ultrasimples, do Zero Absoluto até Redes com Imagens:

Estes são videos de cursos de Redes Convolucionais, mas começam do be-a-bá também:

Veja todas as 16 aulas aqui: Lecture Collection | Convolutional Neural Networks for Visual Recognition (Spring 2017) – Stanford University School of Engineering

Páginas Correlatas neste Site

Reconhecimento de Padrões

  1. Reconhecimento de Padrões::Técnicas Sub-simbólicas: Redes Neurais
  2. Reconhecimento de Padrões::Técnicas Simbólicas: Aprendizado de Máquina

Copyright © 2018 Aldo von Wangenheim/INCoD/Universidade Federal de Santa Catarina

188
Unique
Visitors
Powered By Google Analytics

Sobre o Autor

possui graduação em Ciências da Computação pela Universidade Federal de Santa Catarina (1989) e Doutorado Acadêmico (Dr. rer.nat.) em Ciências da Computação pela Universidade de Kaiserslautern (1996). Atualmente é professor Associado da Universidade Federal de Santa Catarina, onde é professor do Programa de Pós-graduação em Ciência da Computação e dos cursos de graduação em Ciências da Computação e Sistemas de Informação. É também professor e orientador de doutorado do Programa de Pós-Graduação em Ciências da Computação da Universidade Federal do Paraná - UFPR. Tem experiência nas áreas de Produção de Conteúdo para TV Digital Interativa, Informática em Saúde, Processamento e Análise de Imagens e Engenharia Biomédica, com ênfase em Telemedicina, Telerradiologia, Sistemas de Auxílio ao Diagnóstico por Imagem e Processamento de Imagens Médicas, com foco nos seguintes temas: analise inteligente de imagens, DICOM, CBIR, informática médica, visão computacional e PACS. Coordena o Instituto Nacional de Ciência e Tecnologia para Convergência Digital - INCoD. É também Coordenador Técnico do Sistema Integrado Catarinense de Telemedicina e Telessaúde (STT/SC), coordenador do Grupo de Trabalho Normalização em Telessaúde do Comitê Permanente de Telessaúde/Ministério da Saúde e membro fundador e ex-coordenador da Comissão Informática em Saúde da ABNT - ABNT/CEET 00:001.78. Atualmente também é membro da comissão ISO/TC 215 - Health Informatics. Foi coordenador da RFP6 - Conteúdo - do SBTVD - Sistema Brasileiro de TV Digital/Ministério das Comunicações. Foi o criador e primeiro Coordenador do Núcleo de Telessaúde de Santa Catarina no âmbito do Programa Telessaúde Brasil do Ministério da Saúde e da OPAS - Organização Pan-Americana de Saúde e criador do Núcleo Santa Catarina da RUTE - Rede Universitária de Telemedicina.