Пошаговая инструкция! Как самостоятельно обучить певца с искусственным интеллектом — учебное пособие по облачному обучению so-vits-svc
Пошаговая инструкция! Как самостоятельно обучить певца с искусственным интеллектом — учебное пособие по облачному обучению so-vits-svc

представлять

so-vits-svcоснован наVITSиз Проекты с открытым исходным кодом,VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech) — это очень выразительная модель синтеза речи, сочетающая в себе вариационный вывод, нормализованный поток и состязательное обучение.

среда

Основной текстиспользоватьиз Это Тенсент ОблакоВычислительный графический процессор типа GN7,Конкретные детали заключаются в следующем:

Язык кода:shell
копировать
# Системная среда
Ubuntu 22.04 LTS
# Видеокарта
NVIDIA-SMI 470.182.03    Driver Version: 470.182.03    CUDA Version: 11.4
# pythonсреда
Python 3.10
# GPUсреда
Tesla T4 16G * 1
# CPUсреда
8 ядер	32GB
365404354399d97e8333b.png
365404354399d97e8333b.png
87053539fd2c945364ffb.png
87053539fd2c945364ffb.png

обработка звука

Для обучения нам необходимо разделить аудиофайл на две звуковые дорожки: человеческий голос и аккомпанемент, а вокальный аудиофайл разрезать на 10-20-секундные аудиоклипы.

  1. использоватьSpleeterразделениечеловеческий голосаудиодорожка
Язык кода:shell
копировать
apt install ffmpeg        #Эта команда должна быть установлена ​​под пользователем root
pip install spleeter
Язык кода:shell
копировать
mkdir spleeter && cd spleeter
mkdir raw
#Скачать модель
mkdir pretrained_models
wget -P pretrained_models https://github.com/deezer/spleeter/releases/download/v1.4.0/2stems.tar.gz
# Загрузка внутреннего VPS происходит слишком медленно, вы можете перейти по ссылке ниже.
# wget -P pretrained_models https://kgithub.com/deezer/spleeter/releases/download/v1.4.0/2stems.tar.gz
mkdir -p pretrained_models/2stems
tar -zxvf pretrained_models/2stems.tar.gz -C pretrained_models/2stems/
  1. Тестовое разделение вокала
Язык кода:shell
копировать
# тест
wget https://github.com/deezer/spleeter/raw/master/audio_example.mp3
spleeter separate -p spleeter:2stems -o output audio_example.mp3
Язык кода:shell
копировать
output/
└── audio_example
    ├── accompaniment.wav # сопровождение
    └── vocals.wav   # человеческий голос
  1. Пакетное разделение аудиодорожек

понадобитсяразделениеизаудиофайлы вspleeter/rawОглавление Вниз,Ранназадосуществлять Внизлапшаиз Заказ Чтобы облегчить пакетную обработку, вы можете использовать следующий скрипт Внизлапша脚本将rawОглавление Внизизвсе.wavдокументразделениестановитьсячеловеческий голосисопровождениедвааудиодорожка,и сохранить вspleeter/audio_outputв папке

Язык кода:shell
копировать
#!/bin/bash

# Создайте выходную папку, если она не существует.
mkdir -p audio_output

# Просмотрите файлы WAV в исходном каталоге.
for file in raw/*.wav; do

  # Проверьте, является ли тип файла MP3
  if [[ -f "$file" ]]; then
    echo "иметь дело с Файл: $file"

    # Извлечь имя файла (без расширения)
    filename=$(basename "$file" .wav)

    # используйте команду spleeter для разделения и сохранения в папке audio_output/
    spleeter separate \
        -o audio_output \
        "$file" \
        -f "$filename"_{instrument}.wav
  fi
  
done

echo «Разделение завершено!»

Эффект следующий

Язык кода:shell
копировать
ubuntu@VM-0-12-ubuntu:~/spleeter$ tree audio_output/
audio_output/
├── 11_accompaniment.wav
├── 11_vocals.wav
├── 12_accompaniment.wav
├── 12_vocals.wav
├── 13_accompaniment.wav
└── 13_vocals.wav

0 directories, 6 files
  1. Разделение аудиоклипов
Язык кода:shell
копировать
pip librosa soundfile

Выполните следующий скрипт,начнется сaudio_outputОглавлениесерединаизкаждыйаудиофайлсерединаизвлекать10-20Второйизаудиоклип,и сохранить вclipsОглавлениесередина。

Язык кода:python
кодКоличество запусков:0
копировать
import librosa
import soundfile
import random
import os

# Получить текущий рабочий каталог
cwd = os.getcwd()

# Установите каталог, в котором находится исходный аудиофайл, и каталог, в котором будет сохранен новый файл.
src_folder = os.path.join(cwd, 'audio_output')  # Каталог, в котором находится исходный аудиофайл
dst_folder = os.path.join(cwd, 'clips')  # Каталог для сохранения новых файлов

# Создать каталог для сохранения новых файлов
if not os.path.exists(dst_folder):
    os.makedirs(dst_folder)

# Просмотрите все wav-файлы в исходном каталоге.
for filename in os.listdir(src_folder):
    if filename.endswith("vocals.wav"):
        audio_path = os.path.join(src_folder, filename)
        print(f"Processing {audio_path}...")

        # Загрузить аудиофайлы
        audio, sr = librosa.load(audio_path, sr=None, mono=False)

        # Удалить тихую часть аудиофайла
        audio_trimmed, index = librosa.effects.trim(audio, top_db=20, frame_length=2048, hop_length=512)

        # Рассчитайте общую продолжительность и общее количество точек отбора проб.
        duration = len(audio_trimmed[0]) / sr
        total_samples = audio_trimmed.shape[-1]

        # Определите количество точек выборки, которые должен содержать каждый сегмент.
        min_duration = 10  # Минимальная длина сегмента (секунды)
        max_duration = 20  # Максимальная длина сегмента (секунды)
        segment_duration = random.uniform(min_duration, max_duration)  # Случайная длина клипа
        segment_samples = int(segment_duration * sr)  # Преобразование длины клипа в количество сэмплов

        # Прокрутите аудиофайлы и сохраните каждый сегмент как новый аудиофайл.
        for i in range(0, total_samples, segment_samples):
            start = i  # Текущий сегмент от начальной точки отбора проб
            end = min(i + segment_samples, total_samples)  # Текущий участок от конечной точки отбора проб

            chunk = audio_trimmed[:, start:end]  # Перехватить текущий сегмент и аудиоданные
            if len(chunk.shape) > 1:
                chunk = chunk.T  # Если стерео, поменяйте каналы местами.

            # Создать новое имя файла
            clip_filename = f"{os.path.splitext(filename)[0]}_{i//segment_samples}.wav"
            clip_path = os.path.join(dst_folder, clip_filename)

            soundfile.write(clip_path, chunk, sr)  # Сохраните текущий сегмент и аудиоданные в файл.

Начать обучение

  1. Клонируйте репозиторий и установите зависимости
Язык кода:shell
копировать
git clone https://github.com/svc-develop-team/so-vits-svc.git
cd so-vits-svc
apt install python3-venv   #Эта команда должна быть установлена ​​под пользователем root
python3 -m venv myenv
source myenv/bin/activate
pip uninstall -y torchdata torchtext
pip install --upgrade pip setuptools numpy numba
pip install pyworld praat-parselmouth fairseq tensorboardX torchcrepe librosa==0.9.1 pyyaml pynvml pyloudnorm
pip install torch torchvision torchaudio 
pip install rich loguru matplotlib
pip install faiss-gpu
pip uninstall omegaconf
pip install omegaconf==2.0.5
pip install antlr4-python3-runtime==4.8
pip install antlr4-python3-runtime==4.8
pip install tensorboard
  1. Подготовка набора данных

перейти к предыдущему шагусерединагенерироватьизаудиоклипдокумент夹clipsпереехать вso-vits-svc/dataset_rawОглавление Вниз,Структура каталогов следующая:

Язык кода:shell
копировать
dataset_raw
├───speaker0
│   ├───xxx1-xxx1.wav
│   ├───...
│   └───Lxx-0xx8.wav

speaker0 — имя синтезируемого целевого динамика. Это имя нужно для рассуждений. Для имени каждого аудиофайла нет ограничений формата (такие методы именования, как 000001.wav~999999.wav, также разрешены), но тип файла должен быть wav.

  1. Получить предварительно обученную модель
Язык кода:shell
копировать
cd so-vits-svc
#download_pretrained_model
curl -L https://huggingface.co/datasets/ms903/sovits4.0-768vec-layer12/resolve/main/sovits_768l12_pre_large_320k/clean_D_320000.pth -o logs/44k/D_0.pth
curl -L https://huggingface.co/datasets/ms903/sovits4.0-768vec-layer12/resolve/main/sovits_768l12_pre_large_320k/clean_G_320000.pth -o logs/44k/G_0.pth
#download_pretrained_diffusion_model
#Не нужно загружать, если не тренируется модель диффузии
wget -L https://huggingface.co/datasets/ms903/Diff-SVC-refactor-pre-trained-model/resolve/main/fix_pitch_add_vctk_600k/model_0.pt -o logs/44k/diffusion/model_0.pt

#IfusermvpeF0 предиктор, вам необходимо скачать предварительное обучение RMVPE Модель
curl -L https://huggingface.co/datasets/ylzz1997/rmvpe_pretrain_model/resolve/main/rmvpe.pt -o pretrain/rmvpe.pt
curl -L https://huggingface.co/datasets/ylzz1997/rmvpe_pretrain_model/resolve/main/fcpe.pt -o pretrain/fcpe.pt
  1. Использовать contentvec в качестве кодировщика звука (рекомендуется)

vec768l12иvec256l9 Этот кодировщик необходим

Или загрузите ContentVec ниже, размер которого составляет всего 199 МБ, но эффект тот же:

  • contentvec :hubert_base.pt
  • Измените имя файла наcheckpoint_best_legacy_500.ptназад,надеватьpretrainОглавление Вниз
Язык кода:shell
копировать
# contentvec
wget -P pretrain/ https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt -O checkpoint_best_legacy_500.pt
# Вы также можете скачать его вручную и вставить в pretrain Оглавление

Дополнительные кодеры см.so-vits-svc

  1. Передискретизировано в моно с частотой 44 100 Гц.
Язык кода:shell
копировать
python resample.py
  1. Автоматически разделяйте обучающий набор и набор проверки и автоматически генерируйте файлы конфигурации.
Язык кода:shell
копировать
python preprocess_flist_config.py --speech_encoder=vec768l12
  1. Сгенерируйте Хьюберта и f0
Язык кода:shell
копировать
python preprocess_hubert_f0.py --f0_predictor=crepe
d259e8a5d04af5ef37347.png
d259e8a5d04af5ef37347.png

Ускорьте предварительную обработку. Если ваш набор данных относительно большой, вы можете попробовать добавить параметр --num_processes:

Язык кода:shell
копировать
python preprocess_hubert_f0.py --f0_predictor=crepe --num_processes 8
  1. Основное обучение модели
Язык кода:shell
копировать
python train.py -c configs/config.json -m 44k

Модель диффузии (необязательно). Если вам нужна функция мелкой диффузии, вам необходимо обучить модель диффузии. Метод обучения модели диффузии:

Язык кода:shell
копировать
python train_diff.py -c configs/diffusion.yaml

Используйте тензорную доску для просмотра статуса обучения

Язык кода:shell
копировать
tensorboard --logdir logs/44k --host=0.0.0.0
2dbf82e248e02abde1b16.png
2dbf82e248e02abde1b16.png
407edfd7f243e3cdcff29.png
407edfd7f243e3cdcff29.png
  1. Обучение модели кластеризации (необязательно)
Язык кода:shell
копировать
python cluster/train_cluster.py --gpu

Модель Обучение оконченоназад,Модель Файл сохраняется вlogs/44kОглавление Вниз,кластеризация Модельбудет сохранен вlogs/44k/kmeans_10000.pt,диффузия Модельсуществоватьlogs/44k/diffusionВниз 。

Рассуждение (можно использовать собственный компьютер, если требования к конфигурации не высоки)

  1. Описание параметра
Язык кода:shell
копировать
# пример
python inference_main.py -m "logs/44k/G_30400.pth" -c "configs/config.json" -n "История, которую ты не знаешь-src.wav" -t 0 -s "nen"

Обязательные поля:

  • -m | --model_path:Модельпуть
  • -c | --config_path:配置документпуть
  • -n | --clean_names:wav Список имен файлов, помещенных в raw в папке
  • -t | --trans:регулировка шага,Поддерживает положительные и отрицательные (полутона)
  • -s | --spk_list:Синтезируйте имя целевого говорящего
  • -cl | --clip:Принудительная нарезка звука,по умолчанию 0 — автоматическая нарезка, единица измерения — секунды/с.

Необязательная часть: подробности см. в следующем разделе.

  • -lg | --linear_gradient:Два аудиофрагментаиздлина кроссфейда,Если после принудительной нарезки вокал выглядит бессвязным, вы можете отрегулировать это значение.,Если все согласовано, рекомендуется использовать значение по умолчанию 0, единица измерения — секунды.
  • -f0p | --f0_predictor:выбирать F0 Предиктор, опционально crepe,pm,dio,harvest,rmvpe,fcpe, По умолчанию вечер (примечание: креп Для оригинала F0 используя средний фильтр)
  • -a | --auto_predict_f0:Преобразование речи автоматически прогнозирует высоту звука,Не включайте эту функцию при конвертировании песен, так как она будет сильно расстроена.
  • -cm | --cluster_model_path:кластеризация Модельили Поиск функцийиндекспуть,Оставьте пустым, чтобы автоматически установить каждый план Модельизпо умолчаниюпуть,Если нет обучающей кластеризации или поиска признаков, заполните их случайно.
  • -cr | --cluster_infer_ratio:кластеризация方案или Поиск функций Пропорция,объем 0–1, по умолчанию, если модель кластеризации или извлечение признаков не обучены. 0 Вот и все
  • -eh | --enhance:лииспользовать NSF_HIFIGAN усилитель,Эта опция менее полезна для некоторых обучающих наборов.из Модель Есть определенная суммаиз Улучшение качества звука,Но хорош для тренировокиз Модель Имеют противоположный эффект,Выключено по умолчанию
  • -shd | --shallow_diffusion:лииспользовать Мелкий слойдиффузия,использование может решить некоторые проблемы с электронной музыкой,Выключено по умолчанию,Когда эта опция включена,NSF_HIFIGAN Бустеры будут запрещены
  • -usm | --use_spk_mix:лииспользоватьслияние ролей/Динамичный вокальный синтез
  • -lea | --loudness_envelope_adjustment:Огибающая громкости входного источника заменяет коэффициент слияния огибающей выходной громкостипример,Чем ближе 1 Чем больше вы используете огибающую выходной громкости
  • -fr | --feature_retrieval:лииспользовать Поиск функций,еслииспользоватькластеризация Модельбудет отключен,и cm и cr 参数将会变становиться Поиск функцийизиндекспутьи Соотношение смешиванияпример

Настройки мелкой диффузии:

  • -dm | --diffusion_model_path:диффузия Модельпуть
  • -dc | --diffusion_config_path:диффузия Модель配置документпуть
  • -ks | --k_step:диффузияколичество шагов,Чем больше, тем ближедиффузия Модельизрезультат,По умолчанию 100
  • -od | --only_diffusion:чистыйдиффузиямодель,Выкройка не загружается sovits модель, рассуждения с помощью диффузионной модели
  • -se | --second_encoding:вторичное кодирование,Исходный звук кодируется дважды перед неглубоким распространением.,метафизические варианты,Иногда это работает хорошо,Иногда эффект плохой
  • рассуждение

Внизлапша以孙燕姿из Модельдляпример,покажи какиспользовать so-vits-svc Выполнить преобразование тона Модельадрес:Модель Стефани Сан Сначала посмотрите на эффект

<audio id="audio" controls="" preload="none">

Язык кода:txt
копировать
  <source id="mp3" src="https://pan.tryxd.cn/d/aliyundrive/so-vits-svc/%E4%BA%BA%E6%9D%A5%E4%BA%BA%E5%BE%80-%E5%AD%99%E7%87%95%E5%A7%BF.wav">

</audio>

Язык кода:shell
копировать
# пример
spleeter separate -o raw Люди приходят и уходят.wav -f Люди приходят и уходят_{инструмент}.wav
python inference_main.py -m "logs/44k/G_27200.pth" -c "configs/sun.json" -n "Люди приходят и уходят_vocals.wav" -t 0 -s "sun" -cm "logs/44k/kmeans_10000.pt" 

logs/44k/G_27200.pthдляхозяин Модель configs/sun.jsonдля配置документ Люди приходят и уходят_vocals.wav дляrawОглавление Вниз Быть преобразованнымизчеловеческий голосаудиофайл sunдляимя целевого докладчика(configs/sun.jsonсерединаизspkпереписыватьсяизvlaue) logs/44k/kmeans_10000.ptдлякластеризация Модель

f0553cd31dd50ac6b8b81.png
f0553cd31dd50ac6b8b81.png

делитьсяизМодель Стефани СанПотому что это4.0Версияиз,нуждатьсясуществовать config.json из model Добавить в поле speech_encoder поля, а именно: "model": { ......... "ssl_dim": 256, "n_speakers": 200, "speech_encoder":"vec256l9" }

1b6e53d58cf52db149347.png
1b6e53d58cf52db149347.png
  1. слитьчеловеческий голосисопровождение
Язык кода:shell
копировать
ffmpeg -i Люди приходят и уходят_accompaniment.wav -i Люди приходят и уходят_vocals.wav_0key_sun_sovits_pm.flac -filter_complex amix=inputs=2:duration=first:dropout_transition=3 output.wav
ссылка:https://github.com/svc-develop-team/so-vits-svc/tree/4.1-Stable
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose