Code Monkey home page Code Monkey logo

rrfsantos / projeto-redes-neurais-oct-images Goto Github PK

View Code? Open in Web Editor NEW
0.0 2.0 1.0 20.83 MB

BI Master - Automated methods to detect and classify human diseases from medical images. Convolutional Neural Network, Data Augmentation, Transfer Learning, Tensorflow, Keras, Xception, ImageNet, StratifiedKFold.

Jupyter Notebook 100.00%
augmentation convolutional-neural-networks datascience image-classification imagenet keras keras-tensorflow kfold-cross-validation stratified-sampling tensorflow transfer-learning vgg16 vgg16-filters xception-model

projeto-redes-neurais-oct-images's Introduction

Métodos automatizados para detectar e classificar doenças humanas a partir de imagens médicas

Projeto de conclusão do curso BI-MASTER e obtenção de crédito na disciplina "Projetos de Sistemas Inteligentes de Apoio à Decisão".

Orientadora: Professora Evelyn Conceição

Links para o código

  1. Notebook para o download da base, divisão das imagens em 5 folds (treino e validação) e teste. Salva os folds em diretórios no Google Drive.

  2. Notebooks para treinamento e avaliação da Rede Neural para cada fold: Fold 1, Fold 2, Fold 3, Fold 4, Fold 5

  3. Notebook com métricas para avaliação do Modelo.

Resumo

A tomografia de coerência óptica da retina (OCT) é uma técnica de imagem usada para capturar seções transversais de alta resolução das retinas de pacientes vivos. Aproximadamente 30 milhões de varreduras de OCT são realizadas a cada ano, e a análise e interpretação dessas imagens levam um tempo significativo (Swanson e Fujimoto, 2017). O objetivo do trabalho é a propor um modelo de inteligência artificial pré-treinado como alternativa para predição de diagnóstico utilizando essas de imagens.

1. Introdução

Este trabalho baseou-se na API Keras para a construção da rede neural e no módulo scikit-learn para validação do treinamento do modelo.

Itens do trabalho:

  • Análise exploratória dos dados

  • Tratamento dos dados para uso na rede neural

  • Avaliação da melhor configuração da rede neural

  • Avaliação do modelo utilizando validação cruzada

Descrição dos dados

O dataset é composto por imagens de Tomografia de Coerência Óptica da Retina (OCT), técnica de imagem usada para capturar seções transversais de alta resolução das retinas. É organizado em 3 diretórios (train, test, val). Cada um desses diretórios contém subdiretórios para cada categoria de imagem (NORMAL, CNV, DME,DRUSEN). São 84,495 imagens (JPEG) e 4 categorias:

  • CNV (choroidal neovascularization) - Processo patológico que consiste da formação de novos vasos sanguíneos na COROIDE.

  • DME (diabetic macular edema) - Ao longo do tempo, níveis glicêmicos altos podem levar a complicações vasculares em vários tecidos e órgãos, como no coração, sistema nervoso, rins, membros inferiores (pernas e pés) e inclusive nos olhos.

  • DRUSEN - pequenos depósitos amarelos ou brancos na retina do olho ou na cabeça do nervo óptico. A presença de drusas é um dos sinais precoces mais comuns de degeneração macular relacionada à idade.

  • NORMAL

Labeled Optical Coherence Tomography (OCT) Images for Classification - Kermany, Daniel; Zhang, Kang; Goldbaum, Michael (2018), “Labeled Optical Coherence Tomography (OCT) and Chest X-Ray Images for Classification”, Mendeley Data, v2

2. Modelagem

Neste estudo, a classificação de OCT foi realizada com modelos de aprendizado profundo e algumas abordagens foram testadas até que se chegasse ao modelo de melhor performance:

2.1. Transfer Learning utilizando CNN VGG16 pré-treinada com a base de dados "imageNet": apresentou resultado, aproximadamente, 10% inferior ao do modelo final.

2.2. Transfer Learning utilizando CNN Xception pré-treinada com os pesos do dataset ImageNet: apresentou o melhor resultado.

2.3. Transfer Learning utilizando CNN EfficientNet B0 a B7 pré-treinadas com a base de dados "imageNet": apresentaram resultados muito inferiores ao do modelo final.

2.4. CNN VGG16 pré-treinada para extração de características das imagens:

  • CNN VGG16 pré-treinada para extração de vetor de características de cada imagem.

  • Redução de dimensionalidade do vetor de características da imagem, utilizando Principal Component Analysis (PCA).

  • Utilização do vetor para entrada em modelos de machine learning sklearn RandomForestClassifier, DecisionTreeClassifier, KNeighborsClassifier e LogisticRegression.

    Essa abordagem mostrou-se muito ineficaz, pois como as imagens são muito semelhantes, todos os modelos apresentaram acurácia de 100%, porém, a matriz de confusão feita utilizando os dados de teste apresentou um baixíssimo número de acertos para as classes.

3. Parâmetros utilizados no modelo final:

  • Separação da base em Treino, Validação e Teste: Foi utilizado 25% da base para validação e 10% para teste.

  • Data Augmentation - Aumento da quantidade de imagens, adicionando cópias ligeiramente modificadas de imagens já existentes e redimensionamento para o padrão de entrada da rede neural.

  • Transfer Learning - CNN Xception pré-treinada com a base de dados "imageNet".

  • Quantidade de Neurônios das Camadas Densas (Dense) - Foi utilizada somente uma camada densa com quatro neurônios (número de classes) para a classificação das imagens e função de ativação softmax.

  • Otimizador - O melhor resultado foi obtido com o otimizador SGD, utilizando os parâmetros: Learning Rate = 0,045 / Decay = Learning Rate/n° de épocas = 0,1/30 / Momentum = 0,9.

  • Indicador de Perda - Categorical crossentropy ou softmax loss, a rede neural foi treinada para emitir a probabilidade de a imagem pertencer a cada uma das quatros classes. Foram feitos testes utilizando sparce categorical crossentropy com resultados inferiores.

  • Callbacks - Evitam o sobretreino da rede (EarlyStopping, ReduceLROnPlateau, ModelCheckpoint).

  • Stratified K-Fold cross validation - As partições são feitas preservando a porcentagem de amostras para cada classe (estratificada). Foram utilizados 5 folds para validação do modelo final.

  • Balanceamento da base - Não aumenta as amostras, mas atribui pesos a cada classe para evitar qualquer viés por meio de dados não balanceados (class_weight). O balanceamento da base melhorou a performance do modelo na inferência da classe DRUSEN, que possue o menor número de imagens.

4. Resultados

Métricas de Treinamento (fold 5)

Representação gráfica da precisão do treinamento versus perda, para melhor compreensão do treinamento do modelo.

Avaliação do modelo utilizando os dados de teste (fold 5)

Relatório de métricas de performance do classificador utilizando os dados de teste (fold 5)

Avaliação do modelo utilizando Validação Cruzada (Stratified K-Fold)

Accuracy: De todas as imagens, quantas foram classificadas corretamente?

Precision: Quantas imagens foram rotuladas para uma classe, são realmente dessa classe? O classificador está apresentando baixo desempenho ao inferir a classe DRUSEN para essa métrica.

Recall: De todas as imagens de cada classe, quantas foram rotuladas corretamente? O classificador está apresentando um melhor desempenho ao inferir a classe DRUSEN para essa métrica. Para nosso conjunto de dados, podemos considerar que alcançar um melhor recall é mais importante do que obter uma alta precisão.

5. Conclusão

Neste estudo, a classificação de OCT foi realizada com modelos de aprendizado profundo e algumas abordagens foram testadas até que se chegasse ao modelo de melhor performance. Na primeira etapa, os dados foram padronizados e, em seguida, usados como entrada para a CNN Xception pré-treinada com os pesos do dataset ImageNet.

Para validação, foi utilizada a técnica de validação cruzada estratificada com 5 folds e a divisão aleatória do dataset em subsets de treino, validação e teste. As duas abordagens apresentaram resultados similares.

O desempenho do modelo foi medido utilizando as métricas: acurácia, precisão e recall. Sendo recall a mais importante para o nosso conjunto de dados, pois devemos considerar o diagnóstico errado prejudicial, principalmente a classificação de uma imagem com uma das três anomalias como uma imagem normal. Apresentou bons resultados para a classificação de imagens das classes NORMAL e CNV e o pior resultado para as imagens da classe DRUSEN.

projeto-redes-neurais-oct-images's People

Contributors

rrfsantos avatar

Watchers

 avatar  avatar

Forkers

secretaria-ica

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.