File size: 4,211 Bytes
db3c893
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
cancer_detection/
├─ CMakeLists.txt
├─ README_RUN.md
├─ vendor/
│  └─ stb_image.h   <-- (Debes descargar y colocar este fichero aquí)
├─ src/
│  ├─ main.cpp
│  ├─ data_loader.hpp
│  ├─ data_loader.cpp
│  ├─ optical_model.hpp
│  ├─ optical_model.cu
│  ├─ fungi.hpp
│  ├─ fungi.cu
│  ├─ training.hpp
│  ├─ training.cpp
│  └─ utils.hpp
└─ data/
   ├─ train_labels.csv
   ├─ train/
   │  ├─ abc...123.tif
   │  └─ ...
   └─ test/
      ├─ def...456.tif
      └─ ...

Aquí tienes el programa completo en C++17/CUDA, diseñado para la competición Histopathologic Cancer Detection de Kaggle. Está totalmente en inglés, optimizado para una RTX 3090, y no utiliza ninguna capa convencional como CNNs o Transformers.
Puntos Clave de la Adaptación
Carga de Datos: El programa utiliza la librería stb_image.h (un solo fichero, sin dependencias) para leer las imágenes TIFF directamente desde el disco. Carga las etiquetas del train_labels.csv y asocia los IDs.
Manejo de Color (RGB): Para mantener la simplicidad y la eficiencia del bloque óptico, las imágenes de 96x96x3 (RGB) se convierten a escala de grises (96x96x1) promediando los canales. Esto enfoca el modelo en la estructura y textura, que son clave en histopatología.
Modelo de Clasificación: La salida es un único logit (un valor real), ya que es una clasificación binaria. Usamos una función de pérdida Binary Cross-Entropy (BCE), que es el estándar para esta tarea.
Sistema Micelar: La población de "hongos" evoluciona para generar las máscaras ópticas de 96x96 que mejor discriminan entre tejido sano y tumoral. La "comida" se asigna en función de cómo cada hongo ayuda a reducir el error de clasificación.
Generación de CSV por Época: Después de cada época de entrenamiento, el programa ejecuta la inferencia sobre todo el conjunto de test y genera un fichero submission_epoch_XX.csv listo para subir a Kaggle. Esto te permite monitorizar el progreso y elegir tu mejor modelo.
📦 Estructura del Proyecto
code
Code
cancer_detection/
├─ CMakeLists.txt
├─ README_RUN.md
├─ vendor/
│  └─ stb_image.h   <-- (Debes descargar y colocar este fichero aquí)
├─ src/
│  ├─ main.cpp
│  ├─ data_loader.hpp
│  ├─ data_loader.cpp
│  ├─ optical_model.hpp
│  ├─ optical_model.cu
│  ├─ fungi.hpp
│  ├─ fungi.cu
│  ├─ training.hpp
│  ├─ training.cpp
│  └─ utils.hpp
└─ data/
   ├─ train_labels.csv
   ├─ train/
   │  ├─ abc...123.tif
   │  └─ ...
   └─ test/
      ├─ def...456.tif
      └─ ...
🛠️ Build & Run (Instructions in English)
(Contenido del fichero README_RUN.md)
Mycelium-Optical Cancer Detection (C++/CUDA)
This project implements a non-conventional optical/evolutionary model for the Kaggle Histopathologic Cancer Detection competition.
Architecture:
Input: 96x96 RGB images, converted to grayscale.
Optical Block: A population of evolving "fungi" generates 96x96 amplitude and phase masks.
Propagation: 2D FFT propagation using batched cuFFT.
Detector: Intensity |U|^2 -> log1p non-linearity -> single logit output.
Training: Custom backpropagation + Mycelial evolution (reward, gravity, reproduction).
Loss: Binary Cross-Entropy with Logits.
Requirements:
Linux (recommended) or Windows with WSL2.
CUDA Toolkit 11.4+ (optimized for Ampere, e.g., RTX 3090).
A recent CMake (>= 3.18).
Download stb_image.h from the official GitHub repo and place it in the vendor/ directory.
Build:
code
Bash
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . -j
Run Training & Inference:
Place the Kaggle data in the data/ directory as shown in the project layout.
code
Bash
./cancer_trainer --data_dir ../data --epochs 50 --batch 256 --lr 1e-3 --fungi 256
--data_dir: Path to the directory containing train/, test/, and train_labels.csv.
--batch: Adjust based on VRAM. 256 works well on an RTX 3090 (24GB).
--fungi: Number of fungi in the mycelial population.
The program will save submission_epoch_01.csv, submission_epoch_02.csv, etc., in the execution directory after each epoch.