Coherent Concept-based Explanations in Medical Image and Its Application to for Skin Lesion Diagnosis
Paper accepted at the CVPR 2023 workshop SAIAD - Safe Artificial Intelligence for All Domains.
If you use this repository, please cite:
@inproceedings{patricio2023coherent,
title={Coherent Concept-based Explanations in Medical Image and Its Application to Skin Lesion Diagnosis},
author={Patr{\'\i}cio, Cristiano and Neves, Jo{\~a}o C and Teixeira, Luis F},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition Workshops (CVPRW)},
pages={3798--3807},
year={2023}
}
| Dataset | Train | Validation | Test | Total | |||
| Mel. | Nev. | Mel. | Nev. | Mel. | Nev. | ||
| PH2 | 30 | 120 | 5 | 20 | 5 | 20 | 200 |
| Derm7pt | 90 | 256 | 61 | 100 | 101 | 219 | 827 |
| PH2D7 | 120 | 376 | 66 | 120 | 106 | 239 | 1,027 |
Download the required datasets:
Note: To obtain the preprocessed images of each dataset, please e-mail me at cristiano [dot] patricio [at] ubi [dot] pt.
First of all, create a new conda environment with the required libraries contained in requirements.txt file:
conda create --name <env> --file requirements.txtFor evaluating the model in a specified dataset, please ensure that you modify the directory paths and specify the parameters in model_params.py
Evaluate a baseline model:
In model_params.py set BASELINE = True
In evaluate.py choose the model: models = ["resnet101"] # "densenet201", "seresnext" and uncomment baseline gammas:
# BASELINE
gammas = {"ph2": [None, None, None],
"ph2_dlv3_ft": [None, None, None],
"ph2_manually": [None, None, None],
"derm7pt": [None, None, None],
"derm7pt_dlv3_ft": [None, None, None],
"derm7pt_manually": [None, None, None],
"ph2derm7pt": [None, None, None],
"ph2derm7pt_dlv3_ft": [None, None, None],
"ph2derm7pt_manually": [None, None, None]}and finally, run the script:
python evaluate.pyEvaluate the proposed model:
In model_params.py set BASELINE = False
In evaluate.py choose the model: models = ["resnet101"] # "densenet201", "seresnext" and uncomment OUR METHOD gammas:
# OUR METHOD
gammas = {"ph2": [0.6, 0.6, 0.6],
"ph2_dlv3_ft": [0.6, 0.6, 0.6],
"ph2_manually": [0.6, 0.6, 0.6],
"derm7pt": [0.3, 0.7, 0.3],
"derm7pt_dlv3_ft": [0.6, 0.5, 0.6],
"derm7pt_manually": [0.6, 0.5, 0.5],
"ph2derm7pt": [0.4, 0.9, 0.6],
"ph2derm7pt_dlv3_ft": [0.4, 0.7, 0.6],
"ph2derm7pt_manually": [0.4, 0.7, 0.6]}and finally, run the script:
python evaluate.pyA TXT file will be created with the results at results/.
| Dataset | ResNet-101 | DenseNet-201 | SEResNeXt |
|---|---|---|---|
| PH2 | 0.6 | 0.6 | 0.6 |
| Derm7pt | 0.3 | 0.7 | 0.3 |
| PH2Derm7pt | 0.4 | 0.9 | 0.6 |
| PH2_DLV3 | 0.6 | 0.6 | 0.6 |
| Derm7pt_DLV3 | 0.6 | 0.5 | 0.6 |
| PH2Derm7pt_DLV3 | 0.4 | 0.7 | 0.6 |
| PH2_Manually | 0.6 | 0.6 | 0.6 |
| Derm7pt_Manually | 0.6 | 0.5 | 0.5 |
| PH2Derm7pt_Manually | 0.4 | 0.7 | 0.6 |
For training the model in a specified dataset, please ensure that you modify the directory paths and specify the parameters in model_params.py
Training a baseline model:
In model_params.py set BASELINE = True
In model_training.py choose the model: models = ["resnet101"] # "densenet201", "seresnext" and uncomment baseline gammas:
# BASELINE
gammas = {"ph2": [None, None, None],
"ph2_dlv3_ft": [None, None, None],
"ph2_manually": [None, None, None],
"derm7pt": [None, None, None],
"derm7pt_dlv3_ft": [None, None, None],
"derm7pt_manually": [None, None, None],
"ph2derm7pt": [None, None, None],
"ph2derm7pt_dlv3_ft": [None, None, None],
"ph2derm7pt_manually": [None, None, None]}and finally, run the script:
python model_training.pyTraining the proposed model:
In model_params.py set BASELINE = False
In model_training.py choose the model: models = ["resnet101"] # "densenet201", "seresnext" and uncomment OURS gammas:
# OURS
gammas = {"ph2": [0.6, 0.6, 0.6],
"ph2_dlv3_ft": [0.6, 0.6, 0.6],
"ph2_manually": [0.6, 0.6, 0.6],
"derm7pt": [0.3, 0.7, 0.3],
"derm7pt_dlv3_ft": [0.6, 0.5, 0.6],
"derm7pt_manually": [0.6, 0.5, 0.5],
"ph2derm7pt": [0.4, 0.9, 0.6],
"ph2derm7pt_dlv3_ft": [0.4, 0.7, 0.6],
"ph2derm7pt_manually": [0.4, 0.7, 0.6]}and finally, run the script:
python model_training.pyIn evaluate.py set the plot_results parameter to True.