__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)