AI for Dermatological Diagnosis
Module: Healthcare AI | Difficulty: Advanced
ABCD Rule
where A = Asymmetry, B = Border, C = Color, D = Diameter.
Skin Lesion Classification
| Task | Model | Accuracy | AUC | Dataset | |------|-------|----------|-----|---------| | Binary (melanoma) | ResNet-50 | 0.91 | 0.96 | ISIC Archive | | Multi-class (8) | EfficientNet | 0.85 | 0.93 | ISIC 2019 | | Segmentation | U-Net | 0.91 Dice | - | ISIC Archive | | 3-way classification | DenseNet | 0.88 | 0.94 | PH2 Dataset |
import torch
import torch.nn as nn
import torchvision.models as models
class SkinLesionClassifier(nn.Module):
def __init__(self, num_classes=8, pretrained=True):
super().__init__()
backbone = models.efficientnet_b3(pretrained=pretrained)
self.features = backbone.features
num_features = backbone.classifier[1].in_features
self.attention = nn.Sequential(
nn.Conv2d(num_features, 1, 1), nn.Sigmoid())
self.classifier = nn.Sequential(
nn.AdaptiveAvgPool2d(1), nn.Flatten(), nn.Dropout(0.4),
nn.Linear(num_features, 256), nn.ReLU(), nn.Linear(256, num_classes))
def forward(self, x):
features = self.features(x)
attn_map = self.attention(features)
features = features * attn_map
return self.classifier(features), attn_map
def compute_abcd_score(image_mask):
h, w = image_mask.shape
left = image_mask[:, :w//2].sum()
right = image_mask[:, w//2:].sum()
top = image_mask[:h//2, :].sum()
bottom = image_mask[h//2:, :].sum()
asymmetry = (abs(left - right) + abs(top - bottom)) / image_mask.sum()
from scipy.ndimage import binary_dilation
dilated = binary_dilation(image_mask, iterations=3)
border_area = dilated.sum() - image_mask.sum()
border = 1 - (border_area / image_mask.sum())
diameter = np.sqrt(4 * image_mask.sum() / np.pi)
score = (asymmetry * 1.3 + border * 0.1 + 0.5 + diameter * 0.5) / 1.5
return score, {'asymmetry': asymmetry, 'border': border, 'diameter': diameter}
model = SkinLesionClassifier(num_classes=8)
x = torch.randn(1, 3, 224, 224)
output, attn = model(x)
print(f'Lesion classification logits: {output.shape}')
print(f'Attention map: {attn.shape}')
Research Insight: Dermatology AI faces the challenge of domain shift: images captured with different dermatoscopes, lighting conditions, and skin tones show significant variation. AI models trained primarily on lighter skin tones exhibit reduced performance on darker skin tones, potentially exacerbating health disparities. Multi-center training data with diverse populations is essential.