Arxiv | Bibtex
Wir entwickeln einen neuen Ansatz für Image -Inpainting, bei dem gefüllte Regionen besser reproduziert werden und feine Details zeigen, die von unserem Verständnis für die Arbeit von Künstlern inspiriert sind: Zeilen zuerst, Farbe als nächstes . Wir schlagen ein zweistufiges kontroverses Modell EdgeConnect vor, das einen Kantengenerator umfasst, gefolgt von einem Bildabschlussnetzwerk. Der Edge -Generator halluziniert die Kanten der fehlenden Region (sowohl regulär als auch unregelmäßig) des Bildes, und das Bildvervollständigungsnetzwerk füllt die fehlenden Regionen mit halluzinierten Kanten a priori aus. Eine detaillierte Beschreibung des Systems finden Sie in unserem Artikel.

git clone https://github.com/knazeri/edge-connect.git
cd edge-connectpip install -r requirements.txtWir verwenden Places2-, Celeba- und Paris-Street-View-Datensätze. Um ein Modell auf dem vollständigen Datensatz zu trainieren, laden Sie Datensätze von offiziellen Websites herunter.
Führen Sie nach dem Herunterladen scripts/flist.py aus, um die Dateilisten für Zug-, Test- und Validierungssatzlisten zu generieren. So generieren Sie beispielsweise die Liste der Trainingssatzdatei auf Places2 -Datensatzausführungen:
mkdir datasets
python ./scripts/flist.py --path path_to_places2_train_set --output ./datasets/places_train.flistUnser Modell ist auf dem von Liu et al. Zugelassenen unregelmäßigen Maskendatensatz geschult.
Alternativ können Sie den Datensatz des unregelmäßigen Maskendatensatzes von Karim Iskakov herunterladen.
Bitte verwenden Sie scripts/flist.py um die Listen für Zug-, Test- und Validierungs -Set -Masken -Dateilisten zu generieren.
Laden Sie die vorgebildeten Modelle mit den folgenden Links herunter und kopieren Sie sie unter ./checkpoints Verzeichnis.
Plätze2 | Celeba | Paris-StreetView
Alternativ können Sie das folgende Skript ausführen, um die vorgebauten Modelle automatisch herunterzuladen:
bash ./scripts/download_model.sh Um das Modell zu trainieren, erstellen Sie eine config.yaml -Datei ähnlich der Beispiel -Konfigurationsdatei und kopieren Sie es unter Ihr Checkpoints -Verzeichnis. Weitere Informationen zur Modellkonfiguration finden Sie im Konfigurationshandbuch.
EdgeConnect wird in drei Phasen geschult: 1) Training des Edge -Modells, 2) Training des Inpaint -Modells und 3) Training des gemeinsamen Modells. Um das Modell zu trainieren:
python train.py --model [stage] --checkpoints [path to checkpoints] Zum Beispiel, um das Kantenmodell auf Places2 -Datensatz unter ./checkpoints/places2 -Verzeichnis zu trainieren:
python train.py --model 1 --checkpoints ./checkpoints/places2 Die Konvergenz des Modells unterscheidet sich vom Datensatz zu Datensatz. Zum Beispiel Places2 -Datensatz konvergiert in einem von zwei Epochen, während kleinere Datensätze wie Celeba fast 40 Epochen benötigen, um zu konvergieren. Sie können die Anzahl der Trainings -Iterationen festlegen, indem Sie den Wert MAX_ITERS in der Konfigurationsdatei ändern.
Um das Modell zu testen, erstellen Sie eine config.yaml -Datei ähnlich der Beispiel -Konfigurationsdatei und kopieren Sie sie unter Ihr Kontrollpunktverzeichnis. Weitere Informationen zur Modellkonfiguration finden Sie im Konfigurationshandbuch.
Sie können das Modell auf allen drei Stufen testen: 1) Kantenmodell, 2) Inpaint -Modell und 3) gemeinsames Modell. In jedem Fall müssen Sie ein Eingabebild (Bild mit einer Maske) und eine Graustufen -Maskendatei bereitstellen. Bitte stellen Sie sicher, dass die Maskendatei die gesamte Maskenregion im Eingabebild abdeckt. Um das Modell zu testen:
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] Wir geben einige Testbeispiele unter ./examples Directory an. Bitte laden Sie die vorgeborenen Modelle herunter und rennen Sie:
python test.py
--checkpoints ./checkpoints/places2
--input ./examples/places2/images
--mask ./examples/places2/masks
--output ./checkpoints/results In diesem Skript werden alle Bilder in ./examples/places2/images mit ihren entsprechenden Masken in ./examples/places2/mask verzeichnet und speichert die Ergebnisse im Verzeichnis ./checkpoints/results . Standardmäßig test.py Skript wird in Stufe 3 ausgeführt ( --model=3 ).
Um das Modell zu bewerten, müssen Sie das Modell zuerst im Testmodus mit Ihrem Validierungssatz ausführen und die Ergebnisse auf der Festplatte speichern. Wir bieten ein Dienstprogramm ./scripts/metrics.py um das Modell mithilfe von PSNR, SSIM und dem mittleren absoluten Fehler zu bewerten:
python ./scripts/metrics.py --data-path [path to validation set] --output-path [path to model output] Um den Fréchet Inception Distanz (FID) zu messen ./scripts/fid_score.py . Wir nutzen die Pytorch -Implementierung von FID von hier aus, die die vorbereiteten Gewichte aus dem Inception -Modell von Pytorch verwendet.
python ./scripts/fid_score.py --path [path to validation, path to model output] --gpu [GPU id to use] Standardmäßig verwenden wir Canny Edge -Detektor, um Kanteninformationen aus den Eingabebildern zu extrahieren. Wenn Sie das Modell mit einer externen Kantenerkennung (z scripts/flist.py Bitte stellen Sie sicher, dass die Dateinamen und die Verzeichnisstruktur Ihren Trainings-/Testsätzen übereinstimmen. Sie können zur externen Kantenerkennung wechseln, indem Sie EDGE=2 in der Konfigurationsdatei angeben.
Die Modellkonfiguration wird in einer config.yaml -Datei unter Ihrem Checkpoints -Verzeichnis gespeichert. Die folgenden Tabellen geben die Dokumentation für alle in der Konfigurationsdatei verfügbaren Optionen an:
| Option | Beschreibung |
|---|---|
| MODUS | 1: Zug, 2: Test, 3: eval |
| MODELL | 1: Kantenmodell, 2: Inpaint-Modell, 3: Edge-Inpaint-Modell, 4: Gelenkmodell |
| MASKE | 1: Zufallsblock, 2: Hälfte, 3: extern, 4: externer + Zufallsblock, 5: externer + Zufallsblock + halb |
| RAND | 1: Canny, 2: extern |
| NMS | 0: Keine Max-Suppression, 1: Nicht-Max-Unterdrückung an den externen Kanten |
| SAMEN | Zufallszahlengeneratorsamen |
| GPU | Liste der GPU -IDs, COMMA Separated List zB [0,1] |
| DEBUGGEN | 0: Kein Debugg, 1: Debugging -Modus |
| Ausführlich | 0: Keine ausführliche, 1: Ausgabe detaillierte Statistiken in der Ausgangskonsole |
| Option | Beschreibung |
|---|---|
| Train_flist | Textdatei mit Trainingssatzdateienliste |
| Val_flist | Textdatei mit Validierungs -Set -Dateienliste enthält |
| Test_flist | Textdatei mit Test -Set -Dateienliste enthalten |
| Train_edge_flist | Textdatei mit Schulungssatz externe Kantendateien Liste (nur mit Edge = 2) |
| VAL_EDED_FLIST | Textdatei mit Validierungs -Set External Edges -Dateien Liste (nur mit Edge = 2) |
| Test_edge_flist | Textdatei mit TEST SET externe Kantendateien Liste (nur mit Edge = 2) |
| Train_mask_flist | Textdatei mit Trainingset -Masken -Dateienliste (nur mit Mask = 3, 4, 5) |
| Val_mask_flist | Textdatei mit Validierungs -Masken -Dateienliste (nur mit Mask = 3, 4, 5) |
| Test_mask_flist | Textdatei mit Test -Set -Masken -Dateienliste (nur mit Mask = 3, 4, 5) |
| Option | Standard | Beschreibung |
|---|---|---|
| Lr | 0,0001 | Lernrate |
| D2G_LR | 0,1 | Diskriminator/Generator -Lernrate -Verhältnis |
| Beta1 | 0,0 | Adam Optimierer Beta1 |
| Beta2 | 0,9 | Adam Optimierer Beta2 |
| Batch_size | 8 | Eingabe -Chargegröße |
| Input_size | 256 | Eingabebildgröße für das Training. (0 für Originalgröße) |
| Sigma | 2 | Standardabweichung des Gaußschen Filters, der im Canny Edge -Detektor verwendet wird (0: zufällig, -1: keine Kante) |
| Max_iters | 2e6 | Maximale Anzahl von Iterationen, um das Modell zu trainieren |
| Edge_threshold | 0,5 | Kantenerkennungsschwelle (0-1) |
| L1_LOSS_WEIGHT | 1 | L1 -Verlustgewicht |
| Fm_loss_weight | 10 | Feature-Matching-Verlustgewicht |
| Style_loss_weight | 1 | Stilverlustgewicht |
| Content_loss_weight | 1 | Wahrnehmungsverlustgewicht |
| Inpaint_adv_loss_weight | 0,01 | Gegenteiler Verlustgewicht |
| Gan_loss | Nsgan | Nsgan : Nicht sättigender Gan, Lsgan : kleinste Quadrate Gan, Scharnier : Scharnierverlust Gan |
| Gan_pool_size | 0 | gefälschte Bilder Poolgröße |
| Save_interval | 1000 | Wie viele Iterationen warten, bevor das Modell speichert (0: niemals) |
| Eval_Interval | 0 | Wie viele Iterationen warten, um das Modell zu bewerten (0: niemals) |
| Log_interval | 10 | Wie viele Iterationen warten, bevor der Schulungsverlust protokolliert (0: niemals) |
| Sample_interval | 1000 | Wie viele Iterationen warten, bevor Sie Beispiel sparen (0: niemals) |
| Sample_size | 12 | Anzahl der Bilder, die auf jedem Samling -Intervall probieren können |
Lizenziert unter einem Creative Commons Attribution-Noncommercial 4.0 International.
Sofern sonst anderweitig festgestellt wird, wird dieser Inhalt unter einer CC-BY-NC-Lizenz veröffentlicht, was bedeutet, dass Sie den Inhalt kopieren, remix, transformieren und aufbauen können, solange Sie das Material nicht für kommerzielle Zwecke verwenden und angemessene Anweisungen angeben und einen Link zur Lizenz anbieten.
Wenn Sie diesen Code für Ihre Forschung verwenden, zitieren Sie bitte unsere Papiere EdgeConnect: Generative Image Inpainting mit kontroversem Randlernen oder EdgeConnect: Strukturgeführte Bildeinlagerung unter Verwendung der Kantenvorhersage:
@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}
}