@@ -6,74 +6,126 @@ Nearby points are semantically similar papers, so a cluster is a topic.
66
77** Live site: https://flecomet.github.io/cvpr-explorer/ **
88
9- > This is a fork of [ dataplayer12/cvpr-explorer] ( https://github.com/dataplayer12/cvpr-explorer )
10- > ([ cvprexplorer.com] ( http://cvprexplorer.com ) ), rewritten for CVPR 2026: OpenAI embeddings
11- > replaced with the open SPECTER2 scientific-document model, automatic cluster labels, and a
12- > static front-end that needs no server. Original idea and design credit to
13- > [ @dataplayer12 ] ( https://github.com/dataplayer12 ) . Same license as upstream — see [ LICENSE] ( LICENSE ) .
9+ Fork of [ dataplayer12/cvpr-explorer] ( https://github.com/dataplayer12/cvpr-explorer ) , rewritten
10+ for CVPR 2026. See [ Credits] ( #credits ) .
11+
12+ [ ![ CVPR 2026 Explorer showing the full map with one paper selected] ( docs/img/map.png )] ( https://flecomet.github.io/cvpr-explorer/ )
13+
14+ ![ Searching for "diffusion" dims every other paper, then a click opens the abstract] ( docs/img/demo.gif )
1415
1516## Why
1617
1718Conference sites list 4000+ papers as one flat list. Finding the ones you care about means
1819scrolling past thousands you don't. Here you zoom into the region of the map you're interested
19- in — diffusion, 3D reconstruction, medical imaging — and read only those.
20+ in, such as diffusion, 3D reconstruction or medical imaging, and read only those papers.
21+
22+ ## Reading the map
23+
24+ Each point is one paper. Position comes from the abstract: papers with similar abstracts land
25+ close together. Colours mark topic clusters, and the legend names each one with its most
26+ characteristic terms. Grey points are papers that fit no cluster.
27+
28+ - ** Search** matches titles and abstracts and dims every other point, so the shape of the map
29+ stays visible. The query is stored in the URL, so
30+ [ ` ?q=diffusion ` ] ( https://flecomet.github.io/cvpr-explorer/?q=diffusion ) is a shareable link.
31+ - ** Click** a point to show the title, authors and abstract in the side panel, with a link to the PDF.
32+ - ** Scroll and drag** to zoom and pan.
33+
34+ <img src =" docs/img/panel.png " alt =" Side panel with the title, authors, PDF button and abstract of a selected paper " width =" 300 " >
35+
36+ Distances are approximate. UMAP, the 2D projection method, preserves local neighbourhoods
37+ better than global distances. Read "these two papers are close" as meaningful, and "this
38+ cluster is twice as far away as that one" as unreliable.
39+
40+ ## Largest topics
41+
42+ The pipeline finds 32 topic clusters. A further 1477 papers (36%) belong to none of them.
43+ Labels are generated automatically from the abstracts.
44+
45+ | Papers | Cluster label |
46+ | -------:| ---------------|
47+ | 277 | 3d · point · view |
48+ | 197 | medical · clinical · image |
49+ | 176 | attacks · attack · adversarial |
50+ | 149 | gaussian · 3dgs · 3d |
51+ | 134 | generation · diffusion · training |
52+ | 122 | action · vla · robot |
53+ | 114 | reasoning · visual · multimodal |
54+ | 112 | 3d · generation · mesh |
2055
2156## How it works
2257
23- The pipeline is offline; the site is static.
58+ The pipeline is offline and the site is static.
2459
2560| Step | Script | Output |
2661| ------| --------| --------|
2762| Scrape titles, authors, abstracts, PDF links | ` scrape.py ` | ` data/cvpr_2026_papers.json ` |
2863| Embed abstracts with SPECTER2 | ` embed.py ` | ` data/cvpr_2026_specter2.npy ` |
29- | UMAP to 2D + HDBSCAN clusters + c-TF-IDF labels | ` layout.py ` | ` data/cvpr_2026_layout.json ` |
64+ | UMAP to 2D, HDBSCAN clusters, c-TF-IDF labels | ` layout.py ` | ` data/cvpr_2026_layout.json ` |
3065| Merge into the site payload | ` build_site.py ` | ` site/data.json ` |
3166
32- ` site/index.html ` renders that payload client-side with plotly.js. No backend, no API keys at
33- serve time.
67+ ` layout.py ` runs UMAP on the cosine-normalised embeddings, then HDBSCAN, a density-based
68+ clustering method, on the 2D coordinates. Cluster labels use c-TF-IDF: terms score high when
69+ they are frequent in one cluster and rare in the others.
70+
71+ ` site/index.html ` renders the payload client-side with plotly.js. No backend and no API keys
72+ are needed at serve time.
3473
3574## Run the pipeline
3675
3776``` shell
3877pip install -r requirements-pipeline.txt
3978python scrape.py # writes data/cvpr_2026_papers.json
40- python embed.py # writes data/cvpr_2026_specter2.npy ( GPU recommended)
79+ python embed.py # writes data/cvpr_2026_specter2.npy, GPU recommended
4180python layout.py # writes data/cvpr_2026_layout.json
4281```
4382
4483## Serve locally
4584
46- Static site ( what the live URL serves) :
85+ The static site is what the live URL serves:
4786
4887``` shell
4988python build_site.py
5089python -m http.server -d site 8000 # http://localhost:8000
5190```
5291
53- Or the original Dash app:
92+ <details >
93+ <summary >Original Dash app and Docker</summary >
94+
95+ The upstream Dash app is still in the repository:
5496
5597``` shell
5698pip install -r requirements.txt
5799python app.py # http://localhost:8050
58100```
59101
60- Or with Docker:
102+ With Docker:
61103
62104``` shell
63105docker compose build
64106docker compose up
65107```
66108
109+ </details >
110+
67111## Deployment
68112
69113Pushing to ` main ` runs ` .github/workflows/pages.yml ` , which rebuilds ` site/data.json ` and
70114publishes ` site/ ` to GitHub Pages.
71115
72116## Roadmap
73117
74- - [x] SPECTER2 embeddings ( open model, no API key)
118+ - [x] SPECTER2 embeddings, an open model that needs no API key
75119- [x] 2D projection with clusters and automatic topic labels
76- - [x] Static site — no server, no cold start
120+ - [x] Static site with no server and no cold start
77121- [x] Keyword search across titles and abstracts
78122- [ ] Mark papers with released code
79123- [ ] Add more conferences and years back
124+
125+ ## Credits
126+
127+ This is a fork of [ dataplayer12/cvpr-explorer] ( https://github.com/dataplayer12/cvpr-explorer )
128+ ([ cvprexplorer.com] ( http://cvprexplorer.com ) ). The fork replaces the OpenAI embeddings with the
129+ open SPECTER2 scientific-document model, adds automatic cluster labels, and serves a static
130+ front-end that needs no server. The original idea and design are by
131+ [ @dataplayer12 ] ( https://github.com/dataplayer12 ) . Same licence as upstream, see [ LICENSE] ( LICENSE ) .
0 commit comments