Content-aware graphic layout generation
전자상거래 제품 이미지와 같은 특정 콘텐츠와 함께 시각적 요소를 자동으로 배열하는 것을 목표로 합니다. 이 저장소는 content-aware layout generation
위한 올인원 패키지를 제공하는 것을 목표로 합니다. 이 저장소가 마음에 들면 별표를 주세요!
본 논문에서는 Retrieval-augmented content-aware layout generation
제안합니다. 입력 이미지를 기반으로 가장 가까운 이웃 예제를 검색하고 이를 참조로 사용하여 생성 프로세스를 강화합니다.
우리는 우리의 방법(RALF/Autoreg Baseline)뿐만 아니라 콘텐츠 인식 레이아웃 생성을 위한 다른 최첨단 방법도 제공합니다. 이 저장소에는 다음 방법이 포함되어 있습니다.
코드를 쉽게 시험해 보려면 Docker를 사용하는 것이 좋습니다.
Poetry(pyproject.toml의 모든 설정 및 종속성)를 사용하는 것이 좋습니다.
curl -sSL https://install.python-poetry.org | python3 -
poetry install
bash scripts/docker/build.sh
bash scripts/docker/exec.sh
poetry install
일부 변수를 설정해야 합니다. scripts/bin/setup.sh를 직접 만들어 보세요. 최소한 이 세 가지 변수는 설정되어야 합니다. 제공된 zip을 다운로드하는 경우 설정을 무시하십시오.
DATA_ROOT= " ./cache/dataset "
일부 변수가 설정될 수 있습니다(예: OMP_NUM_THREADS
).
Autoreg Baseline 및 제한되지 않은 작업과 제한된 작업에 대한 RALF의 체크포인트 및 생성된 레이아웃은 Google 드라이브 또는 Microsoft OneDrive에서 사용할 수 있습니다. 다운로드 후 해당 디렉토리에서 unzip cache.zip
실행해 주세요. 참고로 파일 크기는 13GB입니다.
cache
디렉토리에는 다음이 포함됩니다.
cache/dataset
의 전처리된 CGL 데이터세트.cache/PRECOMPUTED_WEIGHT_DIR
에 있는 레이아웃 인코더 및 ResNet50의 가중치.cache/eval_gt_features
에 있는 CGL의 미리 계산된 레이아웃 기능입니다.cache/pku_cgl_relationships_dic_using_canvas_sort_label_lexico.pt
의 relationship
작업에 대한 요소의 관계.cache/training_logs
에 있는 Autoreg Baseline과 RALF의 체크포인트 및 평가 결과입니다. 섹션 4.1에 자세히 설명된 대로 훈련 세트를 검증 및 테스트 하위 세트로 분할하여 PKU 및 CGL 데이터 세트에 대한 전처리를 수행합니다. 분산된 CGL 데이터 세트는 이미 이러한 부분으로 분할되어 있습니다. 결과 복제를 위해 data_splits/splits/
디렉터리 내에 파일 이름에 대한 세부 정보를 제공합니다. 설정을 기반으로 실험을 수행하고 CGL-GAN 및 DS-GAN과 같이 보고된 점수를 사용할 때 사전 정의된 분할을 사용하는 것이 좋습니다.
훈련 분할을 검색 소스로 사용합니다. 예를 들어 RALF가 PKU로 훈련되면 PKU의 훈련 분할이 훈련 및 평가에 사용됩니다. data_splits/retrieval/
에서 DreamSim [Fu+ NeurIPS23]을 사용하여 미리 계산된 대응을 제공합니다. 데이터 구조는 아래와 같습니다
FILENAME :
- FILENAME top1
- FILENAME top2
...
- FILENAME top16
에서 이미지를 로드할 수 있습니다.
실험을 최대한 빨리 실행할 수 있으므로 데이터 세트를 사전 처리하는 것이 좋습니다!!
--dataset_type (pku|cgl)
지정하여 각 스크립트를 PKU와 CGL을 모두 처리하는 데 사용할 수 있습니다.
괄호가 있는 폴더 이름은 이 파이프라인에 의해 생성됩니다.
| - 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/
각 메서드와 데이터세트에 대한 하이퍼파라미터와 설정이 포함되어 있습니다. 자세한 내용은 파일을 참고해주세요. 특히 디버깅 모드가 DEBUG=True or False
인지 확인하시기 바랍니다.
달려주세요
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 >
여기서 TASK_NAME
제약이 없는 작업과 제약이 있는 작업을 나타냅니다. 아래 작업 목록을 참조하세요.
uncond
: 비제약 생성c
: 카테고리 → 크기 + 위치cwh
: 카테고리 + 사이즈 → 포지션partial
: 완료refinement
: 정제relation
: 관계인페인팅이 포함된 데이터 세트입니다.
달려주세요
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 >
예를 들어 다음 스크립트가 도움이 됩니다. end_to_end.sh
훈련, 추론 및 평가를 위한 래퍼 스크립트입니다.
# 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
실험 결과는 cache/training_logs
에 제공됩니다. 예를 들어, Autoreg Baseline with Category → Size + Position 작업의 결과인 autoreg_c_cgl
디렉터리에는 다음이 포함됩니다.
test_.pkl
: 생성된 레이아웃layout_test_.png
: 렌더링된 레이아웃. 여기서 상단 샘플은 실제값이고 하단 샘플은 예측 샘플입니다.gen_final_model.pt
: 최종 체크포인트scores_test.tex
: 정성적 결과 요약꼭 보시고 달려가세요
bash scripts/eval_inference/eval_inference.sh < GPU_ID > < JOB_DIR > < COND_TYPE > cgl
예를 들어,
# Autoreg Baseline with Unconstraint generation
bash scripts/eval_inference/eval_inference.sh 0 " cache/training_logs/autoreg_uncond_cgl " uncond cgl
실제 캔버스가 있는 데이터 세트, 즉 인페인팅이 없습니다.
꼭 보시고 달려가세요
bash scripts/eval_inference/eval_inference_all.sh < GPU_ID >
달려주세요
bash scripts/run_job/inference_single_data.sh < GPU_ID > < JOB_DIR > cgl < SAMPLE_ID >
여기서 SAMPLE_ID
선택적으로 데이터 세트 인덱스로 설정할 수 있습니다.
예를 들어,
bash scripts/run_job/inference_single_data.sh 0 " ./cache/training_logs/ralf_uncond_cgl " cgl
데이터를 로드하려면 image2layout/train/inference_single_data.py를 맞춤설정하세요.
귀하의 연구에 우리의 연구가 유용하다고 생각되면 다음을 인용해 보십시오.
@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 }
}