ISIC Challenge - Lesion Segmentation task solved by Mario Lozano Cortés, Artificial Intelligence master's student at Universitat de Barcelona and Universitat Politècnica de Catalunya · BarcelonaTech - UPC. The resolution of this task is part of the Deep Learning for Medical Image Analysis subject.
The overarching goal of this challenge is to develop image analysis tools to enable the automated diagnosis of melanoma from dermoscopic images. Skin cancer is a major public health problem, with over 5,000,000 newly diagnosed cases in the United States every year. Melanoma is the deadliest form of skin cancer, responsible for an overwhelming majority of skin cancer deaths. In 2015, the global incidence of melanoma was estimated to be over 350,000 cases, with almost 60,000 deaths. Although the mortality is significant, when detected early, melanoma survival exceeds 95%. Thus, the goal is to get the highest possible Jaccard Score on the test set.
The training data file contains 900 dermoscopic lesion images in JPEG format, along with the corresponding segmentation mask.
The ISIC Lesion segmentation dataset is originally introduced in the ISIC Challenge webpage. The 2016 challenge will be used in this project.
Data is expected at the dataset folder. In this folder two other folders are expected:
- Training_Data: All the images that are going to be used in the task. The images can be found in the following link.
- Training_GroundTruth: Segmentations for the images at the training data.
- U-Net Xception-style model
- Learning rate = 0.001
- Optimizer = RMSProp
- Batch size = 16
### [First half of the network: downsampling inputs] ###
# Entry block
x = layers.Conv2D(32, 3, strides=2, padding="same")(inputs)
x = layers.BatchNormalization()(x)
x = layers.Activation("relu")(x)
previous_block_activation = x # Set aside residual
# Blocks 1, 2, 3 are identical apart from the feature depth.
for filters in [64, 128, 256]:
x = layers.Activation("relu")(x)
x = layers.SeparableConv2D(filters, 3, padding="same")(x)
x = layers.BatchNormalization()(x)
x = layers.Activation("relu")(x)
x = layers.SeparableConv2D(filters, 3, padding="same")(x)
x = layers.BatchNormalization()(x)
x = layers.MaxPooling2D(3, strides=2, padding="same")(x)
# Project residual
residual = layers.Conv2D(filters, 1, strides=2, padding="same")(
previous_block_activation
)
x = layers.add([x, residual]) # Add back residual
previous_block_activation = x # Set aside next residual
### [Second half of the network: upsampling inputs] ###
for filters in [256, 128, 64, 32]:
x = layers.Activation("relu")(x)
x = layers.Conv2DTranspose(filters, 3, padding="same")(x)
x = layers.BatchNormalization()(x)
x = layers.Activation("relu")(x)
x = layers.Conv2DTranspose(filters, 3, padding="same")(x)
x = layers.BatchNormalization()(x)
x = layers.UpSampling2D(2)(x)
# Project residual
residual = layers.UpSampling2D(2)(previous_block_activation)
residual = layers.Conv2D(filters, 1, padding="same")(residual)
x = layers.add([x, residual]) # Add back residual
previous_block_activation = x # Set aside next residual
# Add a per-pixel classification layer
outputs = layers.Conv2D(num_classes, 3, activation="softmax", padding="same")(x)
Run isic-2016-challenge-lesion-segmentation.ipynb in order to train the selected model.
Jaccard score on test set: 0.815
Dice score on test set: 0.950
Pixel accuracy on test set: 0.951
Sensitivity score on test set: 0.919
Specificity score on test set: 0.970
Improve performance
Feel free to improve and optimize the existing code. To contribute to the project, read the previous points carefully and do the next steps with the project:
- Fork it (https://github.com/SrLozano/ISIC-2016_Challenge-Lesion-Segmentation)
- Create your feature branch (
git checkout -b feature/ISIC-2016_Challenge-Lesion-Segmentation
) - Commit your changes (
git commit -am 'Increased accuracy to ...'
) - Push to the branch (
git push origin feature/ISIC-2016_Challenge-Lesion-Segmentation
) - Create a new Pull Request
Feel free to contact the developer if you have any questions or suggestions about the project or how you can help with it.