|
AIDGE IN SPACE
Banc d'essai de compression d'image apprise pour l'embarqué
|
Onglets Données, Entraînement et Suivi de l'interface Gradio. Plus de détails...
Classes | |
| class | _Names |
| Attribution de noms de fichiers libres dans un dossier, en temps amorti constant. Plus de détails... | |
Fonctions | |
| max_upload_mb () | |
| Taille maximale d'un envoi, en Mo. | |
| safe_name (name, max_len=60) | |
| Nom de dossier ou de fichier assaini (ASCII, sans séparateur ni point de tête). | |
| _dangerous_member (info) | |
| Indique si un membre d'archive est dangereux (chemin absolu, « . | |
| extract_zip (zip_path, dest, max_total_bytes, max_files=MAX_ZIP_FILES, names=None) | |
| Extrait les images d'une archive zip, à plat, après contrôle de tous les membres. | |
| _check_image (path) | |
| Vérifie qu'une image est lisible. | |
| _to_8bit_file (path) | |
| Lit une image et la ramène à 8 bits si elle ne l'est pas. | |
| create_dataset (name, files, train_dir=None, max_upload_mb=None) | |
| Crée (ou complète) un jeu d'images d'entraînement à partir de fichiers et d'archives zip. | |
| list_datasets (train_dir=None) | |
| Jeux d'images d'entraînement existants. | |
| dataset_choices (train_dir=None) | |
| Jeux d'entraînement pour un menu : couples (« nom (k images) », nom). | |
| datasets_table (train_dir=None) | |
| Tableau des jeux d'entraînement (colonnes « jeu » et « images »). | |
| dataset_samples (name, train_dir=None) | |
| Vignettes d'un jeu : chemins d'images (liste vide si le jeu est absent). | |
| _estimate (mode, N, gdn_last) | |
| Calcul (mis en cache) de estimate(). | |
| estimate (mode, N, gdn_last) | |
| Coût de l'encodeur embarqué d'un réglage (paramètres, MAC par pixel, poids INT8, tient dans la BRAM). | |
| preset_values (preset) | |
| Valeurs des champs du formulaire pour un préréglage. | |
| _portable_path (path) | |
| Chemin relatif à config.ROOT en notation POSIX si possible, sinon absolu. | |
| _num (field, v) | |
| Nombre d'un champ de formulaire (un flottant entier devient entier). | |
| launch_jobs (store, name, author, dataset, mode, N, gdn_last, lambdas, steps, batch_size, lr, crop, n_patches, seed, train_dir=None) | |
| Crée un job d'entraînement par valeur de λ (tout ou rien). | |
| format_duration (seconds) | |
Durée lisible : "-" (inconnue), "< 1 min", "12 min" ou "2 h 05 min". | |
| job_progress (job, metrics_train, now) | |
| Progression d'un job et temps restant estimé. | |
| _status_label (job) | |
| Statut affiché d'un job (avec la demande d'annulation en cours). | |
| _lmbda_text (v) | |
| λ affiché sans zéros inutiles. | |
| visible_jobs (store) | |
| Jobs à afficher : les RECENT_JOBS plus récents et tous les jobs non terminés, sans doublon. | |
| jobs_table (store, now=None) | |
| Tableau des jobs, du plus récent au plus ancien. | |
| job_choices (store) | |
| Jobs pour un menu : couples (« n°12 · nom · λ=2048 · En cours », identifiant). | |
| _log_tail (path, n_lines) | |
| Dernières lignes d'un journal ; « (journal vide) » s'il est absent ou vide. | |
| _curves (metrics) | |
| Figure à trois axes (perte, débit, PSNR) à partir des métriques d'un job. | |
| _summary (job) | |
| Synthèse Markdown d'un job : statut, réglages, checkpoint, erreur. | |
| job_details (store, job_id, n_log_lines=50) | |
| Détail d'un job : courbes, fin du journal, synthèse. | |
| cancel_job (store, job_id, confirmed) | |
| Annule un job après confirmation. | |
| requeue_job (store, job_id) | |
| Remet en file un job en échec, annulé ou interrompu (il reprend à son dernier checkpoint). | |
| duplicate_config (store, job_id) | |
| Valeurs du formulaire d'entraînement pour refaire un job avec les mêmes réglages. | |
| worker_banner (store) | |
| Message sur la présence d'un worker, avec la marche à suivre s'il n'y en a pas. | |
| new_done_jobs (store, seen) | |
| Détecte les jobs qui viennent de se terminer. | |
| mark_codecs_loaded (done) | |
| Enregistre l'ensemble des jobs terminés couverts par le registre de codecs actuel. | |
| codecs_stale (done, loaded) | |
| Vrai si le registre de codecs ne couvre pas l'ensemble courant des jobs terminés. | |
| codec_updates (done, mode_value, reload_fn, menus_fn, n_outputs) | |
| Mises à jour des menus de codecs d'une session, avec au plus un rechargement par changement. | |
| choice_update (choices, current) | |
| gr.update d'un menu : nouveaux choix, valeur courante gardée si elle existe encore. | |
| _form_updates (vals, store_choices_ds) | |
| gr.update pour chaque champ du formulaire à partir d'un dictionnaire de valeurs. | |
| _initial_estimate (vals) | |
| Encart d'estimation initial du formulaire (texte vide si le calcul échoue). | |
| build_tabs (mode, reload_outputs, reload_fn, store=None, tabs=None, menus_fn=None) | |
| Crée les onglets Données, Entraînement et Suivi (à appeler dans le gr.Tabs de l'app). | |
Variables | |
| list | N_CHOICES = [32, 64, 96, 128, 192] |
| Choix de N proposés. | |
| list | LAMBDA_CHOICES = [256, 512, 1024, 2048, 4096, 8192] |
| Choix de λ proposés. | |
| str | CUSTOM_PRESET = "Personnalisé" |
| Libellé du préréglage libre. | |
| dict | PRESET_CHOICES |
| Préréglages affichés -> (clé de training.config.PRESETS ou None, λ cochés par défaut). | |
| int | BRAM_BYTES = 630_000 |
| Capacité BRAM du Zynq-7020 retenue : 140 BRAM36, environ 630 Ko, soit environ 615 Kio. | |
| tuple | ESTIMATE_SHAPE = (256, 256) |
| Taille d'image pour l'estimation des MAC par pixel. | |
| int | MIN_SIDE = 256 |
| Côté minimal conseillé d'une image d'entraînement (avertissement en dessous). | |
| int | DEFAULT_MAX_UPLOAD_MB = 500 |
| Taille maximale par défaut d'un envoi, en Mo (surchargée par AIDGE_MAX_UPLOAD_MB). | |
| int | UNZIP_FACTOR = 2 |
| Taille décompressée maximale d'une archive : ce facteur fois la limite d'envoi. | |
| int | MAX_ZIP_FILES = 10_000 |
| Nombre maximal de fichiers dans une archive. | |
| dict | WINDOWS_RESERVED |
| Noms réservés de Windows, refusés tels quels. | |
| int | REFRESH_S = 5 |
| Période de rafraîchissement de l'onglet Suivi, en secondes. | |
| int | N_SAMPLES = 6 |
| Nombre de vignettes montrées par jeu d'images. | |
| list | TABLE_COLUMNS = ["n°", "nom", "auteur", "statut", "λ", "N", "mode", "progression (%)", "temps restant", "créé le"] |
| Colonnes du tableau des jobs. | |
| int | LOG_TAIL_BYTES = 65536 |
| Octets lus en fin de train.log pour en extraire les dernières lignes. | |
| int | MAX_WARNINGS = 5 |
| Nombre maximal de messages d'avertissement affichés en fenêtre après un envoi. | |
| int | _CHUNK = 1 << 20 |
| Copie par blocs de cette taille (octets). | |
| _MOVE_LOCK = threading.Lock() | |
| Verrou qui sérialise le déplacement des fichiers préparés vers un jeu (deux envois simultanés). | |
| str | STAGING_PREFIX = ".envoi-" |
| Préfixe des dossiers de préparation d'un envoi (nom caché, ignoré par list_datasets). | |
| tuple | OPEN_STATUSES = ("queued", "running", "failed", "cancelled", "interrupted") |
| Statuts d'un job non terminé : toujours visibles, quel que soit leur âge. | |
| int | RECENT_JOBS = 200 |
| Nombre de jobs récents toujours listés. | |
| _codecs_loaded = None | |
| Jobs terminés pris en compte par le dernier rechargement des codecs (None : jamais). | |
| _codecs_lock = threading.Lock() | |
| Verrou : un seul rechargement à la fois pour toute l'app. | |
| list | FORM_KEYS |
| Champs du formulaire d'entraînement, dans l'ordre des composants. | |
Onglets Données, Entraînement et Suivi de l'interface Gradio.
L'interface n'entraîne jamais elle-même : elle écrit des jobs dans la file (aidge_in_space.jobs.JobStore) et lit leurs statuts, leurs métriques et leurs journaux. Toute la logique est dans des fonctions pures, testables sans lancer Gradio ; les callbacks de build_tabs() n'en sont que de minces adaptateurs qui convertissent les erreurs en messages simples (gr.Error, gr.Warning). Contrat : docs/conception_entrainement.md, § 2.7.
|
protected |
Vérifie qu'une image est lisible.
| path | Fichier image. |
| Exception | si PIL ne sait pas la lire (y compris DecompressionBombError). |
|
protected |
Indique si un membre d'archive est dangereux (chemin absolu, « .
. », lien, chiffré).
| info | zipfile.ZipInfo du membre. |
|
protected |
gr.update pour chaque champ du formulaire à partir d'un dictionnaire de valeurs.
| vals | Dictionnaire de valeurs (clés absentes : champ inchangé). |
| store_choices_ds | Noms de jeux existants (un jeu absent laisse le champ inchangé). |
|
protected |
Nombre d'un champ de formulaire (un flottant entier devient entier).
| ValueError | si la valeur est vide ou n'est pas un nombre. |
|
protected |
Lit une image et la ramène à 8 bits si elle ne l'est pas.
L'image ouverte est libérée avant le retour : Pillow projette parfois le fichier en mémoire (TIFF non compressé), ce qui empêcherait de le réécrire sous Windows.
| path | Fichier image. |
| aidge_in_space.ui_training.build_tabs | ( | mode, | |
| reload_outputs, | |||
| reload_fn, | |||
| store = None, | |||
| tabs = None, | |||
| menus_fn = None ) |
Crée les onglets Données, Entraînement et Suivi (à appeler dans le gr.Tabs de l'app).
| mode | gr.Radio du mode de l'app (entrée de reload_fn). |
| reload_outputs | Composants mis à jour par reload_fn. |
| reload_fn | Fonction du bouton « Recharger les codecs » ; reçoit le mode, renvoie un tuple de gr.update. |
| store | JobStore ; None : JobStore() créé ici. |
| tabs | gr.Tabs de l'app ; s'il est fourni, « Lancer » ouvre l'onglet Suivi et « Dupliquer » l'onglet Entraînement. |
| menus_fn | Comme reload_fn mais sans redécouvrir les codecs (relit le registre) ; None : les menus de codecs d'une session neuve ne sont alors mis à jour qu'après un rechargement. |
Les choix calculés à la construction sont rafraîchis à chaque chargement de session (événement load du gr.Blocks courant) et, pour les jeux, à l'ouverture de l'onglet Entraînement.
| aidge_in_space.ui_training.cancel_job | ( | store, | |
| job_id, | |||
| confirmed ) |
Annule un job après confirmation.
| store | JobStore. |
| job_id | Identifiant du job. |
| confirmed | Case de confirmation cochée. |
| ValueError | si la confirmation manque ou si le job est déjà terminé. |
| KeyError | si le job est inconnu. |
| aidge_in_space.ui_training.choice_update | ( | choices, | |
| current ) |
gr.update d'un menu : nouveaux choix, valeur courante gardée si elle existe encore.
| choices | Liste de couples (libellé, valeur). |
| current | Valeur actuellement choisie dans la session. |
| aidge_in_space.ui_training.codec_updates | ( | done, | |
| mode_value, | |||
| reload_fn, | |||
| menus_fn, | |||
| n_outputs ) |
Mises à jour des menus de codecs d'une session, avec au plus un rechargement par changement.
Si le registre est périmé (voir codecs_stale), reload_fn (qui relance discover()) est appelée une seule fois pour toute l'app, sous verrou ; les autres sessions n'ont qu'à relire le registre via menus_fn.
| done | Identifiants des jobs terminés à l'instant. |
| mode_value | Mode courant de la session. |
| reload_fn | Rechargement complet des codecs (renvoie les mises à jour des menus). |
| menus_fn | Relecture du registre sans redécouverte ; None : rien à mettre à jour hors rechargement. |
| n_outputs | Nombre de composants de sortie (pour les gr.update vides). |
n_outputs gr.update. | aidge_in_space.ui_training.codecs_stale | ( | done, | |
| loaded ) |
Vrai si le registre de codecs ne couvre pas l'ensemble courant des jobs terminés.
| done | Identifiants des jobs terminés à l'instant. |
| loaded | Identifiants pris en compte par le dernier rechargement (None : jamais rechargé). |
loaded est None ou diffère de done. | aidge_in_space.ui_training.create_dataset | ( | name, | |
| files, | |||
| train_dir = None, | |||
| max_upload_mb = None ) |
Crée (ou complète) un jeu d'images d'entraînement à partir de fichiers et d'archives zip.
Tout est extrait et vérifié dans un dossier de préparation unique à l'envoi (.envoi-xxxx dans le dossier des jeux). Si quoi que ce soit échoue, seul ce dossier est supprimé : un jeu existant n'est pas modifié et deux envois simultanés ne s'effacent pas. En cas de succès, les images sont déplacées dans le jeu (créé si besoin) sans écraser aucun fichier (suffixe _2, _3…). Les images illisibles sont écartées, les images 16 bits ou flottantes sont converties en 8 bits (mise à l'échelle sur leur valeur maximale) et une image de moins de MIN_SIDE pixels de côté est gardée avec un avertissement.
| name | Nom du jeu (assaini). |
| files | Chemins des fichiers envoyés (images ou zip). |
| train_dir | Dossier des jeux ; None : config.TRAIN_DIR lu à l'appel. |
| max_upload_mb | Taille maximale de l'envoi en Mo ; None : max_upload_mb(). |
| ValueError | si le nom est invalide, s'il n'y a aucun fichier, si l'envoi est trop gros, si une archive est refusée ou si l'envoi ne contient aucune image valide. |
| aidge_in_space.ui_training.duplicate_config | ( | store, | |
| job_id ) |
Valeurs du formulaire d'entraînement pour refaire un job avec les mêmes réglages.
name (« nom (copie) »), author, dataset, mode, preset, lambdas, N, gdn_last, steps, batch_size, lr, crop, n_patches, seed. | KeyError | si le job est inconnu. |
| aidge_in_space.ui_training.estimate | ( | mode, | |
| N, | |||
| gdn_last ) |
Coût de l'encodeur embarqué d'un réglage (paramètres, MAC par pixel, poids INT8, tient dans la BRAM).
| mode | "gris" ou "rgb". |
| N | Largeur du modèle (entre 8 et 512). |
| gdn_last | Présence de la GDN finale. |
params, mac_per_pixel, int8_bytes, int8_kib, bram_bytes, fits_bram, markdown. | ValueError | si le mode ou N est invalide. |
| aidge_in_space.ui_training.extract_zip | ( | zip_path, | |
| dest, | |||
| max_total_bytes, | |||
| max_files = MAX_ZIP_FILES, | |||
| names = None ) |
Extrait les images d'une archive zip, à plat, après contrôle de tous les membres.
Aucun fichier n'est écrit avant que tous les noms aient été contrôlés (zip slip : chemins absolus, « .. », liens symboliques, archive chiffrée). La taille décompressée est bornée deux fois : sur les tailles déclarées, puis sur les octets réellement copiés (bombe zip).
| zip_path | Archive. |
| dest | Dossier de destination (créé si besoin). |
| max_total_bytes | Taille décompressée maximale cumulée. |
| max_files | Nombre maximal de membres. |
| names | _Names partagé entre plusieurs appels ; None : un nouveau, lu dans dest. |
| ValueError | si l'archive est illisible, dangereuse ou trop grosse. |
| aidge_in_space.ui_training.job_details | ( | store, | |
| job_id, | |||
| n_log_lines = 50 ) |
Détail d'un job : courbes, fin du journal, synthèse.
| store | JobStore. |
| job_id | Identifiant, ou None. |
| n_log_lines | Nombre de lignes de train.log à renvoyer. |
job_id est None. | KeyError | si le job est inconnu. |
| aidge_in_space.ui_training.job_progress | ( | job, | |
| metrics_train, | |||
| now ) |
Progression d'un job et temps restant estimé.
| job | Le job. |
| metrics_train | Métriques train du job (JobStore.metrics). |
| now | Heure courante (secondes Unix). |
| aidge_in_space.ui_training.jobs_table | ( | store, | |
| now = None ) |
Tableau des jobs, du plus récent au plus ancien.
| store | JobStore. |
| now | Heure courante ; None : time.time(). |
| aidge_in_space.ui_training.launch_jobs | ( | store, | |
| name, | |||
| author, | |||
| dataset, | |||
| mode, | |||
| N, | |||
| gdn_last, | |||
| lambdas, | |||
| steps, | |||
| batch_size, | |||
| lr, | |||
| crop, | |||
| n_patches, | |||
| seed, | |||
| train_dir = None ) |
Crée un job d'entraînement par valeur de λ (tout ou rien).
Toutes les configurations sont validées avant la première soumission.
| store | JobStore. |
| name | Nom du run (obligatoire). |
| author | Auteur (facultatif). |
| dataset | Nom du jeu d'images sous train_dir. |
| mode | "gris" ou "rgb". |
| N | Largeur du modèle. |
| gdn_last | Présence de la GDN finale. |
| lambdas | Valeurs de λ (dédupliquées, triées). |
| steps | Nombre de pas. |
| batch_size | Patchs par lot. |
| lr | Pas d'apprentissage. |
| crop | Côté des patchs. |
| n_patches | Patchs pré-extraits. |
| seed | Graine. |
| train_dir | Dossier des jeux ; None : config.TRAIN_DIR. |
| ValueError | (dont ConfigError) si le nom est vide, si aucun λ n'est choisi, si le jeu est absent ou vide, ou si un réglage est invalide. |
| aidge_in_space.ui_training.list_datasets | ( | train_dir = None | ) |
Jeux d'images d'entraînement existants.
| train_dir | Dossier des jeux ; None : config.TRAIN_DIR. |
name, path, n_images et samples (6 vignettes au plus). | aidge_in_space.ui_training.mark_codecs_loaded | ( | done | ) |
Enregistre l'ensemble des jobs terminés couverts par le registre de codecs actuel.
| done | Identifiants des jobs terminés (ensemble). |
| aidge_in_space.ui_training.max_upload_mb | ( | ) |
Taille maximale d'un envoi, en Mo.
| ValueError | si la variable est mal formée. |
| aidge_in_space.ui_training.new_done_jobs | ( | store, | |
| seen ) |
Détecte les jobs qui viennent de se terminer.
| store | JobStore. |
| seen | Identifiants des jobs terminés déjà connus ; None au premier appel. |
| aidge_in_space.ui_training.preset_values | ( | preset | ) |
Valeurs des champs du formulaire pour un préréglage.
| preset | Libellé d'un préréglage de PRESET_CHOICES. |
N, gdn_last, lambdas, steps, batch_size, lr, crop, n_patches, seed ; vide pour « Personnalisé ». | ValueError | si le préréglage est inconnu. |
| aidge_in_space.ui_training.requeue_job | ( | store, | |
| job_id ) |
Remet en file un job en échec, annulé ou interrompu (il reprend à son dernier checkpoint).
| ValueError | si le job n'est pas relançable. |
| KeyError | si le job est inconnu. |
| aidge_in_space.ui_training.safe_name | ( | name, | |
| max_len = 60 ) |
Nom de dossier ou de fichier assaini (ASCII, sans séparateur ni point de tête).
Exemples : "Lune LRO (été)" donne "Lune_LRO_ete", "../../etc" donne "etc", "con" donne "_con".
| name | Nom d'origine. |
| max_len | Longueur maximale du résultat. |
| ValueError | si le résultat est vide. |
| aidge_in_space.ui_training.visible_jobs | ( | store | ) |
Jobs à afficher : les RECENT_JOBS plus récents et tous les jobs non terminés, sans doublon.
| store | JobStore. |
|
protected |
Jobs terminés pris en compte par le dernier rechargement des codecs (None : jamais).
État du registre de codecs, partagé par toutes les sessions du serveur.