Buckets:
🧬 Contexto de la Competencia: Biohub - Cell Tracking During Development
Documento de Contexto Maestro (
folder-context.md)
Diseñado para que cualquier agente o modelo de Inteligencia Artificial entienda de inmediato el problema biológico, la estructura de datos, las métricas de evaluación, el ecosistema de código, los modelos campeones y las reglas operativas del proyecto.
📌 1. Resumen Ejecutivo y Objetivo Biológico
- Nombre de la Competencia: Biohub - Cell Tracking During Development (Kaggle Code Competition).
- Organizador: Chan Zuckerberg Biohub San Francisco.
- Problema Científico: Reconstruir el linaje celular completo en 3D+Tiempo (árboles genealógicos y grafos acíclicos dirigidos - DAGs) a partir de grabaciones de microscopía de fluorescencia 4D durante el desarrollo embrionario del pez cebra (Danio rerio).
- Objetivo del Algoritmo:
- Detección Espacial (Nodos): Predecir las coordenadas 3D $(t, z, y, x)$ de cada centroide celular activo en cada fotograma temporal.
- Asociación Temporal (Enlaces / Edges): Conectar los centroides entre fotogramas consecutivos $(t \to t+1)$ o con salto de fotograma (gap closing, $t \to t+2$).
- Divisiones Celulares (Mitosis): Identificar cuándo una célula madre da origen a dos células hijas ($1 \to 2$).
📦 2. Estructura y Física de los Datos
A. Anisotropía Espacial (CRÍTICO)
Los vóxeles de microscopía no son cúbicos; el eje axial ($Z$) tiene 4 veces menor resolución que los ejes laterales ($Y, X$):
Toda distancia euclidiana o cálculo de costo de emparejamiento temporal DEBE multiplicar las coordenadas por este vector de escala física antes de calcular distancias.
B. Formato de Archivos
- Imágenes 4D (
.zarr): Volúmenes $(T, Z, Y, X)$ en formato Zarr v3 con compresión Blosc, típicamente de forma $(100, 64, 256, 256)$ en uint16. - Etiquetas de Entrenamiento (
.geff): Grafos biológicos (Graph Exchange Format) con propiedades de nodos $(t, z, y, x)$ y enlaces de linaje. - Directorio en Kaggle:
biohub-cell-tracking-during-development/ ├── train/ # 199 videos (Imágenes + Etiquetas .geff) -> SOLO PARA ENTRENAR ├── test/ # Videos de Test (4 en modo edición / ~199 privados en Submit) └── sample_submission.csv # Formato requerido (Solo contiene IDs de test/)
📐 3. Métrica Oficial y Reglas de Evaluación
- Métrica: Promedio ponderado de Edge Jaccard (asociaciones temporales correctas con penalización por densidad) y Division Jaccard (detección exacta de mitosis).
- Restricciones de Kaggle:
- Competencia de código pura (Code Competition).
- Sin acceso a internet durante la inferencia.
- Límite estricto de tiempo: 9 a 12 horas máximo.
- Hardware permitido: GPU Tesla T4 (Dual T4 x2) o CPU (4 vCPUs). Las GPUs P100 (sm_60) están prohibidas por reglas y generan error de CUDA.
🏆 4. Modelos Campeones y Hallazgos Consolidados
| Experimento | Arquitectura | Esquema | Score CV | Hallazgo Principal |
|---|---|---|---|---|
EXP-017 |
3D Wide Anisotropic U-Net (64ch) | 90/10 |
0.9010 🏆 |
Grand Champion: Cuadruplicar canales a 64 y entrenar en 179 volúmenes rompió la barrera de 0.90. |
EXP-019 |
3D Wide ResUNet (64ch) | 90/10 |
0.8867 |
Bloques residuales ResBlock3D con menor pérdida de entrenamiento histórica (0.000343). |
EXP-022 |
StarDist 3D Polyhedra (32 Rayos) | 90/10 |
0.8601 |
Récord Histórico de Recall (99.23%): Despega cúmulos densos sin mapas gaussianos continuos. |
EXP-028 |
3D Wide Attention U-Net (64ch) | 90/10 |
En Progreso | Spatial Attention Gates 3D para filtrar el 98% de líquido de fondo. |
EXP-029 |
3D Full-Volume GroupNorm U-Net | 90/10 |
En Progreso | GroupNorm3d (8 grupos) para estabilidad numérica total con batch size 1 en volúmenes completos. |
🚀 5. Protocolo Estricto de Despliegue en Kaggle (Kaggle Submissions)
Cualquier cuaderno generado para Kaggle DEBE seguir estas 5 reglas obligatorias:
- Búsqueda Exclusiva en
test/:
Nunca incluirtrain/en la búsqueda de inferencia; de lo contrario, Kaggle procesará 203 videos en lugar de 4 durante el Save Version y tardará 8 horas en lugar de 2 minutos. - Cargador Universal Zarr (
zarr.open):
Cargar usandozarr.open(path)["0"][t]con fallback Blosc2, evitando nombres fijos como{t}.0.0.0para prevenir imágenes vacías de ceros (0 nodes, 0 edges). - Metadatos
kernelspecen el.ipynb:
Incluir"kernelspec": {"name": "python3", "display_name": "Python 3"}para evitar errores de Papermill. - Validación Previa de
state_dict:
Probar localmentemodel.load_state_dict(...)antes de subir para evitar desajustes de capas. - Configuración de Acelerador:
- GPU:
"enable_gpu": "true","machine_shape": "NvidiaTeslaT4". - CPU:
"enable_gpu": "false", contorch.set_num_threads(4)para inferencia rápida AVX-512.
- GPU:
🖥️ 6. Infraestructura de Hardware y Reglas Operativas
- Máquina Local del Usuario (Mac):
CERO cómputo pesado. Solo se utiliza para edición de código, control de versiones y sincronización SSH/Kaggle CLI. - Cluster Físico Remoto (4x Servidores con GPU NVIDIA RTX 4090 24GB):
A1557-UBU(100.87.128.33:2222)A1556-UBU(100.107.113.22:2222)A1560-UBU(100.84.253.117:2222)A1552-UBU(100.112.138.117:2222)
- Bóveda de Conocimiento Obsidian:
Ubicada enLibrería-Registros/. Todo nuevo experimento o hallazgo se documenta automáticamente en 01_Registro_Experimentos.md.
🗂️ 7. Mapa de Directorios del Repositorio
/Users/matias/Proyects/Biohub/
├── folder-context.md # Este archivo (Contexto maestro para IAs)
├── src/ # Código fuente modular
│ ├── dataset.py # Dataset por parches 3D con augmentations
│ ├── dataset_full_volume.py # Dataset de volumen completo (64x256x256)
│ ├── models/
│ │ ├── unet3d_anisotropic.py # AnisotropicUNet3D (EXP-017 Champion)
│ │ ├── resnet_unet3d.py # ResUNet3D (EXP-019)
│ │ ├── stardist3d.py # StarDist3D Polyhedra (EXP-022)
│ │ ├── attention_unet3d.py # AttentionUNet3D (EXP-028)
│ │ └── unet3d_groupnorm.py # GroupNormUNet3D (EXP-029)
│ └── tracking/
│ └── gap_closing_tracker.py # Algoritmo de tracking LAP + Gap Closing
├── champion_weights/ # Pesos .pt de los modelos campeones
├── kaggle_submission_exp017/ # Paquete de envío Kaggle EXP-017 (Wide UNet T4)
├── kaggle_submission_exp019/ # Paquete de envío Kaggle EXP-019 (ResUNet T4)
├── kaggle_submission_exp022/ # Paquete de envío Kaggle EXP-022 (StarDist CPU)
└── Librería-Registros/ # Bóveda Obsidian de Bitácoras y Experimentos
🧪 8. Ramas experimentales independientes preparadas
Además de la familia de detectores 3D por heatmaps, existen dos estrategias experimentales y una nueva variante full-fit:
- EXP-030: versión original con dos seeds de
TemporalUNet3D + Node Transformer, TTA de ocho vistas, fusión calibrada, retention guard e ILP. Conservar su historial y checkpoints. - EXP-030B: nueva versión de EXP-030; entrena ambos seeds con
100 %de los datos, sin validación, durante55 × 750por seed. - EXP-031: revisión detector-first full-fit con hard-negative mining,
100 %train /0 %validación,65 × 850, ILP preservado y motion/divisiones sólo sobre nodos no asociados.
EXP-030B y la revisión de EXP-031 deben entrenarse únicamente en una GPU remota. Su estado no debe cambiarse a “En progreso” hasta observar el sentinel RUNNING.json correspondiente. Como no tienen holdout, su CV debe registrarse como N/A — full-fit sin validación, nunca como la loss de train.
🚦 9. Experiment Promotion Board
El evaluador y selector reusable están concentrados en test-exp-local/: inferencia real, validación, agregación, CLI, protocolo congelado y tests. Sólo acepta artefactos con conteos oficiales por dataset, mismo protocol_id y exactamente las mismas muestras. Ordena por el límite inferior bootstrap 95% del score oficial y usa integridad, cobertura y runtime como gates.
El piloto remoto EXP-017 vs EXP-019 está en experiments/Promotion_Board_EXP017_EXP019_Pilot/: EXP-017 0.8098, EXP-019 0.7783, delta pareado +0.0315 con IC 95% [+0.0046, +0.0592]. El framework queda adoptado; el protocolo legacy de 12 muestras sigue siendo piloto y no una métrica global definitiva.
Xet Storage Details
- Size:
- 9.14 kB
- Xet hash:
- 5890fdc92a7c91b233bd26e27978e3fb08c382a0baa3b3dbd49355452ed5fc86
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.