Qiu et al., 2026
This dataset contains responses of mouse retinal ganglion cell axonal boutons, imaged with chronic two-photon calcium imaging in the superficial layers of the superior colliculus of awake mice watching natural movie clips. Unlike the other datasets in OpenRetina, the recordings are made at the retinal output rather than in the retina itself, and every session ships the animal's behaviour (pupil size, locomotion) and eye position alongside the responses.
Dataset at a glance
| Species | Recording site | Recording technique | Stimulus type(s) | Stim channels | Behaviour channels | Boutons (quality filtered) | Sessions | Recording fs | Stim fs | Stimulus geometry |
|---|---|---|---|---|---|---|---|---|---|---|
| mouse (awake) | superior colliculus, superficial layers | 2P imaging of RGC axonal boutons | natural movie clips, 10 s | 1 (grayscale) | 2 of 3 used (pupil size, locomotion) | 17,272 of 63,747 recorded | 10 (3 animals) | 30 Hz | 30 Hz | 36 × 64 px |
Bouton counts are the lengths of the shipped neurons_fluor_good masks, counted from the data rather than
taken from the paper.
Sessions
Session keys are dynamic{animal}-{scan}-{idx}-Fluorescence-7b721b-v4a; the leading number groups the ten
sessions into three animals. Clips are 300 frames (10 s at 30 Hz) throughout, in every tier.
| Session | Boutons (of recorded) | Train clips | Validation clips | Test clips × repeats | Non-clip test trials |
|---|---|---|---|---|---|
28188-16-3 |
2,710 (7,636) | 100 | 28 | 95 × 1–10 | 65 (monet2, trippy) |
28188-16-5 |
2,046 (3,605) | 99 | 27 | 94 × 1–10 | 66 (monet2, trippy) |
28188-17-2 |
1,714 (4,788) | 110 | 28 | 96 × 1–10 | 77 (monet2, trippy) |
28188-18-4 |
1,593 (5,759) | 377 | 98 | 6 × 14–18 | — |
28188-19-9 |
787 (6,760) | 382 | 86 | 6 × 15–20 | 18 (chirp, moving bar) |
28712-3-8 |
1,728 (7,338) | 401 | 105 | 6 × 16–19 | 21 (chirp, moving bar) |
29163-2-7 |
1,327 (6,634) | 105 | 26 | 94 × 1–9 | 69 (monet2, trippy) |
29163-4-4 |
3,175 (6,177) | 320 | 86 | 6 × 14–18 | 10 (chirp, moving bar) |
29163-5-8 |
1,113 (8,029) | 410 | 101 | 6 × 17–19 | 17 (chirp, moving bar) |
29163-6-5 |
1,079 (7,021) | 420 | 97 | 6 × 18–20 | 21 (chirp, moving bar) |
The dataset ships its own train/validation assignment per trial, and the OpenRetina dataloader honours it rather than drawing validation clips at random.
Two test designs
Sessions do not share one test paradigm, which matters when pooling results across them:
- Six sessions (
18-4,19-9,3-8,4-4,5-8,6-5) were tested on the same six clips, each repeated 14–20 times. These are the sessions with plenty of training data (320–420 train clips). - Four sessions (
16-3,16-5,17-2,2-7) were instead tested on 94–96 distinct clips with only 1–10 repeats each, and have roughly a quarter of the training data (~100 train clips). Each of these sets is a superset of the six shared clips.
Across all ten sessions there are 96 distinct test clips, of which 6 are common to every session — the only ones for which a cross-session, repeat-averaged comparison is well powered.
Other stimuli in the file tree
Each session's test tier also holds trials that are not natural-movie clips, and these differ by session:
functional-characterisation movies (chirp, moving bar) in five sessions, and monet2 / trippy
parametric noise in the four small-training sessions. The OpenRetina loaders select natural-movie trials via
stimulus_type="clip" and ignore the rest, which also protects the repeat-stacking code from the
frame-count jitter those trials carry.
Dataset structure
The data ships in Sensorium FileTree format — one .npy per trial per stream, with trial i of every
stream describing the same trial, aligned to row i of each meta/trials/*.npy array:
dynamic28188-19-9-Fluorescence-7b721b-v4a
├── data
│ ├── videos # {i}.npy — (36, 64, T) grayscale movie
│ ├── responses # {i}.npy — (n_boutons, T) raw calcium fluorescence
│ ├── behavior # {i}.npy — (3, T) pupil size, Δ-pupil, locomotion
│ └── pupil_center # {i}.npy — (2, T) eye position, input to the shifter
└── meta
├── trials # tiers, condition_hash, clip_movie_name, … (one row per trial)
├── neurons # unit_ids, cell_motor_coordinates, …
└── statistics # per-stream mean/std used for normalisation
Trials are NaN-padded at the end to a length that is uniform within a session but differs between sessions
(300, 450 or 960 frames, the longest trial that session contains); the valid portion of a clip trial is
always the first 300 frames. Neuron quality masks live one level up, in
data-quality/<session-prefix>_neurons_fluor_good.npy, and are index arrays rather than boolean masks.
Resources
- Paper: The functional organization of retinal input to the mouse superior colliculus
- OpenRetina mirror: Hugging Face
OpenRetina support
Train the core-readout model on this dataset with:
uv run openretina train --config-name qiu_2026_core_readout
See the Qiu dataset API reference for the dataloaders, stimulus and response loaders, the pupil loader that feeds the shifter, and the shared trial helpers.