File size: 7,007 Bytes
1dcc206
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95c6b3a
 
 
1dcc206
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95c6b3a
1dcc206
 
95c6b3a
 
 
 
1dcc206
756f91c
1dcc206
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95c6b3a
1dcc206
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95c6b3a
1dcc206
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95c6b3a
 
 
 
 
 
 
 
1dcc206
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
---
language: en
license: cc-by-nc-sa-4.0
tags:
  - survival-analysis
  - multiple-instance-learning
  - optimal-transport
  - medical-imaging
  - deep-learning
  - pytorch
model-index:
  - name: OTSurv
    results:
      - task:
          type: survival-analysis
          name: Survival Prediction
        dataset:
          type: TCGA
          name: TCGA (BLCA, BRCA, LUAD, STAD, COADREAD, KIRC)
        metrics:
          - type: c-index
            value: 0.646
---

<div align="center">
  
  <img src="assets/otsurv_logo.png" alt="OTSurv Logo" width="300"/>

  <h2>OTSurv: A Novel Multiple Instance Learning Framework for Survival Prediction with Heterogeneity-aware Optimal Transport</h2>
  <h4>🌟 MICCAI 2025 🌟</h4>
  
  <br>
  
  <p>
    <a href="https://scholar.google.com.hk/citations?user=Tcg-9DcAAAAJ">Qin Ren</a><sup>1 β˜…</sup>&nbsp;
    <a href="https://yfwang.me/">Yifan Wang</a><sup>1</sup>&nbsp;
    <a href="https://lab-smile.github.io/">Ruogu Fang</a><sup>2</sup>&nbsp;
    <a href="https://scholar.google.com/citations?hl=en&user=v3w4IYUAAAAJ">Haibin Ling</a><sup>1</sup>&nbsp;
    <a href="https://chenyuyou.me/">Chenyu You</a><sup>1 β˜…</sup>
  </p>

  <p>
    <sup>1</sup> Stony Brook University &nbsp;&nbsp; 
    <sup>2</sup> University of Florida &nbsp;&nbsp; <br>
    β˜… Corresponding authors
  </p>

<p align="center">
  <a href="https://arxiv.org/abs/2506.20741">
    <img src="https://img.shields.io/badge/πŸ’‘%20Paper-MICCAI-blue?style=flat-square" alt="Paper">
  </a>
  <a href="https://huggingface.co/Y-Research-Group/OTSurv">
    <img src="https://img.shields.io/badge/Hugging%20Face-Model-yellow?style=flat-square&logo=huggingface" alt="Hugging Face Model">
  </a>
  <a href="https://huggingface.co/datasets/Y-Research-Group/OTSurv_Dataset">
    <img src="https://img.shields.io/badge/Hugging%20Face-Dataset-green?style=flat-square&logo=huggingface" alt="Hugging Face Dataset">
  </a>
  <a href="#">
    <img src="https://img.shields.io/badge/PyTorch-2.3-EE4C2C?style=flat-square&logo=pytorch" alt="PyTorch 2.3">
  </a>
</p>

</div>


## 🧠 DL;TR

  <p>
    Welcome to the official repository of <b>OTSurv</b>, a novel framework that integrates 
    <b>Multiple Instance Learning (MIL)</b> with <b>Heterogeneity-aware Optimal Transport (OT)</b> 
    to tackle the challenges of survival prediction in medical imaging and clinical data.
  </p>

  <blockquote>
    πŸ“ <b>To be presented at MICCAI 2025</b><br>
    🧠 <b>Focus</b>: Survival Analysis · Multiple Instance Learning · Optimal Transport
  </blockquote>

<div align="center">
  <img src="docs/OTSurv_main.png" alt="OTSurv Framework Overview" width="800"/>
</div>

## πŸ“ Data Organization

### Project Structure
```
OTSurv/
β”œβ”€β”€ checkpoints/
β”‚   β”œβ”€β”€ model_blca_fold0.pth
β”‚   β”œβ”€β”€ model_blca_fold1.pth
β”‚   └── ...
β”‚ 
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ tcga_blca/
β”‚   β”œβ”€β”€ tcga_brca/
β”‚   β”œβ”€β”€ tcga_coadread/
β”‚   β”œβ”€β”€ tcga_kirc/
β”‚   β”œβ”€β”€ tcga_luad/
β”‚   └── tcga_stad/
β”‚ 
β”œβ”€β”€ result/
β”‚   β”œβ”€β”€ exp_otsurv_test/
β”‚   β”œβ”€β”€ exp_otsurv_train/
β”‚   └── visualization/
β”‚
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ scripts/
β”‚   β”œβ”€β”€ analysis/
β”‚   └── ...
β”‚
└── docs/
β”‚   β”œβ”€β”€ OTSurv_main.png
β”‚   └── OTSurv_heatmap.png
```

### Feature Format
- **H5 Format**: Features are stored in `.h5` files (directories ending with `feats_h5/`)

For patch feature extraction, please refer to [CLAM](https://github.com/mahmoodlab/CLAM).

You can download the preprocessed features from [this link](https://huggingface.co/datasets/Y-Research-Group/OTSurv_Dataset).

<br>

## πŸš€ Quick Start

### Prerequisites

- Python 3.8+
- GPU or CPU-only
- Conda package manager

### Installation

```bash
# Clone the repository
git clone https://github.com/Y-Research-SBU/OTSurv.git
cd OTSurv

# Create conda environment
conda env create -f env.yaml
conda activate otsurv
```

### Training

```bash
# Training results will be saved under result/exp_otsurv_train

cd src
# Train on all datasets
bash scripts/train_otsurv.sh

# Train on TCGA-BLCA dataset specifically
bash scripts/train_blca.sh
```

### Evaluation

You can download all trained checkpoints from [this link](https://huggingface.co/Y-Research-Group/OTSurv).

```bash
# Test results will be saved under result/exp_otsurv_test

cd src
# Test on all datasets
bash scripts/test_otsurv.sh

# Test on TCGA-BLCA dataset specifically
bash scripts/test_blca.sh
```

```bash
cd src
# Calculate performance metrics
python analysis/calculate_CIndex_mean_std.py
```

```bash
# Generated figures will be saved under result/visualization

cd src
# Generate survival curves
python analysis/plot_survival_curv.py
```


## πŸ“Š Performance Results

Below are the C-Index performance results of OTSurv across different cancer types:

| Cancer Type | Mean C-Index | Std Dev |
|-------------|-------------|---------|
| **BRCA**  | 0.621 | Β±0.071 |
| **BLCA**  | 0.637 | Β±0.065 |
| **LUAD**  | 0.638 | Β±0.077 |
| **STAD**  | 0.565 | Β±0.057 |
| **COADREAD** | 0.667 | Β±0.111 |
| **KIRC**  | 0.750 | Β±0.149 |

**Overall Performance**: Average C-Index across all datasets is **0.646**

> πŸ’‘ **Note**: C-Index (Concordance Index) is a commonly used performance metric in survival analysis, where values closer to 1.0 indicate better prediction performance.

<br>

## πŸ“š Citation

If you find this work useful, please cite our paper:

```bibtex
@misc{ren2025otsurvnovelmultipleinstance,
      title={OTSurv: A Novel Multiple Instance Learning Framework for Survival Prediction with Heterogeneity-aware Optimal Transport}, 
      author={Qin Ren and Yifan Wang and Ruogu Fang and Haibin Ling and Chenyu You},
      year={2025},
      eprint={2506.20741},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2506.20741}, 
}
```

> πŸ“ **Note**: This paper has been accepted at MICCAI 2025. The citation details will be updated once the paper is officially published.
> 

<br>

## πŸ™ Acknowledgements

This work builds upon the excellent research from:
- [PANTHER](https://openaccess.thecvf.com/content/CVPR2024/html/Song_Morphological_Prototyping_for_Unsupervised_Slide_Representation_Learning_in_Computational_Pathology_CVPR_2024_paper.html)
- [MMP](https://github.com/mahmoodlab/MMP) 
- [CLAM](https://github.com/mahmoodlab/CLAM)
- [PPOT](https://github.com/rhfeiyang/PPOT) 

<br>

## πŸ“„ License

This project is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License - see the [LICENSE.md](LICENSE.md) file for details.

<br>

## 🀝 Contributing

We welcome contributions to **OTSurv**! If you have suggestions, bug reports, or want to add features or experiments, feel free to:

- 🐞 Submit an issue
- πŸ”§ Open a pull request
- πŸ’¬ Start a discussion

---

<p align="center">
  ⭐ <strong>If you find this repository helpful, please consider starring it!</strong> ⭐
</p>