shunk031's picture
deploy: 63a85616f5fc427cf1e1e7b425293131f2fce2b8
ffb7d50
---
title: Layout Non-Alignment
emoji: 🌍
colorFrom: blue
colorTo: green
sdk: gradio
sdk_version: 4.36.1
app_file: app.py
pinned: false
---
# Layout Non-Alignment
## Description
The Layout Non-Alignment metric quantifies the extent of spatial non-alignment between layout elements. This metric evaluates layouts by detecting elements that break alignment patterns, providing insights into layout organization quality and visual coherence.
## What It Measures
This metric computes non-alignment scores that measure:
- **Alignment violations**: Elements that don't align with others along edges or centers
- **Spatial organization**: How consistently elements follow grid or alignment patterns
- **Visual disorder**: Degree of positional inconsistency between elements
The metric comes from PosterLayout (Hsu et al., CVPR 2023) and AC-GAN (Li et al., TVCG 2021) research, specifically designed for evaluating poster and graphic design layouts.
## Metric Details
- Analyzes element edge positions (left, right, top, bottom) to detect alignment patterns
- Computes delta (minimum distance) between element edges
- Applies logarithmic transformation to penalize near-misses more than obvious non-alignments
- Lower scores indicate better overall alignment (less non-alignment)
## Usage
### Installation
```bash
pip install evaluate
```
### Basic Example
```python
import evaluate
import numpy as np
# Load the metric with canvas dimensions
metric = evaluate.load(
"creative-graphic-design/layout-non-alignment",
canvas_width=360,
canvas_height=504
)
# Single layout processing
predictions = np.random.rand(1, 25, 4) # (batch, max_elements, coordinates)
gold_labels = np.random.randint(0, 4, size=(1, 25)) # (batch, max_elements)
score = metric.compute(predictions=predictions, gold_labels=gold_labels)
print(score)
```
### Batch Processing Example
```python
import evaluate
import numpy as np
# Load the metric
metric = evaluate.load(
"creative-graphic-design/layout-non-alignment",
canvas_width=360,
canvas_height=504
)
# Batch processing
batch_size = 128
predictions = np.random.rand(batch_size, 25, 4)
gold_labels = np.random.randint(0, 4, size=(batch_size, 25))
score = metric.compute(predictions=predictions, gold_labels=gold_labels)
print(score)
```
## Parameters
### Initialization Parameters
- **canvas_width** (`int`, required): Width of the canvas in pixels
- **canvas_height** (`int`, required): Height of the canvas in pixels
### Computation Parameters
- **predictions** (`list` of `lists` of `float`): Normalized bounding boxes in ltrb (left-top-right-bottom) format
- **gold_labels** (`list` of `lists` of `int`): Class labels for each element (0 = padding/invalid)
**Note**: Elements with `gold_labels == 0` are treated as padding and excluded from computation. Very small elements (< 0.1% of canvas area) are also filtered out.
## Returns
Returns a `float` value representing the non-alignment score.
## Interpretation
- **Lower is better**: Less non-alignment indicates better spatial organization
- **Value of 0**: Perfect alignment across all elements (rare in practice)
- **Typical range**: Varies based on layout complexity and density
- **Higher values**: More alignment violations, less organized layout
### Use Cases
- **Layout quality assessment**: Evaluate how well elements follow alignment principles
- **Generative model evaluation**: Compare alignment quality between different generation methods
- **Design feedback**: Identify layouts with poor spatial organization
### Key Insights
- **Professional designs** typically have lower non-alignment scores
- **Grid-based layouts** naturally achieve better alignment
- **Dense layouts** may have higher scores due to increased element interactions
- **Small violations** (near-alignments) are penalized more than obvious non-alignments
## Citations
```bibtex
@inproceedings{hsu2023posterlayout,
title{Posterlayout: A new benchmark and approach for content-aware visual-textual presentation layout},
author={Hsu, Hsiao Yuan and He, Xiangteng and Peng, Yuxin and Kong, Hao and Zhang, Qing},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={6018--6026},
year={2023}
}
@article{li2020attribute,
title={Attribute-conditioned layout gan for automatic graphic design},
author={Li, Jianan and Yang, Jimei and Zhang, Jianming and Liu, Chang and Wang, Christina and Xu, Tingfa},
journal={IEEE Transactions on Visualization and Computer Graphics},
volume={27},
number={10},
pages={4039--4048},
year={2020},
publisher={IEEE}
}
```
## References
- **Paper**: [PosterLayout (Hsu et al., CVPR 2023)](https://arxiv.org/abs/2303.15937)
- **Paper**: [Attribute-Conditioned Layout GAN (Li et al., TVCG 2021)](https://arxiv.org/abs/2009.05284)
- **Reference Implementation**: [PosterLayout eval.py](https://github.com/PKU-ICST-MIPL/PosterLayout-CVPR2023/blob/main/eval.py#L306-L339)
## Related Metrics
- [Layout Alignment](../layout_alignment/): Measures positive alignment between elements
- [Layout Validity](../layout_validity/): Checks basic validity constraints
- [Layout Overlay](../layout_overlay/): Measures element overlap (excluding underlay)