Skip to content

odil-ai/odil-hackathon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Hackathon HN 2026

O.D.I.L. : indexer automatiquement les images du Moyen-Âge par l’IA

École nationale des chartes - PSL, 5-9 janvier 2026

Logo Chartes



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).


Sommaire

Présentation de la tâche

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.

Jeux de données

L'ensemble des jeux de données fournis aux participants se trouvent dans le répertoire data/.

Images

  • 9 735 images
  • dont les images du jeu de test
  • Lien de téléchargement (OneDrive PSL) : ici

Classes à prédire

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.

Données d’entraînement

all.tsv
Jeu de données fourni aux participants pour construire leurs propres splits train/dev.

Colonnes

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

Statistiques globales

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) -

Distribution du nombre d’images associées à chaque classe

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, …
  • Classe la plus fréquente :
    • tm-sz7srifg avec 1 869 images

Jeu de test pour les participants

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

Splits fournis pour la baseline

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 -

Hiérarchie des termes TIMEL

timel_taxonomy.json permet de reconstruire la hiérarchie du thésaurus TIMEL (termes généraux vers les termes spécifiques).

Exemple

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"
      ]
    },
  ]
}

Quelques remarques sur le jeu de données fourni aux participants

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.

long_tail_diagram

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

Quelques exemples d'images

Soumission des résultats

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
    teamX correspond 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_id correspond au nom de l’image provenant du fichier test.tsv.
  • predicted_class est la liste des classes prédites (label en langue naturel ou identifiants timel au choix) pour l’image.
  • probs est optionnel et correspond aux scores de confiance associés aux classes prédites, dans le même ordre que predicted_class.

Code et artefacts

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.

Évaluation

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.

Documentation supplémentaire

Code de conduite

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.

Structure du dépôt

.
├── 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
│

bandeau-hackathon

About

Dépôt pour le hackathon HN, ENC-PSL, 5-9 janvier 2026 | Jeu de données, baseline, documentation

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages