[](https://www.python.org/)
| Method | **Boundary F** | Precision | Recall | Regions | Time (ms) |
|---|---|---|---|---|---|
| *Another human (ceiling)* | ***0.904*** | — | — | — | — |
| **Mean-shift** | **0.4331** | 0.373 | 0.624 | 185 | 1096 |
| Region growing | 0.4051 | 0.410 | 0.468 | 7 | **1.9** |
| Watershed + markers | 0.3512 | 0.418 | 0.334 | 7 | 5.3 |
| GrabCut (seeded) | 0.3358 | **0.529** | 0.273 | 7 | 1248 |
| SLIC superpixels | 0.3115 | 0.205 | **0.743** | 171 | 147 |
| Watershed (no markers) | 0.2190 | 0.126 | **0.999** | **7126** | 7.1 |
| **Grid tiles (control)** | **0.1663** | 0.122 | 0.292 | 175 | 1.1 |
The natural thing to measure is IoU against a foreground mask. Doing that gives this table:
**A grid of rectangles that has never looked at the image scores 0.914 and beats five of the six real methods.** It beats mean-shift, the best method by boundary F, by 0.54.
Two things conspire to produce that.
The region-to-foreground conversion uses the truth. labels_to_foreground assigns each region to foreground or background by which it overlaps more. That is deliberately generous — so a low score cannot be blamed on the conversion — and the consequence is that **the more regions a method returns, the more the oracle assignment can do for it**. At one region per pixel the score is 1.0 for any method whatsoever.
And the binary target was wrong in the first place. A human segmentation is a *labelling*, not a figure/ground split. dominant_foreground takes the largest annotated region to be the background and inverts it, which fails whenever that is not true: on memorial_arch the largest region covers 24.5% of the frame, so the "foreground" is 75.5% of the picture and corresponds to nothing anyone drew. Methods returning sensible regions score 0.000 against it.
Boundary F is the metric BSDS was built for and the one every published number on it uses. It does not reward region count, and under it the grid sits last. Pinned by test_a_grid_of_rectangles_beats_most_real_methods_on_iou and test_boundary_recall_separates_what_iou_cannot.
---
Code and full results on GitHub (code private)
Every number is read from the file the run produced. github.com/hammasbuilds · kaggle.com/muhammadhammas13