Tout d'abord, une carte graphique Nvidia (ni AMD, ni Intel intégrée) est vivement conseillée pour paralléliser le CNN.
Il faudra alors installer CUDA. Pas de CUDA = des dizaines de fois plus lent.
À installer :
- Python 3.x
- PyTorch
- TorchVision (intégré à PyTorch)
- CUDA (facultatif pour la résolution)
- PIL (intégré à Python)
- NumPy (intégré à Python)
Pour générer l'image cible (via le .sh) :
- GTVImageVect (C++ à compiler ou binaire Linux à télécharger)
- ImageMagick (Disponible via
sudo apt install imagemagick
) - De manière générale, un Linux, un émulateur ou WSL, le noyau Linux intégré officiellement à Windows 10
Entrainement: train.py
Arguments:
-h, --help Message d'aide
-u, --upscaleFactor ! REQUIS Facteur de super-résolution
--batchSize 16 Taille du batch d'entrainement
--testBatchSize 10 Taille du batch de test
--nbEpochs 50 Nombre de simulations max. 0 pour désactiver la limite
--learningRate 0.01 Taux d'apprentissage
--cpu Utilise le CPU et non le GPU / CUDA
--nbThreads 4 Nombre de threads pour le data loader
--seed Seed utilisée pour l'aléatoire
--noiseLimit 25 Peak signal-to-noise ratio (PSNR), détermine la précision du modèle en dB, 0 = pas de limite. PSNR élevé = modèle précis
-q, --quiet Silencieux
Ce programme générera des fichiers "model_epoch_n
.pth" correspondant au modèle à l'epoch n
,
dans un dossier saved_model_ut
_bsbs
_tbstbs
_lrlr
,
où t
correspond au facteur d'échelle,
bs
à la taille du batch d'entrainement,
tbs
la taille du batch de test
et lr
au taux d'apprentissage.
Les images low res doivent être situées dans un dossier "dataset/input", et les cibles high res dans un dossier "dataset/target", où chaque image de qualité différente a le même nom dans les 2 dossiers.
Si le programme est trop gourmand en RAM ou en VRAM, vous pouvez régler les options --batchSize et --testBatchSize.
python train.py --upscaleFactor 4 --nbEpochs 20
Super-résolution: super_resolve.py
Arguments:
-h, --help Message d'aide
-i, --inputPath ! REQUIS Image d'entrée
-m, --modelPath ! REQUIS Modèle .pth à utiliser
-o, --outputPath out.png Image de sortie
--cpu Utilise le CPU et non le GPU / CUDA
-q, --quiet Silencieux
python super_resolve.py --inputPath pomme.png --modelPath model.pth --outputPath pomme_x4.png
GPLv3
Inspiré de cet article
Code de base disponible ici
Dataset cible construit à partir de l'algorithme GTVimageVect
Sujet disponible ici
Romain THEODET, CMI INFO L2 USMB, 2019/2020