Add the ADE20K scene model beside the instance one
`models/LICENCE.md` recorded, on 2026-08-21, that no YOLO model trained on ADE20K existed in usable form — the stuff classes photography cares about, sky and vegetation and water, had no model to come from. Re-checked 2026-08-30: Ultralytics now ships a `semantic` task with ADE20K checkpoints, so `models/scene/` holds `yolo26s-sem-ade20k`. This is an addition, not a replacement. A semantic model labels every pixel but merges same-class pixels into one region, so it cannot tell three people apart — which is exactly what clicking a subject needs, and exactly what `segment/`'s COCO instance model already does. The scene tab grades per category and does not care that instances are merged. Keeping both is the point. ## The export is truncated, deliberately Ultralytics ends the graph with `Resize -> ArgMax -> Cast` and hands back a `[1, 640, 640]` u8 label map. The script cuts that tail and exposes the classifier's `[1, 150, 80, 80]` f32 logits instead, for two reasons. Cost: the Resize materialises 150 x 640 x 640 x f32, 246 MB, and ArgMax then reduces across the channel axis, striding 409,600 elements per comparison. On one loaded machine the full graph ran ~1160 ms against ~500 ms truncated — roughly four fifths of the time spent on work the application discards. Those numbers were measured under contention and are upper bounds, but the ratio is structural. Softness: ArgMax destroys the per-class scores, and the scene tab needs them. Softmax over the 150 channels, summed within each photographic category, yields per-category weights summing to 1 at every pixel. Feathering a partition of unity cannot double-grade a boundary, whereas feathering hard labels outward from two adjacent categories paints both grades into the overlap and haloes every horizon. The discarded upsample was never information: the graph's true spatial resolution is the 80x80 logit grid, and the application can resample from that itself. The tail is matched by op type and asserted before cutting, so an upstream graph change fails loudly in the exporter rather than quietly shipping a differently-shaped model. Nothing reads these weights yet — the decode path, the category descriptor grouping 150 classes into ~8 photographic ones, and the scene tab are still to come. At 24 MB this model also wants the runtime-asset treatment `models/face/` already gets on Android rather than `include_bytes!`; embedding it would put ~35 MB of weights in the binary. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+33
-16
@@ -1,9 +1,16 @@
|
||||
# Model weights — licensing
|
||||
|
||||
`yolo26n-seg.onnx` is exported from Ultralytics YOLO26n-seg
|
||||
(`https://huggingface.co/Ultralytics/YOLO26`, `yolo26n-seg.pt`) by
|
||||
`tools/export-seg-model.sh`. `yolo26n-seg.classes.json` is that checkpoint's
|
||||
class vocabulary, written out by the same script.
|
||||
Two Ultralytics checkpoints ship here, both exported by
|
||||
`tools/export-seg-model.sh`, each with its class vocabulary written out by the
|
||||
same script:
|
||||
|
||||
| File | Checkpoint | Trained on | Used by |
|
||||
|---|---|---|---|
|
||||
| `segment/yolo26n-seg.onnx` | `yolo26n-seg.pt` | COCO, 80 *thing* classes | local adjustments, subject selection |
|
||||
| `scene/yolo26s-sem-ade20k.onnx` | `yolo26s-sem-ade20k.pt` | ADE20K, 150 classes | the scene tab's per-category grades |
|
||||
|
||||
Both come from `https://huggingface.co/Ultralytics/YOLO26`. The face weights in
|
||||
`face/` are a separate matter with a separate grant — see `face/README.md`.
|
||||
|
||||
## The grant
|
||||
|
||||
@@ -38,17 +45,27 @@ This was decided deliberately (D14), not arrived at by accident, and
|
||||
classes include the *stuff* categories that matter most in photography — sky,
|
||||
vegetation, water, wall, mountain.
|
||||
|
||||
**No such model exists in usable form.** Checked 2026-08-21: Ultralytics ships
|
||||
YOLO26-seg trained on **COCO**, whose 80 classes are all *things* — person,
|
||||
dog, car, bird, potted plant — and the one HuggingFace repository claiming a
|
||||
YOLO/ADE20K combination (`laxmacl/yolov8-ade20k`) is empty. ADE20K semantic
|
||||
models do exist, but as SegFormer/OneFormer/MaskFormer transformers, not YOLO.
|
||||
**This was true when written and is not any more.** Checked 2026-08-21, no
|
||||
YOLO/ADE20K combination existed: Ultralytics shipped YOLO26-seg on **COCO**
|
||||
only, and the one HuggingFace repository claiming otherwise
|
||||
(`laxmacl/yolov8-ade20k`) was empty. Re-checked 2026-08-30: Ultralytics now
|
||||
ships a `semantic` task with ADE20K checkpoints
|
||||
(`https://docs.ultralytics.com/tasks/semantic`), and `yolo26s-sem-ade20k` is
|
||||
what `scene/` holds.
|
||||
|
||||
So the shipped vocabulary selects **subjects**, not **stuff**. "Select the
|
||||
person" works; "select the sky" does not come from the model and must come from
|
||||
the watershed hierarchy instead. That is a narrower arm B than §4 assumed, and
|
||||
it raises rather than lowers the importance of arm C.
|
||||
So the two vocabularies divide the work rather than compete:
|
||||
|
||||
The loader treats the vocabulary as model metadata rather than compiled-in
|
||||
knowledge, so adding a stuff-class model later is a file plus a descriptor, not
|
||||
a code change.
|
||||
- **`segment/`, COCO, 80 things.** Separates *instances* — clicking one of
|
||||
three people selects that person. This is what local adjustments need, and a
|
||||
semantic model cannot do it: it would return one "person" region covering all
|
||||
three.
|
||||
- **`scene/`, ADE20K, 150 classes.** Labels every pixel, including the *stuff*
|
||||
COCO has no word for — sky, vegetation, water, mountain, wall. This is what
|
||||
the scene tab's per-category grades need, and it does not care that instances
|
||||
are merged, because a per-category grade applies to the whole category.
|
||||
|
||||
Neither replaces the other. Keeping both is the deliberate choice.
|
||||
|
||||
The loader treats each vocabulary as model metadata rather than compiled-in
|
||||
knowledge, which is what made adding the second model a file plus a descriptor
|
||||
rather than a code change — as this document predicted it would be.
|
||||
|
||||
@@ -0,0 +1,152 @@
|
||||
[
|
||||
"wall",
|
||||
"building",
|
||||
"sky",
|
||||
"floor",
|
||||
"tree",
|
||||
"ceiling",
|
||||
"road",
|
||||
"bed",
|
||||
"windowpane",
|
||||
"grass",
|
||||
"cabinet",
|
||||
"sidewalk",
|
||||
"person",
|
||||
"earth",
|
||||
"door",
|
||||
"table",
|
||||
"mountain",
|
||||
"plant",
|
||||
"curtain",
|
||||
"chair",
|
||||
"car",
|
||||
"water",
|
||||
"painting",
|
||||
"sofa",
|
||||
"shelf",
|
||||
"house",
|
||||
"sea",
|
||||
"mirror",
|
||||
"rug",
|
||||
"field",
|
||||
"armchair",
|
||||
"seat",
|
||||
"fence",
|
||||
"desk",
|
||||
"rock",
|
||||
"wardrobe",
|
||||
"lamp",
|
||||
"bathtub",
|
||||
"railing",
|
||||
"cushion",
|
||||
"base",
|
||||
"box",
|
||||
"column",
|
||||
"signboard",
|
||||
"chest of drawers",
|
||||
"counter",
|
||||
"sand",
|
||||
"sink",
|
||||
"skyscraper",
|
||||
"fireplace",
|
||||
"refrigerator",
|
||||
"grandstand",
|
||||
"path",
|
||||
"stairs",
|
||||
"runway",
|
||||
"case",
|
||||
"pool table",
|
||||
"pillow",
|
||||
"screen door",
|
||||
"stairway",
|
||||
"river",
|
||||
"bridge",
|
||||
"bookcase",
|
||||
"blind",
|
||||
"coffee table",
|
||||
"toilet",
|
||||
"flower",
|
||||
"book",
|
||||
"hill",
|
||||
"bench",
|
||||
"countertop",
|
||||
"stove",
|
||||
"palm",
|
||||
"kitchen island",
|
||||
"computer",
|
||||
"swivel chair",
|
||||
"boat",
|
||||
"bar",
|
||||
"arcade machine",
|
||||
"hovel",
|
||||
"bus",
|
||||
"towel",
|
||||
"light",
|
||||
"truck",
|
||||
"tower",
|
||||
"chandelier",
|
||||
"awning",
|
||||
"streetlight",
|
||||
"booth",
|
||||
"television receiver",
|
||||
"airplane",
|
||||
"dirt track",
|
||||
"apparel",
|
||||
"pole",
|
||||
"land",
|
||||
"bannister",
|
||||
"escalator",
|
||||
"ottoman",
|
||||
"bottle",
|
||||
"buffet",
|
||||
"poster",
|
||||
"stage",
|
||||
"van",
|
||||
"ship",
|
||||
"fountain",
|
||||
"conveyor belt",
|
||||
"canopy",
|
||||
"washer",
|
||||
"plaything",
|
||||
"swimming pool",
|
||||
"stool",
|
||||
"barrel",
|
||||
"basket",
|
||||
"waterfall",
|
||||
"tent",
|
||||
"bag",
|
||||
"minibike",
|
||||
"cradle",
|
||||
"oven",
|
||||
"ball",
|
||||
"food",
|
||||
"step",
|
||||
"tank",
|
||||
"trade name",
|
||||
"microwave",
|
||||
"pot",
|
||||
"animal",
|
||||
"bicycle",
|
||||
"lake",
|
||||
"dishwasher",
|
||||
"screen",
|
||||
"blanket",
|
||||
"sculpture",
|
||||
"hood",
|
||||
"sconce",
|
||||
"vase",
|
||||
"traffic light",
|
||||
"tray",
|
||||
"ashcan",
|
||||
"fan",
|
||||
"pier",
|
||||
"crt screen",
|
||||
"plate",
|
||||
"monitor",
|
||||
"bulletin board",
|
||||
"shower",
|
||||
"radiator",
|
||||
"glass",
|
||||
"clock",
|
||||
"flag"
|
||||
]
|
||||
Binary file not shown.
Reference in New Issue
Block a user