Projeto desenvolvido para disciplina de Deep Learning, no final de 2024. O objetivo é construir um classificador para identificar em qual dos 8 estágios de desenvolvimento se encontra um plantio de soja, com base numa base de dados representativa apresentada pela Bayer.
O código do trabalho foi baseado no feito em Build a Deep CNN Image Classifier with ANY Images, nos slides da disciplina de Deep Learning fornecidos pelo professor Rosalvo Neto (frutos da cooperação com um projeto de ensino da Intel), e outras fontes da web
(imagens típicas da base de dados utilizada)
Antes de mais nada, é preciso importar as imagens que serão utilizadas no treinamento. Como a base de dados é muito grande (cerca de 7.5GB), não foi possível fazer o upload diretamente no GitHub. Para importar os dados, siga os passos abaixo:
-
Baixe as imagens
Os arquivos de imagem para o treinamento da rede podem ser baixados em: Download Imagens
Essas imagens são cortesia da Bayer, fornecidas através da estudante Clara Mendes, estagiária na empresa. O link para o repositório original com essas informações é: SoyField Repositório
As imagens fazem parte de um dos desafios da Bayer Week, evento promovido pela empresa na região, onde são apresentados problemas e questões na área de tecnologia. -
Coloque as imagens no local correto
Após fazer o download das imagens, copie os repositóriosTRNeTSTe cole dentro da pastadata. O resultado deve ter o seguinte formato:/data ├── /TRN └── /TST
-
Gere o repositório de imagens para validação Logo no início do arquivo Jupyter, existe a sessão "0. Criando a base de validação", com uma célula de código comentada. Remova os comentários e execute todas as linhas dessa sessão. Isso criará a base de validação corretamente. Depois, basta comentar a célula novamente, para evitar que a base seja criada novamente.
A partir disso, será possível executar o restante do projeto. Na sessão 3, que trata do modelo de rede neural, existem várias arquiteturas geradas durante o projeto. A maioria delas está comentada, com apenas uma estando disponível. Caso você opte por iniciar o kernel do jupyter e executar todo o código, o modelo não comentado será utilizado no treinamento. Na sessão 4, é feito o treinamento em sí, que pode levar algum tempo dependendo da máquina onde está sendo executado. Na sessão 5 e 6, são apresentados os resultados no formato de estatísticas e testes diretos em exemplos de cada categoria (da base de validação, para evitar que o modelo tenha decorado)
Detalhamento de cada sessão:
-
Criando a base de validação
Como discutido antes, é usado para gerar a base de validação (caso ela ainda não exista) -
Configurações Básicas
Aqui são importadas algumas bibliotecas -
Importando e tratando as imagens
Nessa sessão as imagens são importadas utilizando pipeling, para melhorar a eficiência no uso de memória. Também são feitas transformações iniciais através da definição de funções de callback, que irão regularizar os valores das matrizes (mantedo-os entre 0 e 1), aplicadno data augmentation (transformações sobre a base de treino para melhorar a capacidade de generalização do modelo), preparar os rótulos (categorias) com OneHotEncondig, e outros. Também é feita a exibição de algumas imagens e comentários sobre a estrutura do batch. -
Construindo o Modelo de Deep Learning
Aqui estão todas as arquiteturas utilizadas e as configurações importantes para que elas funcionem -
Treinando o Modelo
Nessa parte é feito o treinamento em sí do modelo. Caso você execute esse comando, provavelmente levará um certo tempo até que o treinamento seja concluido. -
Estatísticas do Resultado
São apresentados os gráficos das funções de perda e de acurácia ao longo da execução do algoritmo, com a comparação do desempenho no conjunto de treino e de teste. Além disso, é calculada precisão, o recall e a acurácia -
Testando o Modelo Diretamente
Uma imagem de cada categoria (selecionada a partir do conjunto de validação, para evitar que o modelo tenha "decorado" a imagem) é utilizada, e para cada é feito a previsão usando o modelo treinado e mostrado o resultado real, para comparação (foi dessa parte que saiu as prints logo abaixo) -
Salvando o Modelo
Essa é uma parte onde você pode salvar o modelo gerado ou carregar um modelo anterior. Já existe, na pasta /models, 10 models preparados anteriormente. -
Classificando uma imagem grande
Nessa etapa final é feita a classificação de um chunk completo de imagens, que representa a visão inteira de um campo de soja. De acordo com o total de previsões feitas pelo modelo para cada secção dessse campo, é calculado se está no momento de desseca ou não.
A regra utilizada foi aquela estabelecida no documento da Bayer Week que apresentou o desafio, onde caso 70% das secções pertençam à categoria 6 ou superior, com no máximo 30% dessas estando na categoia 6, é considerado que o campo está pronto para desseca. Caso contrário, não.
Infelizmente, no prazo para apresentação, o modelo não estava reconhecendo alguns casos corretamente. Os modelos produzidos estão sofreram com overfitting









