Giter Site home page Giter Site logo

m2ugen's Introduction

M2UGen: Multi-modal Music Understanding and Generation with the Power of Large Language Models

PWC PWC PWC

This is the official repository for M2UGen: Multi-modal Music Understanding and Generation with the Power of Large Language Models.

๐Ÿš€ Introduction

The M2UGen model is a Music Understanding and Generation model that is capable of Music Question Answering and also Music Generation from texts, images, videos and audios, as well as Music Editing. The model utilizes encoders such as MERT for music understanding, ViT for image understanding and ViViT for video understanding and the MusicGen/AudioLDM2 model as the music generation model (music decoder), coupled with adapters and the LLaMA 2 model to make the model possible for multiple abilities. The model architecture is given in m2ugen.py.

To train our model, we generate datasets using a music captioning and question answering model, i.e. the MU-LLaMA model. The dataset generation methods are given in the Datasets folder.

๐Ÿค— HuggingFace Demo

We have provided a HuggingFace Space to see our model in action: M2UGen/M2UGen-Demo.

๐Ÿค– Model Setup

We use Python 3.9.17 for this project and the library requirements are given in requirements.txt. Create a conda environment using

conda create --name <env> --file requirements.txt

Ensure that the NVIDIA Driver is version 12 or above to be compatible with PyTorch 2.1.0.

For the working of our model, Facebook's LLaMA-2 model weights are required, details on obtaining these weights are given on HuggingFace.

The trained checkpoints for our model is available here:

The needed pretrained multi-modal encoder and music decoder models can be found here:

The directory of the checkpoints folder can be organized as follows:

.
โ”œโ”€โ”€ ...
โ”œโ”€โ”€ M2UGen                
โ”‚   โ”œโ”€โ”€ ckpts
โ”‚   โ”‚   โ”‚โ”€โ”€ LLaMA
โ”‚   โ”‚   โ”‚   โ”‚โ”€โ”€ 7B
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚โ”€โ”€ checklist.chk
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚โ”€โ”€ consolidated.00.pth
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚โ”€โ”€ params.json
โ”‚   โ”‚   โ”‚   โ”‚โ”€โ”€ llama.sh
โ”‚   โ”‚   โ”‚   โ”‚โ”€โ”€ tokenizer.model
โ”‚   โ”‚   โ”‚   โ”‚โ”€โ”€ tokenizer_checklist.chk
โ”‚   โ”‚   โ”‚โ”€โ”€ M2UGen-MusicGen
โ”‚   โ”‚   โ”‚   โ”‚โ”€โ”€ checkpoint.pth
โ”‚   โ”‚   โ”‚โ”€โ”€ M2UGen-AudioLDM2
โ”‚   โ”‚   โ”‚   โ”‚โ”€โ”€ checkpoint.pth
โ”‚   โ”‚   โ”‚โ”€โ”€ knn.index
โ””โ”€โ”€ ...

Once downloaded, the Gradio demo can be run using these checkpoints.

For model with MusicGen

python gradio_app.py --model ./ckpts/M2UGen-MusicGen --llama_dir ./ckpts/LLaMA-2 --music_decoder musicgen

For model with AudioLDM2

python gradio_app.py --model ./ckpts/M2UGen-AudioLDM2 --llama_dir ./ckpts/LLaMA-2 --music_decoder audioldm2

๐Ÿ—„๏ธ Dataset Generation

We use the MU-LLaMA and MPT-7B models to generate the MUCaps, MUEdit, MUImge and MUVideo datasets. For each of the datasets, run the scripts in the folder Datasets in its numbered order to generate the datasets.

The datasets are also available for download here:

๐Ÿ”ง Model Training

To train the M2UGen model, run the train_musicgen.sh or train_audioldm2.sh script. The scripts are designed to train the model for all three stages with MusicGen and AudioLDM2 music decoders respectively.

The main model architecture is given in m2ugen.py and the modified MusicGen and AudioLDM2 architectures are present within the musicgen and audioldm2 folders respectively. The data folder contains the python files to handle loading the dataset. The dataset.py file will show the use of different datasets based on the training stage. The code for the training epochs are present in engine_train.py.

๐Ÿ”จ Model Testing and Evaluation

To test the M2UGen model, run gradio_app.py.

usage: gradio_app.py [-h] [--model MODEL] [--llama_type LLAMA_TYPE] [--llama_dir LLAMA_DIR]
                      [--mert_path MERT_PATH] [--vit_path VIT_PATH] [--vivit_path VIVIT_PATH]
                      [--knn_dir KNN_DIR] [--music_decoder MUSIC_DECODER]

optional arguments:
  -h, --help            show this help message and exit
  --model MODEL         Name of or path to M2UGen pretrained checkpoint
  --llama_type LLAMA_TYPE
                        Type of llama original weight
  --llama_dir LLAMA_DIR
                        Path to LLaMA pretrained checkpoint
  --mert_path MERT_PATH
                        Path to MERT pretrained checkpoint
  --vit_path VIT_PATH   Path to ViT pretrained checkpoint
  --vivit_path VIVIT_PATH
                        Path to ViViT pretrained checkpoint
  --knn_dir KNN_DIR     Path to directory with KNN Index
  --music_decoder MUSIC_DECODER
                        Decoder to use musicgen/audioldm2

To evaluate the M2UGen model and other compared models in our paper, please refer to Evaluation folder.

๐Ÿงฐ System Hardware requirements

For training, stage 1 and 2 use a single 32GB V100 GPU while stage 3 uses 2 32GB V100 GPUs. For inference, a single 32GB V100 GPU is used. For loading model checkpoint, approximately 49GB of CPU memory is required.

๐Ÿซก Acknowledgements

This code contains elements from the following repo:

โœจ Cite our work

If you find this repo useful, please consider citing:

@article{hussain2023m,
  title={{M$^{2}$UGen: Multi-modal Music Understanding and Generation with the Power of Large Language Models}},
  author={Hussain, Atin Sakkeer and Liu, Shansong and Sun, Chenshuo and Shan, Ying},
  journal={arXiv preprint arXiv:2311.11255},
  year={2023}
}

Star History

Star History Chart

m2ugen's People

Contributors

crypto-code avatar shansongliu avatar eltociear avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.