| name | adaptive-data-refinement-vlm-long-tail |
| title | From Head to Tail: Towards Balanced Representation in Large Vision-Language Models through Adaptive Data Calibration |
| version | 0.0.2 |
| engine | skillxiv-v0.0.2-claude-opus-4.6 |
| license | MIT |
| url | https://arxiv.org/abs/2503.12821 |
| keywords | ["Vision-Language Models","Long-Tail Learning","Data Rebalancing","Diffusion Models","LVLM Training"] |
| description | Mitigate long-tail distribution problems in VLM training data through adaptive rebalancing and diffusion-based synthesis. Uses entity distribution analysis to identify head/tail imbalance and applies targeted data augmentation, improving LLaVA 1.5 performance by 4.36% without increasing training data volume. |
Core Concept
Large Vision-Language Models (LVLMs) suffer from long-tail distribution problems where common concepts are overrepresented while rare concepts are underrepresented in training data. The ADR (Adaptive Data Refinement) framework addresses this by: (1) analyzing entity distributions across token, object, co-occurrence, and query perspectives; (2) adaptively rebalancing redundant head-category data; and (3) synthesizing new samples for underrepresented tail categories using diffusion models.
Architecture Overview
ADR consists of two sequential stages:
- Data Rebalancing (DR) Stage: Analyzes entity distributions and removes redundant samples from over-represented classes while retaining diverse examples
- Data Synthesis (DS) Stage: Uses Denoising Diffusion Probabilistic Models (DDPMs) to generate new images for tail entities paired with LLM-synthesized text descriptions
- Entity Distribution Analysis: Four perspectives identify imbalance: token-level vocabulary distribution, object detection distributions, co-occurrence patterns, and query-based question distributions
Implementation Steps
1. Entity Distribution Construction and Analysis
Analyze training data to identify head vs. tail entity distributions across multiple perspectives:
from collections import defaultdict, Counter
import numpy as np
def analyze_entity_distributions(dataset, perspectives=['token', 'object']):
"""
Construct entity distributions across multiple perspectives.
Args:
dataset: list of (image, text) tuples from VLM training
perspectives: analysis dimensions ['token', 'object', 'cooccurrence']
Returns:
dict with distributions and head/tail split points
"""
distributions = {}
if 'token' in perspectives:
token_freq = Counter()
for _, caption in dataset:
tokens = caption.lower().split()
token_freq.update(tokens)
freq_sorted = (token_freq.values(), reverse=)
cumsum = np.cumsum(freq_sorted)
total = cumsum[-]
head_idx = np.where(cumsum >= * total)[][]
head_tokens = ([t t, f token_freq.items()
f >= freq_sorted[head_idx]])
distributions[] = {
: token_freq,
: head_tokens,
: (token_freq.keys()) - head_tokens,
: (f t, f token_freq.items()
t head_tokens),
}
perspectives:
object_freq = Counter()
image, _ dataset:
objects = detect_objects(image)
object_freq.update(objects)
freq_sorted = (object_freq.values(), reverse=)
cumsum = np.cumsum(freq_sorted)
total = cumsum[-]
head_idx = np.where(cumsum >= * total)[][]
head_objects = ([o o, f object_freq.items()
f >= freq_sorted[head_idx]])
distributions[] = {
: object_freq,
: head_objects,
: (object_freq.keys()) - head_objects,
}
distributions