Content-aware graphic layout generation
visa organizar automaticamente os elementos visuais junto com um determinado conteúdo, como a imagem de um produto de comércio eletrônico. Este repositório tem como objetivo fornecer um pacote completo para content-aware layout generation
. Se você gosta deste repositório, dê uma estrela!
Neste artigo, propomos Retrieval-augmented content-aware layout generation
. Recuperamos exemplos de vizinhos mais próximos com base na imagem de entrada e os usamos como referência para aumentar o processo de geração.
Fornecemos não apenas nosso método (RALF/Autoreg Baseline), mas também outros métodos de última geração para geração de layout com reconhecimento de conteúdo. Os seguintes métodos estão incluídos neste repositório:
Recomendamos usar o Docker para testar nosso código facilmente.
Recomendamos o uso de Poetry (todas as configurações e dependências em pyproject.toml).
curl -sSL https://install.python-poetry.org | python3 -
poetry install
bash scripts/docker/build.sh
bash scripts/docker/exec.sh
poetry install
Algumas variáveis devem ser definidas. Por favor, crie scripts/bin/setup.sh você mesmo. Pelo menos essas três variáveis devem ser definidas. Se você baixar o zip fornecido, ignore a configuração.
DATA_ROOT= " ./cache/dataset "
Algumas variáveis podem ser definidas (por exemplo, OMP_NUM_THREADS
)
Os pontos de verificação e layouts gerados do Autoreg Baseline e nosso RALF para as tarefas irrestritas e restritas estão disponíveis no Google Drive ou Microsoft OneDrive. Depois de baixá-lo, execute unzip cache.zip
neste diretório. Observe que o tamanho do arquivo é de 13 GB.
diretório cache
contém:
cache/dataset
.cache/PRECOMPUTED_WEIGHT_DIR
.cache/eval_gt_features
.relationship
em cache/pku_cgl_relationships_dic_using_canvas_sort_label_lexico.pt
.cache/training_logs
. Realizamos o pré-processamento nos conjuntos de dados PKU e CGL particionando o conjunto de treinamento em subconjuntos de validação e teste, conforme elaborado na Seção 4.1. O conjunto de dados CGL, conforme distribuído, já está segmentado nessas divisões. Para replicação de nossos resultados, fornecemos detalhes dos nomes dos arquivos no diretório data_splits/splits/
. Incentivamos o uso dessas divisões predefinidas ao conduzir experimentos com base em nossa configuração e usar nossas pontuações relatadas, como CGL-GAN e DS-GAN.
Usamos a divisão de treinamento como fonte de recuperação. Por exemplo, quando o RALF é treinado com o PKU, a divisão de treinamento do PKU é usada para treinamento e avaliação. Fornecemos o correspondente pré-computado usando DreamSim [Fu+ NeurIPS23] em data_splits/retrieval/
. A estrutura de dados segue abaixo
FILENAME :
- FILENAME top1
- FILENAME top2
...
- FILENAME top16
Você pode carregar uma imagem de
.
É altamente recomendável pré-processar conjuntos de dados, pois você pode executar seus experimentos o mais rápido possível!
Cada script pode ser usado para processar PKU e CGL especificando --dataset_type (pku|cgl)
Os nomes das pastas entre parênteses serão gerados por este pipeline.
| - 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/
contém os hiperparâmetros e configurações para cada método e conjunto de dados. Consulte o arquivo para obter detalhes. Em particular, verifique se o modo de depuração DEBUG=True or False
.
Por favor, corra
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 >
onde TASK_NAME
indica as tarefas irrestritas e restritas. Consulte a lista de tarefas abaixo:
uncond
: geração irrestritac
: Categoria → Tamanho + Posiçãocwh
: Categoria + Tamanho → Posiçãopartial
: Conclusãorefinement
: refinamentorelation
: RelacionamentoO conjunto de dados com pintura interna.
Por favor, corra
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 >
Por exemplo, esses scripts são úteis. end_to_end.sh
é um script wrapper para treinamento, inferência e avaliação.
# 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
Os resultados experimentais são fornecidos em cache/training_logs
. Por exemplo, um diretório de autoreg_c_cgl
, que contém os resultados da tarefa Autoreg Baseline com Categoria → Tamanho + Posição, inclui:
test_.pkl
: os layouts geradoslayout_test_.png
: os layouts renderizados, nos quais a amostra superior é a verdade e a amostra inferior é uma amostra previstagen_final_model.pt
: o ponto de verificação finalscores_test.tex
: resultados qualitativos resumidosPor favor veja e corra
bash scripts/eval_inference/eval_inference.sh < GPU_ID > < JOB_DIR > < COND_TYPE > cgl
Por exemplo,
# Autoreg Baseline with Unconstraint generation
bash scripts/eval_inference/eval_inference.sh 0 " cache/training_logs/autoreg_uncond_cgl " uncond cgl
O conjunto de dados com tela real, ou seja, sem pintura interna.
Por favor veja e corra
bash scripts/eval_inference/eval_inference_all.sh < GPU_ID >
Por favor, corra
bash scripts/run_job/inference_single_data.sh < GPU_ID > < JOB_DIR > cgl < SAMPLE_ID >
onde SAMPLE_ID
pode opcionalmente ser definido como um índice de conjunto de dados.
Por exemplo,
bash scripts/run_job/inference_single_data.sh 0 " ./cache/training_logs/ralf_uncond_cgl " cgl
Personalize image2layout/train/inference_single_data.py para carregar seus dados.
Se você achar nosso trabalho útil em sua pesquisa, considere citar:
@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 }
}