Saltar al visor
Uso educativo. Sin validez clínica. No es un dispositivo médico: no sirve para diagnosticar ni para decidir tratamientos.

El caso · Probar el modelo

Predicción de pCR desde una RM DCE previa al tratamiento

La pCR (respuesta patológica completa) es que, tras la quimioterapia, no quede tumor invasivo. Este modelo estima su probabilidad con una resonancia tomada antes de empezar.

Las imágenes no salen de tu ordenador. La predicción se calcula aquí, en el navegador (WebAssembly); no se sube nada a ningún servidor.

Entrada

Elige uno de los ejemplos o sube las tres fases de un mismo corte.

Un ejemplo

Pacientes de train: 4 de los 5 modelos las vieron al entrenar, así que su resultado es optimista. Sirven para probar la web, no para medirla.

Tus imágenes

Sube las tres fases (PRE, EARLY, LATE) del mismo corte de la misma paciente. Usa un corte que incluya el tumor: el modelo se entrenó con cortes cercanos a la lesión.

Tres PNG en escala de grises de 8 bits, de 256 × 256 px y hasta 2 MB cada uno. No se redimensiona ni se convierte nada.

Antes de predecir se comprueba que las tres fases sean del mismo corte: por el nombre, si los tres siguen <paciente>_z<corte>_<FASE>.png, y por el contenido (misma anatomía, que haya contraste de PRE a EARLY y que parezca una RM del dataset). No detecta fases de cortes vecinos de la misma paciente con los nombres cambiados (su anatomía es casi la misma), ni un corte sin tumor: en ese caso la predicción no tiene sentido y la web no lo sabe. Algunas mezclas de pacientes muy parecidas solo dan un aviso.

ningún archivo ningún archivo ningún archivo

Cargando el modelo…

Visor

PRE antes del contraste
pendiente
EARLY fase temprana
pendiente
LATE fase tardía
pendiente
Captación sobre EARLY
descriptivo: el modelo no lo usa

Elige un ejemplo o sube tus tres imágenes para verlas aquí y obtener la predicción.

¿Cuánto fiarse?

Si se toma una paciente con pCR y otra sin pCR, el modelo da más probabilidad a la primera el de las veces (test, pacientes; margen del al ). Al azar sería el 50 %.
de cada 10De las pacientes que marca como pCR, unas de cada 10 lo son en validación ( de ) y de cada 10 en test ( de ). Sin modelo, de cada 10 alcanzan pCR.
de Casi nunca avisa: en test marcó de las pacientes que sí alcanzaron pCR. El umbral es exigente a propósito: predecir pCR en quien no la alcanzará es el error más grave.

No sirve para ninguna decisión clínica. En test no se distingue del azar (p = ). Además, el umbral se fijó por paciente (media de sus ~10 cortes) y aquí se mira un solo corte, así que el resultado es algo más ruidoso. Los resultados completos están en la página del caso.

Imagen frente a variables clínicas

AUC por paciente en validación, media ± desviación de los 5 folds ( pacientes; la barra empieza en 0,5, el azar). Solo el modelo de imagen se evaluó en test (AUC ).

Lectura: las variables clínicas ordenan a las pacientes bastante mejor que la imagen. Añadir la imagen sube el AUC en (mejora en de 5 folds), pero el margen de esa mejora () incluye el cero. Es solo una comparación: esta web no pide datos clínicos ni los usa.

Más detalles

Cómo funciona

Las fases. Una resonancia con contraste toma la misma imagen varias veces: PRE antes de inyectar el contraste, EARLY poco después y LATE unos minutos más tarde. El tumor suele captar el contraste antes y con más fuerza que el tejido sano. Son el mismo corte en tres momentos, no los colores de una foto.

La red. Una red convolucional propia, entrenada desde cero, con bloques de filtros y parámetros. Recibe las tres fases juntas, reduce la imagen a px y resume el corte con la media de lo que detecta.

El conjunto. Se entrenaron redes iguales, cada una sin ver una quinta parte de las pacientes. La probabilidad es la media de las cinco.

El umbral (). Se fijó en validación para que, de las pacientes sin pCR, como mucho 1 de cada 10 se marque como pCR. El error grave es predecir pCR en quien no la alcanzará: podría llevar a quitarle un tratamiento que sí necesita.

El mapa y la curva de captación son descriptivos: el modelo no los usa. Colorean el de la mama que más realza de PRE a EARLY según cómo cambia de EARLY a LATE: más de +10 %, persistente; entre −10 % y +10 %, meseta; menos de −10 %, lavado. Donde EARLY o LATE están saturados (255), el cambio medido es solo una cota y no se afirma ningún tipo. El momento en que se toma LATE cambia según el hospital, así que el tipo no es comparable entre cohortes.

Cómo se validó

Separación por paciente. Las pacientes de train se repartieron en 5 folds con la columna fold del dataset: todos los cortes de una paciente van al mismo fold.

Validación (5 folds). AUC por paciente ± (media de todas las épocas, la estimación sin sesgo); en la época elegida , algo inflado porque esa época se eligió con la propia validación.

Test, una sola vez. Con todo decidido antes (modelo, umbral y SHA-256 de cada peso en results/test/plan.json), pacientes nunca vistas: AUC []. Coincide con la validación y queda por debajo del modelo de referencia de la asignatura (). Más en la página del caso.

Detalles técnicos

Conjunto de modelos (uno por fold), de parámetros cada uno, exportado a ONNX (opset ) y ejecutado en el navegador con ONNX Runtime Web (WebAssembly, 1 hilo). El SHA-256 del modelo descargado se comprueba contra modelo.json antes de usarlo, y el de cada peso es el de results/test/plan.json.

Pesos del conjunto
PesoFoldÉpoca elegidaSHA-256

ONNX (modelo/conjunto.onnx):

Métricas internas con el umbral , por paciente salvo donde dice «corte»
AUCSensibilidadEspecificidadVPPF1 macro
Comprobar con el pipeline

Pasa los ejemplos por el navegador y compara cada probabilidad con la de PyTorch (CPU, FP32) guardada en modelo.json. La misma cuenta se puede hacer en local con python -m src.inferencia.