Deep Learning na Unb (Brasília) - Parte 1 - Lição 1

[ Lição 2 >>> ]

Lição 1: Classificação de imagem (23/10/2019 - UnB - Brasília)

Este tópico permite que os membros do Grupo de IA da UnB (Brasília) estudem coletivamente (em reuniões presenciais e on-line) a lição 1 (parte 1) do curso fastai, mas de um jeito aberto para ajudar também pelas questões, respostas e pelos recursos publicados todos os leitores em português interessados em DL.

Portanto, o idioma deste segmento é principalmente o português (o inglês quando permite evitar traduções inúteis).

Use este tópico para fazer e responder às perguntas da lição 1 (parte 1), mas antes de postar, leia o tópico “How to ask for help”.

Curso fastai 2019 (parte 1)

Pré Requisitos

  1. Python - Pelo menos, 1 ano de codificação, especialmente em Python (recursos de aprendizado recomendados em Python)
  2. Numpy, Pandas e Matplotlib - Sabendo codificar também com Numpy e Pandas
  3. GPU e Terminal - Usando um GPU com o framework fastai e os cadernos do curso
  4. Jupyter Notebook - Sabendo usar um Jupyter Notebook and os principais shortcuts:
  5. Fórum fastai - Cadastre-se no fórum fastai
  6. Fórum do grupo - aqui :slight_smile:
  7. Primeiro vídeo - Assistindo ao primeiro vídeo do curso antes da turma (playlist youtube ou no site fastai)
  8. Recursos da lição 1 - Ler a lista dos recursos sobre a lição 1 (ao final deste parágrafo)
  9. Blog - Conselho muito de ter um blog e publicar artigos sobre o seu aprendizado do DL. Isso ajuda muito a entender e muito para se fazer conhecer ajudando no mesmo tempo as outras pessoas (no medium.com é fácil, de graças, já há uma comunidade internacional sobre o DL e é bem indexado pelo Google).
  10. Inglês - Compreendendo o inglês dos vídeos, do fórum e dos documentos online.

Lição 1

O resultado mais importante da lição 1 é que treinamos um classificador de imagens que pode reconhecer raças de animais de estimação com precisão de ponta. A chave para esse sucesso é o uso da transferência de aprendizado (transfer learning), que será uma plataforma fundamental para grande parte deste curso. Também veremos como analisar o modelo para entender seus modos de falha. Nesse caso, veremos que os locais em que o modelo está cometendo erros estão nas mesmas áreas que mesmo os especialistas em criação de animais podem cometer erros.


Training and analyzing a pet breed classifier

Discutiremos a abordagem geral do curso, que é um tanto incomum por ser de cima para baixo em vez de de baixo para cima. Então, em vez de começar com a teoria, e apenas chegarmos a aplicações práticas mais tarde, começamos com aplicações práticas e, gradualmente, nos aprofundamos cada vez mais nelas, aprendendo a teoria conforme necessário. Essa abordagem exige mais trabalho para os professores se desenvolverem, mas foi demonstrada para ajudar muito os alunos, por exemplo, na pesquisa educacional em Harvard por David Perkins.

Também discutimos como definir o hiperparâmetro mais importante ao treinar redes neurais: a taxa de aprendizado, usando o fantástico método localizador de taxas de aprendizado de Leslie Smith.

Principais links sobre a lição 1

Other resources

How to scrape images

Ementa da turma do 23/10/2019 (lição 1: Classificação de imagem)

  1. [ 15mn ] Metas do curso, do grupo, logística, canais de estudo e apresentação do mentor/apoiador (Pierre)
  2. [ 10mn ] IA e Deep Learning
  3. [ 15mn ] Fastai course, Framework fastai e Pytorch
  4. [ 10mn ] Projetos do grupo até dezembro (threads “Share your work here”, “Puting the Model Into Production: Web Apps”)
  5. [ 15mn ] Pré requisitos 1/2 (Python, Numpy, Pandas, Matplotlib, Jupyter Notebook)
  6. [ 15mn ] Pré requisitos 2/2 (fastai v1 em um GPU online, Terminal)
  7. [ 10mn ] Pontos-chave do primeiro curso
  8. [ 1h30mn ] Lição 1: sabendo criar um classificador de imagens

Recursos

Video Timeline

Pré requisitos

Para beneficiar dessa primeira turma, é melhor estudar os pré requisitos antes (parágrafo “Pré Requisitos” deste post). Em particular,

  • Instalar Anaconda no seu computador para ter Python 3 e Jupyter Notebook instalados.
  • Aprender a usar um Jupyter Notebook (tutorial 1 e 2) e um Terminal.
  • Rodar o notebook “CS228 Python Tutorial” para aprender o Python, Numpy e Matplotlib.
  • Instalar fastai v1 em um GPU online usando seja o tutorial GPC, seja o do Colab.

Também, recomendo assistir pelo menos uma vez ao video da lição 1 antes da turma.

Projetos em DL

Veja este post.

Próximas turmas

Coloquei online o notebook lesson1-pets_essential.ipynb.

Para alcançar uma precisão de classificação de 94% em 37 classes de imagens de gatos e cães (mas seria o mesmo com quase todos os conjuntos de dados de imagens a serem classificados), estas são as poucas linhas de código suficientes gracas ao Transfer Learning e a um Framework de DL tipo fastai.

[ EDIT 24/10/2019 ]: para baixar um dataset de uma competição Kaggle, a gente precisa cadastrar-se no site, aceitar as regras da competição e usar a API Kaggle. No início deste notebook lição3-planeta.ipynb, há todas as informações e códigos necessários por isso.


Para aqueles que desejam criar um classificador de imagens até a próxima semana, usando o notebook lesson1-pets.ipynb da lição 1 e datasets do Kaggle, veja este post no medium: “fast.ai: How I built a deep learning application to detect invasive species in just 1 day (and for $12.60)”.

E mais um post sobre o Quick_Draw competition que fala do uso do Kaggle para começar a criar um classificador (thanks @EricPB):

[EDIT 06/11/2019] 5 soluções (uma com código :slight_smile: ) para usar as técnicas de Transfer Learning do fastai com imagens com mais de 3 canais (com 1 solução do Jeremy).


Para as pessoas que gostam de usar o Deep Learning no Geoespacial, existem 2 tópicos muito interessantes no fórum:

  1. Geospatial Deep Learning resources & study group; tópico dedicado para compartilhamento de know-how, perguntas, colaborações de projetos, novas idéias para aplicar o Deep Learning com fast.ai para melhorar nossa compreensão geoespacial do mundo.

  2. Como transferir o aprendizado com entradas diferentes: tópico dedicado sobre como usar imagens com mais de 3 canais RGB (como imagens de satélite) enquanto usar o Transfer Learning para não treinar um classificador do zero.

Além disso, existem competições interessantes no Kaggle:

No entanto, um problema recurrente com as imagens satélite é o numero de canais (band) que é geralmente mais que 3 (RGB) até 16 ou 20. Com imagens com mais de 3 canais, não é possível usar direitamente as técnicas de Transfer Learning do fastai. Como resolver isso?

Eu pedi dicas no fórum, e em particular ao @henripal, @radek e @daveluo. As respostas deles contem soluções legais :slight_smile:

  1. A primeira ideia é de treinar na entrada do modelo uma rede neural para reduzir os x canais das imagens para 3 canais. Uma boa opção é de usar um ConvNet (pelo menos um). Desenvolvei o código correspondente que eu publiquei no meu github (Images | Reduction of images channels to 3 in order to use the normal fastai Transfer Learning techniques). Isso permite de usar todas as técnicas de Transfer Learning do fastai :slight_smile:

  2. A segunda ideia é de treinar modelos em paralelo a partir de imagens em 3 canais (e ai, pode usar aqui um modelo já treinado) e colocar uma rede totalmente conectada na extremidade para decidir das classes de classificação. Ainda não testei.
    Exemplo: se imagens tiverem 4 canais (A, B, C, D):

  • Modelo 1 - Treinamento com imagens A, B, C
  • Modelo 2 - Treinamento com imagens B, C, D
  • Modelo 3 - Treinamento com imagens C, D, A
  • Modelo 4 - Treinamento com imagens D, A, B
  1. (from @daveluo) customize the image dataloader to concat the extra channels and then change the input conv layer to n channels with weights copied from the first 3 channels.The code from this notebook by @ste is here: fastai-samples/kaggle/lesson2-protein-human-protein-atlas-384-resnet50_data_block.ipynb at master · artste/fastai-samples · GitHub

  2. (from @daveluo) recent set of notebooks by @simonjhb who did multiclass segmentation with a 48-channel input of satellite bands over time using the eo-learn library which is handy for accessing and working for Sentinel-2 multispectral sat data (also some cool stuff with cutout augmentation and mixup on segmentation that I haven’t seen in too many places): What’s growing there?. Using eo-learn and fastai to identify… | by Simon Grest | Towards Data Science and farm-pin-crop-detection-challenge/notebooks/Train Unet Model.ipynb at master · simongrest/farm-pin-crop-detection-challenge · GitHub

  3. Na lição 3, o Jeremy dá uma solução respondendo à questão seguinte:

Question : Some satellite images have 4 channels. How can we deal with data that has 4 channels or 2 channels when using pre-trained models? [1:59:09]

(…) For 4 channel, you probably don’t want to get rid of the 4th channel. So instead, what you’d have to do is to actually modify the model itself. So to know how to do that, we’ll only know how to do in a couple more lessons time. But basically the idea is that the initial weight matrix (weight matrix is really the wrong term, they’re not weight matrices; their weight tensors so they can have more than just two dimensions), so that initial weight tensor in the neural net, one of its axes is going to have three slices in it. So you would just have to change that to add an extra slice, which I would generally just initialize to zero or to some random numbers. So that’s the short version. But really to understand exactly what I meant by that, we’re going to need a couple more lessons to get there.

E vocês? O que pensam? Pode ser soluções para processamento das imagens satélite pelo Deep Learning?

1 Like

[ EDIT 25/10/2019 ]: veja este post para trocar ideias sobre os projetos do grupo.


Procurando inspiração sobre como usar o fastai v1 para criar seu próprio modelo e aplicativo de Deep Learning? Verifique esta lista não exaustiva :slight_smile:

Eu estou tentando criar uma instância no GCP seguindo as instruções do fórum, mas está dando o seguinte erro:

image

Alguém sabe me dizer o que fazer pra consertar?

Guilherme, você tem que solicitar a cota de GPU. Acha no tutorial de criar uma instância a parte que fala de solicitar cota de GPU

1 Like

Já fiz, então no caso tem que esperar eles aceitarem a solicitação?

Yep! Mas se você quiser com urgência é só responder o e-mail que eles te mandaram

Bom dia. Parabéns pelo site do Grupo de IA da UnB (Brasília) !!!

Gostei :slight_smile:

O primeiro classificador de imagens do grupo :slight_smile: :clap:

Parabéns Hugo. Você deveria escrever um post no tópico Share your work here ✅ e depois, colocar os links para o seus posts no fórum e no medium nesta lista Share you work here - highlights.

Você gostou do fastai v1 para classificar suas imagens de pets (lesson1-pets.ipynb)?

Você vai adorar o fastai v2 (dev) para a mesma tarefa (lesson1-pets.ipynb) :slight_smile:

Também veja A Guided Walk-through of 2.0 (Like Practical Deep Learning for Coders) do @muellerzr.

Confira no tweet do Jeremy e Sylvain:

1 Like

Parabéns ao Hugo, Ivan, Richard, Matheus, a Maria, Igor, Guilherme, a Isabel e ao Rodrigo por seus posts no medium sobre seus classificadores de imagens que eles rodaram atingindo acurácias até 99,3%!!!

Detecção de Doenças em Plantas usando FastAI