Documenting a dataset
A dataset here means a published collection of colour-fundus photographs, with or without
annotations, that someone can obtain and use. The networks trained on it are models
(document-model), the software that runs them is a project (document-project), and the
numbers computed from them are biomarkers (document-biomarker).
Datasets are where this atlas's other three catalogues bottom out. Every model page names the
datasets it trained on; every comparison depends on whether a test set was one of them. So a dataset
page answers three questions the other catalogues cannot: may I use these images, what do the
pixels actually represent, and are these photographs already somewhere else in the catalogue
under a different name.
1. What you produce
Every dataset produces exactly two things:
- A detail page,
docs/datasets/<slug>.md, following template.md in this skill directory.
The slug is the dataset's published name, lowercased, spaces and punctuation replaced by hyphens
(RIM-ONE DL becomes rim-one-dl.md, Chákṣu becomes chaksu.md).
- A row in
docs/DATASETS.md, the summary table, linking to that detail page.
One page per published dataset. An add-on that annotates another dataset's photographs without
adding images of its own — an artery/vein reference standard drawn on someone else's images, say —
goes on that dataset's page as an annotation layer, not on a page of its own, with the
inheritance recorded per section 5.
2. Required sections of the detail page
Use template.md verbatim and keep its section numbering.
What it is — in plain language: how many photographs, of whom, why the collection was made,
and what it is used for. A clinician should be able to read this section alone.
Provenance — a table, not prose, so that the same facts sit in the same place on every page
and can be read across them at a glance. The rows are:
| Row |
Content |
| Home |
The distributor's page |
| Download |
direct, no registration / registration / request, then agreement / no — and the direct URL where one exists. For Kaggle and Hugging Face, give the full URL, never the bare owner/slug: a slug is not clickable, and on Kaggle a link-shared dataset is addressed by a hash URL whose canonical slug 404s for anyone without access, so the two are not interchangeable. Mark a third-party re-upload as such — its licence field is the uploader's, not the depositor's |
| Citation |
The full citation of the describing publication, with a DOI or stable link. Required: a dataset with no describing paper must say so in this row, not leave it blank |
| Licence |
Exactly as stated by the distributor, or not stated. Always attempt to establish it, and where it cannot be established say so in those words rather than implying permissiveness |
| Content |
Image count and resolution, in one line |
| Annotations |
What this provenance supplies, in one line |
Repeat the whole table, as 2.1, 2.2, 2.3, once per provenance, where a dataset's annotations
were added by different groups over time. Each layer has its own paper, its own download and
often its own licence, so one table cannot hold them. HRF is the
worked example: 45 photographs, with the vessel gold standard and disc centres from the original
authors, an artery/vein standard from a second group, and disc-and-cup contours from a third —
three tables, and one of the three licences is unknown. Name the layer in each subsection
heading, and put a Supplies line in its Annotations row so a reader can tell which annotation
came from where.
Prose belongs under the table, not in it: restrictions worth knowing, a licence conflict between
two sources, a deposit whose title does not match the dataset's name.
Where a fetcher exists, section 2 ends with a How to fetch subsection — the command, what it
downloads, what it builds, what needs a human, and anything peculiar a person running it will hit.
The fetch-dataset skill defines its shape; keep it to what someone running the command needs,
since the provenance is already in the tables above it.
The images — the physical facts about the pixels. Where a dataset has well-defined
subcollections — different cameras, different acquisition sites, a challenge's separate training
and test releases, or an ultra-wide split alongside a standard one — repeat this section once per
subcollection (3.1, 3.2, …), naming each and giving its image count. Do not flatten them into
a single row of ranges: a reader needs to know which camera produced which photographs, and a
mixed-resolution dataset averaged into one line cannot be matched against a model's grid. The
facts to record, per subcollection:
- Count, and how it splits by class or by acquisition site.
- Resolution in pixels, every distinct size present. Where a dataset mixes sizes, list them;
do not average.
- Microns per pixel, where the dataset or its paper publishes it, or the information needed
to derive it. This is the only route from a pixel measurement to a physical one, so record it
when available and record
Unknown when not — most datasets do not publish it.
- Camera and equipment — the make and model, and the acquisition site where stated.
- Field of view in degrees. A 30°, 45° and 200° photograph of the same eye contain different
proportions of central and peripheral retina, so this decides which datasets can be pooled.
- Centring — disc-centred, macula-centred, or mixed.
- Modality, where it is not colour fundus photography: scanning laser ophthalmoscopy,
infrared reflectance and ultra-wide-field images look like fundus photographs in a file
browser and are not interchangeable with them. Say so prominently.
Annotations — what is labelled, by how many readers, and whether readers are kept separate or
merged. Record the resolution the labels were drawn at when it differs from the images'
own — a mask drawn on a downsized rendition does not carry the detail its dimensions suggest.
Inheritance — required, and in both directions:
- Images this dataset reuses from another, naming the source dataset and how many, and
whether they were resized — a resized copy is a different set of pixels, and a model
evaluated on the copy has not been evaluated on the original.
- Datasets that reuse these images, so a reader arriving from either side sees the link.
- Where neither applies, state
No shared images established rather than leaving it empty.
The reason this section exists: two datasets built on the same photographs are not two cameras'
worth of evidence, and scoring both looks like independent confirmation when it is not.
Use as a benchmark — which catalogued models trained on these images, linking to their pages,
so a reader can tell at a glance whether a score on this dataset is in-sample. Note also where a
dataset's own native resolution is below the grid a model measures on, since a score there is
not comparable with a score on a larger dataset.
Known defects — errors and traps in the distribution itself: mislabelled files, archives whose
contents do not match their documentation, counts that differ from the paper, annotations that
disagree with their own description. Same rules as the other skills: record it where it lives,
attribute a claimed fix, and write None recorded with the date when nothing is known.
A section that does not apply stays in the page, marked Not applicable with a short reason. A
section whose answer could not be established is marked Unknown — never filled with a guess, and
never softened into a maybe.
3. Rules that apply to every entry
- 3.1 Reference, never redistribute. Link to the distributor. Never copy images, annotations or
archives into this repository, and never mirror a dataset that requires registration (see
CLAUDE.md §2).
- 3.2 Each dataset keeps its own licence. Record it as written; never restate it as more
permissive; never imply that a public download implies permission to redistribute or to use
commercially.
- 3.3 Separate claim from observation. Counts and properties as published are the authors'
statements; where this repository has checked an archive and found something different, label that
as our finding and put it in section 7.
- 3.4 Write for a non-engineer. Section 1 must not require knowing what a mask is.
- 3.5 Number every heading, as the template does.
- 3.6 Date what you checked at the bottom of the page — licences and download routes change more
often than the data.
- 3.7 Keep the catalogues consistent. A dataset page naming a model that trained on it requires
that model's page to name the dataset, in the same commit, and inheritance must be recorded on
both datasets' pages.
4. The summary table
docs/DATASETS.md holds one row per dataset, sorted by image count with the largest first. The
columns are:
| Column |
Content |
| Dataset |
Name, linked to datasets/<slug>.md |
| Images |
Count |
| Resolution |
Pixel dimensions; mixed plus the range where a dataset has several |
| Year |
Publication year of the describing paper |
| Quality |
✅ where the photograph itself is graded, with the scale in a word |
| Vessels |
✅ where a vessel segmentation is provided |
| A/V |
✅ where arteries and veins are distinguished |
| Disc |
✅ where the optic disc is annotated |
| Cup |
✅ where the optic cup is annotated |
| Disease |
✅ and the grading, where eyes are graded for disease |
| Other labels |
Anything else of use — fovea, lesions, demographics, published biomarker values, junctions |
| Licence |
As stated, or not stated |
| Down |
How hard the data is to obtain: ✅ direct and unattended, 🟡 a public repository with a trivial account or click-through, ⛔ a request, credentialing or a signed agreement, ❓ unresolved. Where images and annotations arrive by different routes, show the harder of the two |
Use — for an annotation a dataset does not carry, and add a reader count in the cell where more
than one person annotated (✅ ×5 experts) — a dataset with several readers is the only kind that
can measure human agreement rather than assume it. There is no last-checked column: that date
belongs at the foot of the detail page, beside the facts it dates.
Keep the Down column honest in one particular way: it measures effort to obtain, not permission
to use. A directly downloadable dataset may still be research-use-only or forbid redistribution, and
a dataset behind an agreement may carry a more permissive licence than one behind none. The two
columns answer different questions and must not be collapsed.
Keep the Dataset cell short enough that the name itself does not wrap. It carries the linked name
plus, at most, one compact marker: ← <dataset> where the photographs come from another collection,
and (SLO), (IR), +UWF, +OCT or (dual-modal) where the images are wholly or partly not
standard colour fundus photography. Anything longer belongs in another column or on the page.
The camera, field of view, microns per pixel, access route, describing paper and inheritance are
not table columns: they are per-subcollection or per-layer facts that a single cell would
misrepresent, and they live on the detail pages. Two conventions do belong in the table. Mark
modalities that are not colour fundus photography in the Dataset cell, so nobody pools them by
accident. And where a dataset's photographs come from another dataset, say so in the Dataset cell
too, briefly — section 2 of DATASETS.md carries the full map in both directions.
1---2name: document-dataset3description: Catalogue a colour-fundus dataset — the images, their camera and resolution, what is annotated, which other dataset's photographs it reuses, its licence and whether it can be downloaded directly — as a page in docs/datasets/ plus a row in the docs/DATASETS.md summary table. Use when adding, updating, or reviewing a dataset entry in Fundus Atlas.4---56# Documenting a dataset78A **dataset** here means a published collection of colour-fundus photographs, with or without9annotations, that someone can obtain and use. The networks trained on it are **models**10(`document-model`), the software that runs them is a **project** (`document-project`), and the11numbers computed from them are **biomarkers** (`document-biomarker`).1213Datasets are where this atlas's other three catalogues bottom out. Every model page names the14datasets it trained on; every comparison depends on whether a test set was one of them. So a dataset15page answers three questions the other catalogues cannot: **may I use these images**, **what do the16pixels actually represent**, and **are these photographs already somewhere else in the catalogue17under a different name**.1819## 1. What you produce2021Every dataset produces exactly two things:22231. **A detail page**, `docs/datasets/<slug>.md`, following `template.md` in this skill directory.24 The slug is the dataset's published name, lowercased, spaces and punctuation replaced by hyphens25 (`RIM-ONE DL` becomes `rim-one-dl.md`, `Chákṣu` becomes `chaksu.md`).262. **A row in `docs/DATASETS.md`**, the summary table, linking to that detail page.2728One page per published dataset. An add-on that annotates another dataset's photographs without29adding images of its own — an artery/vein reference standard drawn on someone else's images, say —30goes **on that dataset's page** as an annotation layer, not on a page of its own, with the31inheritance recorded per section 5.3233## 2. Required sections of the detail page3435Use `template.md` verbatim and keep its section numbering.36371. **What it is** — in plain language: how many photographs, of whom, why the collection was made,38 and what it is used for. A clinician should be able to read this section alone.392. **Provenance** — a table, not prose, so that the same facts sit in the same place on every page40 and can be read across them at a glance. The rows are:4142 | Row | Content |43 | --- | --- |44 | Home | The distributor's page |45 | Download | `direct, no registration` / `registration` / `request, then agreement` / `no` — and the direct URL where one exists. **For Kaggle and Hugging Face, give the full URL, never the bare `owner/slug`**: a slug is not clickable, and on Kaggle a link-shared dataset is addressed by a hash URL whose canonical slug 404s for anyone without access, so the two are not interchangeable. Mark a third-party re-upload as such — its licence field is the uploader's, not the depositor's |46 | Citation | The full citation of the describing publication, with a DOI or stable link. **Required**: a dataset with no describing paper must say so in this row, not leave it blank |47 | Licence | Exactly as stated by the distributor, or `not stated`. **Always attempt to establish it**, and where it cannot be established say so in those words rather than implying permissiveness |48 | Content | Image count and resolution, in one line |49 | Annotations | What this provenance supplies, in one line |5051 **Repeat the whole table, as 2.1, 2.2, 2.3, once per provenance**, where a dataset's annotations52 were added by different groups over time. Each layer has its own paper, its own download and53 often its own licence, so one table cannot hold them. [HRF](../../docs/datasets/hrf.md) is the54 worked example: 45 photographs, with the vessel gold standard and disc centres from the original55 authors, an artery/vein standard from a second group, and disc-and-cup contours from a third —56 three tables, and one of the three licences is unknown. Name the layer in each subsection57 heading, and put a `Supplies` line in its Annotations row so a reader can tell which annotation58 came from where.5960 Prose belongs under the table, not in it: restrictions worth knowing, a licence conflict between61 two sources, a deposit whose title does not match the dataset's name.6263 **Where a fetcher exists, section 2 ends with a `How to fetch` subsection** — the command, what it64 downloads, what it builds, what needs a human, and anything peculiar a person running it will hit.65 The `fetch-dataset` skill defines its shape; keep it to what someone running the command needs,66 since the provenance is already in the tables above it.67683. **The images** — the physical facts about the pixels. **Where a dataset has well-defined69 subcollections — different cameras, different acquisition sites, a challenge's separate training70 and test releases, or an ultra-wide split alongside a standard one — repeat this section once per71 subcollection** (3.1, 3.2, …), naming each and giving its image count. Do not flatten them into72 a single row of ranges: a reader needs to know which camera produced which photographs, and a73 mixed-resolution dataset averaged into one line cannot be matched against a model's grid. The74 facts to record, per subcollection:75 - **Count**, and how it splits by class or by acquisition site.76 - **Resolution in pixels**, every distinct size present. Where a dataset mixes sizes, list them;77 do not average.78 - **Microns per pixel**, where the dataset or its paper publishes it, or the information needed79 to derive it. This is the only route from a pixel measurement to a physical one, so record it80 when available and record `Unknown` when not — most datasets do not publish it.81 - **Camera and equipment** — the make and model, and the acquisition site where stated.82 - **Field of view** in degrees. A 30°, 45° and 200° photograph of the same eye contain different83 proportions of central and peripheral retina, so this decides which datasets can be pooled.84 - **Centring** — disc-centred, macula-centred, or mixed.85 - **Modality**, where it is not colour fundus photography: scanning laser ophthalmoscopy,86 infrared reflectance and ultra-wide-field images look like fundus photographs in a file87 browser and are not interchangeable with them. Say so prominently.884. **Annotations** — what is labelled, by how many readers, and whether readers are kept separate or89 merged. Record **the resolution the labels were drawn at** when it differs from the images'90 own — a mask drawn on a downsized rendition does not carry the detail its dimensions suggest.915. **Inheritance** — required, and in both directions:92 - **Images this dataset reuses** from another, naming the source dataset and how many, and93 **whether they were resized** — a resized copy is a different set of pixels, and a model94 evaluated on the copy has not been evaluated on the original.95 - **Datasets that reuse these images**, so a reader arriving from either side sees the link.96 - Where neither applies, state `No shared images established` rather than leaving it empty.97 The reason this section exists: two datasets built on the same photographs are not two cameras'98 worth of evidence, and scoring both looks like independent confirmation when it is not.996. **Use as a benchmark** — which catalogued models trained on these images, linking to their pages,100 so a reader can tell at a glance whether a score on this dataset is in-sample. Note also where a101 dataset's own native resolution is **below the grid** a model measures on, since a score there is102 not comparable with a score on a larger dataset.1037. **Known defects** — errors and traps in the distribution itself: mislabelled files, archives whose104 contents do not match their documentation, counts that differ from the paper, annotations that105 disagree with their own description. Same rules as the other skills: record it where it lives,106 attribute a claimed fix, and write `None recorded` with the date when nothing is known.107108A section that does not apply stays in the page, marked `Not applicable` with a short reason. A109section whose answer could not be established is marked `Unknown` — never filled with a guess, and110never softened into a maybe.111112## 3. Rules that apply to every entry113114- **3.1 Reference, never redistribute.** Link to the distributor. Never copy images, annotations or115 archives into this repository, and never mirror a dataset that requires registration (see116 `CLAUDE.md` §2).117- **3.2 Each dataset keeps its own licence.** Record it as written; never restate it as more118 permissive; never imply that a public download implies permission to redistribute or to use119 commercially.120- **3.3 Separate claim from observation.** Counts and properties as published are the authors'121 statements; where this repository has checked an archive and found something different, label that122 as our finding and put it in section 7.123- **3.4 Write for a non-engineer.** Section 1 must not require knowing what a mask is.124- **3.5 Number every heading**, as the template does.125- **3.6 Date what you checked** at the bottom of the page — licences and download routes change more126 often than the data.127- **3.7 Keep the catalogues consistent.** A dataset page naming a model that trained on it requires128 that model's page to name the dataset, in the same commit, and inheritance must be recorded on129 both datasets' pages.130131## 4. The summary table132133`docs/DATASETS.md` holds one row per dataset, sorted by image count with the largest first. The134columns are:135136| Column | Content |137| --- | --- |138| Dataset | Name, linked to `datasets/<slug>.md` |139| Images | Count |140| Resolution | Pixel dimensions; `mixed` plus the range where a dataset has several |141| Year | Publication year of the describing paper |142| Quality | ✅ where the photograph itself is graded, with the scale in a word |143| Vessels | ✅ where a vessel segmentation is provided |144| A/V | ✅ where arteries and veins are distinguished |145| Disc | ✅ where the optic disc is annotated |146| Cup | ✅ where the optic cup is annotated |147| Disease | ✅ and the grading, where eyes are graded for disease |148| Other labels | Anything else of use — fovea, lesions, demographics, published biomarker values, junctions |149| Licence | As stated, or `not stated` |150| Down | How hard the data is to obtain: `✅` direct and unattended, `🟡` a public repository with a trivial account or click-through, `⛔` a request, credentialing or a signed agreement, `❓` unresolved. Where images and annotations arrive by different routes, show the **harder** of the two |151152Use `—` for an annotation a dataset does not carry, and add a reader count in the cell where more153than one person annotated (`✅ ×5 experts`) — a dataset with several readers is the only kind that154can measure human agreement rather than assume it. There is **no last-checked column**: that date155belongs at the foot of the detail page, beside the facts it dates.156157Keep the Down column honest in one particular way: it measures **effort to obtain**, not permission158to use. A directly downloadable dataset may still be research-use-only or forbid redistribution, and159a dataset behind an agreement may carry a more permissive licence than one behind none. The two160columns answer different questions and must not be collapsed.161162**Keep the Dataset cell short enough that the name itself does not wrap.** It carries the linked name163plus, at most, one compact marker: `← <dataset>` where the photographs come from another collection,164and `(SLO)`, `(IR)`, `+UWF`, `+OCT` or `(dual-modal)` where the images are wholly or partly not165standard colour fundus photography. Anything longer belongs in another column or on the page.166167The camera, field of view, microns per pixel, access route, describing paper and inheritance are168**not** table columns: they are per-subcollection or per-layer facts that a single cell would169misrepresent, and they live on the detail pages. Two conventions do belong in the table. **Mark170modalities that are not colour fundus photography in the Dataset cell**, so nobody pools them by171accident. And where a dataset's photographs come from another dataset, say so in the Dataset cell172too, briefly — section 2 of `DATASETS.md` carries the full map in both directions.