File size: 10,542 Bytes
6f09234
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e47c25b
6f09234
e47c25b
 
 
 
 
 
 
6f09234
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e47c25b
6f09234
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# AURA: Auditory Spatial Intelligence via a Unified Representation from a General-Audio Encoder through Complete Alignment

<p align="center">
  <a href="https://arxiv.org/abs/2611.13687"><img src="https://img.shields.io/badge/arXiv-Paper-b31b1b?logo=arxiv&logoColor=white" alt="arXiv"></a>
  &nbsp;&nbsp;&nbsp;&nbsp;
  <a href="https://github.com/burgerIO-823/AURA"><img src="https://img.shields.io/badge/GitHub-Code-181717?logo=github&logoColor=white" alt="GitHub"></a>
</p>

## Model introduction

AURA is a spatial audio question-answering model built on **Qwen3-8B** and a frozen
**X-Codec** general-audio encoder, with **64.6M trainable parameters** in LoRA adapters
and an audio projector. Given binaural audio and a text question, it identifies sound
sources and reasons about their directions, distances, and spatial relationships.
AURA is trained on **SpatialSoundQA** with a curriculum spanning single-source perception,
two-source perception, and spatial reasoning, using scene descriptions and geometric
supervision. On SpatialSoundQA, the main model achieves **48.21% dual-source direction
accuracy**, outperforming the strongest dedicated spatial audio baseline by **10.31
percentage points**, while retaining general-audio question-answering capabilities.

Code, data synthesis and training recipes: **https://github.com/burgerIO-823/AURA**

## Model Summary

| Component | Configuration |
|---|---|
| Language backbone | Qwen3-8B; base weights frozen |
| Audio encoder | X-Codec general-audio v2; encoder, RVQ, and codebooks frozen |
| Trainable components | LoRA adapters and a two-layer audio projector; 64,626,688 parameters in total |
| LoRA configuration | Rank 16, alpha 32, dropout 0.05, no bias |
| LoRA target modules | `q_proj`, `k_proj`, `v_proj`, `o_proj`, `gate_proj`, `up_proj`, `down_proj` |
| Audio projector | Linear (1024 β†’ 4096) β†’ GELU β†’ Linear (4096 β†’ 4096) |
| Audio input | Binaural left/right channels; 16 kHz; up to 10 seconds |
| Codec representation | 8 RVQ layers at 50 frames/s per ear; 1024-dimensional codebook embeddings |
| RVQ bands | Content: sum of layers 0–2; sound: sum of layers 3–7 |
| Channel representation | Left, right, and side (`S = (L βˆ’ R) / 2`), each split into content and sound bands |
| Temporal pooling | Factor 4; max pooling for content, mean pooling for sound |
| Audio tokens | Up to 750 tokens, prepended to the text prompt embeddings |
| Training objective | Language modeling loss on target text, with scene descriptions and geometric supervision |
| Output format | Scene description followed by the final answer; geometric analysis for relational questions |

## Evaluation Results

Spatial performance on the full **SpatialSoundQA** evaluation sets. Scores are percentages;
**bold** marks the best result and <u>underline</u> the second best, excluding Random.

| Model | Trainable params | Input | Single DoA ↑ | Single DER ↓ | Dual DoA ↑ | Dual DER ↓ | Direction BA ↑ | Distance BA ↑ |
|---|---:|---|---:|---:|---:|---:|---:|---:|
| Random (BAT Table 4) | β€” | P | 12.57 | 67.33 | 12.41 | 67.46 | 50.00 | 50.00 |
| Qwen2-Audio (zero-shot) | β€” | M+P | 8.85 | 80.03 | 9.74 | 80.27 | 49.32 | 46.14 |
| Qwen2.5-Omni (zero-shot) | β€” | M+P | 10.61 | 69.50 | 12.02 | 79.26 | 49.55 | 54.30 |
| BAT | <u>161.04M</u> | B+P | 72.28 | 64.55 | 36.64 | <u>70.98</u> | <u>68.54</u> | **71.35** |
| DSpAST-BAT† (1 epoch) | 161.16M | B+P | **80.84** | 60.73 | <u>37.90</u> | 75.06 | 58.07 | 47.72 |
| OWL (released Stage-2 checkpoint) | <u>161.04M</u> | B+P | 9.82 | <u>48.17</u> | 13.36 | 71.68 | N/R | N/R |
| **AURA** | **64.63M** | B+P | <u>73.58</u> | **42.69** | **48.21** | **64.72** | **68.86** | <u>70.65</u> |

- **DoA**: exact accuracy over the eight direction octants (left/right Γ— front/behind Γ— above/below).
- **DER**: distance error rate; an answer is incorrect when its absolute distance error exceeds 0.5 m.
- **BA**: binary accuracy on direction or distance relationship questions.

Evaluation uses raw audio amplitudes without per-source RMS normalization and greedy decoding.
The single-source, dual-source, and spatial-reasoning sets contain 29,656, 21,280, and
32,298 items, respectively. AURA uses 192 new tokens for single-/dual-source tasks and
384 for spatial reasoning.

`B` = binaural audio, `M` = mono audio formed with a left-30Β° beam, and `P` = text prompt.
The zero-shot Qwen baselines use `M+P`. `N/R` indicates unavailable results: OWL has no
public Stage-3 checkpoint. BAT and OWL results use their released checkpoints under
the evaluation protocol above; DSpAST-BAT† uses the released encoder with a Q-Former
and Llama LoRA trained for one epoch.

Trainable parameter counts exclude frozen backbones.

AURA achieves the best result on four of the six spatial metrics. Its dual-source DoA
accuracy exceeds the strongest baseline by **10.31 percentage points**, using about
**40%** as many trainable parameters.

## Model Use

### Download the model

Install the Hugging Face Hub client:

```bash
pip install "huggingface_hub==0.36.2"
```

Download the main checkpoint and shared codebooks with the CLI:

```bash
hf download BryanHan/AURA --local-dir checkpoints \
  --include "stage3_c3/*" "codebooks.pt" "README.md"
```

Or download the same files in Python:

```python
from huggingface_hub import snapshot_download

snapshot_download(
    repo_id="BryanHan/AURA",
    local_dir="checkpoints",
    allow_patterns=["stage3_c3/*", "codebooks.pt", "README.md"],
)
```

To download an earlier stage, replace `stage3_c3` with `stage1_c1` or `stage2_c2`. Each stage contains all
its trained components and can be downloaded independently.

### Run inference

Set up the AURA code repository and download the frozen Qwen3-8B and X-Codec components:

```bash
git clone https://github.com/burgerIO-823/AURA AURA
cd AURA
pip install -r requirements.txt -r requirements-encode.txt
bash setup_models.sh
```

Run the model download command above from the AURA directory. Following the GitHub
example, prepare SpatialSoundQA at `data/SpatialSoundQA` (including the AudioSet clips
and binaural room impulse responses; see the GitHub data preparation instructions),
then render the example binaural scene and run inference:

```bash
python examples/make_example.py --ssqa data/SpatialSoundQA

python inference.py --ckpt checkpoints/stage3_c3 \
  --codebooks checkpoints/codebooks.pt \
  --audio examples/example.wav \
  --question "Does the sound from the hammer emanate from the front or behind side of the music's sound?"
```

The rendering script writes `examples/example.wav` and prints the question and dataset
reference answer (`front`). The reference answer is not a guaranteed model prediction.
To use your own recording, replace `examples/example.wav` and the question accordingly.

Inference requires a CUDA GPU. The input must have two channels (left/right); it is
resampled to 16 kHz and truncated to 10 seconds. The model generates a scene
description followed by a final answer. The provided AURA loader reads the LoRA
weights, projector, and architecture configuration together.

For audio already encoded by `data_preparation/encode_audio.py`, replace `--audio`
with `--codes`:

```bash
python inference.py --ckpt checkpoints/stage3_c3 \
  --codebooks checkpoints/codebooks.pt \
  --codes my_binaural_codes.pt \
  --question "What sound is to the left of the listener?"
```

The `.pt` file must contain `codes_left` and `codes_right`. This path uses Qwen3-8B
and the frozen codebooks without running the waveform encoder.

### Verify a complete download

To download all three stages and verify their weights and configurations:

```bash
hf download BryanHan/AURA --local-dir checkpoints
cd checkpoints
sha256sum -c SHA256SUMS
```

## Checkpoints in this repository

| Folder | Stage | Training data (cumulative) | Notes |
|---|---|---|---|
| `stage1_c1/` | Stage 1 (curriculum C1) | 55K alignment + 279K single-source scenes | single-source perception |
| `stage2_c2/` | Stage 2 (curriculum C2) | + 236K dual-source scenes (515K) | two-source perception and binding |
| `stage3_c3/` | Stage 3 (C3), **main model** | + 358K geometric-relation questions | spatial reasoning |
| `codebooks.pt` | – | – | the 8 frozen X-Codec RVQ codebooks (8Γ—1024Γ—1024, fp32) |

Each stage folder contains the trained components and their configurations. The frozen
Qwen3-8B backbone and the X-Codec encoder checkpoint are downloaded separately.
There are **64,626,688 trainable parameters** per stage: **43,646,976 LoRA** parameters
and **20,979,712 projector** parameters.

- `aura_model.safetensors`: LoRA weights (r=16, Ξ±=32, dropout 0.05) on the q/k/v/o/gate/up/down
  projections of Qwen3-8B; `adapter_config.json` is the matching PEFT configuration;
- `proj.pt`: 2-layer GELU MLP projector (1024 β†’ 4096 β†’ 4096);
- `aura_config.json`: input representation (six L/R/S slots, RVQ cut at layer 3, time pool 4).

All three stage folders have the same four-file layout shown above. Each checkpoint
contains all its trained components; loading Stage 3 does not require Stages 1 and 2.
The shared `codebooks.pt` contains frozen lookup embeddings, rather than the waveform encoder.

## Training

Trained on 4Γ— NVIDIA H100 80GB (Python 3.10, torch 2.13.0+cu130, transformers 4.51.0, peft 0.20.0),
1 epoch per stage, bf16, cosine schedule, seed 42, pure LM loss on the target text:

| Stage | Init | Rows | Global batch | LR | Steps |
|---|---|---:|---:|---:|---:|
| C1 align (projector only) | – | 55,008 | 32 | 1e-4 | 1,719 |
| **Stage 1** C1 joint | C1 align | 278,784 | 16 | 1e-4 | 17,424 |
| **Stage 2** C2 joint | Stage 1 | 514,784 | 16 | 1e-4 | 32,174 |
| **Stage 3** C3 joint | Stage 2 | 872,312 | 16 | 1e-4 | 54,520 |

## License

AURA's LoRA adapters and audio projector weights are released under the
[Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
Third-party components, including Qwen3-8B, X-Codec, and its codebooks, retain their
respective licenses.

## Citation

If you use AURA in your research, please cite:

```bibtex
@misc{han2026auraauditoryspatialintelligence,
  title={AURA: Auditory Spatial Intelligence via a Unified Representation from a General-Audio Encoder through Complete Alignment},
  author={Boyan Han and Xiaoyan Wang and Zhe Sun and Ziqi Wang and Yujun Cai and Hongli Cao and Yiwei Wang and Ming-Hsuan Yang and Liang An},
  year={2026},
  eprint={2611.13687},
  archivePrefix={arXiv},
  primaryClass={cs.SD},
  url={https://arxiv.org/abs/2611.13687},
}
```