Всем привет! Для обучения TTS модели я использую чистый Vits.

Кто знает, с чем связана такая ситуация. Дан датасет: набор .wav файлов и соответствующий .csv файл. Перед обучением модели исходное множество данных разбивается на train и validate. В ходе обучения для каждого задействованного .wav файла создается файл со спектрограммой .spec.pt. А теперь вопрос: почему в обучении (валидации) модели участвуют не все .wav файлы? Почему для существенной доли .wav файлов не появляются соответствующие .spec.pt файлы? Независимо от размера датасета, примерно треть всех .wav файлов не участвует в обучении модели. Почему так?

15 ответов

64 просмотра
Alexey-Bazarov Автор вопроса

А, спасибо! Но в целом это не решает мою задачу. Всё равно есть такие .wav файлы, которые явно перечислены в train.csv, но для которых нет .spec.pt. И самое главное, таких файлов довольно много — грубо говоря треть всего датасета... А я под валидацию отдаю 20% всех файлов...

Alexey Bazarov
А, спасибо! Но в целом это не решает мою задачу. В...

Надо смотреть, почему они пропали. Может быть формат был не тот, и поэтому пропустили файлы при извлечении признаков. В нормальной базе должны быть все файлы.

Alexey-Bazarov Автор вопроса
Nikolay V. Shmyrev
Надо смотреть, почему они пропали. Может быть форм...

Я тоже так думал, но нигде не могу найти сообщений об ошибках. В коде Vits при неверном samplerate выбрасывается исключение... Но ни в логе, ни в консольном выводе исключений я не нашел... Я сделаю по-другому. Когда закончится мое текущее обучение, я удалю из датасета все "хорошие" файлы и оставлю только "плохие". Наверно Vits либо должен-таки их обработать, либо явно напишет, почему он не может этого сделать...

Если это репа с VITS отдельная, а не та, что в Nemo, то там есть ограничители по времени сэмплов. Причём какие-то хитрые, там список вида [200, 400, … 1000] и т.д. и проверяется, кажется, и максимальная, и минимальная длина (в кадрах спектрограммы). В общем, то, что в эти границы не влезает, выбрасывается. Может быть, поэтому не для всех файлов спектрограммы есть.

Korovsky
Если это репа с VITS отдельная, а не та, что в Nem...

Это я про эту репу говорю: https://github.com/jaywalnut310/vits

Кстати, да, про длину текста я забыла. Я помню, что сталкивалась с этими ограничениями и, кажется, что-то правила (наверное, ограничение по длине текста). В общем-то всё это можно настраивать по себя, хотя оно максимально странно сделано, прямо захардкожено. Там где-то был пулл реквест, где предлагалось настройки boundaries перенести в конфиг, наверное, можно так и сделать для удобства. Подозреваю, что большинство здесь присутствующих используют для VITS какую-то другую репу.

Alexey-Bazarov Автор вопроса
Korovsky
Кстати, да, про длину текста я забыла. Я помню, чт...

Огромное спасибо! В общем, во-первых, wav-файлы для тренировки модели должны быть длительностью не больше 10 секунд, а во-вторых, я разобрался, как подкрутить параметры vits, чтобы мой текущий датасет обрабатывался полностью! Впредь так лучше не делать, буду готовить корректный датасет, но в целом полезно знать, где и какие есть ограничения и как их можно обойти! Еще раз спасибо!

Alexey Bazarov
Огромное спасибо! В общем, во-первых, wav-файлы дл...

А с чего именно 10 секунд? Просто интересно... Я и на 30 обучал.

Alexey-Bazarov Автор вопроса
Tarasfrompir V
А с чего именно 10 секунд? Просто интересно... Я и...

См. выше мои сообщения. В чистом виде Vits отсекает тексты длиннее 190 символов и звуковые файлы длиннее 10 секунд. Ну точнее там проверяется не длительность в секундах, а вот такая формула: wav_length = file_size / (wav_channels * Bytes per dim) spec_length = wav_length // (2 * self.hop_length) И вот spec_length должно попадать в интервал от 32 до 1000. Не знаю, почему именно такие константы, но по умолчанию в исходниках vits именно так. Чтобы обработать мой текущий датасет, я сам увеличил максимальную длину текста до 250 символов, а длительность спектрограмм увеличил до 1200. Еще раз говорю, я использую чистый Vits. А вы из какого репозитория взяли исходники?

Alexey Bazarov
См. выше мои сообщения. В чистом виде Vits отсекае...

А можешь скинуть код, где менял? То же хочу проверить, в моей версии как это реализовано

Alexey-Bazarov Автор вопроса
Aigiz K
А можешь скинуть код, где менял? То же хочу провер...

Файл data_utils.py class TextAudioLoader(torch.utils.data.Dataset): def init(self, audiopaths_and_text, hparams): .......... .......... #self.max_text_len = getattr(hparams, "max_text_len", 190) self.max_text_len = getattr(hparams, "max_text_len", 250) Файл train.py train_sampler = DistributedBucketSampler( train_dataset, hps.train.batch_size, #[32,300,400,500,600,700,800,900,1000], [32,300,400,500,600,700,800,900,1000, 1100, 1200], .......... ..........

Alexey-Bazarov Автор вопроса

Какая у тебя версия? Где брал?

Aigiz K
да, то же самое. спасибо

А какой результат учебы при таких параметрах отбора? Синтез и время обучения? Какие характеристики gpu?

Похожие вопросы

Обсуждают сегодня

Как думаете через какой сервис они верифицируют?
inc.
5
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
День добрый, подскажите пожалуйста, есть ли какой-то способ сказать ребару не компилировать определённое приложение? Всю доку их перечиатл ничего подобного не нашёл
Кирилл
14
На чём в основном щас пишут мини апы? Vuejs?
Goot evening Not everyone
6
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
9
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Вот объясните, как это работает: Вот есть допустим unix-подобная система, и программа запускает допустим printf или fork, как это передается ядру, и как оно обрабатывать начин...
Егор
14
Всем привет. Сейчас я изучаю erlang по книге Erlang and OTP in action. Дошел до главы где реализуется первый gen server на примере tcp rpc сервера. Меня очень сильно смутил ко...
Freezing Death
12
Карта сайта