Skip to content

DermaIA/IA_DermaIA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

Projeto de Classificação Binária de Lesões Cutâneas

Este projeto treina um modelo de deep learning baseado no EfficientNetB0 para classificação binária de imagens dermatológicas (benigno vs maligno ou outra definição de classes conforme suas pastas). O pipeline inclui limpeza de nomes de arquivos, carregamento dos datasets, data augmentation, tratamento de desbalanceamento com class weights, treinamento em duas fases (transfer learning + fine-tuning) e avaliação do modelo.


📁 Estrutura do Projeto

  • cancer_treino/ — imagens para treino
  • carcer_val/ — imagens para validação
  • cancer_teste/ — imagens para teste
  • best_model.h5 — checkpoint do melhor modelo (AUC)
  • modelo_final.keras — modelo final salvo

As imagens são automaticamente renomeadas para evitar erros com acentos e caracteres especiais.


🧹 1. Limpeza de Arquivos e Pastas

O código usa unicodedata para sanitizar nomes dos arquivos, garantindo compatibilidade:

  • Remove acentos
  • Substitui caracteres inválidos
  • Evita falhas no image_dataset_from_directory

🖼️ 2. Carregamento dos Datasets

Utiliza tf.keras.utils.image_dataset_from_directory, com:

  • label_mode='binary'
  • image_size=(224,224)
  • batch_size = 16

Os datasets são cacheados e prefetchados para desempenho.


⚖️ 3. Balanceamento com Class Weights

Os pesos das classes são calculados usando:

compute_class_weight('balanced', ...)

Isso ajuda quando há desbalanceamento entre classes.


🔄 4. Data Augmentation

Inclui:

  • Flip horizontal
  • Rotação leve
  • Zoom aleatório
  • Ajuste de contraste

🧠 5. Modelo — EfficientNetB0

O modelo é composto por:

  1. Transfer Learning com EfficientNetB0 congelado
  2. Camada GlobalAveragePooling2D
  3. Dropout(0.3)
  4. Dense(1, activation='sigmoid')

O preprocessamento usa:

from tensorflow.keras.applications.efficientnet import preprocess_input

🏋️‍♂️ 6. Treinamento

Fase 1 — Treinamento do topo

  • Base congelada
  • LR = 1e-4

Fase 2 — Fine-Tuning

  • Libera últimas 40 camadas da EfficientNet
  • LR = 1e-5

Callbacks incluídos:

  • EarlyStopping
  • ModelCheckpoint
  • ReduceLROnPlateau

📊 7. Avaliação

O modelo é avaliado em cima do conjunto de teste usando:

  • AUC
  • Accuracy
  • Matriz de confusão
  • Classification Report (precision, recall, f1-score)
  • ROC Curve + Youden J para threshold ideal

O threshold calculado substitui o padrão 0.5.


🔍 8. Inferência em Imagem Única

A função inferir_imagem:

  • Carrega o modelo
  • Preprocessa a imagem (OpenCV)
  • Aplica EfficientNet preprocess
  • Retorna a probabilidade e a classe prevista

Uso:

prob, classe = inferir_imagem("modelo_final.keras", "pe.jpeg")

🧪 9. Dependências

  • Python 3.10+
  • TensorFlow 2.12+
  • NumPy
  • Matplotlib
  • Seaborn
  • scikit-learn
  • OpenCV (cv2)

Instalação das principais libs

pip install tensorflow tensorflow-addons numpy matplotlib seaborn scikit-learn opencv-python

📝 10. Observações Importantes

  • Evite pastas com acentos, espaços ou caracteres especiais.
  • Para aumentar desempenho, coloque o dataset em SSD quando possível.
  • A VRAM pode limitar o batch size no fine-tuning.
  • Ajuste o número de camadas liberadas conforme sua GPU.

📌 Autor

Projeto derivado de pipeline otimizado para classificação dermatológica de imagens com EfficientNet.


Caso queira, posso gerar:

  • README com imagens
  • README em inglês
  • README para GitHub com badges
  • Versão reduzida
  • Versão super detalhada

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors