用 Sliced Wasserstein 嵌入 + HNSW 实现 4.8 万幅画作的配色检索
Sliced Wasserstein embeddings + HNSW for color-scheme search over 48k paintings [P]
Palette Atlas 用 Sliced Wasserstein 嵌入加自研 HNSW 索引,在 48,695 幅公版画作上实现配色检索。每幅画压缩为 128 个等权颜色,嵌入将 OKLab 颜色投影到 Fibonacci 半球 8 个方向后排序并平均为 16 个分位数,L1 距离即各方向 1D W1 的均值,是真实 W1 的下界。
Palette Atlas (https://itzik123.github.io/PaletteAtlas/) searches public-domain paintings by color scheme. Each image is reduced to 128 colors of equal weight, so the natural distance is the Earth Mover's Distance, which is too slow for nearest-neighbor search over 48,695 items (about 6 ms per pair).
The embedding: project the colors (OKLab) onto 8 directions on a Fibonacci hemisphere, sort, and average into 16 quantiles. L1 between two vectors is the 1D W1 averaged over the directions, a lower bound on the true W1.
Against the exact EMD on 240 queries (overlap with the exact top 10, and how much farther the top 10 lie):
- sliced 8x16, L1: 78%, 1.8%
- sliced 8x16, L2: 69%, 3.4%
- soft color histogram, Hellinger: 45%, 13.5%
- mean color: 3%, 161%
The index is HNSW written from scratch (M=16, efConstruction=200): recall@10 of 1.000 at ef=32, 0.25 ms against 14 ms for brute force. The vectors' intrinsic dimension is about 11, so the hierarchy still helps (see Munyampirwa et al. 2025 on when it doesn't). One change from the paper: the top layer holds 8 k-means landmarks instead of randomly drawn nodes. The search cost is the same (2,558 vs 2,556 distance computations on average), and the top layer becomes one typical painting per color family.
Write-up: https://github.com/itzik123/PaletteAtlas/blob/main/docs/searching-by-color.md
Code: https://github.com/itzik123/PaletteAtlas
submitted by /u/Potential-Barber8658
[link] [留言]
来源:r/MachineLearning · reddit.com