twistlabs/fotometis-sky

Sky segmentation for Fotometis, converted to Core ML. It takes a photograph and returns a soft matte of the sky, which the app uses to mask a layer to it.

version v1
input image — 384×384 RGB
output sky — one channel, float16, 0 to 1
size 2.5 MB
licence MIT

Where it comes from

The weights are the demo model published at https://github.com/xiongzhu666/Sky-Segmentation-and-Post-processing, a U²-Net-small trained on sky by its author and released under MIT. Nothing here retrained it. What this repository adds is the conversion: the ncnn graph read back, rebuilt in PyTorch, and traced to Core ML with the ImageNet normalization the model was trained with folded into the package, so a caller hands it pixels and nothing else.

Checked against the original. The rebuilt graph agrees with ncnn's own fp32 result to 7.6e-06 at worst over the whole frame, which is what says the conversion did not quietly transpose or drop anything.

The published package is float16 and differs from that reference by 4.1e-03. That is the cost of half precision rather than a fault, and the way to read it is against ncnn's own half-precision path, which differs from its fp32 result by about 4.9e-02 on this model — so the Core ML build is an order of magnitude closer to the original than the runtime these weights were published for.

What it is not

This is a small model and it is not the best sky segmenter. Its author says so outright, keeps the high-precision version for their own product, and names two places this one fails: building detail read as sky, and heavily textured cloud. Fotometis also ships a SAM 3 tier that is better at both and is eight hundred times the download. This model exists because two megabytes and a few milliseconds is a different thing to offer, not because it wins.

Fixed at 384×384. The graph carries absolute resize targets rather than scale factors, so there is no resolution setting; the caller decides what to show it, and a frame that is not square gets squashed and stretched back.

The output is a probability, not a stretched picture. It is deliberately not normalized against its own frame — a photograph with no sky in it must come back empty rather than fully covered.

Downloads last month
8
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support