--- pipeline_tag: audio-classification library_name: omar_rq license: cc-by-nc-sa-4.0 tags: - audio - music - self-supervised-learning - audio-representation - music-tagging - pitch-estimation - chord-recognition - beat-tracking - segmentation - difficulty-estimation --- # OMAR-RQ: Open Music Audio Representation Model Trained with Multi-Feature Masked Token Prediction **OMAR-RQ** is an open-source foundation model for music audio understanding, presented in the paper [OMAR-RQ: Open Music Audio Representation Model Trained with Multi-Feature Masked Token Prediction](https://huggingface.co/papers/2507.03482). OMAR-RQ is trained with self-supervision via masked token classification methodologies using a large-scale dataset with over 330,000 hours of music audio. It offers powerful, multipurpose representations essential for advancing research in music information retrieval. The model achieves state-of-the-art performance among open self-supervised models across various tasks: * **Music Tagging** * **Pitch Estimation** * **Chord Recognition** * **Beat Tracking** * **Segmentation** * **Difficulty Estimation** For the full training, validation, and inference code, please refer to the [official GitHub repository](https://github.com/MTG/omar-rq). ## Installation For embedding extraction or fine-tuning: ```bash pip install . ``` For development including pre-training your own models: ```bash pip install -e .[train] ``` ## Inference You can load an OMAR-RQ model by specifying its Hugging Face model ID: ```python import torch from omar_rq import get_model # Embedding extraction example x = torch.randn(1, 16000 * 4).cpu() # Example: 4 seconds of mono audio at 16kHz # Load a specific model, e.g., "mtg-upf/omar-rq-multifeature-25hz-fsq" model_id = "mtg-upf/omar-rq-multifeature-25hz-fsq" model = get_model(model_id=model_id, device="cpu") # Use "cuda" if a GPU is available # Extract embeddings from layer 6 embeddings = model.extract_embeddings(x, layers=[6]) # Use the `model.eps` field to compute timestamps for the extracted embeddings timestamps = torch.arange(embeddings.shape[2]) / model.eps print(f"Extracted embeddings shape: {embeddings.shape}") print(f"First 5 timestamps: {timestamps[:5]}") ``` **`get_model` reference:** ``` Returns an OMAR-RQ Module from the provided model_id or config_file. Args: model_id (str): Hugging Face's Model ID or local path to the model config_file (Path): Path to the model config of a trained model. device (str): Device to use for the model. Defaults to "cpu". quantization_targets (bool): If True, it will create the quantization targets for SSL pre-training of the model. Defaults to False. Output: module: The model from the provided config file. Module usage: Args: audio (torch.Tensor): 2D mono audio tensor (B, T'). Where B is the batch size and T' is the number of samples. layers (set): Set of layer indices to extract embeddings from. By default, it extracts embeddings from the last layer (logits). Output: torch.Tensor: Extracted embeddings. The output tensor has shape (L, B, T, C,) where L = len(layers), B is the batch size, T is the number of output timestamps, and C = embedding dimension. ``` **`extract_embeddings` reference:** ``` Extract embeddings from an input audio batch. Args: audio (torch.Tensor): 2D mono audio tensor (B, T'). Where B is the batch size and T' is the number of samples. layers (set): Set of layer indices to extract embeddings from. By default, it extracts embeddings from the last layer (logits). Output: torch.Tensor: Extracted embeddings. The output tensor has shape (L, B, T, C,) where L = len(layers), B is the batch size, T is the number of output timestamps, and C = embedding dimension. ``` ## Available Models OMAR-RQ models are offered in different configurations, each with its own strengths and weaknesses. Models based on mel spectrogram (**base** and **multicodebook**) tend to perform better on semantic tasks such as auto-tagging, structure recognition, and difficulty estimation. On the other hand, **multifeature-25hz-fsq** offers the best performance in tonal and temporal tasks such as pitch and chord estimation, and beat tracking. | Model | Input | Rate | Tagging | Difficulty | Pitch | Chord | Beat | Structure | Hugging Face Model ID | |:--------------------------|:-------|:-------|:--------|:-----------|:---------|:---------|:--------|:----------|:------------------------------------------------------------| | | | Hz | _mAP_ | _MSE_ | _acc._ | _acc._ | _F1_ | _acc._ | | | **base** | mel | 15.63 | .482 | **1.65** | .892 | .657 | .783 | **.647** | [`mtg-upf/omar-rq-base`](https://huggingface.co/mtg-upf/omar-rq-base) | | **multicodebook** | mel | 15.63 | **.488**| 1.66 | .897 | .675 | .775 | .639 | [`mtg-upf/omar-rq-multicodebook`](https://huggingface.co/mtg-upf/omar-rq-multicodebook) | | **multifeature** | audio | 18.75 | .467 | 1.76 | .938 | .734 | .833 | .623 | [`mtg-upf/omar-rq-multifeature`](https://huggingface.co/mtg-upf/omar-rq-multifeature) | | **multifeature-25hz** | audio | 25 | .463 | 1.79 | .932 | .728 | .848 | .628 | [`mtg-upf/omar-rq-multifeature-25hz`](https://huggingface.co/mtg-upf/omar-rq-multifeature-25hz) | | **multifeature-25hz-fsq** | audio | 25 | .463 | 1.71 | **.940** | **.749** | **.855**| .628 | [`mtg-upf/omar-rq-multifeature-25hz-fsq`](https://huggingface.co/mtg-upf/omar-rq-multifeature-25hz-fsq) | ## Licensing Information The code in the [GitHub repository](https://github.com/MTG/omar-rq) is available under the [AGPL-3.0 license](https://www.gnu.org/licenses/agpl-3.0.en.html). The model weights are available under the [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) license for non-commercial applications. ## Citation If you find this work useful, please cite the paper: ```bibtex @article {alonso2025omarrq, title={OMAR-RQ: Open Music Audio Representation Model Trained with Multi-Feature Masked Token Prediction}, author={Alonso-Jim\'enez, Pablo and Ramoneda, Pedro and Araz, R. Oguz and Poltronieri, Andrea and Bogdanov, Dmitry}, journal={arXiv preprint arXiv:2507.03482}, year={2025} } ```