Bandit Audio Separation: Форки и Standalone Проект
Введение
Описание проблемы
При работе с Ultimate Vocal Remover (UVR) возникла необходимость запустить инференс моделей Bandit для разделения аудио на составляющие (речь, музыка, эффекты).
Было выявлено, что UVR использует модели из двух версий проекта Bandit:
- bandit (оригинальный) — модели `dnr-3s-mus64-l1snr-plus.ckpt`, `model_bandit_plus_dnr_sdr_11.47.ckpt`
- bandit-v2 — модели `checkpoint-multi.ckpt`, `checkpoint-multi_fixed.ckpt`
Задача
- Создать рабочие форки обоих проектов с standalone инференсом
- Убрать зависимости от проблемных библиотек (`asteroid`, Netflix internal packages)
- Создать независимый проект, работающий на Python 3.12 и PyTorch 2.9+
Сложности
- Оригинальный `bandit` требует библиотеку `asteroid`, которая зависит от `pesq` с C++ компиляцией
- `bandit-v2` зависит от Netflix internal packages (`nflx-*`, `jasper`, `metatron`)
- Разные архитектуры моделей: `norm/fc` vs `combined` структуры
- Разные sample rates: 44.1kHz vs 48kHz
---
Процесс работы
1. Анализ моделей
Выявлены ключевые различия между моделями:
| Тип | Модели | Архитектура | Sample Rate | Ключи |
|---|---|---|---|---|
| Type A | dnr-3s-mus64, model_bandit_plus_dnr | norm/fc + bsrnn. | 44100 Hz | effects, music, speech |
| Type B | checkpoint-multi, checkpoint-multi_fixed | combined | 48000 Hz | sfx, music, speech |
2. Создание форков
- bandit-Wolfram — форк оригинального bandit с `bandit_inference.py` и `bsrnn_standalone/`
- bandit-v2-Wolfram — форк bandit-v2 с `simple_inference.py`
3. Создание standalone проекта
Создан wolfram-separator — полностью независимый проект без зависимости от оригинальных репозиториев, работающий на Python 3.12 + PyTorch 2.9.1+cu130.
---
Результат работ
| Модель | Форк/Проект | Скорость | VRAM | Missing Keys |
|---|---|---|---|---|
| dnr-3s-mus64-l1snr-plus | bandit-Wolfram | 17.0x | 1.86 GB | 0 |
| model_bandit_plus_dnr | bandit-Wolfram | 17.7x | 1.86 GB | 0 |
| checkpoint-multi | bandit-v2-Wolfram | 13.9x | 1.99 GB | 0 |
| checkpoint-multi_fixed | bandit-v2-Wolfram | 16.0x | 1.99 GB | 0 |
Все 4 модели работают с 0 missing keys и ~15-18x realtime на RTX 4090.
---
Форк: bandit-Wolfram
Репозиторий: https://github.com/wolfam0108/bandit-Wolfram
Что добавлено
bandit_inference.py— standalone скрипт инференсаbsrnn_standalone/— минимальный набор модулей без зависимости от `asteroid`
Поддерживаемые модели
dnr-3s-mus64-l1snr-plus.ckptmodel_bandit_plus_dnr_sdr_11.47.ckpt
Установка
# Создание окружения
conda create -n bandit python=3.10 -y
conda activate bandit
# PyTorch с CUDA 11.8
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu118
# Зависимости
pip install pytorch_lightning spafe tqdm librosa
# Клонирование
git clone https://github.com/wolfam0108/bandit-Wolfram.git
cd bandit-Wolfram
Использование
python bandit_inference.py -c path/to/model.ckpt -a path/to/audio.wav -o output_dir
Аргументы
| Аргумент | Описание | По умолчанию |
|---|---|---|
-c, --checkpoint
|
Путь к чекпоинту | Обязательный |
-a, --audio
|
Путь к аудио файлу | Обязательный |
-o, --output
|
Директория вывода | ./separated
|
--device
|
Устройство (cuda/cpu) | cuda
|
--no-half
|
Отключить FP16 | False |
--chunk
|
Размер чанка (сек) | 30.0 |
--overlap
|
Перекрытие (сек) | 2.0 |
---
Форк: bandit-v2-Wolfram
Репозиторий: https://github.com/wolfam0108/bandit-v2-Wolfram
Что добавлено
simple_inference.py— standalone скрипт инференса без Ray и Netflix packages
Поддерживаемые модели
checkpoint-multi.ckptcheckpoint-multi_fixed.ckpt
Установка
# Создание окружения
conda create -n bandit-v2 python=3.10 -y
conda activate bandit-v2
# PyTorch с CUDA 11.8
pip install torch==2.5.0+cu118 torchaudio==2.5.0+cu118 --extra-index-url https://download.pytorch.org/whl/cu118
# Зависимости
pip install "pytorch_lightning>=2.3.0" hydra-core omegaconf librosa soundfile einops tqdm julius huggingface-hub pyyaml scipy pandas
# Клонирование
git clone https://github.com/wolfam0108/bandit-v2-Wolfram.git
cd bandit-v2-Wolfram
Использование
python simple_inference.py --checkpoint path/to/checkpoint-multi.ckpt --audio audio.wav --output output/
Аргументы
| Аргумент | Описание | По умолчанию |
|---|---|---|
-c, --checkpoint
|
Путь к чекпоинту | Обязательный |
-a, --audio
|
Путь к аудио файлу | Обязательный |
-o, --output
|
Директория вывода | ./estimates/
|
--chunk
|
Размер чанка (сек) | 30.0 |
--overlap
|
Перекрытие (сек) | 2.0 |
--stems
|
Стемы для разделения | speech music sfx |
--no-half
|
Отключить FP16 | False |
---
Проект: wolfram-separator
Репозиторий: https://github.com/wolfam0108/wolfram-separator
Полностью независимый проект для Python 3.12 и PyTorch 2.9+. Не требует pytorch_lightning или torchaudio для загрузки аудио.
Структура
wolfram-separator/ ├── inference_type_a.py # Для моделей 44.1kHz (dnr) ├── inference_type_b.py # Для моделей 48kHz (checkpoint-multi) ├── models/ │ ├── type_a/ # 8 файлов модулей │ └── type_b/ # 6 файлов модулей ├── requirements.txt └── README.md
Поддерживаемые модели
| Тип | Модели | Скрипт |
|---|---|---|
| Type A | dnr-3s-mus64, model_bandit_plus_dnr | inference_type_a.py
|
| Type B | checkpoint-multi, checkpoint-multi_fixed | inference_type_b.py
|
Установка
# Создание окружения
conda create -n wolfram python=3.12 -y
conda activate wolfram
# PyTorch с CUDA 13.0 (или 11.8)
pip install torch --index-url https://download.pytorch.org/whl/cu130
# Зависимости
pip install soundfile librosa spafe tqdm numpy
# Клонирование
git clone https://github.com/wolfam0108/wolfram-separator.git
cd wolfram-separator
Использование
Type A модели (44.1 kHz):
python inference_type_a.py -c path/to/dnr-3s-mus64.ckpt -a audio.wav -o output/
Type B модели (48 kHz):
python inference_type_b.py -c path/to/checkpoint-multi.ckpt -a audio.wav -o output/
Производительность
Тестировано на RTX 4090 с Python 3.12 + PyTorch 2.9.1+cu130:
| Модель | Скорость | VRAM |
|---|---|---|
| Type A | ~15.5x realtime | 1.86 GB |
| Type B | ~14.5x realtime | 2.10 GB |
Ключевые отличия от форков
- Не требует
pytorch_lightning - Использует
soundfileиlibrosaвместоtorchaudio - Совместим с Python 3.12 и PyTorch 2.9+
- Минимальные зависимости
---
Ссылки
- wolfram-separator — standalone проект
- bandit-Wolfram — форк оригинального bandit
- bandit-v2-Wolfram — форк bandit-v2
- bandit (original)
- bandit-v2 (original)
- Model weights on Zenodo