Matycaba2016/Biohub / docs /folder-context.md
Matycaba2016's picture
|
download
raw
9.14 kB
# 🧬 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:**
1. **Detección Espacial (Nodos):** Predecir las coordenadas 3D $(t, z, y, x)$ de cada centroide celular activo en cada fotograma temporal.
2. **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$).
3. **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$):
$$\text{SCALE} = [1.625,\, 0.40625,\, 0.40625]\,\mu\text{m/vóxel}$$
> [!IMPORTANT]
> 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:**
```text
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:
1. **Búsqueda Exclusiva en `test/`:**
Nunca incluir `train/` 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.
2. **Cargador Universal Zarr (`zarr.open`):**
Cargar usando `zarr.open(path)["0"][t]` con fallback Blosc2, evitando nombres fijos como `{t}.0.0.0` para prevenir imágenes vacías de ceros (`0 nodes, 0 edges`).
3. **Metadatos `kernelspec` en el `.ipynb`:**
Incluir `"kernelspec": {"name": "python3", "display_name": "Python 3"}` para evitar errores de Papermill.
4. **Validación Previa de `state_dict`:**
Probar localmente `model.load_state_dict(...)` antes de subir para evitar desajustes de capas.
5. **Configuración de Acelerador:**
* GPU: `"enable_gpu": "true"`, `"machine_shape": "NvidiaTeslaT4"`.
* CPU: `"enable_gpu": "false"`, con `torch.set_num_threads(4)` para inferencia rápida AVX-512.
---
## 🖥️ 6. Infraestructura de Hardware y Reglas Operativas
1. **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.
2. **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`)
3. **Bóveda de Conocimiento Obsidian:**
Ubicada en `Librería-Registros/`. Todo nuevo experimento o hallazgo se documenta automáticamente en [01_Registro_Experimentos.md](file:///Users/matias/Proyects/Biohub/Librería-Registros/01_Registro_Experimentos.md).
---
## 🗂️ 7. Mapa de Directorios del Repositorio
```text
/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, durante `55 × 750` por 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.