| name | slotcurri-video-object-centric-learning |
| title | SlotCurri: Reconstruction-Guided Slot Curriculum for Video Object-Centric Learning |
| version | 0.0.3 |
| engine | skillxiv-v0.0.3-claude-opus-4.6 |
| license | MIT |
| url | https://arxiv.org/abs/2603.22758 |
| keywords | ["Slot Attention","Curriculum Learning","Video Object-Centric Learning","Over-Fragmentation","Progressive Allocation"] |
| description | Replace fixed full-capacity slot initialization with progressive curriculum-based slot expansion to reduce over-fragmentation in video object-centric learning. Improves FG-ARI by +6.8 on YouTube-VIS and +8.3 on MOVi-C. Use when training slot attention models on videos with variable object counts and sizes. |
| category | Component Innovation |
What This Skill Does
Replace the standard practice of allocating all slot attention slots upfront with a progressive curriculum that starts with minimal slots and expands them reconstruction-guided. This eliminates over-fragmentation where single objects split across multiple slots, improving object discovery by +6.8 to +8.3 FG-ARI on real-world video datasets.
The Component Swap
The old SlotContrast baseline initializes all K slots at training start, forcing the model to use all slots regardless of whether the scene contains K objects:
K = 10
slots = nn.Parameter(torch.randn(1, K, slot_dim))
The new SlotCurri approach starts with minimal slots and progressively expands them through curriculum stages. Slots are spawned reconstruction-guided from high-error regions:
K_init = 2
K_max = 10
num_stages = 3
def slot_count_schedule(stage_m, sigma=1):
return K_init + stage_m * sigma + 3 * stage_m * (stage_m - 1) // 2
reconstruction_error = ||video_recon - video_real||_2
high_error_slots = torch.argsort(reconstruction_error)[:top_k]
new_slots = slots[high_error_slots] + noise_perturbation(scale=0.1)
slots = torch.cat([slots, new_slots], dim=1)
Augment the reconstruction loss with structure-aware SSIM to better capture object boundaries:
loss_old = F.mse_loss(video_recon, video_real)
loss_mse = F.mse_loss(video_recon, video_real)
loss_ssim = - ssim(video_recon, video_real, window_size=)
loss_new = loss_mse + * loss_ssim