Segundo projeto apresentado na displina de Inteligência Computacional em Saúde ministrada pelo professor Andre Georghton Cardoso Pacheco. Os alunos envolvidos no desenvolvimento foram:
A base de dados utilizada neste projeto corresponde a um conjunto de dados de imagens histopatológicas de câncer de pulmão e cólon chamado LC25000. Contém 25.000 imagens histopatológicas (RGB) com resolução de 728x728 de tecidos do pulmão e cólon, distribuídas em 5 classes, com cada classe tendo 5.000 imagens: (i) Adenocarcinoma de Cólon; (ii) Tecido Benigno do Cólon; (iii) Adenocarcinoma Pulmonar; (iv) Tecido Pulmonar Benigno; (v) Carcinoma de Células Escamosas Pulmonar. É importante mencionar que esses tecidos foram preparados utilizando uma técnica de coloração com hematoxilina e eosina. Nesse trabalho, serão utilizadas apenas as imagens relativas a tecidos pulmonares.
Classe | Exemplo |
---|---|
Adenocarcinoma Pulmonar | |
Tecido Pulmonar Benigno | |
Carcinoma de Células Escamosas Pulmonar |
Para execução do projeto, os dados devem ser baixados no link disponibilizado acima e colocados na pasta data
seguindo a estrutura:
.
└── data
├── examples
└── lung_colon_image_set
├── colon_image_sets
│ ├── colon_aca
│ │ ├── colonac0.jpeg
│ │ .
│ │ .
│ │ .
│ │ └── colonac5000.jpeg
│ └── colon_n
│ ├── colonn0.jpeg
│ .
│ .
│ .
│ └── colonn5000.jpeg
└── lung_image_sets
├── lung_aca
│ ├── lungaca0.jpeg
│ .
│ .
│ .
│ └── lungaca5000.jpeg
├── lung_n
│ ├── lungn0.jpeg
│ .
│ .
│ .
│ └── lungn5000.jpeg
└── lung_scc
├── lungscc0.jpeg
.
.
.
└── lungscc5000.jpeg
As instruções de instalação a seguir são apresentadas para o sistema operacional Ubuntu.
⚠️ Aviso: Testado apenas no Ubuntu 22.04.
O pacote python3-venv
é necessário para criar ambientes virtuais Python. Para instalá-lo no Ubuntu 22.04, execute o seguinte comando:
sudo apt-get install python3-venv
Agora, vamos clonar um repositório Git e criar um ambiente virtual Python:
# Baixe o projeto
git clone https://github.com/intel-comp-saude-ufes/2024-1-P2-classificador-cancer-de-pulmao.git
# Entre na pasta do projeto
cd 2024-1-P2-classificador-cancer-de-pulmao/
# Crie um ambiente virtual com nome '.venv'
python3 -m venv .venv
# Ative o ambiente virtual
source .venv/bin/activate
Uma vez no ambiente virtual, instale as dependências do projeto e o próprio projeto usando pip
. Caso você não o tenha instalado em seu computador, basta executar:
sudo apt-get install python3-pip
Então, você pode prosseguir com a instalação das dependências do projeto e do próprio projeto:
pip3 install .
Inicialmente, é necessário executar o script project/split.py. Para isso, basta executar:
split
Assm, 4 arquivos serão gerados:
data/all.csv
data/train.csv
data/test.csv
data/val.csv
Os arquivos gerados são tabelas que apresentam uma coluna com o caminho para o arquivo de imagem e em outra coluna o rótulo associado aquela imagem. Essa divisão entre treino, teste e validação, feita pelos arquivos train.csv
/test.csv
/val.csv
, é realizada aleatoriamente e estratificando os conjuntos. São utéis para testar o script de treinamento. Já no procedimento de validação cruzada é utilizado o arquivo all.csv
contendo todo o banco de dados.
Então, para executar um simples treinamento utilizando a divisão sugerida pelo script project/split.py, basta executar:
train
⚠️ Devido a quantidade de arquivos, este procedimento demora em torno de 1h30min. Ao final dele, as métricas de treinamento estarão salvas em data/resnet50 e em data/vgg19. Os arquivos gerados dentro de cada uma das pastas serão:
best_checkpoint.pth
: melhor modelo encontrado (aquele que miniza a perda sobre o conjunto de validação);last_checkpoint.pth
: o último modelo;test_inference.csv
: resultado da inferência sobre o conjunto de teste;train_metrics.csv
: métricas (função de perda e acurácia) durante o treinamento.
Por outro lado, para executar o procedimento de validação cruzada com 5 divisões, basta executar:
cross-val
⚠️ Devido a quantidade de arquivos, este procedimento demora em torno de 15h. Ao final dele, as métricas de treinamento estarão salvas em:
- Resnet:
- VGG-19:
Os arquivos gerados dentro de cada uma das pastas serão:
best_checkpoint.pth
: melhor modelo encontrado (aquele que miniza a perda sobre o conjunto de validação);last_checkpoint.pth
: o último modelo;test_inference.csv
: resultado da inferência sobre o conjunto de teste;train_metrics.csv
: métricas (função de perda e acurácia) durante o treinamento.
Para analisar os resultados da validação cruzada, está disponível o seguinte Jupyter Notebook: notebooks/project.ipynb. Para executá-lo, basta abrir o Jupyter Lab executando:
jupyter-lab
A apresentação do projeto foi disponibiliza no YouTube no seguinte link:
Além disso, o relatório/artigo descrevendo o projeto pode ser encontrado em results/report.pdf. Nele é realizada uma discussão do problema, trabalhos relacionados, metodologia, resultados e trabalhos futuros. Sobre cada divisão gerada no processo de validação cruzada, uma matriz de confusão foi calculada sobre o conjunto de teste em específico. A média das matrizes de confusões para os dois modelos avaliados pode ser observada a seguir:
VGG-19 | Resnet50 |
---|---|
Os resultados mostram que a utilização de qualquer um dos classificadores em uma aplicação em produção apresentariam resultados semelhantes. Assim, poderia-se utilizar os algoritmos como uma ferramenta para melhorar a eficiência no diagnóstico de câncer de pulmão utilizando imagens histopatológicas.
Este projeto é licenciado sob os termos da licença MIT e está disponível gratuitamente.