
Ce référentiel contient du code pour instancier et déployer un amplificateur de résolution d'image. Ce modèle est capable de monter à l'échelle une image pixélisée par un facteur 4, tout en générant des détails photo-réalistes.
Le GAN est basé sur ce référentiel GitHub et sur cet article de recherche.
Le modèle a été formé sur 600 000 images de l'ensemble de données OpenImages V4, et les fichiers du modèle sont hébergés sur le stockage d'objets IBM Cloud. Le code de ce référentiel déploie le modèle en tant que service Web dans un conteneur Docker. Ce référentiel a été développé dans le cadre de l'IBM Developer Model Asset Exchange et l'API publique est alimentée par IBM Cloud.
| Domaine | Application | Industrie | Cadre | Données de formation | Format de données d'entrée |
|---|---|---|---|---|---|
| Vision | Super résolution | Général | Tensorflow | OpenImages v4 | Image (RVB / HWC) |
| Set5 | Srgan de l'auteur | Ce srgan |
|---|---|---|
| PSNR | 29.40 | 29.56 |
| SSIM | 0.85 | 0,85 |
| Set14 | Srgan de l'auteur | Ce srgan |
|---|---|---|
| PSNR | 26.02 | 26.25 |
| Ssim | 0,74 | 0,72 |
| BSD100 | Srgan de l'auteur | Ce srgan |
|---|---|---|
| PSNR | 25.16 | 24.4 |
| SSIM | 0,67 | 0,67 |
Les performances de cette implémentation ont été évaluées sur trois ensembles de données: SET5, SET14 et BSD100. Les métriques PSNR (Signal Signal / Noise) et SSIM (indice de similitude structurelle) ont été évaluées, bien que le document discute du MOS (score d'opinion moyen) comme la métrique la plus favorable. En substance, la mise en œuvre de SRGAN érade un meilleur score PSNR ou SSIM pour un résultat plus attrayant pour l'œil humain. Cela conduit à une collection d'images de sortie avec des détails plus nets et réalistes.
Remarque: Le SRGAN dans le journal a été formé sur des échantillons d'imageNet 350K, tandis que ce SRGAN a été formé sur 600k OpenImages V4 Pictures.
| Composant | Licence | Lien |
|---|---|---|
| Ce référentiel | Apache 2.0 | LICENCE |
| Poids du modèle | Apache 2.0 | LICENCE |
| Code modèle (tiers) | Mit | LICENCE |
| Échantillons de test | CC par 2.0 | Réadme |
| CC0 | Réadme |
docker : l'interface de ligne de commande docker. Suivez les instructions d'installation de votre système.To run the docker image, which automatically starts the model serving API, run:
$ docker run -it -p 5000:5000 quay.io/codait/max-image-resolution-enhancer
Cela tirera une image prédéfinie du registre des conteneurs Quay.io (ou utilisera une image existante si elle est déjà mise en cache localement) et l'exécuter. Si vous préférez vérifier et construire le modèle localement, vous pouvez suivre l'exécution des étapes localement ci-dessous.
Vous pouvez déployer le microservice qui servait le modèle sur Red Hat OpenShift en suivant les instructions pour la console Web OpenShift ou la plate-forme de conteneur OpenShift dans ce tutoriel, spécifiant quay.io/codait/max-image-resolution-enhancer résolution-enhancer comme nom d'image.
Vous pouvez également déployer le modèle sur Kubernetes à l'aide de la dernière image Docker sur Quay.
Sur votre cluster Kubernetes, exécutez les commandes suivantes:
$ kubectl apply -f https://github.com/IBM/max-image-resolution-enhancer/raw/master/max-image-resolution-enhancer.yaml
Le modèle sera disponible en interne au port 5000 , mais peut également être accessible en externe via le NodePort .
Un tutoriel plus élaboré sur la façon de déployer ce modèle maximum en production sur IBM Cloud peut être trouvé ici.
Clone ce référentiel localement. Dans un terminal, exécutez la commande suivante:
$ git clone https://github.com/IBM/max-image-resolution-enhancer.git
Changez le répertoire dans le dossier de base du référentiel:
$ cd max-image-resolution-enhancer
Pour construire l'image Docker localement, exécutez:
$ docker build -t max-image-resolution-enhancer .
Tous les actifs du modèle requis seront téléchargés pendant le processus de construction. Notez qu'actuellement, cette image Docker est uniquement CPU (nous ajouterons la prise en charge des images GPU plus tard).
Pour exécuter l'image Docker, qui démarre automatiquement l'API de service modèle, exécutez:
$ docker run -it -p 5000:5000 max-image-resolution-enhancer
Le serveur API génère automatiquement une page de documentation interactive Swagger. Allez sur http://localhost:5000 pour le charger. De là, vous pouvez explorer l'API et également créer des demandes de test.
Utilisez le point de terminaison model/predict pour charger une image de test (vous pouvez utiliser l'une des images de test à partir du dossier samples/test_examples/low_resolution ) afin d'obtenir une image de sortie haute résolution renvoyée.
L'image d'entrée idéale est un fichier PNG avec une résolution entre 100x100 et 500x500, de préférence sans traitement post-capture et couleurs flashy. Le modèle est capable de générer des détails à partir d'une image pixélée (DPI faible), mais n'est pas en mesure de corriger une image «floue».
Gauche: image d'entrée (128 × 80). Right: output image (512×320)

Vous pouvez également le tester sur la ligne de commande, par exemple:
$ curl -F "image=@samples/test_examples/low_resolution/food.png" -XPOST http://localhost:5000/model/predict > food_high_res.png
La commande ci-dessus enverra le fichier food.png basse résolution au modèle et enregistrera l'image de sortie haute résolution dans le fichier food_high_res.png dans le répertoire racine.
Pour exécuter l'application API FLASK en mode de débogage, modifiez config.py pour définir DEBUG = True sous les paramètres de l'application. Vous devrez alors reconstruire l'image Docker (voir l'étape 1).
N'oubliez pas de définir DEBUG = False lors de l'exécution du modèle en production.
Pour arrêter le conteneur Docker, tapez CTRL + C dans votre terminal.
model/predict le point de terminaison tue le conteneur Docker avec le message KilledCela est probablement dû à la limitation par défaut de l'allocation de mémoire de Docker à 2 Go. Accédez au menu
Preferencessous l'application Docker Desktop. Utilisez le curseur pour augmenter la mémoire disponible à 8 Go et redémarrer Docker Desktop.
Ce modèle génère des détails essentiellement «hors de l'air». Créer quelque chose à partir de rien n'est pas possible sans faire d'hypothèses. Le réseau tente de reconnaître les éléments dans l'image à basse résolution à partir de laquelle il peut déduire à quoi aurait pu ressembler la réalité (œil humain | super-résolution). Si un groupe de pixels ressemble fortement à une observation qui n'est pas liée au contenu de l'image, cela pourrait conduire à des résultats qui ne sont pas «physiquement possibles».
Par exemple: un pixel blanc dans une image à basse résolution pourrait avoir été converti en flocon de neige, bien que l'image originale ait pu être prise dans le désert. Cet exemple est imaginaire et n'a pas été observé.
L'observation des artefacts dans certaines images est malheureusement inévitable car tout réseau neuronal est soumis aux limitations techniques et aux caractéristiques des données de formation.
Gardez à l'esprit que les meilleurs résultats sont obtenus avec les éléments suivants:
- Une image PNG
- Une image qui est suffisamment zoomée. Pendant le processus, le réseau regroupe un bloc de pixels ensemble. Si le bloc contient plus de détails que le réseau ne produit, le résultat sera faux.
- Une image prise sous la lumière naturelle, sans filtres, et avec peu de couleurs vives ou flashy. Le réseau neuronal n'a pas été formé sur des images fortement éditées.
- Une image qui a une résolution suffisamment élevée pour ne pas confondre le réseau avec plusieurs possibilités (par exemple, un seul pixel dans une image à très basse résolution pourrait représenter une voiture entière, une personne, un sandwich, ..)
- Le modèle est capable de générer des détails à partir d'une image pixélée (DPI faible), mais n'est pas en mesure de corriger une image «floue».
Si vous êtes intéressé à contribuer au projet Model Asset Exchange ou à avoir des questions, veuillez suivre les instructions ici.