__compara_classificadores_tf2

autores: Hemerson Pistori (pistori@ucdb.br) Gabriel Kirsten Menezes (gabriel.kirsten@hotmail.com) Maxwell Sampaio (maxs.santos@gmail.com)
versao: 1.0.0

Compara diversas arquiteturas de CNN para diferentes problemas usando tensorflow 2

Rodando remotamente no Google Colaboratory

  • Faça download e descompacte ou clone (se souber usar o git) este projeto na sua máquina
  • Entre no site https://colab.research.google.com/
  • Crie uma conta no Colab caso ainda não tenha (dá para usar a do seu gmail)
  • Utilize a opção Upload e suba o arquivo notebook jupyter chamado experimento_colab.ipynb que estará na pasta chamada compara_classificadores_tf2 depois que você clonar o projeto. Se fizer por download, terá que trocar o nome da pasta de compara_classificadores_tf2_master para compara_classificadores_tf2.
  • Siga as instruções que estão em experimento_colab.ipynb depois de subí-lo no Colab

Rodando localmente - Instalação e Dependências:

Testado no Ubuntu 20.04 com python 3.7.11 e tensorflow 2.1.0 em cima de um ambiente CONDA Ver arquivo install.sh para mais dependências e dicas de instalação com o conda.

Placa gráfica: GTX 1070 Driver nvidia: 450.66

Tem um vídeo aqui explicando sobre este software: https://youtu.be/c6CMNwSY3PM

Exemplo de uso:

  • Coloque todas as imagens separadas por classes em data/all/ (apague as que estão lá pois o programa já vem com um exemplo de banco de imagens para classificação de espécies de peixe (4 classes)

  • Altere o arquivo run/roda.sh para incluir as arquiteturas que você quer testar e alguns hiperparâmetros. Rode os seguintes comandos:

  • Para ativar o ambiente CONDA (não esqueça que tem que criar antes ... veja o install.sh)

$ . ./conda_init.sh

  • Para separar em dobras (ver vídeo no youtube do Pistori sobre validação cruzada)

$ cd utils

$ ./splitFolds.sh

Por padrão criará 3 dobras

$ ./splitFolds.sh -k 5 -s

Também é possível especificar a quantidade de dobras usando o parâmetro opcional (-k nfolds) e o outro parâmetro opcional (-s) que agrupa as diversas imagens de um mesmo individuo para realizar as dobras corretamente, ou seja, manter todas as imagens de um mesmo individuo dentro da mesma dobra. Este parâmetro (-s) só deve ser utilizado caso o dataset contenha realmente diversas imagens para cada individuo.

  • Para rodar o experimento

$ cd ../run

$ ./rodaCruzada.sh -k 5

  • Na configuração testada o exemplo demorou cerca de 20 minutos para rodar

  • Veja os outros scripts em ./run para outras formas de executar o código.

  • Se quiser trocar o total de dobras da validação cruzada altere os arquivos utils/splitFolds.sh e run/rodaCruzada.sh

Estrutura das pastas:

    compara_classificadores_tf2/   
    ├── data (images dataset)  
    |   ├── all (dataset with all images)  
    |   ├── train (training images directory)  
    |   ├── test (test images directory)  
    |   └── dobras (images divided in folds)
    ├── models_checkpoints (where the model weights are located)
    ├── results (outputs, gradcam heatmaps, confusion_matrix, etc) 
    ├── resultsNfolds (same results but per folds) 
    ├── src (source files) 
    |   └── main.py (python source code)  
    ├── utils (some scripts)  
    |   ├── convertall.sh (script that converts tiff to png in dataset image folders)  
    |   ├── splitFolds.sh (script that splits images into 3 folds, by default, but it's possible to specify optional parameters: (-k nfolds): to indicate the number of folds and (-s) to group images of the same individual existing in the dataset)
    |   └── split.sh (script that splits images between train and test in database image folders)
    |   └── organizeDataset.sh (script that organizes datasets that contain more than one image per individual, grouped into folders within each of the classes, as is the case with dataset_snakes) 
    ├── other (dataset examples)
    |   ├── dataset_snakes (snakes dataset example, where each snake has more than one image) 
    └── README.md (some infos)