HONK - это переосмысление Pytorch сверточных нейронных сетей Google Tensorflow для определения ключевых слов, которые сопровождают недавний выпуск их набора данных речевых команд. Для получения более подробной информации, пожалуйста, проконсультируйтесь с нашей записью:
HONK полезен для создания возможностей распознавания речи для интерактивных интеллектуальных агентов. Наш код можно использовать для определения простых команд (например, «Stop» и «Go») и быть адаптированным для обнаружения пользовательских «триггеров команд» (например, «Привет, Сири!»).
Посмотрите это видео для демонстрации Honk в действии!
Используйте приведенные ниже инструкции, чтобы запустить демонстрационное приложение (показано в приведенном выше видео) самостоятельно!
В настоящее время Pytorch имеет официальную поддержку только Linux и OS X. Таким образом, пользователи Windows не смогут легко запустить эту демонстрацию.
Чтобы развернуть демонстрацию, запустите следующие команды:
pip install -r requirements.txt
apt-get install freeglut3-dev
)./fetch_data.sh
python .
python utils/speech_demo.py
Если вам нужно настроить параметры, например, отключение CUDA, пожалуйста, отредактируйте config.json
.
Дополнительные примечания для Mac OS X:
python .
Развертывает веб -службу для идентификации, если аудио содержит командное слово. По умолчанию config.json
используется для конфигурации, но это можно изменить с помощью --config=<file_name>
. Если сервер находится за брандмауэром, один рабочий процесс - создать туннель SSH и использовать перенаправление портов с портом, указанным в Config (по умолчанию 16888).
В нашем репозитории Honk-Models есть несколько предварительно обученных моделей для Caffe2 (ONNX) и Pytorch. Сценарий fetch_data.sh
извлекает эти модели и извлекает их в каталог model
. Вы можете указать, какую модель и бэкэнд использовать в model_path
и backend
файла конфигурации соответственно. В частности, backend
может быть caffe2
или pytorch
, в зависимости от того, в каком формате model_path
. Обратите внимание, что для запуска наших моделей ONNX пакеты onnx
и onnx_caffe2
должны присутствовать в вашей системе; Они отсутствуют в требованиях.
К сожалению, заставить библиотеки работать над RPI, особенно Librosa, не так просто, как запустить несколько команд. Мы описываем наш процесс, который может работать или не работать для вас.
sudo apt-get install -y protobuf-compiler libprotoc-dev python-numpy python-pyaudio python-scipy python-sklearn
pip install protobuf
pip install --no-deps onnx
caffe2
к переменной среды PYTHONPATH
. Для нас это было достигнуто с помощью export PYTHONPATH=$PYTHONPATH:/home/pi/caffe2/build
pip install onnx-caffe2
pip install -r requirements_rpi.txt
pip install --no-deps resampy librosa
python -c "import librosa"
. Это должно добавить ошибку в отношении Numba, так как мы не установили ее.@numba.jit
из /home/pi/.local/lib/python2.7/site-packages/resampy/interpn.py
/python2.7/site-packages/resampy/interpn.py./fetch_data.sh
config.json
измените backend
на caffe2
и model_path
на model/google-speech-dataset-full.onnx
.python .
Если ошибок нет, вы успешно развернули модель, доступную через порт 16888 по умолчанию.python utils/speech_demo.py
. Вам понадобится рабочий микрофон и динамики. Если вы взаимодействуете с дистанционно RPI, вы можете запустить демонстрацию речи локально и указать удаленную конечную точку --server-endpoint=http://[RPi IP address]:16888
К сожалению, клиент QA еще не поддерживает широкую общественность, поскольку ему требуется пользовательский сервис QA. Тем не менее, он все еще может быть использован для ретаргета ключевого слова команды.
python client.py
запускает клиент QA. Вы можете перенаправить ключевое слово, выполнив python client.py --mode=retarget
. Обратите внимание, что текст в речь может не очень хорошо работать на дистрибуциях Linux; В этом случае, пожалуйста, предоставьте учетные данные IBM Watson Via- --watson-username
и --watson--password
. Вы можете просмотреть все варианты, выполняя python client.py -h
.
CNN модели . python -m utils.train --type [train|eval]
поезда или оценивает модель. Он ожидает, что все примеры обучения будут следовать тому же формату, что и набор данных речевых команд. Рекомендуемый рабочий процесс заключается в загрузке набора данных и добавлении пользовательских ключевых слов, поскольку набор данных уже содержит много полезных звуковых образцов и фонового шума.
Остаточные модели . Мы рекомендуем следующие гиперпараметры для обучения любых наших res{8,15,26}[-narrow]
модели на наборе данных речевых команд:
python -m utils.train --wanted_words yes no up down left right on off stop go --dev_every 1 --n_labels 12 --n_epochs 26 --weight_decay 0.00001 --lr 0.1 0.01 0.001 --schedule 3000 6000 --model res{8,15,26}[-narrow]
Для получения дополнительной информации о наших глубоких остаточных моделях, пожалуйста, смотрите нашу статью:
Доступны параметры команды:
вариант | входной формат | по умолчанию | описание |
---|---|---|---|
--audio_preprocess_type | {Mfccs, pcen} | MFCCS | тип аудио предварительной обработки для использования |
--batch_size | [1, n) | 100 | размер мини-партии для использования |
--cache_size | [0, инф) | 32768 | Количество элементов в аудиосистемах, потребляет около 32 кб * n |
--conv1_pool | [1, инф) [1, инф) | 2 2 | ширина и высота фильтра бассейна |
--conv1_size | [1, инф) [1, инф) | 10 4 | ширина и высота конюшного фильтра |
--conv1_stride | [1, инф) [1, инф) | 1 1 | ширина и длина шага |
--conv2_pool | [1, инф) [1, инф) | 1 1 | ширина и высота фильтра бассейна |
--conv2_size | [1, инф) [1, инф) | 10 4 | ширина и высота конюшного фильтра |
--conv2_stride | [1, инф) [1, инф) | 1 1 | ширина и длина шага |
--data_folder | нить | /data/speek_dataset | Путь к данным |
--dev_every | [1, инф) | 10 | DEV -интервал с точки зрения эпох |
--dev_pct | [0, 100] | 10 | Процент общего набора для использования для разработки |
--dropout_prob | [0,0, 1,0) | 0,5 | скорость отсева для использования |
--gpu_no | [-1, n] | 1 | GPU для использования |
--group_speakers_by_id | {true, false} | истинный | Будьте группировать динамики по всему поезду/разработке/тест |
--input_file | нить | Путь к модели для загрузки | |
--input_length | [1, инф) | 16000 | длина звука |
--lr | (0,0, инф) | {0,1, 0,001} | скорость обучения для использования |
--type | {Train, Eval} | тренироваться | режим для использования |
--model | нить | CNN-Trad-Pool2 | Один из cnn-trad-pool2 , cnn-tstride-{2,4,8} , cnn-tpool{2,3} , cnn-one-fpool3 , cnn-one-fstride{4,8} , res{8,15,26}[-narrow] , cnn-trad-fpool3 , cnn-one-stride1 |
--momentum | [0,0, 1,0) | 0,9 | импульс для использования для SGD |
--n_dct_filters | [1, инф) | 40 | количество оснований DCT для использования |
--n_epochs | [0, инф) | 500 | Количество эпох |
--n_feature_maps | [1, инф) | {19, 45} | Количество карт функций для использования для остаточной архитектуры |
--n_feature_maps1 | [1, инф) | 64 | Количество карт функций для Conv Net 1 |
--n_feature_maps2 | [1, инф) | 64 | Количество карт функций для Conv Net 2 |
--n_labels | [1, n) | 4 | Количество ярлыков для использования |
--n_layers | [1, инф) | {6, 13, 24} | количество слоев свертки для остаточной архитектуры |
--n_mels | [1, инф) | 40 | количество фильтров MEL для использования |
--no_cuda | выключатель | ЛОЖЬ | использовать ли CUDA |
--noise_prob | [0,0, 1,0] | 0,8 | вероятность смешивания с шумом |
--output_file | нить | Модель/Google-Speech-Dataset.pt | файл для сохранения модели в |
--seed | (инф, инф) | 0 | семя для использования |
--silence_prob | [0,0, 1,0] | 0,1 | вероятность выбора молчания |
--test_pct | [0, 100] | 10 | Процент общего набора для тестирования |
--timeshift_ms | [0, инф) | 100 | время в миллисекундах, чтобы случайным образом изменить звук |
--train_pct | [0, 100] | 80 | Процент общего объема использования для обучения |
--unknown_prob | [0,0, 1,0] | 0,1 | вероятность выбора неизвестного слова |
--wanted_words | String1 String2 ... Stringn | командование случайно | желаемые целевые слова |
Honkling - это JavaScript реализация HONK. С помощью Honkling можно реализовать различные веб-приложения с функциональностью определения ключевых слов в браузере.
Чтобы повысить гибкость HONK и HONKLING, мы предоставляем программу, которая создает набор данных из видео на YouTube. Подробности можно найти в keyword_spotting_data_generator
Папку
Вы можете сделать следующее, чтобы записать последовательный аудио и сохранить в том же формате, что и для набора данных речевой команды:
python -m utils.record
Вход возвращается к записи, стрелка вверх, чтобы отменить, и «Q», чтобы закончить. После одной секунды молчания запись автоматически останавливается.
Доступно несколько вариантов:
--output-begin-index: Starting sequence number
--output-prefix: Prefix of the output audio sequence
--post-process: How the audio samples should be post-processed. One or more of "trim" and "discard_true".
Пост-обработка состоит из обрезки или отброса «бесполезного» звука. Обрезка является самоэкспланирующей: аудиозаписи обрезаны до самого громкого окна X миллисекунды, указанного- --cutoff-ms
. Отказ от «бесполезного» аудио ( discard_true
) использует предварительно обученную модель, чтобы определить, какие образцы сбивают с толку, отбрасывая правильно помеченные. Предварительно обученная модель и правильная метка определяются --config
и --correct-label
, соответственно.
Например, рассмотрим python -m utils.record --post-process trim discard_true --correct-label no --config config.json
. В этом случае утилита записывает последовательность речевых фрагментов, подделывает их на одну секунду и, наконец, отбрасывает тех, кто не помечен «нет» моделью в config.json
.
python manage_audio.py listen
Это помогает установить значения вновь для --min-sound-lvl
для записи.
python manage_audio.py generate-contrastive --directory [directory]
генерирует контрастные примеры из всех файлов .WAV в [directory]
с использованием фонетической сегментации.
Набор данных по речевым командам содержит одну секунду фрагменты аудио.
python manage_audio.py trim --directory [directory]
выходит на самые громкие одну секунду для всех файлов .WAV в [directory]
. Осторожный пользователь должен вручную проверить все образцы звука, используя аудио редактор, как Audacity.