Fazendo download de Datasets do Kaggle automaticamente no Google Colab e atividade: Pedra, papel ou tesoura
Eu não lembro exatamente porque, mas tive um certo problema em fazer isso pela primeira vez. Lembro de ter testado vários códigos que achei online e sempre havia um pedaço que não funcionava. Vou colocar aqui o código que usei, que acabou sendo a junção de outros que fui encontrando, caso alguém esteja tendo o mesmo problema que tive:
A primeira etapa é dar upload de seu arquivo kaggle.json.
from google.colab import files
files.upload()
Depois acesse:
!mkdir -p ~/.kaggle
!cp kaggle.json ~/.kaggle/
!chmod 600 ~/.kaggle/kaggle.json
!ls ~/.kaggle
Depois você pode validar e ver se deu tudo certo:
!ls -l ~/.kaggle
!cat ~/.kaggle/kaggle.json
Crie um diretório para seu Dataset:
!mkdir "NomeDaPasta"
Depois é só fazer o download e dar unzip:
!kaggle datasets download nomecriador/nomedataset -p "/content/NomeDaPasta" --unzip
Para obter seu arquivo kaggle.json, acesse o MyAccount no Kaggle e vá em create new API:
https://www.kaggle.com/<username>/account
O nome do Dataset que aparece no download é o que está no link após Kaggle.com:
~~~~~~~~~~
Para a primeira tarefa escolhi um problema bastante simples: Identificar se o gesto feito com a mão é pedra, papel ou tesoura.
O criador do dataset diz que o montou como hobby para fazer um jogo interativo com a câmera e obteve bons resultados. As imagens são algumas mãos e todas estão em fundo verde, eliminando, assim, bastante ruído de fundo e tornando o problema bem simples.
Amostra de algumas imagens.
Baixei o dataset do Kaggle diretamente no Google Colab e dividi em teste e treino passando um valor para “valid_pct” para a função e com 4 épocas extremamente rápidas consegui uma acurácia ótima acertando 1309 imagens de 1311 da validação.
É possível ver pela matriz de confusão que as duas imagens mal classificadas eram papeis apontados como tesoura e por mais que não seja comum nós humanos confundirmos isso, é bem compreensível que a rede o faça, se os dois primeiros dedos estiverem muito espaçados na representação do papel, gerando uma “tesoura dentro do papel”. Para confirmar essa suspeita fiz um mapa de calor passando “heatmap = True” para a função top_losses:
É bem claro que a rede classificou essas imagens baseada nos dois primeiros dedos e de fato enxergou uma tesoura quando era um papel pelo motivo acima.
Para melhorar o modelo, dei um unfreeze e permiti que ela mudasse pouco das primeiras camadas. Com isso obtive um valor da função custo menor, mas ainda tive duas imagens má classificadas:
A primeira continuou pelo mesmo motivo anterior, mas a segunda foi porque a rede (ironicamente) não verificou os dedos, enxergando parte de um papel, quando na verdade era uma pedra.