YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

Efficient Unified Multimodal Understanding (EUMU)

This repository contains the official implementation of Efficient Unified Multimodal Understanding (EUMU), our first-place solution for the Mobile Unified Multimodal Understanding (MUMU) Track of the 8th Large-scale Video Object Segmentation (LSVOS) Challenge, held with ECCV 2026.

MUMU asks a single efficient model to jointly solve three image understanding problems:

Output Prediction Target Metric
Tagging Quality, scene, and event concepts Macro-F1
Detection Open-vocabulary object labels, confidence scores, and bbox_xyxy boxes Novel-aware mAP
Captioning One concise English sentence CIDEr, SPICE, and CLIPScore mixture

The challenge also constrains the model to one integrated architecture with no separate task-specific models, at most 0.5B parameters, and at most 8 GB peak inference memory.

Key Results

Item Value
Final challenge score 17.3409
Parameters 239.169M
GFLOPs @224 23.947
Peak inference memory 4.5 GB
Base model microsoft/Florence-2-base

Method Overview

EUMU uses one pretrained Florence-2-base model for all three outputs. Detection and captioning use Florence's prompt-based capabilities directly, while tagging is handled by lightweight attention-pooling heads trained on shared visual features.

image
  |
  v
shared Florence-2-base visual-language model
  |             |                |
  v             v                v
tagging heads   prompt detection prompt captioning
  |             |                |
  +-------------+----------------+
                |
                v
task-aware inference refinement
                |
                v
tags + detections + caption

The refinement stage reuses outputs across tasks:

Component Refinement Signal
Tagging Image statistics refine quality; captions and detections refine scene/event labels
Detection Caption cues recover likely missed objects and normalize labels
Captioning Detection cues help select and clean the final caption

This keeps the system unified while letting each output benefit from the other outputs at inference time.

What Is Included

This repository contains the submitted inference package, packaged checkpoints, evaluation script, and training recipe needed to reproduce the final EUMU submission when the official datasets are available.

Area Files
Inference API inference.py
Batch prediction evaluation/generate_predictions.py
Packaged model model/
Training scripts training/
Recipe docs docs/
Submitted predictions predictions.json

The packaged checkpoint is also mirrored on Hugging Face:

https://huggingface.co/Dayoung-space/EUMU

Quick Start

Install dependencies:

pip install -r requirements.txt

Run single-image inference:

from inference import EUMUPredictor

predictor = EUMUPredictor(weight_path="model", config_path="model/config.yaml")
result = predictor.predict("/path/to/image.jpg")

Generate a submission-style prediction file:

python evaluation/generate_predictions.py \
  --image-dir /path/to/eval/images \
  --ids-file /path/to/image_ids.txt \
  --out predictions.generated.json

If --ids-file is omitted, image ids are taken from filename stems in sorted order.

Reproducing the Final Submission

The final EUMU submission can be reproduced from the packaged checkpoints, the training recipe, and the evaluation script. The detailed instructions are split into focused English docs:

Topic File
Dataset structure and pseudo-data generation docs/dataset.md
Environment and hardware docs/env.md
Tagging-head training and final checkpoint assembly docs/training.md
Threshold search and prediction generation docs/eval.md
Checkpoint files and Hugging Face mirror docs/checkpoints.md

Minimal command flow:

# 1. Prepare official training rows and derived tagging pseudo-data.
SOURCE_DIR=data/train_data \
CAPTION_JSONL=data/train_data/train_caption.jsonl \
IMAGE_ROOTS=/path/to/train/images \
bash training/run_prepare_tagging_data.sh

# 2. Train the quality-specialized tagging head.
NPROC=4 WEIGHT_PATH=model bash training/run_train_quality_tagging.sh

# 3. Train the main scene/event tagging head.
NPROC=4 WEIGHT_PATH=model bash training/run_train_main_tagging.sh

# 4. Assemble the final tagging checkpoint.
bash training/run_assemble_tagging_heads.sh

# 5. Search scene/event thresholds on local validation data.
VAL_ROOT=data/val_data bash training/run_search_tagging_thresholds.sh

# 6. Install the final assembled checkpoint into the inference package.
SCENE_SUMMARY=training_runs/threshold_search/scene_summary.json \
EVENT_SUMMARY=training_runs/threshold_search/event_summary.json \
bash training/run_assemble_tagging_heads.sh --install-to-model

Detection and captioning do not require additional training checkpoints in this release. They are reproduced through the packaged Florence-2-base model and model/config.yaml.

Repository Structure

predictions.json
inference.py
requirements.txt
model/
  config.yaml
  config.json
  model.safetensors
  task_a_heads.pt
  task_a_vocab.json
  tokenizer.json
  tokenizer_config.json
  vocab.json
  preprocessor_config.json
  detection_eval_aliases.json
  configuration_florence2.py
  modeling_florence2.py
  processing_florence2.py
training/
  prepare_tagging_data.py
  train_tagging_heads.py
  search_tagging_thresholds.py
  assemble_tagging_heads.py
evaluation/
  generate_predictions.py
docs/
  dataset.md
  env.md
  training.md
  eval.md
  checkpoints.md

The filenames model/task_a_heads.pt, model/task_a_vocab.json, and the task_a config key are retained for loader and checkpoint compatibility.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support