ArXiv | Bibtex
Nous développons une nouvelle approche pour la détérioration de l'image qui fait un meilleur travail de reproduction des régions remplies présentant de beaux détails inspirés de notre compréhension du fonctionnement des artistes: lignes d'abord, couleur ensuite . Nous proposons un modèle adversaire en deux étapes EdgeConnect qui comprend un générateur de bords suivi d'un réseau d'achat d'image. Le générateur de bord hallucine les bords de la région manquante (régulière et irrégulière) de l'image, et le réseau d'achèvement de l'image remplit les régions manquantes en utilisant les bords hallucinés comme a priori. Une description détaillée du système peut être trouvée dans notre article.

git clone https://github.com/knazeri/edge-connect.git
cd edge-connectpip install -r requirements.txtNous utilisons des ensembles de données Places2, Celeba et Paris Street-View. Pour former un modèle sur l'ensemble de données complet, téléchargez des ensembles de données à partir de sites Web officiels.
Après téléchargement, exécutez scripts/flist.py pour générer des listes de fichiers de train, de test et de validation. Par exemple, pour générer la liste des fichiers de définition de formation sur les places2 Exécution de l'ensemble de données:
mkdir datasets
python ./scripts/flist.py --path path_to_places2_train_set --output ./datasets/places_train.flistNotre modèle est formé sur l'ensemble de données de masque irrégulier fourni par Liu et al .. Vous pouvez télécharger un ensemble de données de masque irrégulier disponible publiquement à partir de leur site Web.
Alternativement, vous pouvez télécharger un jeu de données de masque irrégulier de Draw rapide par Karim Iskakov qui est une combinaison de 50 millions de traits tirés par la main humaine.
Veuillez utiliser scripts/flist.py pour générer des listes de fichiers de fichiers Train, Test and Validation SET comme expliqué ci-dessus.
Téléchargez les modèles pré-formés à l'aide des liens suivants et copiez-les sous ./checkpoints Directory.
Lieux2 | Celeba | Paris-streetview
Alternativement, vous pouvez exécuter le script suivant pour télécharger automatiquement les modèles pré-formés:
bash ./scripts/download_model.sh Pour former le modèle, créez un fichier config.yaml similaire au fichier de configuration d'exemple et copiez-le sous votre répertoire de points de contrôle. Lisez le guide de configuration pour plus d'informations sur la configuration du modèle.
EdgeConnect est formé en trois étapes: 1) Formation du modèle Edge, 2) Formation du modèle d'insuffisance et 3) Formation du modèle conjoint. Pour entraîner le modèle:
python train.py --model [stage] --checkpoints [path to checkpoints] Par exemple pour former le modèle Edge sur les places2 ensemble de données sous ./checkpoints/places2 Répertoire:
python train.py --model 1 --checkpoints ./checkpoints/places2 La convergence du modèle diffère d'un ensemble de données à un ensemble de données. Par exemple, places2 ensemble de données converge dans l'une des deux époques, tandis que les ensembles de données plus petits comme Celeba nécessitent près de 40 époques pour converger. Vous pouvez définir le nombre d'itérations de formation en modifiant la valeur MAX_ITERS dans le fichier de configuration.
Pour tester le modèle, créez un fichier config.yaml similaire au fichier de configuration d'exemple et copiez-le sous votre répertoire de points de contrôle. Lisez le guide de configuration pour plus d'informations sur la configuration du modèle.
Vous pouvez tester le modèle sur les trois étapes: 1) Modèle de bord, 2) modèle d'insuffisance et 3) modèle conjoint. Dans chaque cas, vous devez fournir une image d'entrée (image avec un masque) et un fichier de masque en niveaux de gris. Veuillez vous assurer que le fichier de masque couvre toute la région de masque dans l'image d'entrée. Pour tester le modèle:
python test.py
--model [stage]
--checkpoints [path to checkpoints]
--input [path to input directory or file]
--mask [path to masks directory or mask file]
--output [path to the output directory] Nous fournissons quelques exemples de test dans le répertoire ./examples . Veuillez télécharger les modèles pré-formés et courir:
python test.py
--checkpoints ./checkpoints/places2
--input ./examples/places2/images
--mask ./examples/places2/masks
--output ./checkpoints/results Ce script inventera toutes les images dans ./examples/places2/images en utilisant leurs masques correspondants dans ./examples/places2/mask Directory et enregistre les résultats dans le répertoire ./checkpoints/results . Par défaut, le test.py est exécuté sur l'étape 3 ( --model=3 ).
Pour évaluer le modèle, vous devez d'abord exécuter le modèle en mode test par rapport à votre ensemble de validation et enregistrer les résultats sur le disque. Nous fournissons un utilitaire ./scripts/metrics.py pour évaluer le modèle à l'aide de PSNR, SSIM et d'erreur absolue moyenne:
python ./scripts/metrics.py --data-path [path to validation set] --output-path [path to model output] Pour mesurer la distance de création de Fréchet (score FID) exécuter ./scripts/fid_score.py . Nous utilisons la mise en œuvre de Pytorch de FID à partir d'ici qui utilise les poids pré-entraînés du modèle de création de Pytorch.
python ./scripts/fid_score.py --path [path to validation, path to model output] --gpu [GPU id to use] Par défaut, nous utilisons un détecteur de bord Canny pour extraire les informations de bord des images d'entrée. Si vous souhaitez former le modèle avec une détection de bord externe (détection de bord à nervages holistique par exemple), vous devez générer des cartes de bord pour l'ensemble des ensembles de formation / test en tant que prétraitement et leurs listes de fichiers correspondantes à l'aide scripts/flist.py comme expliqué ci-dessus. Veuillez vous assurer que les noms de fichiers et la structure du répertoire correspondent à vos ensembles de formation / test. Vous pouvez passer à la détection de bord externe en spécifiant EDGE=2 dans le fichier de configuration.
La configuration du modèle est stockée dans un fichier config.yaml sous votre répertoire de points de contrôle. Les tableaux suivants fournissent la documentation pour toutes les options disponibles dans le fichier de configuration:
| Option | Description |
|---|---|
| MODE | 1: Train, 2: Test, 3: Eval |
| MODÈLE | 1: Modèle de bord, 2: Modèle d'insuffisance, 3: Modèle de pointe de bord, 4: modèle conjoint |
| MASQUE | 1: bloc aléatoire, 2: moitié, 3: externe, 4: Bloc externe + aléatoire, 5: Bloc externe + aléatoire + moitié |
| BORD | 1: Canny, 2: externe |
| SNM | 0: pas de suppression non max, 1: suppression non-max sur les bords externes |
| GRAINE | graine de générateur de nombres aléatoires |
| GPU | Liste des ID GPU, liste séparée par virgules, par exemple [0,1] |
| DÉBOGUER | 0: pas de débogage, 1: mode de débogage |
| VERBEUX | 0: Pas de verbeux, 1: Sortie statistiques détaillées dans la console de sortie |
| Option | Description |
|---|---|
| Train_flist | Fichier texte contenant la liste des fichiers d'ensemble de formation |
| Val_flist | Fichier texte contenant la liste des fichiers de définition de validation |
| Test_flist | Fichier texte contenant la liste des fichiers de tests de test |
| Train_edge_flist | Fichier texte contenant la liste des fichiers de bords externes (uniquement avec Edge = 2) |
| Val_edge_flist | Fichier texte contenant la validation SET Liste des fichiers de bords externes (uniquement avec Edge = 2) |
| Test_edge_flist | Fichier texte contenant la liste des fichiers des arêtes externes (uniquement avec Edge = 2) |
| Train_mask_flist | Fichier texte contenant la liste des fichiers de masques de formation (uniquement avec masque = 3, 4, 5) |
| Val_mask_flist | Fichier texte contenant la liste des fichiers de masques de validation (uniquement avec masque = 3, 4, 5) |
| Test_mask_flist | Fichier texte contenant la liste des fichiers de masques de test (uniquement avec masque = 3, 4, 5) |
| Option | Défaut | Description |
|---|---|---|
| LR | 0.0001 | taux d'apprentissage |
| D2g_lr | 0.1 | Ratio de taux d'apprentissage discriminateur / générateur |
| Bêta1 | 0.0 | Adam Optimizer Beta1 |
| Bêta2 | 0.9 | Adam Optimizer Beta2 |
| Batch_size | 8 | Taille du lot d'entrée |
| Entrée_size | 256 | Taille de l'image d'entrée pour la formation. (0 pour la taille d'origine) |
| Sigma | 2 | Écart-type du filtre gaussien utilisé dans le détecteur de bord radieux (0: aléatoire, -1: pas de bord) |
| Max_iters | 2e6 | Nombre maximum d'itérations pour former le modèle |
| Edge_Threshold | 0,5 | Seuil de détection de bord (0-1) |
| L1_loss_weight | 1 | poids de perte L1 |
| Fm_loss_weight | 10 | Fonctionnement de la perte de poids |
| Style_loss_weight | 1 | poids de perte de style |
| Content_loss_weight | 1 | poids de perte perceptuelle |
| Inpaint_adv_loss_weight | 0,01 | poids de perte contradictoire |
| Gan_loss | nsgan | NSGAN : Gan non saturant, LSGAN : le moins carré Gan, Hinge : Hinge Loss Gan |
| Gan_pool_size | 0 | Fausses Images Taille de la piscine |
| Sauver_interval | 1000 | Combien d'itérations à attendre avant de sauver le modèle (0: jamais) |
| EVAL_INTERVAL | 0 | Combien d'itérations à attendre avant d'évaluer le modèle (0: jamais) |
| Log_interval | 10 | Combien d'itérations à attendre avant la perte de la perte de formation (0: jamais) |
| Sample_interval | 1000 | Combien d'itérations à attendre avant d'enregistrer l'échantillon (0: jamais) |
| Sample_size | 12 | Nombre d'images à échantillonner sur chaque intervalle de Samling |
Licencié sous un Creative Commons Attribution-NonCommercial 4.0 International.
Sauf si autrement noté, ce contenu est publié sous une licence CC BY-NC, ce qui signifie que vous pouvez copier, remixer, transformer et tirer parti du contenu tant que vous n'utilisez pas le matériel à des fins commerciales et offrir un crédit approprié et fournir un lien vers la licence.
Si vous utilisez ce code pour vos recherches, veuillez citer nos articles EdgeConnect: Image générative Entretien avec un apprentissage de bord adversaire ou EdgeConnect: Image guidée par structure Intégralité de l'image à l'aide de la prédiction des bords:
@inproceedings{nazeri2019edgeconnect,
title={EdgeConnect: Generative Image Inpainting with Adversarial Edge Learning},
author={Nazeri, Kamyar and Ng, Eric and Joseph, Tony and Qureshi, Faisal and Ebrahimi, Mehran},
journal={arXiv preprint},
year={2019},
}
@InProceedings{Nazeri_2019_ICCV,
title = {EdgeConnect: Structure Guided Image Inpainting using Edge Prediction},
author = {Nazeri, Kamyar and Ng, Eric and Joseph, Tony and Qureshi, Faisal and Ebrahimi, Mehran},
booktitle = {The IEEE International Conference on Computer Vision (ICCV) Workshops},
month = {Oct},
year = {2019}
}