Dans le cadre du projet O.D.I.L. (ENC-PSL, EHESS-ALHoMA, DHLab-EPFL et Biblissima), nous invitons les participants à relever le défi d’une tâche de classification multi-label extrême en vision par ordinateur pour indexer automatiquement les images médiévales avec les termes du thésaurus TIMEL (plus de 1 000 concepts).
- Présentation de la tâche
- Jeux de données
- Soumission des résultats
- Documentation supplémentaire
- Code de conduite
- Structure de ce dépôt
L’objectif du projet O.D.I.L. est de doter la communauté d’un moteur de recherche iconographique dans les collections mises à disposition sur les bibliothèques numériques, pour favoriser la découverte d’images et contribuer au renouvellement méthodologique des études iconographiques.
Le TIMEL, le thésaurus utilisé, est maintenu depuis plus de 20 ans par un groupe de chercheurs spécialistes de l’étude des images médiévales. Il est utilisé dans plusieurs institutions. Sa structure et son nombre maîtrisé de termes favorisent des annotations robustes et l’interopérabilité entre bases iconographiques.
Nous proposons aux participants d’expérimenter une tâche de classification multi-label à partir d’un jeu de données composé d’images et de leurs annotations, les étiquettes correspondant à des termes spécifiques issus du thésaurus TIMEL.
Ce hackathon constitue ainsi une occasion de comparer différentes approches d’indexation automatique appliquées aux images médiévales et de battre la baseline actuelle, en évaluant leur capacité à restituer la richesse et la complexité sémantique des contenus iconographiques.
L'ensemble des jeux de données fournis aux participants se trouvent dans le répertoire data/.
- 9 735 images
- dont les images du jeu de test
- Lien de téléchargement (OneDrive PSL) : ici
classes.tsv
Contient la liste à plat des 2 333 classes TIMEL à prédire (sans relations hiérarchiques).
| Colonne | Description |
|---|---|
index |
Index numérique du terme |
timel_id |
Identifiant TIMEL du terme |
timel_label |
Label du terme TIMEL |
Note
Le thésaurus TIMEL compte au total 4305 termes spécifiques (termes de dernier niveau dans la hiérarchie). Cependant, seuls 2333 termes (classes.tsv) sont retenus dans le jeu de données fourni aux participants.
all.tsv
Jeu de données fourni aux participants pour construire leurs propres splits train/dev.
| Colonne | Description |
|---|---|
image |
Nom de l’image |
timel_ids |
Identifiants des termes du TIMEL séparés par ; |
timel_labels |
Labels des termes du TIMEL séparés par ; |
timel_ids_list |
Liste (python) des identifiants des termes du TIMEL |
timel_labels_list |
Liste (python) des labels des termes du TIMEL |
| Indicateur | Valeur | Commentaire |
|---|---|---|
| Nombre d’instances | 9 132 | Images avec les annotations |
| Part du dataset global (images) | ≃ 93 % des instances disponibles | Le reste est utilisé en test |
| Nombre total d’annotations | 108 973 | Annotations exploitables |
| Part du dataset global (annotations) | ≃ 94 % des annotations exploitables | - |
| Nombre moyen d’annotations par image | ≃ 12 | - |
| Classes couvertes | 100% (2333/2333) | - |
Les statistiques suivantes sont calculées sur les classes du thésaurus TIMEL. Pour chaque classe, on compte le nombre d’images auxquelles elle est associée, puis on observe la distribution de ces valeurs sur l’ensemble des classes.
| Statistique | Valeur | Commentaire |
|---|---|---|
| Minimum | 1 | Classe la moins représentée (une seule image associée) |
| Q1 (25 %) | 2 | 25 % des classes ont ≤ 2 images |
| Médiane (50 %) | 8 | 50 % des classes ont ≤ 8 images |
| Q3 (75 %) | 28 | 75 % des classes ont ≤ 28 images |
| Maximum | 1 869 | Classe la plus représentée dans le jeu de données (1869 images associés) |
- Classes avec 1 seul exemple : 348
- Exemples :
tm-g5fnnh74,tm-p6bpbd6j,tm-gyrbfk9c,tm-4q47xvrb,tm-v7r48int, …
- Exemples :
- Classe la plus fréquente :
tm-sz7srifgavec 1 869 images
test.tsv
Jeu de test figé utilisé pour l’évaluation finale (sans annotations).
| Indicateur | Valeur | Commentaire |
|---|---|---|
| Nombre d’images | 603 | Prédire les termes décrivant ces images |
| Part du dataset global | ≃ 6,19 % | Même taille que le test annoté |
| Annotations moyennes par image | ≃ 11 | - |
| Classes couvertes | 46,85% (1093/2333) | les classes ne sont pas toutes représentées dans le jeu de test |
Le dossier splits/ contient le split train/dev mélangé et stratifié, issu de all.tsv et utilisé pour la baseline de référence.
Note
Les participants peuvent les réutiliser ou reconstruire leurs propres splits (à fournir aux organisateurs lors de la soumission). Cf. section Soumission des résultats pour plus de détails.
| Indicateur | Valeur | Commentaire |
|---|---|---|
| Nombre d’instances | 7 210 (≃74% du dataset global) | Images + annotations utilisés pour l’apprentissage |
| Nombre total d’annotations | 86 103 (≃79% des annotations disponibles) | Annotations d’entraînement |
| Nombre moyen d’annotations par image | ≃ 12 | Comparable à all.tsv |
| Classes couvertes | 100% (2333/2333) | - |
| Indicateur | Valeur | Commentaire |
|---|---|---|
| Nombre d’instances | 1 922 (≃19% du dataset global) | Images de validation |
| Nombre total d’annotations | 22 870 (≃20%z des annotations disponibles) | Annotations de validation |
| Nombre moyen d’annotations par image | ≃ 12 | Stable |
| Classes couvertes | 75,01% (1750/2333 | - |
timel_taxonomy.json permet de reconstruire la hiérarchie du thésaurus TIMEL (termes généraux vers les termes spécifiques).
Terme spécifique : anguille (tm-gpu9gq8p)
nature lieu (tm-yhyygbnb)
├── animaux (tm-es22d6su)
│ ├── animaux aquatiques (tm-5zgvvuyy)
│ │ ├── anguille (tm-gpu9gq8p)
Représentation équivalente dans le fichier JSON :
{
"items": [
{
"value": "nature lieu",
"path_ids": [
"tm-yhyygbnb"
]
},
{
"value": "animaux",
"path_ids": [
"tm-yhyygbnb",
"tm-es22d6su"
]
},
{
"value": "animaux aquatiques",
"path_ids": [
"tm-yhyygbnb",
"tm-es22d6su",
"tm-5zgvvuyy"
]
},
{
"value": "anguille",
"path_ids": [
"tm-yhyygbnb",
"tm-es22d6su",
"tm-5zgvvuyy",
"tm-gpu9gq8p"
]
},
]
}Le graphique ci-dessous représente la distribution du nombre d’images par classe dans le thésaurus TIMEL. Pour chaque valeur N, il indique combien de classes sont associées à exactement N images dans le jeu de données.
Cette distribution met clairement en évidence une structure en longue traîne (long-tail) : la majorité des classes sont très faiblement représentées, avec seulement une ou deux images annotées, tandis qu’un nombre limité de classes concentre un volume important d’annotations.
Une telle configuration reflète la diversité intrinsèque des contenus iconographiques médiévaux, mais constitue également un défi majeur pour les approches d’apprentissage automatique, qui doivent être capables de généraliser à partir de très peu d’exemples pour un grand nombre de concepts rares.
Note sur les images médiévales reproduites :
- État de conservation variable (tâches, déchirures etc.)
- Variété des support (parchemin, broderie etc.)
- Typologie variée : enluminures pleine page, initiales historiées, ornementations végétales, marginalia, etc.
- Détourages variés : images recadrées vs images du folio entier (cas majoritaire)
- Scènes multiples (deux images sur le même folio)
- Colorimétrie mixte : niveau de gris et en couleur
Date de restitution des résultats : vendredi 9 janvier 2026, 18h
Les participants sont invités à fournir deux livrables :
Fichier de prédictions sur le test.tsv
Un fichier JSON doit être déposé dans le dossier submissions/ du présent dépôt.
-
Nom du fichier :
submission_teamX.json
oùteamXcorrespond au nom de l’équipe. -
Contenu :
Le fichier doit contenir les prédictions pour chaque image du jeu de test (test.tsv). -
Format attendu (2 options possibles) :
Option 1)
{
"team_name": "Nom de la team",
"type": "submission - evaluation",
"predictions": [
{
"image_id": "image_001.jpg",
"predicted_class": ["vision", "Dieu", "lit"]
"probs": [ 0.8, 0.1, 0.05 ]
},
{
"image_id": "image_002.jpg",
"predicted_class": ["maladie", "David", "don", "vieillard"],
"probs": [ 0.6, 0.4, 0.3, 0.2]
},
...
]
}Option 2)
{
"team_name": "Nom de la team",
"type": "submission - evaluation",
"predictions": [
{
"image_id": "image_001.jpg",
"predicted_class": ["tm-anhzraqq", "tm-sgdxywfz", "tm-mqvexyu4"]
"probs": [ 0.8, 0.1, 0.05 ]
},
{
"image_id": "image_002.jpg",
"predicted_class": ["tm-xmz3snk2", "tm-9kefvmxz", "tm-bsmbjqgw", "tm-wqg2nktt"],
"probs": [ 0.6, 0.4, 0.3, 0.2]
},
...
]
}Remarques :
image_idcorrespond au nom de l’image provenant du fichier test.tsv.predicted_classest la liste des classes prédites (label en langue naturel ou identifiants timel au choix) pour l’image.probsest optionnel et correspond aux scores de confiance associés aux classes prédites, dans le même ordre que predicted_class.
Les participants doivent également fournir :
- une archive ZIP, ou
- un lien vers un dépôt GitHub,
contenant :
- le code source,
- les données utilisées (par exemple si des splits train/dev ont été reconstruits),
- les artefacts de modèles,
- la documentation nécessaire pour permettre aux organisateurs de reproduire les résultats.
L’évaluation sera réalisée de manière automatique à l’aide d’un script dédié (run_eval.py).
Les participants peuvent utiliser ce script sur leur jeu de validation avant la soumission.
Les métriques retenues pour l’évaluation sont décrites dans ce document.
Afin de garantir l’équité et la qualité scientifique des résultats, les participants sont invités à respecter les principes suivants :
- Les expériences doivent être reproductibles et correctement documentées.
- L’évaluation finale repose uniquement sur les métriques définies par les organisateurs.
- Les modèles et pipelines doivent fonctionner avec des ressources de calcul raisonnables.
- L’utilisation d’API payantes est interdite pour l’indexation ou l’inférence (exception possible pendant le hackathon pour des tâches de préparation des données, dûment documentées).
- Les solutions doivent s’appuyer sur des outils et modèles open-source, librement réutilisables.
.
├── README.md
├── requirements.txt
│
├── data/ # Données mises à disposition des participants
│ ├── splits/ # Splits utilisés pour la baseline
│ │ ├── train.tsv
│ │ ├── dev.tsv
│ ├── classes.tsv # Liste des classes TIMEL (termes spécifiques dans la taxonomie TIMEL)
│ ├── all.tsv # Données annotées pour l'entraînement (images + labels) et pour créer un split train/dev
│ ├── test.tsv # Split de test (images sans annotations), utilisés pour l'évaluation final
│ └── timel_taxonomy.json # Taxonomie TIMEL au format JSON
│
├── submissions/ # Soumissions des participants
│ ├── submission_teamX.json # Exemple de soumission
│
├── documentation/ # Annexes à destination des participants
│ ├── evaluation_metrics.pdf # Description des métriques utilisés dans le cadre de l'évaluation
│ ├── baseline_results.md # Résultats de la baseline
│
├── evalutation/ # Soumissions des participants
│ ├── results/ # Dossier contenant les sorties du script run_eval.py
│ ├── run_eval.py # Script d'évaluation des soumissions des participants
│














