DeOldify : coloriser vos anciennes photos avec Python

DeOldify : coloriser vos anciennes photos avec Python

Parmi les modèles de GANs qui me font frémir, DeOldify est l’un de mes préférés. Proposé en 2018 par Jason Antic, il permet de donner de la couleur, de façon très réaliste, aux images et vidéos en noir et blanc.

Quelques exemples d’utilisation de DeOldify

DeOldify est surtout utilisé artistiquement pour coloriser de vieilles images ou vidéos. Mais le modèle est assez robuste et pourrait être utilisé pour coloriser des films complets.

Dans cette section je vous mets des exemples de colorisations réussites issues du repo github du projet.

Chinese Opium Smokers (1880), DeOldify
Chinese Opium Smokers (1880), DeOldify
Terrasse de café, Paris (1925), DeOldify
Terrasse de café, Paris (1925), DeOldify
Woman relaxing in her livingroom in Sweden (1920), DeOldify
Woman relaxing in her livingroom in Sweden (1920), DeOldify

Je vais vous montrer dans la dernière partie comment lancer le modèle facilement sur Python. En attendant, et si vous avez la flemme 😆, vous pouvez coloriser vos images via ce bot Twitter. Vous pouvez aussi l’essayer sur le server Discord de La revue IA, j’ai développé un bot qui repose sur DeOldify.

DeOldify : coloriser vos anciennes photos avec Python
Bot DeOldify sur le server Discord de La revue IA
Bot DeOldify sur le server Discord de La revue IA

Comme je l’ai déjà dit, le modèle peut aussi être utilisé sur des vidéos, même si les résultats sont moins probants.

Comment ça marche ?

Bon, maintenant qu’on a vu de quoi DeOldify était capable, explorons le modèle dans les grandes lignes pour comprendre comment ça fonctionne.

Ce modèle est un projet perso de son auteur, il n’est donc associé à aucun papier de recherche, aucune entreprise ou université. Ce monsieur est un génie ahah !

From GANs to NoGANs

DeOldify, qui reposait dans sa version initiale sur une architecture GAN classique, a été mis à jour et repose maintenant sur une variante de ces réseaux, conçue par Jason Antic lui même, les NoGAN.

J’ai expliqué le principe des GANs dans un précédent article. Leur fonctionnement est très simple et intuitif. Il s’agit de mettre 2 modèles de réseaux de neurones en concurrence l’un contre l’autre, un générateur et un discriminateur. Le générateur doit générer des images à partir de l’entrée, et le discriminateur doit déterminer si la proposition est réaliste ou non.

Les NoGAN sont une structure qui repose sur un générateur pré-entraîné de manière classique, auquel on associe des « méthodes conventionnels ». L’auteur ne donne pas plus de détails mais un résumé est disponible ici.

L’implémentation en Python de DeOldify

Le modèle a été entraîné avec le dataset imagenet, et il a été entièrement développé sur Python avec PyTorch. Tous les codes pour l’entraînement sont disponibles sur github.

Tutoriel Python pour utiliser DeOldify

En plus d’être très robuste, DeOldify est disponible en open source et est très facile à utiliser, je vous montre comment faire dans cette section.

Pour avoir tous les fichiers nécessaires on clone le repo directement :

!git clone https://github.com/jantic/DeOldify.git

On importe ensuite les librairies dont on aura besoin :

from deoldify import device
from deoldify.device_id import DeviceId
from deoldify.visualize import *

import fastai
import torch
import cv2

On choisit le matériel sur lequel on veut lancer le code :

device.set(device=DeviceId.GPU0)

if not torch.cuda.is_available():
    print('GPU not available.')

Si vous utilisez du matériel Nvidia, vous pouvez activer cette fonctionnalité pour choisir automatiquement la meilleur méthode en fonction de votre hardware :

torch.backends.cudnn.benchmark = True

On initialise ensuite le colorizer :

colorizer = get_image_colorizer(artistic=False)

Le mode artistic permet d’avoir de meilleurs résultats, mais demande plus de réglages sur les paramètres à utiliser.

On colorise ensuite l’image avec cette fonction :

image_path = colorizer.plot_transformed_image_from_url(url=image_url, render_factor=render_factor, compare=True, watermarked=watermarked)

Vous avez maintenant le path de votre fichier, vous pouvez voir le résultat avec opencv par exemple :

cv2.imshow("DeOldify result", image_path)

Pour les fans de Docker, le dockerfile est disponible sur github.

Bien qu’il date de 2018, et que 4 ans représente une éternité en deep learning, DeOldify reste un des modèles de références sur la colorisation d’images. L’auteur a proposé une approche novatrice, qui semble généralisable à tous les modèles de modification d’images.