Ziel Content-aware graphic layout generation
ist es, visuelle Elemente automatisch zusammen mit einem bestimmten Inhalt anzuordnen, beispielsweise einem E-Commerce-Produktbild. Ziel dieses Repositorys ist es, ein Komplettpaket für content-aware layout generation
bereitzustellen. Wenn Ihnen dieses Repository gefällt, geben Sie ihm bitte einen Stern!
In diesem Artikel schlagen wir Retrieval-augmented content-aware layout generation
vor. Wir rufen Beispiele für den nächsten Nachbarn basierend auf dem Eingabebild ab und verwenden sie als Referenz, um den Generierungsprozess zu erweitern.
Wir stellen neben unserer Methode (RALF / Autoreg Baseline) auch weitere hochmoderne Methoden zur inhaltsbewussten Layoutgenerierung zur Verfügung. Die folgenden Methoden sind in diesem Repository enthalten:
Wir empfehlen die Verwendung von Docker, um unseren Code einfach auszuprobieren.
Wir empfehlen die Verwendung von Poetry (alle Einstellungen und Abhängigkeiten in pyproject.toml).
curl -sSL https://install.python-poetry.org | python3 -
poetry install
bash scripts/docker/build.sh
bash scripts/docker/exec.sh
poetry install
Einige Variablen sollten festgelegt werden. Bitte erstellen Sie scripts/bin/setup.sh selbst. Zumindest diese drei Variablen sollten festgelegt werden. Wenn Sie die bereitgestellte ZIP-Datei herunterladen, ignorieren Sie bitte das Setup.
DATA_ROOT= " ./cache/dataset "
Möglicherweise sind einige Variablen festgelegt (z. B. OMP_NUM_THREADS
).
Die Prüfpunkte und generierten Layouts der Autoreg Baseline und unseres RALF für die uneingeschränkten und eingeschränkten Aufgaben sind auf Google Drive oder Microsoft OneDrive verfügbar. Nachdem Sie es heruntergeladen haben, führen Sie bitte unzip cache.zip
in diesem Verzeichnis aus. Beachten Sie, dass die Dateigröße 13 GB beträgt.
cache
Verzeichnis enthält:
cache/dataset
.cache/PRECOMPUTED_WEIGHT_DIR
.cache/eval_gt_features
.relationship
in cache/pku_cgl_relationships_dic_using_canvas_sort_label_lexico.pt
.cache/training_logs
. Wir führen eine Vorverarbeitung der PKU- und CGL-Datensätze durch, indem wir den Trainingssatz in Validierungs- und Testteilmengen unterteilen, wie in Abschnitt 4.1 erläutert. Der verteilte CGL-Datensatz ist bereits in diese Unterteilungen segmentiert. Zur Replikation unserer Ergebnisse stellen wir Details zu den Dateinamen im Verzeichnis data_splits/splits/
bereit. Wir empfehlen die Verwendung dieser vordefinierten Aufteilungen, wenn Sie Experimente basierend auf unserer Einstellung durchführen und unsere gemeldeten Ergebnisse wie CGL-GAN und DS-GAN verwenden.
Wir nutzen den Trainingssplit als Abrufquelle. Wenn RALF beispielsweise mit der PKU trainiert wird, wird die Trainingsaufteilung der PKU für Training und Bewertung verwendet. Wir stellen die vorberechnete Korrespondenz mithilfe von DreamSim [Fu+ NeurIPS23] in data_splits/retrieval/
bereit. Die Datenstruktur folgt unten
FILENAME :
- FILENAME top1
- FILENAME top2
...
- FILENAME top16
Sie können ein Bild aus
laden.
Wir empfehlen dringend, Datensätze vorzuverarbeiten, da Sie Ihre Experimente so schnell wie möglich durchführen können!!
Jedes Skript kann zur Verarbeitung von PKU und CGL verwendet werden, indem --dataset_type (pku|cgl)
angegeben wird.
Ordnernamen mit Klammern werden von dieser Pipeline generiert.
| - annotation
| | (for PKU)
| | - train_csv_9973.csv
| | - [test_csv_905.csv](https://drive.google.com/file/d/19BIHOdOzVPBqf26SZY0hu1bImIYlRqVd/view?usp=sharing)
| | (for CGL)
| | - layout_train_6w_fixed_v2.json
| | - layout_test_6w_fixed_v2.json
| | - yinhe.json
| - image
| | - train
| | | - original: image with layout elements
| | | - (input): image without layout elements (by inpainting)
| | | - (saliency)
| | | - (saliency_sub)
| | - test
| | | - input: image without layout elements
| | | - (saliency)
| | | - (saliency_sub)
poetry run python image2layout/hfds_builder/inpainting.py --dataset_root < DATASET_ROOT >
poetry run python image2layout/hfds_builder/saliency_detection.py --input_dir < INPUT_DIR > --output_dir < OUTPUT_DIR > (--algorithm (isnet | basnet))
poetry run python image2layout/hfds_builder/dump_dataset.py --dataset_root < DATASET_ROOT > --output_dir < OUTPUT_DIR >
configs/
enthält die Hyperparameter und Einstellungen für jede Methode und jeden Datensatz. Einzelheiten entnehmen Sie bitte der Datei. Bitte prüfen Sie insbesondere, ob der Debugmodus DEBUG=True or False
.
Bitte lauf
bash scripts/train/autoreg_cgl.sh < GPU_ID > < TASK_NAME >
# If you wanna run train and eval, please run
bash scripts/run_job/end_to_end.sh < GPU_ID e.g. 0> autoreg cgl < TASK_NAME e.g. uncond >
Dabei gibt TASK_NAME
die uneingeschränkten und eingeschränkten Aufgaben an. Bitte beachten Sie die folgende Aufgabenliste:
uncond
: Uneingeschränkte Generierungc
: Kategorie → Größe + Positioncwh
: Kategorie + Größe → Positionpartial
: Fertigstellungrefinement
: Verfeinerungrelation
: BeziehungDer Datensatz mit Inpainting.
Bitte lauf
bash scripts/train/ralf_cgl.sh < GPU_ID > < TASK_NAME >
# If you wanna run train and eval, please run
bash scripts/run_job/end_to_end.sh < GPU_ID e.g. 0> ralf cgl < TASK_NAME e.g. uncond >
Diese Skripte sind beispielsweise hilfreich. end_to_end.sh
ist ein Wrapper-Skript für Training, Inferenz und Auswertung.
# DS-GAN with CGL dataset
bash scripts/run_job/end_to_end.sh 0 dsgan cgl uncond
# LayoutDM with CGL dataset
bash scripts/run_job/end_to_end.sh 2 layoutdm cgl uncond
# CGL-GAN + Retrieval Augmentation with CGL dataset
bash scripts/run_job/end_to_end.sh 2 cglgan_ra cgl uncond
Experimentelle Ergebnisse werden in cache/training_logs
bereitgestellt. Beispielsweise enthält ein Verzeichnis von autoreg_c_cgl
, das die Ergebnisse der Aufgabe „Autoreg-Baseline mit Kategorie → Größe + Position“ enthält:
test_.pkl
: die generierten Layoutslayout_test_.png
: die gerenderten Layouts, in denen das obere Beispiel die Grundwahrheit und das untere Beispiel ein vorhergesagtes Beispiel istgen_final_model.pt
: der letzte Kontrollpunktscores_test.tex
: zusammengefasste qualitative ErgebnisseBitte sehen und laufen
bash scripts/eval_inference/eval_inference.sh < GPU_ID > < JOB_DIR > < COND_TYPE > cgl
Zum Beispiel,
# Autoreg Baseline with Unconstraint generation
bash scripts/eval_inference/eval_inference.sh 0 " cache/training_logs/autoreg_uncond_cgl " uncond cgl
Der Datensatz mit echter Leinwand, also ohne Inpainting.
Bitte sehen und laufen
bash scripts/eval_inference/eval_inference_all.sh < GPU_ID >
Bitte lauf
bash scripts/run_job/inference_single_data.sh < GPU_ID > < JOB_DIR > cgl < SAMPLE_ID >
wobei SAMPLE_ID
optional als Datensatzindex festgelegt werden kann.
Zum Beispiel,
bash scripts/run_job/inference_single_data.sh 0 " ./cache/training_logs/ralf_uncond_cgl " cgl
Bitte passen Sie image2layout/train/inference_single_data.py an, um Ihre Daten zu laden.
Wenn Sie unsere Arbeit für Ihre Forschung nützlich finden, denken Sie bitte darüber nach, Folgendes zu zitieren:
@article { horita2024retrievalaugmented ,
title = { {Retrieval-Augmented Layout Transformer for Content-Aware Layout Generation} } ,
author = { Daichi Horita and Naoto Inoue and Kotaro Kikuchi and Kota Yamaguchi and Kiyoharu Aizawa } ,
booktitle = { CVPR } ,
year = { 2024 }
}