Modelo de clasificación multiclase de lesiones cutáneas dermoscópicas entrenado sobre HAM10000 (ISIC 2018 Task 3) mediante fine-tuning progresivo. Segunda etapa del pipeline de análisis de lesiones cutáneas —...
Fonte do modelo
Descrição da fonte
Modelo de clasificación multiclase de lesiones cutáneas dermoscópicas entrenado sobre HAM10000 (ISIC 2018 Task 3) mediante fine-tuning progresivo. Segunda etapa del pipeline de análisis de lesiones cutáneas — clasifica la región segmentada por U-Net en 7 categorías clínicas.
Repositorio: skin-lesion-analysis
Fontes
1 fonteVerificado 28 de set.
Artefatos de modelo
1 artefatoTrechos de fonte
2 trechos| Métrica | Valor |
|---|---|
| F1 macro (val) | 0.7700 |
| F1 weighted (val) | 0.7877 |
| AUC macro (val) | 0.9719 |
| Accuracy (val) | 0.77 |
Split 80/20 estratificado sobre HAM10000 (10.015 imágenes). 8.012 imágenes de entrenamiento, 2.003 de validación.
| Clase | Precision | Recall | F1 | Soporte |
|---|---|---|---|---|
| MEL — Melanoma | 0.40 | 0.82 | 0.54 | 223 |
| NV — Melanocytic nevus | 0.98 | 0.73 | 0.84 | 1341 |
| BCC — Basal cell carcinoma | 0.77 | 0.92 | 0.84 | 103 |
| AKIEC — Actinic keratosis | 0.71 | 0.74 | 0.72 | 65 |
| BKL — Benign keratosis | 0.62 | 0.82 | 0.71 | 220 |
| DF — Dermatofibroma | 0.81 | 0.91 | 0.86 |
Nota sobre MEL: precision 0.40 con recall 0.82 indica que el modelo genera falsos positivos de melanoma. En contexto clínico este comportamiento es aceptable — mejor sobrediagnosticar que infradiagnosticar — pero refleja la dificultad intrínseca de distinguir melanoma de nevus en imágenes ambiguas del dataset.
import torch
import timm
import albumentations as A
from albumentations.pytorch import ToTensorV2
from huggingface_hub import hf_hub_download
import numpy as np
from PIL import Image
CLASES = ["MEL", "NV", "BCC", "AKIEC", "BKL", "DF", "VASC"]
# 1. Descargar el checkpoint
ruta = hf_hub_download(
repo_id="Jesusrodriguezf90/efficientnet-b0-isic2018-classification",
filename="best_efficientnet_b0.pth"
)
# 2. Reconstruir el modelo
model = timm.create_model(
"efficientnet_b0",
pretrained=False,
num_classes=7,
)
model.load_state_dict(torch.load(ruta, map_location="cpu"))
model.eval()
# 3. Preprocesamiento — mismo pipeline que en entrenamiento
transform = A.Compose([
A.Resize(256, 256),
A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),
ToTensorV2(),
])
# 4. Inferencia
img = np.array(Image.open("imagen_dermoscopica.jpg").convert("RGB"))
tensor = transform(image=img)["image"].unsqueeze(0)
with torch.no_grad():
logits = model(tensor)
probs = torch.softmax(logits, dim=1).squeeze()
pred = probs.argmax().item()
print(f"Predicción: {CLASES[pred]} ({probs[pred]:.3f})")
El entrenamiento se divide en dos fases para preservar los pesos preentrenados en ImageNet:
Fase 1 — encoder congelado (5 épocas, lr=1e-3): solo se entrenan los 8.967 parámetros del clasificador final. El encoder está congelado para evitar que los gradientes erráticos del clasificador recién inicializado destruyan las representaciones aprendidas en ImageNet.
Fase 2 — modelo completo descongelado (30 épocas máx, lr=1e-4): se descongela todo el modelo con lr reducido para afinar los pesos del encoder sin sobreescribir el conocimiento previo. Early stopping con paciencia=5 sobre F1 macro val.
Doble estrategia complementaria:
Se realizaron tres experimentos para determinar la configuración óptima:
| Experimento | Configuración | F1 macro | AUC |
|---|---|---|---|
| E1 — baseline | epochs_unfrozen=20 | 0.7493 | 0.9704 |
| E2 — regularización | + drop_rate=0.2 + label_smoothing=0.1 + epochs_unfrozen=30 | ~0.50 | ~0.96 |
| E3 — configuración final ✓ | Solo epochs_unfrozen=30 | 0.7700 | 0.9719 |
E2 demostró que combinar dropout adicional y label smoothing con un dataset fuertemente desbalanceado ralentiza la convergencia sin beneficio neto. La configuración final (E3) amplía el margen de entrenamiento para que el early stopping pueda actuar correctamente.
| Parámetro | Valor |
|---|---|
| Dataset | HAM10000 / ISIC 2018 Task 3 |
| Imágenes entrenamiento | 8.012 |
| Split | 80/20 estratificado (seed=42) |
| Resolución entrada | 256×256 |
| Épocas fase 1 (frozen) | 5 |
| Épocas fase 2 (unfrozen) | 30 máx (early stopping paciencia=5) |
| Épocas ejecutadas | 35 |
| lr fase 1 | 1e-3 |
| lr fase 2 | 1e-4 |
| Weight decay | 1e-4 |
| Loss | CrossEntropyLoss con pesos de clase |
| Optimizer | AdamW |
| Scheduler | ReduceLROnPlateau (factor=0.1, patience=3) |
HAM10000 — ISIC 2018 Task 3
International Skin Imaging Collaboration (ISIC)
🔗 https://challenge.isic-archive.com/data/#2018
Tschandl et al. (2018). The HAM10000 dataset, a large collection of multi-source dermatoscopic images of common pigmented skin lesions. Scientific Data
MIT
--- language: - en license: mit tags: - pytorch - classification - medical-imaging - skin-lesion - efficientnet - efficientnet-b0 - isic2018 - dermatology - transfer-learning - fine-tuning datasets: - isic-2018 base_model: - timm/efficientnet_b0.ra_in1k metrics: - f1 - roc_auc pipeline_tag: image-classification library_name: pytorch --- # EfficientNet-B0 — Clasificación de Lesiones Cutáneas ISIC 2018 Modelo de clasificación multiclase de lesiones cutáneas dermoscópicas entrenado sobre HAM10000 (ISIC 2018 Task 3) mediante fine-tuning progresivo. Segunda etapa del pipeline de análisis de lesiones cutáneas — clasifica la región segmentada por U-Net en 7 categorías clínicas. **Repositorio:** [skin-lesion-analysis](https://github.com/Jesusrodriguezf90/skin-lesion-analysis) **Modelo de segmentación (primera etapa):** [unet-resnet34-isic2018-segmentation](https://huggingface.co/Jesusrodriguezf90/unet-resnet34-isic2018-segmentation) --- ## Métricas | Métrica | Valor | |---|---| | F1 macro (val) | **0.7700** | | F1 weighted (val) | **0.7877** | | AUC macro (val) | **0.9719** | | Accuracy (val) | **0.77** | > Split 80/20 estratificado sobre HAM10000 (10.015 imágenes). 8.012 imágenes de entrenamiento, 2.003 de validación. ### Métricas por clase | Clase | Precision | Recall | F1 | Soporte | |---|---|---|---|---| | MEL — Melanoma | 0.40 | 0.82 | 0.54 | 223 | | NV — Melanocytic nevus | 0.98 | 0.73 | 0.84 | 1341 | | BCC — Basal cell carcinoma | 0.77 | 0.92 | 0.84 | 103 | | AKIEC — Actinic keratosis | 0.71 | 0.74 | 0.72 | 65 | | BKL — Benign keratosis | 0.62 | 0.82 | 0.71 | 220 | | DF — Dermatofibroma | 0.81 | 0.91 | 0.86 | 23 | | VASC — Vascular lesion | 0.82 | 0.96 | 0.89 | 28 | > **Nota sobre MEL:** precision 0.40 con recall 0.82 indica que el modelo genera falsos positivos de melanoma. En contexto clínico este comportamiento es aceptable — mejor sobrediagnosticar que infradiagnosticar — pero refleja la dificultad intrínseca de distinguir melanoma de nevus en imágenes ambiguas del dataset. --- ## Uso ```python import torch import timm import albumentations as A from albumentations.pytorch import ToTensorV2 from huggingface_hub import hf_hub_download import numpy as np from PIL import Image CLASES = ["MEL", "NV", "BCC", "AKIEC", "BKL", "DF", "VASC"] # 1. Descargar el checkpoint ruta = hf_hub_download( repo_id="Jesusrodriguezf90/efficientn...
Source context: 0 downloads · 0 likes · Pipeline image-classification · Library pytorch · Repo Jesusrodriguezf90/efficientnet-b0-isic2018-classification
| 23 |
| VASC — Vascular lesion | 0.82 | 0.96 | 0.89 | 28 |
| Parámetros totales | 4.016.515 |
| Hardware | Kaggle GPU T4 |