На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD, nsh
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Распознавание с помощью нейронной сети , И признаков MFCC
    Понимаю что не в тему пишу, но у меня один вопрос особа больше спрашивать нечего.
    Haze Подскажите плиз если хорошо знаете нейронные сети - у меня вот такая проблема по спектру без проблем нейросеть обучается и распознает. А вот после DCT я не врубаюсь как обучить. В одном и том же месте DCT коэффициенты могут прыгать например от +100 до -100. Как веса в таких случаях подстраивать. Я обучаю на одного говорящего и при значении например +61 соответствующий вес обучу, а скажет другой в томже месте будет как на скриншоте например -71 и вес уже даст отрицательное значение, получается нейросеть будет воспринимать такие случаи как ошибка, как обучить на взаимоисключающих данных?
    Прикреплённый файлПрикреплённый файлSpectrum.JPG (118,15 Кбайт, скачиваний: 753)
    Прикреплённый файлПрикреплённый файлDCT.JPG (131,03 Кбайт, скачиваний: 705)

    Эта тема была разделена из темы "коммерческие проекты speech-to-text"
      TViT
      Не такой уж я и великий специалист по нейронным сетям. :D
      Думаю, если бы коэффициенты не прыгали, то и использовать нейросети было бы не нужно.
      Я тоже с таким сталкивался, выходил из ситуации, уменьшая скорость обучения в процессе обучения. Чем больше итераций обучения прошло, тем ниже скорость. Можно сразу низкую скорость задать, но обучаться может очень долго. В результате значения весов останавливаются на каких-то значениях и сеть начинает правильно распознавать.
      Если не поможет, можно нейросети ещё слой добавить.
        Ясно. Я просто не понимаю зачем DCT нужно. После него сразу куча проблем автоматически появляется. А уменьшение анализируемых данных от спектра особа сильного и нет. Пока тратиться время на DCT преобразование за то же время можно проанализировать данные которыми пренебрегают после DCT.
        Например слово разделено на 20 тайм слотов (временных окон) и 20 фильтров в слоте 400 значений для анализа. А после DCT 20 таймслотов и 13 коэффициентов 260 значений разница всего 140 значений. А притом что еще нужно косинусное преобразование выполнить так и вообще по времени анализ слова будет дольше.
        У меня просто микроконтроллер все делает у него на борту 16кБ ОЗУ и 14 из них занимает буфер для захвата голосовой команды. Особа не разгуляешься. :lol:
        Сообщение отредактировано: TViT -
          TViT Я косинусные преобразования для анализа речи не использовал. Обходился MFCC.
            Haze А MFCC коэффициенты это не спектр после банка фильтров пропущеный через DCT. А то я что-то начинаю запутываться ))
              TViTДа, вы правы. Я сам запутался.:(
              Странно, что обучение нейросети стало менее эффективным. У меня существенно уменьшалось количество признаков.
              Сколько входов и выходов у нейросети, которую вы используете?
                Haze Ну я по всякому экспереминтирую. И просто на перцептроне делал соответственно с 400 входами и выходами на сколько нужно слов. В моем случае 3 слова. Это параллельное вычисление можно сказать. И потом делал последовательно -параллельное вычисление с 20 входами по числу фильтров и загружал постепенно данные по 20 значений от фильтров соответственно 20раз на сколько временных окон разбит сигнал. Сейчас продумываю свою систму обучения. Потому что сеть глупая получается. В замыслах чтобы она автоматически классифицировала значение от определенного фильтра в определенный момент. Другими словами коэффициенты обученые будуь одинаковые везде а давать значения они будут по определенным алгоритмам в зависимости от важности составляющих анализируемого слова в определенным момент. Как это сделать куча мыслей, и через динамические веса, и через надстройку над весами как бы добавить арбитра весовых значений (арбитр полученного опыта), что-то типа обратной связи.

                Потом хочу на НММ сделать, но пока только темы создал что такое НММ на разных сайтах так что пока с нейросетями бодаюсь. Результаты оч хорошие, но как всегда проблемы из-за большого разброса входных данных в зависимости от говорящего.
                Сообщение отредактировано: TViT -
                  Haze Вы правы DCT сжатие дает эффект уменьшения вычислений если сеть со скрытыми слоями и чем больше нейронов в слое тем больше уменьшается весов обучения с уменьшением признаков.
                  У вас сколько входов было и сколько скрытых слоев и нейронов в слое?
                  Сообщение отредактировано: TViT -
                    Разные эксперименты были с разными цифрами. Количество входов нейросети == количество MFCC-коэффициентов. Количество выходов == количество возможных ответов распознавателя.
                    Например, обучал на целые слова (числа от "1" до "10" плюс десяток глаголов "вперёд", "назад", "старт", "закрыть" ...), используя сеть с 11 входами и 20 выходами без скрытых слоёв. Обучалась сеть хорошо, распознавались слова вообще без ошибок. (Но только на мой голос, и если сотрудничать с системой).
                    На несколько голосов и на фонемы русского языка обучал, используя около 40 входов и выходов и один скрытый слой (несколько сотен нейронов). Если добавлял ещё скрытый слой или менял кол-во нейронов, то разницы не замечал.

                    Цитата TViT @
                    DCT сжатие дает эффект уменьшения вычислений если сеть со скрытыми слоями

                    Не совсем понял. Вообще, я имел в виду, что выделение MFCC-коэффициентов позволяет заменить весь сигнал (на каком-то интервале) несколькими циферками, что существенно снижает количество обрабатываемых данных (вне зависимости от числа нейронов в слоях).
                    А количество слоёв и нейронов в них влияют на способность сети обобщать.
                      Цитата
                      Разные эксперименты были с разными цифрами. Количество входов нейросети == количество MFCC-коэффициентов. Количество выходов == количество возможных ответов распознавателя.
                      Например, обучал на целые слова (числа от "1" до "10" плюс десяток глаголов "вперёд", "назад", "старт", "закрыть" ...), используя сеть с 11 входами и 20 выходами без скрытых слоёв. Обучалась сеть хорошо, распознавались слова вообще без ошибок. (Но только на мой голос, и если сотрудничать с системой).


                      Такая сеть у меня тоже примерно также работала, но вся проблема обычного перцептрона без скрытых слоев это чувствительность. Потому что, это простой сумматор входных значений умноженных на веса. А значит его легко обмануть если всплеск спектра от хлопка или чего=то еще большого по амплитуде попадет на обученные значения и результат умножения с весами пройдет порог чувствительности нейрона который давали при обычном произношении все веса и как результат истина на ложный звук. Например я обучал на 3 слова своим голосом в рельном времени, чтобы отследить всю цепочку, детектирование команды -> захват -> выделение -> обрезание. И потом когда все отлично распознавалось начинал гонять сеть по разным словам, говорил похожие по спектру слова, при ошибках переобучивал сеть, потом снова смотрел как истинные слова распознаются и потом когда все устаканивалось, врубал радио или какую нибудь передачу, новости, музыку и там такие пляски по спектру начинались, считай генератор случайного спектра был - что сеть периодически давала сбой и показывала иногда истинное слово. Это не фонемное распознавание, а распознавание по спектральному образу.

                      Цитата
                      На несколько голосов и на фонемы русского языка обучал, используя около 40 входов и выходов и один скрытый слой (несколько сотен нейронов). Если добавлял ещё скрытый слой или менял кол-во нейронов, то разницы не замечал.


                      40 входов - это что за данные вы закидывали? 13 DCT я понимаю, а 40 откуда и что за признаки, сколько у вас фильтров во временном окне и насколько слово делилось окон, например не для слитной речи - просто одно слово кто-то сказал?

                      Цитата
                      Не совсем понял. Вообще, я имел в виду, что выделение MFCC-коэффициентов позволяет заменить весь сигнал (на каком-то интервале) несколькими циферками, что существенно снижает количество обрабатываемых данных (вне зависимости от числа нейронов в слоях).
                      А количество слоёв и нейронов в них влияют на способность сети обобщать.


                      Ну например 20 входов(по числу значений от фильтра или 13 DCT) и 100 нейронов в скрытом слое, итого комбинаций синапсов-весов 20*100=2000 весов обучить, или 13*100=1300 почти в 2 раза, а с возрастанием кол-ва нейронов в скрытом слое умножается кол-во весов для обучения. А для перцептрона особого различия нет, как я понимаю, там кол-во коэффициентов * на кол-во выходов.
                      Сообщение отредактировано: TViT -
                        13 MFCC-коэффициентов, 1-я и 2-я производная, итого 39 входов.
                        42 фонемы -- выхода.

                        Когда делил на окна, то длиной 10 мс. Соответственно каждые 10 мс сигнала нейросеть выдавала решение.

                        13*1000=13000 :)
                          А что за производные откуда беруться как расчитываются и для чего, я не читал о таком нигде... Разве 13 MFCC несут мало информации о спектре? А сколько фильтров было и какой диапазон мин - макс по частоте и частоту дискретизации какую выбирали. 13* поправил ))
                          Сообщение отредактировано: TViT -
                            MFCC-коэффициенты несут статическую информацию о спектре и не отражают того, как сигнал изменяется во времени. Первая производная показывает скорость изменения сигнала, а вторая -- ускорение.
                            Я считал следующим образом: для i-кадра первая производная с'(i) получалась как разность c(i+2)-c(i-2), т.е. разность между значением коэффициентов через два кадра вперёд и через два кадра назад. И так для каждого из 13 коэффициентов в кадре.
                            Вторая производная получалось по аналогичной формуле, только производная бралась от производной и кадры рассматривались соседние: c"(i)=c'(i+1)-c'(i-1). Итого на каждом кадре получалось по 13 значений c, c' и c".
                            Частота дискретизации была 8кГц, соответственно диапазон частот от 0 до 4000 Гц, количество фильтров уже не помню, около 22 или 24.
                              Ясно. Странно нигде такого не встречал. У меня были такие мысли, но относительно спектра, я вычислял соотношение вверх по спектру между значением нижнего фильтра поделенного на вышестоящее по спектру значение и получал как бы производную но по частоте, а не по времени. Думаю как развивается сигнал во времени нейросеть и Скрытые Марковские Модели автоматически учитывают и соответственно обучаются... А что намного лучше распознавание и дикторонезависимость получались с производными? Экспериментировали? Может лучше еще было фильтров добавить взамен производным?
                              В любом случае спасибо за инфу и плюсик конечно. :)
                                Распознавалось лучше, но не очень намного. Намного (раз в десять) время обучения увеличивалось, но это не критично.
                                Нейросеть динамику без производных не учитывает (ну если только как-нибудь косвенно). НММ -- тоже. А вообще, при анализе речи, использование производных -- почти стандарт (приведено во многих статьях).
                                Увеличивать количество фильтров пробовал, но когда их больше -- их частотный диапазон меньше, и у меня в каких-то ситуациях происходило деление на ноль. Если бы частота дискретизации была больше (а фонограммы это позволяли), то такого бы не происходило конечно, но мне хотелось экспериментов в частотном диапазоне ближе к телефонному каналу.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0653 ]   [ 16 queries used ]   [ Generated: 15.05.24, 03:28 GMT ]