Skip to content

gllrdmaxime/PLP25INT57-Denoisn_AI

Repository files navigation

PLP25INT57 - Denoisn'AI

Ce projet implémente une solution de Débruitage basée sur le Deep Learning pour des images transmises via SoftCast, un schéma de codage conjoint source-canal linéaire. L'innovation principale réside dans l'utilisation d'un DnCNN (Denoising Convolutional Neural Network) pour estimer et supprimer le bruit non-linéaire introduit par la transmission SoftCast sur un canal AWGN.

Le décodage SoftCast traditionnel souffre d'un bruit de canal directement corrélé à la puissance du signal. Ce projet vise à améliorer la qualité de reconstruction uniquement par le post-traitement du signal bruité reçu à l'aide d'un réseau de neurones spécialisé.

Architecture du Projet

PLP25INT57-Denoisn-AI/
│
├── dataset/                 # Dossier généré automatiquement contenant les datasets HDF5
│   ├── train/               # Dossier avec les images brutes du dataset
│   ├── valid/
│   ├── test/
│   ├── train_blind_p64.h5   # Dataset d'entraînement (SNR variable)
│   ├── valid_0db_p64.h5     # Dataset de validation (0dB)
│   ├── valid_10db_p64.h5    # Dataset de validation (10dB)
│   └── valid_20db_p64.h5    # Dataset de validation (20dB)
│
├── dataset_original/                # Dossier source des images brutes (non inclus dans git)
│
├── logs/                    # Logs d'entraînement
│   ├── txt/                 # Fichiers logs texte (historique des pertes, psnr, etc.)
│   ├── images/              # Courbes d'entraînement générées (Loss, PSNR, SSIM)
│   └── benchmark/           # Résultats générés par le script de test (images, csv, plots)
│
├── model/                   # Sauvegarde des modèles (checkpoints)
│   ├── dncnn_softcast_best_psnr.pth  # Meilleur modèle en PSNR (Moyenne sur validations)
│   ├── dncnn_softcast_best_ssim.pth  # Meilleur modèle en SSIM (Moyenne sur validations)
│   └── dncnn_softcast_last.pth       # Dernier état du modèle
│
├── utils/                   # Fonctions utilitaires diverses
│
├── config.py                # Fichier de configuration central (Hyperparamètres, chemins, options)
├── dataset_hdf5.py          # Gestion du Dataset : Génération HDF5, Data Augmentation, Blind Noise
├── softcast_image.py        # SoftCast (Encodage, Canal AWGN, Décodage)
├── train.py                 # Script principal d'entraînement (DDP, Scheduler, Multi-SNR Validation)
├── test.py                  # Script de test et benchmarking (Génération de rapports et visualisations)
└── requirements.txt         # Liste des dépendances Python

Prérequis : Python

Si Python n'est pas encore installé sur votre ordinateur, veuillez vous référer au tutoriel Python.

https://www.python.org/downloads/

Installation

  1. Cloner le dépôt GitHub

    git clone https://github.com/gllrdmaxime/PLP25INT57-Denoisn_AI.git
    cd PLP25INT57-Denoisn-AI
  2. Créer un environnement virtuel

    python -m venv venv
    # Sur Linux/Mac
    source venv/bin/activate
    # Sur Windows
    venv\Scripts\activate
  3. Installer les dépendances

    pip install -r requirements.txt

Utilisation

1. Entraînement

Le processus d'entraînement génère automatiquement les datasets HDF5 manquants (Training + Validation Multi-SNR). Il utilise une stratégie de "Blind Learning", s'entraînant sur des niveaux de SNR aléatoires entre 0dB et 20dB pour bien généraliser.

python train.py

./run_training.sh #Entraînement avec plusieurs cartes graphiques sur Linux
  • Checkpoints : Les modèles avec le meilleur PSNR/SSIM moyen (sur 0, 10, 20dB) sont sauvegardés automatiquement dans model/.
  • Logs : Les courbes d'entraînement et métriques sont enregistrées dans logs/.

Lien vers le code source

2. Test & Benchmarking

Pour évaluer le modèle sur le dataset de benchmark, utilisez test.py. Vous pouvez spécifier quel checkpoint utiliser.

python test.py --model ssim

python test.py --model psnr

python test.py --model last

Le script produit :

  • Sortie Console : Gains détaillés PSNR/SSIM par image et par niveau CSNR.
  • Visualisations : Images Avant/Après et sauvegarde du bruit dans benchmark/logs.
  • Graphiques : Courbes de gain en fonction de l'Information Spatiale (SI).

Lien vers le code source

3. Fonctions utilitaires

  1. Vérifier les données dans le fichier .h5

Lance la vérification sur le fichier dataset/train_blind_p64.h5 généré par dataset_hdf5.py

python utils/check_h5.py

Lien vers le code source

  1. Lire les données dans le fichier .pth

Regarder les poids du réseau entraîné et leurs distribution statistique

python utils/display_pth_model.py model/dncnn_softcast_best_psnr.pth

Lien vers le code source

  1. Calculer la distribution de SI dans les images d'un dossier

Calcule la distribution SI et enregistre le graphique dans logs/images/si_histogram.png

python utils/dataset_si_histogram.py dataset/

Lien vers le code source

  1. Extraire un dataset cible avec une distribution SI homogène

Calcule la distribution SI et enregistre le graphique dans logs/images/si_histogram.png

python utils/extract_si_dataset.py "dataset_original/" "dataset/" --count 10000 --bins 100 --split 0.88 0.02 0.1 # Train Valid Test

Lien vers le code source

  1. Benchmark sur images couleur

Module d'analyse sur YUV, 4 scénarios: S1: Évaluation de référence isolant la dégradation du canal en appliquant SoftCast uniquement sur Y S2: Simulation de transmission colorimétrique réaliste via SoftCast, incluant un sous-échantillonnage spatial 4:2:0 pour compresser les plans u et v. S3: S1 + restauration de Y. S4: S2 + restauration de Y, U et V.

python utils/color_softcast_test.py

Lien vers le code source

  1. Convertir un .pth en .onnx

Ce script permet de convertir notre .pth en un fichier .onnx pour l'importer sur une STM32

python utils/convert_to_onnx.py --model "model/dncnn_softcast_best_ssim.pth" --output "model/dncnn_softcast_best_ssim.onnx"

Lien vers le code source

4. Interface de Démonstration

Une application graphique est disponible pour tester le modèle sur vos propres images et visualiser les résultats :

python demo/demo_app.py
  • Fonctionnalités : Chargement d'images, simulation SoftCast + Canal (0-20dB), comparaison visuelle.
  • Modèle : Utilise par défaut model/dncnn_softcast_best_ssim.pth.

Lien vers le code source

Dataset

  • Source : LSDIR Lien de téléchargement : https://huggingface.co/ofsoundof/LSDIR/tree/main
  • Pré-traitement :
    • On sélectionne 10 000 images dans le dataset original pour avoir une distribution homogène des SI dans ces images et on fait la séparation (88% train 2% valid 10% test)
    • Les images passent par notre implémentation SoftCast.
    • Labels : La différence entre l'Image SoftCast Bruitée et l'Image SoftCast Propre (pas l'image brute originale), forçant le réseau à apprendre uniquement les artefacts de compression (bruit de canal).

Configuration des entraînements

Tous les hyperparamètres sont centralisés dans config.py :

  • VALID_SNRS : Liste des niveaux de SNR pour la validation (ex: [0, 10, 20]).
  • TRAIN_SNR_MIN / TRAIN_SNR_MAX : Plage pour l'entraînement "Blind".
  • NUM_LAYERS : Profondeur du DnCNN.
  • BLOCK_SIZE : Taille de bloc SoftCast (défaut : 32).

Lien vers le code source

About

Plateau Projet de 5ème année d'école d'ingénieur : Optimisation de la décompression d'image par Deep Learning

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors