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

[ <<< Lição 1 | Lição 3 >>> ]

Lesson 2: Deeper Dive into Computer Vision (30/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 2 (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.

Lesson resources

Other resources

1 Like

Ementa da turma do 30/10/2019 (lição 2: “Deeper Dive into Computer Vision”)

  1. [ 10mn ] Metas da turma, novidades desde a turma anterior (site do grupo, posts, modelos treinados…), logística, foco sobre as equipes criadas e os projetos
  2. [ 5mn ] Foco sobre os tópicos Share your work here ✅ e Share you work here - highlights
  3. [ 10mn ] Primeira apresentação (o Osmar apresenta os seus modelos de classificação de imagens)
  4. [ 10mn ] Segunda apresentação (o Hugo apresenta o seu Classificador de Obras de Arte e seu notebook, problemas resolvidos e resultados)
  5. [ 10mn ] Terceira apresentação (o Ivan apresenta: Atividade 1 -Classificador de Flores)
  6. [ 10mn ] Pontos-chave da turma anterior
  7. [ 1h30mn ] Lição 2
  8. [ 30mn ] Oficina prática

Videos timeline

  • [ 16:21 ] Download images using Google Images
  • [ 26:49 ] Training a model (como escolher o LR com learn.recorder.plot())
  • [ 29:38 ] Interpretation (compreendendo as previsões com maior loss (incorretas, mas o modelo está confiante ou aquelas em que o modelo não está confiante)) and ImageCleaner() (um aplicativo dentro do Jupyter notebook para apagar imagens mal rotuladas, sem ligação com a natureza do modelo, imagens duplicadas ou imagens com vieses)
  • [ 37:36 ] Putting your model in production (use o CPU for inference)
  • [ 46:06 ] Things that can go wrong
    • LR (learning rate) muito grande (explosão de perda válida) ou muito pequena (muito tempo para treinar o modelo)
    • número de épocas muito grande (overfitting) ou muito pequeno (underfitting)
  • [ 1:02:05 ] Linear algebra and Matrix multiplication
  • [ 1:15:06 ] Stochastic Gradient Descent (SGD) - Basics of Pytorch and Matplotlib
    • [ 1:16:08 ] Linear Regression problem
    • [ 1:17:57 ] What is a tensor? (por exemplo, uma imagem é um “rank 3 tensor”)
    • [ 1:28:36 ] Loss function
    • [ 1:39:12 ] Calculate the gradient of the loss through .backward()
    • [ 1:41:31 ] Why is there any LR at all?
    • [ 1:45:43 ] Training loop
    • [ 1:46:20 ] Animate it!
    • [ 1:48:08 ] Mini-batches
    • [ 1:49:40 ] Vocabulary
    • [ 1:54:42 ] Underfitting and Overfitting
    • [ 1:56:07 ] Regularization and Validation Set

Recursos

Exercícios até a próxima aula

  • Escolhendo uma meta de classificação de imagens (por exemplo, classificação de fotos de pessoas com ou sem óculos) e fazendo o download dos datasets de imagens usando o notebook lesson2-download.ipynb.
  • Após treinar o classificador, usando a função ImageCleaner() do mesmo notebook para apagar imagens mal rotuladas, sem ligação com a natureza do modelo, imagens duplicadas ou imagens com vieses.
  • Criando um aplicativo Web desse classificador (veja o tutorial).

Boa noite,

Há algumas diferenças entre o código do video da lição 2 sobre:

  • Interpretation [29:38]: como apagar imagens mal rotuladas, sem ligação com a natureza do modelo, imagens duplicadas ou imagens com vieses (função ImageCleaner() e não FileDeleter())
  • Putting your model in production [37:36]: como obter uma previsão a partir de uma imagem (não precisa de criar um databunch específico, só usando learn.predict())

Por entender bem o código atualizado, leiam e rodam o notebook lesson2-download.ipynb.

[ EDIT 31/10/2019 ]: havia problemas de atualização no tutorial publicado neste post. Por isso, eu publiquei meu proprio post (muito, muito) inspirado do tutorial do @weltonrodrigo (obrigado a ele).


Como criar um Web app tipo classificador usando um modelo fastai e colocá-lo no Heroku?

Há um guia por isso :slight_smile:

Heroku não é a única opção. A lista das outras opções está aqui: https://github.com/piegu/glasses-or-not/blob/master/tutorial/Web_app_fastai.md#colocar-na-internet-o-seu-modelo-baseado-em-fastai

fastai v2 on the road…

Pontos-chaves do método de aprendizado do Deep Learning através das lições do fastai

  • Assistir aos vídeos antes da turma… e pelos menos 2 vezes.
  • Ler as anotações da @hiromi.
  • Rodar todos os notebooks relacionados às lições (saber rodar o código - entender os princípios - antes de mergulhar no código).
  • (se possível) ler os tópicos oficiais relacionados às lições (por exemplo: Lesson 2 official resources and updates ✅).
  • Colocar questões no fórum fastai quando tiver um problema de compreensão.
  • A partir dos notebooks, criar seus próprios com outros datasets.
  • Publicar no seu blog posts sobre a sua compreensão do curso e seus modelos/aplicativos (notebooks no github).
  • Compartilhar links para os seus posts no site do grupo, nas redes sociais, etc.

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. Também, o Jeremy explicou como fazer isso na versão de 2018 do curso (video).

Uma outra opção para baixar um dataset do kaggle ou de qualquer site é usar CurlWget (Chrome extension):

Como eu defino a função de erro que o modelo irá usar? E qual função de erro é mais apropriada para dados desproporcionais?


Eu esto recebendo esse erro no fim da criação do aplicativo. Já fiz as modificações que o programa sugere(em outras rodadas) e já usei outros templates de web app que achei online. Nenhum funcionou. Alguém sabe como resolve esse problema?

Estou tendo problemas com a criação do aplicativo, não entendi como implementar o código principalmente quanto à receber uma imagem para avaliação

Bom dia @Ivan_Cunha.

Um objeto learner é criado pela função cnn_learner() que associa uma função de erro predefinida. Pode acessar essa função de erro por seu atributo learn.loss_func (aqui, FlattenedLoss of CrossEntropyLoss()).

Para obter mais informações sobre essa função de erro, roda doc(learn.loss_func) como na imagem seguinte:

(além disso, pode ler o doc fastai sobre as funções de erro)

Pode mudar a função de erro da forma seguinte:

learn.loss_func = new_loss_func

Pode definir new_loss_func seja simplesmente como uma função usando tensores (previsões e targets) como argumentos, seja uma instancia de uma classe de função de erro. Em 2 cases, pode usar funções/classes do fastai, do pytorch até pode criá-las.

Com dados despropocionais, pode usar por exemplo F.CrossEntropyLoss(weight=tensor_of_weight_for_each_class))

Tópicos sobre esse assunto:

Se precisar mais informações, publica seu notebook e seu dataset para entendermos melhor como ajudá-lo.

Boa tarde @izzywho. Qual plataforma você usou e qual guia?

Boa tarde @Ivan_Cunha. Com a sua captura de tela, posso entender que usou o guia para Heroku.

Pode dizer em qual etapa do guia o erro ocorre?

Está procurando inspiração para o seu Web App?

Gosto da folha de estilo do Web App Mushroom :slight_smile:

Bom dia!
Vou colocar essa dúvida em três partes porque só posso fazer upload de uma imagem por post e são muitos prints…
[1/3]
Estou tendo dificuldades para colocar o diretório quando vou configurar o jupyter notebook na minha instância do google cloud. Antes de tudo, aconteceu um erro na instalação do driver da NVIDIA. Tirei um print disso porque não sabia se tinha ou não relação.

[2/3]
Também tirei print dos erros que apareceram quando tentei colocar o diretório.

[3/3]
Tentei então abrir diretamente o jupyter pelo IP e também não deu certo

Oi Maria! Isso foi apenas um warning que sempre aparece na instalação do driver da GPU. Não seu preocupe com esses warnings!

1 Like

Então, tem uma coisa que tem que ficar bem claro: quanto você acessa uma instância do GCP, ela não tem ligação nenhuma com seu computador. Uma instância do GCP é literalmente um outro computador então não faz sentido você colocar um caminho da sua máquina local.

Além disso, a instância vem com um sistema Linux (o debian) instalado, então você tem que especificar os diretórios de Linux dentro da instância.

Você pode fazer uploads e downloads para a sua instância apertando na engrenagem no canto superior direito da tela (lembrando que você não deve fazer upload de arquivos grandes, já que vai demorar muito). Para colocar seu dataset na instância você deve baixá-lo diretamente nela (vou fazer um post no medium explicando como fazê-lo).

1 Like