|
| 1 | + |
1 | 2 | # Segmentation Challenge |
2 | 3 |
|
3 | | -The goal of this workshop is to let you practice your segmentation skills by developing automated segmentation workflows for a selection of "challenge" images. |
| 4 | +The goal of this challenge is to let you practice your segmentation skills by developing automated segmentation workflows for a selection of images. |
4 | 5 |
|
5 | 6 | You can use any tool you want ([Fiji](https://fiji.sc/), [MorpholibJ](https://imagej.net/plugins/morpholibj), [Scikit-image](https://scikit-image.org/), [CellPose](https://www.cellpose.org/), [SAM](https://github.com/facebookresearch/segment-anything), [Ilastik](https://www.ilastik.org/)...) to generate your segmentation masks. The idea is to test and figure out which methods work best for each image. |
6 | 7 |
|
7 | 8 | ## Images |
8 | 9 |
|
9 | | -The challenge images are located in the [`Images`](./Images/) folder. |
| 10 | +The challenge images are located in the [`Images`](./public/Images/) folder. For each image, a *ground truth* segmentation mask is available in the [`Ground_Truths`](./public/Ground_Truths/) folder. These ground truth masks have been carefully edited to be as close as possible to an ideal result. |
10 | 11 |
|
11 | | - |
| 12 | +<img src="./assets/overview.svg" alt="Images" style="width:100%;" /> |
12 | 13 |
|
13 | | -| Image | Description | |
14 | | -| ---------- | ----------- | |
15 | | -| sunflowers.tif | An optical image of sunflower seeds. | |
16 | | -| grains.tif | An SEM image of a grain structure. | |
17 | | -| sheep.tif | An aerial photograph of sheep in a field. | |
| 14 | +| Image | Description | Credit | |
| 15 | +| ---------- | ----------- | ------ | |
| 16 | +| sunflowers.tif | An optical image of sunflower seeds. | Courtesy of Daniel Sage, EPFL | |
| 17 | +| fish.tif | A historical drawing of fish in the Limat river. | Viatimages @ Unil | |
| 18 | +| grains.tif | An SEM image of a grain structure. | Courtesy of Nanolab @ EPFL, Anna Varini | |
18 | 19 |
|
19 | | -**Image references**: the original image sources are mentioned [here](./Images/_references.txt). |
| 20 | +## Evaluate your segmentation |
20 | 21 |
|
21 | | -## Ground truths |
| 22 | +You can evaluate your segmentation mask and see how it compares to the “ground truthˮ using our web dashboard: |
22 | 23 |
|
23 | | -For each image, a *ground truth* segmentation mask is available in the [`Ground_Truths`](./Ground_Truths/) folder. These ground truth masks have been carefully edited to be as close as possible to an ideal result. |
| 24 | +[➡️ Web Dashboard](https://epfl-center-for-imaging.github.io/segmentation-challenge/) |
24 | 25 |
|
25 | | -## Submissions |
| 26 | + |
26 | 27 |
|
27 | | -You can share your segmentation masks to see how they compare to the “ground truthˮ and other submissions. |
| 28 | +Your segmentation masks should be labeled arrays with values representing instances. They should have the same size (number of pixels in X and Y) as the original image. They should be saved as a TIFF file. |
28 | 29 |
|
29 | | -Upload your segmentation mask files (in **TIFF** format) by drag and dropping them into |
| 30 | +The quality of your segmentation mask is evaluated based on two metrics: |
30 | 31 |
|
31 | | -- the Marimo thing I'll make (TODO) or |
32 | | -- the [`Submissions`](./Submissions/) folder of the shared Jupyter lab session provided by workshop organizers. |
| 32 | +- **Object count** relative to the ground truth count. |
| 33 | +- **Intersection over union (IoU)** computed on the binary version of the mask. |
33 | 34 |
|
34 | | -The segmentation mask should be a **labeled array** with values representing instances. It should have the same size (same number of pixels in X and Y) as the original image. |
| 35 | +We also average both scores to give an overall score. |
35 | 36 |
|
36 | | -## Evaluation |
| 37 | +**Shared folder** |
37 | 38 |
|
38 | | -The quality of your submissions is evaluated based on two metrics: |
39 | | - |
40 | | -- **Object count** relative to the ground truth count (`oc_score`). |
41 | | -- **Intersection over union (IoU)** computed on the binary version of the mask (`iou_score`). |
42 | | - |
43 | | -We also average both scores to give an overall score (`overall_score`). |
44 | | - |
45 | | -These metrics are used to rank submissions in the **leaderboards** displayed on screen. |
| 39 | +If your workshop organizers have prepared a shared Jupyterlab session, you can upload your segmentation mask files (in TIFF format) by drag and dropping them into the [`Submissions`](./Submissions/) folder on Jupyter lab, so that you can also see how they compare to other submissions. |
46 | 40 |
|
47 | 41 | ## Solutions |
48 | 42 |
|
49 | | -A few reference solutions are available in the [Solutions](./Solutions/) folder. We encourage you to take a look at them *after* the workshop! |
| 43 | +A few reference segmentation workflows are available in the [solutions](./solutions/) folder. We encourage you to take a look at them *after* the workshop! |
50 | 44 |
|
51 | 45 | --- |
52 | 46 | ## Setup (for workshop organizers) |
@@ -83,18 +77,10 @@ In the shared Jupyter lab session: |
83 | 77 | python leaderboard.py |
84 | 78 | ``` |
85 | 79 |
|
86 | | -2. In a new terminal window, run [display.py](./Scripts/display.py) to display a particular leaderboard. |
87 | | - |
88 | | -For the overall leaderboard: |
89 | | - |
90 | | -```bash |
91 | | -python display.py leaderboard |
92 | | -``` |
93 | | - |
94 | | -For a specific challenge: |
| 80 | +2. In a new terminal window, run [display.py](./Scripts/display.py) to display the leaderboard of a particular challenge: |
95 | 81 |
|
96 | 82 | ```bash |
97 | | -python display.py sheep |
| 83 | +python display.py grains |
98 | 84 | ``` |
99 | 85 |
|
100 | 86 | Repeat this process for all challenges, then reorganize the layout so that the leaderboards are visible side-by-side: |
|
0 commit comments