File size: 12,546 Bytes
cb36709
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0ab378c
cb36709
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0ab378c
cb36709
 
 
 
 
 
 
 
 
0ab378c
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
---
license: apache-2.0
base_model:
- Qwen/Qwen3-VL-8B-Thinking
pipeline_tag: image-text-to-text
library_name: transformers
language:
- en
tags:
- qwen3-vl
- vision-language
- multimodal
- visual-emotion
- affective-computing
- emotional-intelligence
- reasoning
datasets:
- wudq/MVEI_PLUS
model-index:
- name: EmObserver
  results:
  - task:
      type: image-text-to-text
      name: Emotion Statement Judgement
    dataset:
      type: wudq/MVEI_PLUS
      name: MVEI
      split: test
    metrics:
    - type: accuracy
      name: Accuracy
      value: 86.23
  - task:
      type: image-text-to-text
      name: Visual Emotion Classification
    dataset:
      type: wudq/MVEI_PLUS
      name: VECBench
      split: test
    metrics:
    - type: accuracy
      name: Overall accuracy
      value: 63.42
  - task:
      type: image-text-to-text
      name: Single-image Emotion Perception
    dataset:
      type: wudq/MVEI_PLUS
      name: EEmo-Bench Single Perception
      split: test
    metrics:
    - type: accuracy
      name: Overall accuracy
      value: 71.94
  - task:
      type: image-text-to-text
      name: Image-pair Emotion Perception
    dataset:
      type: wudq/MVEI_PLUS
      name: EEmo-Bench Pair Perception
      split: test
    metrics:
    - type: accuracy
      name: Overall accuracy
      value: 71.47
---

# EmObserver

Official model release for **β€œMVEI & EmObserver: Empowering MLLM-Oriented Visual Emotional Intelligence via Emotion Statement Judgement.”**

EmObserver is an emotion-oriented multimodal large language model built from [Qwen3-VL-8B-Thinking](https://huggingface.co/Qwen/Qwen3-VL-8B-Thinking). It is optimized through a four-stage training recipe for visual emotion understanding, Emotion Statement Judgement (ESJ), emotion classification, and single-/multi-image affective reasoning.

The model accepts one or more images with a natural-language question and produces a reasoning-style response followed by a concise answer:

```text
<think>...</think><answer>...</answer>
```

## πŸ”— Project map

| Resource | Description | Link |
| --- | --- | --- |
| Paper | MVEI & EmObserver | [arXiv:2607.21061](https://arxiv.org/abs/2607.21061) |
| Original paper (ICLR 2026) | Customizing Visual Emotion Evaluation for MLLMs | [OpenReview](https://openreview.net/forum?id=dQTSXWqZws) Β· [arXiv:2509.21950](https://arxiv.org/abs/2509.21950) |
| Official code | Inference, evaluation, and four-stage training | [wdqqdw/EmObserver](https://github.com/wdqqdw/EmObserver) |
| Expanded release | Benchmarks, images, predictions, and training data | [wudq/MVEI_PLUS](https://huggingface.co/datasets/wudq/MVEI_PLUS) |
| EmObserver results | Released predictions and metric summaries | [MVEI_PLUS/baselines/Qwen3-VL-EMOBSERVER](https://huggingface.co/datasets/wudq/MVEI_PLUS/tree/main/baselines/Qwen3-VL-EMOBSERVER) |
| Evaluation data | Standardized MVEI, EEmo-Bench, and VECBench metadata | [MVEI_PLUS/benchmarks](https://huggingface.co/datasets/wudq/MVEI_PLUS/tree/main/benchmarks) |
| Training data | Four-stage data and GPT-5.5-filtered INSETS-462k | [MVEI_PLUS/training_data](https://huggingface.co/datasets/wudq/MVEI_PLUS/tree/main/training_data) |
| Original MVEI dataset | Original benchmark release | [wudq/MVEI](https://huggingface.co/datasets/wudq/MVEI) |
| Original INSETS-462k | Original training-data release | [wudq/INSETS-462k](https://huggingface.co/datasets/wudq/INSETS-462k) |
| Original conference code | Earlier MVEI codebase and project release | [wdqqdw/MVEI](https://github.com/wdqqdw/MVEI) |
| Base model | Qwen3-VL-8B-Thinking | [Qwen/Qwen3-VL-8B-Thinking](https://huggingface.co/Qwen/Qwen3-VL-8B-Thinking) |

## πŸš€ Quick start with Transformers

Install a compatible PyTorch build first, then install the model dependencies:

```bash
python3 -m pip install -U "transformers>=5.9.0" accelerate pillow
```

The following example uses the same MVEI question form as the released test metadata:

```python
import torch
from transformers import AutoProcessor, Qwen3VLForConditionalGeneration

model_id = "wudq/EmObserver"

model = Qwen3VLForConditionalGeneration.from_pretrained(
    model_id,
    dtype=torch.bfloat16,
    device_map="auto",
)
processor = AutoProcessor.from_pretrained(model_id)

image_url = (
    "https://huggingface.co/datasets/wudq/MVEI_PLUS/resolve/main/"
    "benchmarks/MVEI/images/contentment/contentment_14236.jpg"
)
prompt = (
    "Is the following statement correct about the image? Upon viewing this image, "
    "observers, despite various individual or contextual factors, are most likely "
    "to experience negative emotions. Choose the answer from "
    "{'A': 'Correct.', 'B': 'Incorrect.'}. Answer in the format of "
    "<think>...</think><answer>...</answer>."
)

messages = [
    {
        "role": "user",
        "content": [
            {"type": "image", "url": image_url},
            {"type": "text", "text": prompt},
        ],
    }
]

inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,
    return_dict=True,
    return_tensors="pt",
).to(model.device)

generated = model.generate(**inputs, max_new_tokens=1024)
trimmed = [output[len(input_ids):] for input_ids, output in zip(inputs.input_ids, generated)]
response = processor.batch_decode(
    trimmed,
    skip_special_tokens=True,
    clean_up_tokenization_spaces=False,
)[0]
print(response)
```

For multi-image questions, add each image to `content` before the text item:

```python
"content": [
    {"type": "image", "url": first_image_url},
    {"type": "image", "url": second_image_url},
    {"type": "text", "text": pair_prompt},
]
```

FlashAttention 2 can reduce memory use on supported hardware. Install a build compatible with your CUDA/PyTorch stack, then pass `attn_implementation="flash_attention_2"` to `from_pretrained`.

## πŸ§ͺ Full evaluation with the official code

The official repository provides the vLLM inference wrapper, benchmark loaders, output parsing, and metric calculators:

```bash
git clone https://github.com/wdqqdw/EmObserver.git
cd EmObserver

python3 -m pip install -r requirements.txt
hf download wudq/MVEI_PLUS --repo-type dataset --local-dir public_data
hf download wudq/EmObserver --local-dir models/EmObserver

python3 -m evaluate.infer_and_eval \
  --engine qwen3_vl_vllm \
  --size emobserver \
  --gpu_n 8
```

Adjust `--gpu_n` to the visible GPUs that can hold the checkpoint. Use `--bench` to select a subset from `MVEI`, `VECBench`, `EEmo-Bench-Single-Perception`, and `EEmo-Bench-Pair-Perception`.

## πŸ’¬ Benchmark-style examples

The examples below reproduce question forms from the standardized test metadata. The listed answer is the reference final answer; reasoning text may vary.

### 1. Emotion Statement Judgement β€” MVEI

**Image:** [contentment_14236.jpg](https://huggingface.co/datasets/wudq/MVEI_PLUS/resolve/main/benchmarks/MVEI/images/contentment/contentment_14236.jpg)

```text
Is the following statement correct about the image? Upon viewing this image,
observers, despite various individual or contextual factors, are most likely
to experience negative emotions. Choose the answer from
{'A': 'Correct.', 'B': 'Incorrect.'}. Answer in the format of
<think>...</think><answer>...</answer>.
```

Reference final answer:

```text
<answer>Incorrect.</answer>
```

### 2. Single-image emotion perception β€” EEmo-Bench

**Image:** [EEmo-Bench single image 1](https://huggingface.co/datasets/wudq/MVEI_PLUS/resolve/main/benchmarks/EEmo-Bench/EEmo-Bench_single/images/1.jpg)

```text
What do you think of surprise as one of the three main emotions you felt from
this image? Choose the answer from {'A': 'No', 'B': 'Yes'}. Answer in the
format of <think>...</think><answer>...</answer>.
```

Reference final answer:

```text
<answer>Yes.</answer>
```

### 3. Image-pair emotion comparison β€” EEmo-Bench

**Images:** [image 579](https://huggingface.co/datasets/wudq/MVEI_PLUS/resolve/main/benchmarks/EEmo-Bench/EEmo-Bench_pair/images/579.jpg) and [image 100](https://huggingface.co/datasets/wudq/MVEI_PLUS/resolve/main/benchmarks/EEmo-Bench/EEmo-Bench_pair/images/100.jpg)

```text
Which emotion is evoked in both images and is common to them? Choose the
answer from {'A': 'Neutral', 'B': 'Fear', 'C': 'Sadness', 'D': 'Joy'}.
Answer in the format of <think>...</think><answer>...</answer>.
```

Reference final answer:

```text
<answer>Joy.</answer>
```

### 4. Visual emotion classification β€” VECBench

**Image:** [abstract_0001.jpg](https://huggingface.co/datasets/wudq/MVEI_PLUS/resolve/main/benchmarks/VECBench/images/Abstract/testImages_abstract/abstract_0001.jpg)

```text
Which emotion might this image evoke? Choose the most likely one from
['Amusement', 'Anger', 'Awe', 'Content', 'Disgust', 'Excitement', 'Fear',
'Sad']. Think step by step. Respond in the format:
<think>{your reasoning}</think><answer>{your final answer}</answer>.
```

Reference final answer:

```text
<answer>Content.</answer>
```

## πŸ“Š Released evaluation results

These values are taken from the released EmObserver inference outputs in [MVEI_PLUS](https://huggingface.co/datasets/wudq/MVEI_PLUS/tree/main/baselines/Qwen3-VL-EMOBSERVER). They are intended to make the checkpoint release traceable; environment or decoding changes may produce different results.

| Benchmark | Metric | Result |
| --- | --- | ---: |
| MVEI | Overall accuracy | 86.23% |
| MVEI | Sentiment polarity | 86.47% |
| MVEI | Emotion interpretation | 83.55% |
| MVEI | Scene context | 90.30% |
| MVEI | Perception subjectivity | 86.06% |
| VECBench | Overall accuracy | 63.42% |
| EEmo-Bench Single | Overall accuracy | 71.94% |
| EEmo-Bench Pair | Overall accuracy | 71.47% |

## πŸ‹οΈ Training overview

EmObserver is produced by the four-stage public training pipeline:

1. supervised fine-tuning;
2. GRPO-based reinforcement learning;
3. on-policy self-distillation (OPSD);
4. GRPO with an LLM-consistency reward.

The runnable scripts are in the [official code repository](https://github.com/wdqqdw/EmObserver/tree/main/training), and their released inputs are under [MVEI_PLUS/training_data](https://huggingface.co/datasets/wudq/MVEI_PLUS/tree/main/training_data). External judge credentials are not included; users must provide their own endpoint when reproducing the final stage.

## ⚠️ Intended use and limitations

EmObserver is intended for research on visual emotion understanding, affective image analysis, multimodal reasoning, and benchmark development.

- Visual emotion is inherently subjective and culturally/contextually dependent. A model prediction should not be treated as a universal description of how every person will feel.
- The model may inherit social, cultural, demographic, and content biases from its base model and training data.
- The checkpoint is not designed for mental-health diagnosis, psychological profiling, surveillance, hiring, education assessment, or other high-stakes decisions about individuals.
- Generated reasoning can be plausible but factually or emotionally incorrect. Verify outputs when reliability matters.
- Users are responsible for reviewing the licenses, attribution requirements, privacy constraints, and redistribution terms of input images and downstream datasets.

## πŸ“„ License

The checkpoint is released under the Apache 2.0 license, following its [Qwen3-VL-8B-Thinking](https://huggingface.co/Qwen/Qwen3-VL-8B-Thinking) base model. Third-party datasets and images retain their respective licenses and terms.

## πŸ“ Citation

If you use EmObserver or the expanded training and evaluation release, please cite the EmObserver paper below. When using the MVEI benchmark, dataset, or Emotion Statement Judgement formulation, please also cite the original ICLR 2026 paper.

```bibtex
@article{wu2026mvei_emobserver,
  title   = {MVEI \& EmObserver: Empowering MLLM-Oriented Visual Emotional Intelligence via Emotion Statement Judgement},
  author  = {Wu, Daiqing and Yang, Dongbao and Yao, Jiashu and Zhang, Hongrui and Ma, Can and Zhou, Yu and Zhao, Sicheng},
  journal = {arXiv preprint arXiv:2607.21061},
  year    = {2026}
}

@inproceedings{wu2026customizing,
  title     = {Customizing Visual Emotion Evaluation for MLLMs: An Open-vocabulary, Multifaceted, and Scalable Approach},
  author    = {Wu, Daiqing and Yang, Dongbao and Zhao, Sicheng and Ma, Can and Zhou, Yu},
  booktitle = {International Conference on Learning Representations},
  year      = {2026},
  url       = {https://openreview.net/forum?id=dQTSXWqZws}
}
```