Feature Extraction
Transformers
Safetensors
bearings
audio
spatial-audio
ambisonics
self-supervised
sound-event-localization
custom_code
Instructions to use labhamlet/bearings with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use labhamlet/bearings with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("feature-extraction", model="labhamlet/bearings", trust_remote_code=True)# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("labhamlet/bearings", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
|
Download README.md from labhamlet/bearings: direct link, hf CLI and curl.
- Browser
- Download file 3.23 kB
-
https://huggingface.co/labhamlet/bearings/resolve/main/README.md
- Command line
-
hf download hf://labhamlet/bearings/README.md
-
curl -L -o README.md https://huggingface.co/labhamlet/bearings/resolve/main/README.md
3.23 kB
| library_name: transformers | |
| tags: | |
| - audio | |
| - spatial-audio | |
| - ambisonics | |
| - self-supervised | |
| - sound-event-localization | |
| license: mit | |
| pipeline_tag: feature-extraction | |
| # Bearings | |
| Bearings is a self-supervised encoder for first-order Ambisonic (FOA) audio. It learns the spatial attributes of a sound field, direction and diffuseness, by reconstructing masked intensity-vector and diffuseness targets from a 7-channel log-mel + active-intensity representation. | |
| The encoder needs its tokens fused with a content encoder such as [GRAM-T](https://huggingface.co/labhamlet/gramt-mono) to solve sound event localisation and detection (SELD). | |
| - **Repository:** https://github.com/root-goksenin/Embisonics | |
| - **Developed by:** Goksenin Yuksel, goksenin.yuksel@ru.nl | |
| - **License:** MIT | |
| ## Usage | |
| With transformers (no clone needed, `pip install transformers torchaudio`): | |
| ```python | |
| import torch | |
| from transformers import AutoModel | |
| model = AutoModel.from_pretrained("labhamlet/bearings", trust_remote_code=True).eval() | |
| wav = torch.randn(1, 4, int(48000 * 5.3)) # (batch, [W, Y, Z, X], samples), any sample rate | |
| with torch.no_grad(): | |
| out = model(wav, sampling_rate=48000) | |
| out.last_hidden_state.shape # (1, 600, 384): B x (T * F) x E, T = 75 time steps, F = 8 mel bands | |
| out.timestamps.shape # (600,) seconds, one per token, window centres: 0.04, ..., 5.96 | |
| out.n_valid_time # tensor([67]): time steps that end before the zero padding | |
| ``` | |
| `strategy="frames"` returns (B, T, 8 * 384) per-frame vectors, `strategy="mean"` and `strategy="cls"` return one (B, 384) vector per clip. `AutoFeatureExtractor.from_pretrained("labhamlet/bearings", trust_remote_code=True)` does the resampling and padding separately if you want to cache waveforms. | |
| With the research code, clone the repository and install `requirements.txt`, then: | |
| ```python | |
| import torch | |
| from src.hub import load_bearings | |
| model = load_bearings("labhamlet/bearings", "bearings-base.ckpt") | |
| wav = torch.randn(1, 4, int(48000 * 5.3)) # (batch, [W, Y, Z, X], samples), any sample rate | |
| out = model.encode_waveform(wav, sr=48000) | |
| out["embeddings"].shape # (1, 600, 384): B x (T * F) x E, T = 75 time steps, F = 8 mel bands | |
| out["timestamps"].shape # (600,) seconds, one per token, window centres: 0.04, ..., 5.96 | |
| out["n_valid_time"] # 67: time steps that end before the zero padding | |
| ``` | |
| `encode_waveform` resamples to 32 kHz, applies per-clip W-RMS normalisation, zero-pads to a whole number of 2 s windows, encodes each window and concatenates along time. The AutoModel forward does exactly the same and the two paths give identical embeddings. | |
| **The token axis stacks the T x F grid time-major:** token `i` is time step `i // 8` and mel band `i % 8`. The 8 bands of a time step are adjacent and share a timestamp. Each time step covers 80 ms. `embeddings.view(B, n_time, n_freq, E)` restores the grid and `.reshape(B, n_time, 8 * 384)` gives the per-frame vectors the SELD probes consume. | |
| ## Evaluation | |
| Used as a frozen spatial stream next to a frozen content encoder in SELD probes on TAU-NIGENS 2021 and STARSS23 (DCASE 2023 metrics: ER20, F20, LE, LR). Scripts and task ids are in `seld-dcase2023-gram/` of the repository. | |