# Music DemiXing challenge (MDX)

If you want to use Demucs for the [MDX challenge](https://www.aicrowd.com/challenges/music-demixing-challenge-ismir-2021),
please follow the instructions hereafter

## Installing Demucs

Follow the instructions from the [main README](https://github.com/facebookresearch/demucs#requirements)
in order to setup Demucs using Anaconda. You will need the full setup up for training, including soundstretch.

## Getting MusDB-HQ

Download [MusDB-HQ](https://zenodo.org/record/3338373) to some folder and unzip it.

## Training Demucs

Train Demucs (you might need to change the batch size depending on the number of GPUs available).
It seems 48 channels is enough to get the best performance on MusDB-HQ, and training will faster
and less memory demanding. In any case, the 64 channels versions is timing out on the challenge.
```bash
./run.py --channels=48 --batch_size 64 --musdb=PATH_TO_MUSDB --is_wav [EXTRA_FLAGS]
```

### Post training

Once the training is completed, a new model file will be exported in `models/`.

You can look at the SDR on the MusDB dataset using `python result_table.py`.


### Evaluate and export a model before training is over

If you want to export a model before training is complete, use the following command:
```bash
python -m demucs [ALL EXACT TRAINING FLAGS] --save_model
```
Once this is done, you can partially evaluate a model with
```bash
./run.py --test NAME_OF_MODEL.th --musdb=PATH_TO_MUSDB --is_wav
```

**Note:** `NAME_OF_MODEL.th` is given relative to the models folder (given by `--models`, defaults to `models/`), so don't include it in the name.

### Training smaller models

If you want to quickly test idea, I would recommend training a 16 kHz model, and testing if things work there or not, before training the full 44kHz model. You can train one of those with
```bash
./run.py --channels=32 --samplerate 16000 --samples 160000 --data_stride 16000 --depth=5 --batch_size 64 --repitch=0 --musdb=PATH_TO_MUSDB --is_wav [EXTRA_FLAGS]
```
(repitch must be turned off, because things will break at 16kHz).

## Submitting your model

1. Git clone [the Music Demixing Challenge - Starter Kit - Demucs Edition](https://github.com/adefossez/music-demixing-challenge-starter-kit).
2. Inside the starter kit, create a `models/` folder and copy over the trained model from the Demucs repo (renaming
it for instance `my_model.th`)
3. Inside the `test_demuc.py` file, change the function `prediction_setup`: comment the loading
of the pre-trained model, and uncomment the code to load your own model.
4. Edit the file `aicrowd.json` with your username.
5. Install [git-lfs](https://git-lfs.github.com/). Then run

```bash
git lfs install
git add models/
git add -u .
git commit -m "My Demucs submission"
```
6. Follow the [submission instructions](https://github.com/AIcrowd/music-demixing-challenge-starter-kit/blob/master/docs/SUBMISSION.md).

Best of luck 🤞
