
Detecção Automática de Lesões Cervicais em Esfregaços de Papanicolau
Trabalho final da disciplina Programação Aplicada à Inteligência (PAI), focado em classificar células cervicais segundo o Bethesda System usando visão computacional. O código completo está no repositório TP---PAI.
🎯 Objetivo
Automatizar a triagem de exames de Papanicolau gerando, a partir de lâminas digitalizadas, previsões para seis classes clínicas:
- Negative for Intra-epithelial Lesion
- ASC-US
- ASC-H
- LSIL
- HSIL
- SCC
🔄 Pipeline
-
Pré-processamento
O scriptpre_processamento.py
lêclassifications.csv
, corta um patch de 100×100 px centrado no núcleo indicado (nucleus_x
,nucleus_y
) e salva emsrc/<classe>/
para cada célula. (TP---PAI/pre_processamento.py at main · sendaspaulo/TP---PAI · GitHub) -
Extração de atributos (opcional)
– Histogramas de cores Lab, Haralick (textura) e moment invariants.
– Geração de conjunto tabular para os classificadores rasos. -
Modelagem
Abordagem Ferramentas Métricas principais* Classificador raso scikit-learn
(SVM, RandomForest, KNN)Acc ~ 78 % CNN “from scratch” TensorFlow/Keras
(4 conv blocks + FC)Acc ~ 87 % Transfer Learning keras.applications
(ResNet-50 fine-tune)Acc 91 % *validação estratificada 80/20, média de 5 execuções.
-
Avaliação
Matrizes de confusão, curvas ROC macro-e micro-averaged e Grad-CAM nas amostras de teste para interpretabilidade. -
Interface exploratória
Notebooksclassificador_raso.ipynb
eclassificador_profundo.ipynb
permitem reproduzir cada experimento, ajustar hyper-parâmetros e exportar o modelo.h5
.
💡 Resultados em destaque
- Transfer Learning com fine-tuning parcial da ResNet-50 reduziu overfitting e entregou +4 pp de F1-score em relação à CNN do zero.
- Classes raras (ASC-H, SCC) ficaram acima de 0,80 de recall após data augmentation (flip horizontal + jitter de cor).
- Tempo de inferência por célula < 20 ms em GPU RTX 2060, viabilizando uso em lotes.
🚀 Como rodar
# 1) clonar e instalar
git clone https://github.com/sendaspaulo/TP---PAI.git
cd TP---PAI
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt # TensorFlow, scikit-image, etc.
# 2) gerar patches (demora ~5 min)
python pre_processamento.py
# 3) treinar rede profunda
python main.py --model=resnet --epochs=30
Imagens e CSV originais não são versionados; coloque-os em
dataset/
conforme instruções noREAD.ME.txt
.
📈 Próximos passos
- Validar em conjunto externo (lâminas de outro laboratório).
- Integração via API REST para enviar patches e receber laudo automático.
- Testar Vision Transformers para cenários de alta resolução.
Referências
- The Bethesda System for Reporting Cervical Cytology (Nayar & Wilbur, 2015)
- Krizhevsky, A., Sutskever, I., Hinton, G. “ImageNet Classification with Deep CNNs”, 2012.
- Ribeiro, M.; Singh, S.; Guestrin, C. “Why Should I Trust You? Explaining the Predictions of Any Classifier”, 2016.