Honk는 키워드 스포팅을위한 Google의 Tensorflow Convolutional Neural Networks의 Pytorch 재 구현으로, 최근 Speech Commands 데이터 세트의 릴리스와 함께 제공됩니다. 자세한 내용은 글을 참조하십시오.
Honk는 대화식 지능형 에이전트를위한 기존의 음성 인식 기능을 구축하는 데 유용합니다. 우리의 코드는 간단한 명령 (예 : "STOP"및 "GO")을 식별하는 데 사용될 수 있으며 사용자 정의 "명령 트리거"(예 : "Hey Siri!")를 감지하도록 조정됩니다.
이 비디오를 확인하십시오.
아래 지침을 사용하여 데모 응용 프로그램을 실행하십시오 (위의 비디오에 표시) 직접!
현재 Pytorch는 Linux 및 OS X 만 공식적으로 지원합니다. 따라서 Windows 사용자는이 데모를 쉽게 실행할 수 없습니다.
데모를 배포하려면 다음 명령을 실행하십시오.
pip install -r requirements.txt
apt-get install freeglut3-dev
)를 통해 GLUT (OpenGL 유틸리티 툴킷) 설치./fetch_data.sh
python .
python utils/speech_demo.py
Cuda를 끄는 것과 같은 옵션을 조정 해야하는 경우 config.json
편집하십시오.
Mac OS X에 대한 추가 메모 :
python .
오디오에 명령 단어가 포함되어 있는지 식별하기 위해 웹 서비스를 배포합니다. 기본적으로 config.json
구성에 사용되지만 --config=<file_name>
으로 변경할 수 있습니다. 서버가 방화벽 뒤에있는 경우 하나의 워크 플로우는 SSH 터널을 생성하고 구성 (기본 16888)에 지정된 포트와 함께 포트 전달을 사용하는 것입니다.
Honk-Models 저장소에는 Caffe2 (Onnx) 및 Pytorch에 대한 몇 가지 미리 훈련 된 모델이 있습니다. fetch_data.sh
스크립트는 이러한 모델을 가져와 model
디렉토리로 추출합니다. 구성 파일의 model_path
및 backend
에서 사용할 모델과 백엔드를 각각 지정할 수 있습니다. 구체적으로, backend
model_path
의 형식에 따라 caffe2
또는 pytorch
일 수 있습니다. ONNX 모델을 실행하려면 onnx
및 onnx_caffe2
패키지가 시스템에 있어야합니다. 요구 사항이 없습니다 .txt.
불행히도 라이브러리가 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
PYTHONPATH
환경 변수에 caffe2
모듈 경로를 추가해야 할 수도 있습니다. 우리에게 이것은 export PYTHONPATH=$PYTHONPATH:/home/pi/caffe2/build
에 의해 달성되었습니다pip install onnx-caffe2
용 ONNX 확장자를 설치하십시오pip install -r requirements_rpi.txt
pip install --no-deps resampy librosa
설치python -c "import librosa"
를 가져 오십시오. 설치하지 않았기 때문에 Numba에 대한 오류가 발생합니다./home/pi/.local/lib/python2.7/site-packages/resampy/interpn.py
에서 Numba 및 @numba.jit
제거해야했습니다../fetch_data.sh
config.json
에서 caffe2
로 backend
변경하고 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 배포판에서는 텍스트 음성 연사가 잘 작동하지 않을 수 있습니다. 이 경우 --watson-username
및 --watson--password
통해 IBM Watson 자격 증명을 제공하십시오. python client.py -h
수행하여 모든 옵션을 볼 수 있습니다.
CNN 모델 . python -m utils.train --type [train|eval]
모델을 훈련하거나 평가합니다. 모든 교육 예제는 Speech 명령 데이터 세트와 동일한 형식을 따를 것으로 기대합니다. 권장 워크 플로우는 데이터 세트에 이미 유용한 오디오 샘플과 백그라운드 노이즈가 이미 포함되어 있기 때문에 데이터 세트를 다운로드하고 사용자 정의 키워드를 추가하는 것입니다.
잔류 모델 . Speech Commands Dataset에서 우리의 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} | MFCC | 사용할 오디오 전 처리 유형 |
--batch_size | [1, n) | 100 | 사용할 미니 배치 크기 |
--cache_size | [0, inf) | 32768 | 오디오 캐시의 항목 수는 약 32kb * n을 소비합니다. |
--conv1_pool | [1, inf) [1, inf) | 2 2 | 풀 필터의 너비와 높이 |
--conv1_size | [1, inf) [1, inf) | 10 4 | CONV 필터의 너비와 높이 |
--conv1_stride | [1, inf) [1, inf) | 1 1 | 보폭의 너비와 길이 |
--conv2_pool | [1, inf) [1, inf) | 1 1 | 풀 필터의 너비와 높이 |
--conv2_size | [1, inf) [1, inf) | 10 4 | CONV 필터의 너비와 높이 |
--conv2_stride | [1, inf) [1, inf) | 1 1 | 보폭의 너비와 길이 |
--data_folder | 끈 | /data/speech_dataset | 데이터의 길 |
--dev_every | [1, inf) | 10 | 에포크 측면에서의 개발 간격 |
--dev_pct | [0, 100] | 10 | Dev에 사용할 총 설정 비율 |
--dropout_prob | [0.0, 1.0) | 0.5 | 사용하는 드롭 아웃 속도 |
--gpu_no | [-1, n] | 1 | 사용할 GPU |
--group_speakers_by_id | {true, false} | 진실 | Train/Dev/Test에서 스피커를 그룹화할지 여부 |
--input_file | 끈 | 로드 할 모델의 경로 | |
--input_length | [1, inf) | 16000 | 오디오의 길이 |
--lr | (0.0, inf) | {0.1, 0.001} | 사용하는 학습 속도 |
--type | {기차, 평가} | 기차 | 사용할 모드 |
--model | 끈 | CNN- 트래드-풀 2 | 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, inf) | 40 | 사용할 DCT베이스의 수 |
--n_epochs | [0, inf) | 500 | 에포크 수 |
--n_feature_maps | [1, inf) | {19, 45} | 잔차 아키텍처에 사용할 기능지도 수 |
--n_feature_maps1 | [1, inf) | 64 | Conv Net의 기능 맵 수 1 |
--n_feature_maps2 | [1, inf) | 64 | Conv Net 2의 기능 맵 수 |
--n_labels | [1, n) | 4 | 사용할 라벨 수 |
--n_layers | [1, inf) | {6, 13, 24} | 잔류 아키텍처를위한 컨볼 루션 층의 수 |
--n_mels | [1, inf) | 40 | 사용할 MEL 필터 수 |
--no_cuda | 스위치 | 거짓 | CUDA 사용 여부 |
--noise_prob | [0.0, 1.0] | 0.8 | 노이즈와 혼합 될 확률 |
--output_file | 끈 | Model/Google-Speech-Dataset.pt | 모델을 저장하는 파일 |
--seed | (Inf, Inf) | 0 | 사용할 씨앗 |
--silence_prob | [0.0, 1.0] | 0.1 | 침묵을 따를 확률 |
--test_pct | [0, 100] | 10 | 테스트에 사용할 총 설정의 백분율 |
--timeshift_ms | [0, inf) | 100 | 오디오를 무작위로 전환하기 위해 밀리 초의 시간 |
--train_pct | [0, 100] | 80 | 훈련에 사용할 총 설정 비율 |
--unknown_prob | [0.0, 1.0] | 0.1 | 알 수없는 단어를 선택할 확률 |
--wanted_words | String1 String2 ... Stringn | 명령 무작위 | 원하는 대상 단어 |
Honkling은 Honk의 JavaScript 구현입니다. Honkling을 사용하면 브라우저 내 키워드 스팟 팅 기능을 사용하여 다양한 웹 애플리케이션을 구현할 수 있습니다.
Honk 및 Honkling의 유연성을 향상시키기 위해 YouTube 비디오에서 데이터 세트를 구성하는 프로그램을 제공합니다. 세부 사항은 keyword_spotting_data_generator
폴더에서 찾을 수 있습니다
순차 오디오를 녹음하고 Speech 명령 데이터 세트와 동일한 형식으로 저장하기 위해 다음을 수행 할 수 있습니다.
python -m utils.record
레코드로 돌아 가기, 화살표 위로 실행 취소, "Q"를 입력하십시오. 1 초의 침묵 후 기록은 자동으로 중단됩니다.
몇 가지 옵션을 사용할 수 있습니다.
--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".
사후 처리는 "쓸모없는"오디오를 트리밍하거나 버리는 것으로 구성됩니다. 트리밍은 자명합니다. 오디오 녹음은 --cutoff-ms
로 지정된 가장 큰 X 밀리 초의 창으로 다듬어집니다. "쓸모없는"오디오 ( discard_true
)를 폐기하면 미리 훈련 된 모델을 사용하여 혼란스러워하는 샘플을 결정하여 올바르게 레이블이 지정된 샘플을 버립니다. 미리 훈련 된 모델 및 올바른 레이블은 각각 --config
및 --correct-label
로 정의됩니다.
예를 들어, python -m utils.record --post-process trim discard_true --correct-label no --config config.json
고려하십시오. 이 경우 유틸리티는 일련의 음성 스 니펫을 기록하고 1 초로 트림하며, config.json
의 모델에 의해 "no"라는 레이블이없는 것을 버립니다.
python manage_audio.py listen
이것은 녹음을 위해 --min-sound-lvl
의 제정 값을 설정하는 데 도움이됩니다.
python manage_audio.py generate-contrastive --directory [directory]
음성 세분화를 사용하여 [directory]
의 모든 .wav 파일에서 대비 예를 생성합니다.
음성 명령 데이터 세트에는 1 초 길이의 오디오 스 니펫이 포함되어 있습니다.
python manage_audio.py trim --directory [directory]
[directory]
의 모든 .wav 파일에 대해 가장 큰 1 초로 트림. 신중한 사용자는 Audacity와 같은 오디오 편집기를 사용하여 모든 오디오 샘플을 수동으로 확인해야합니다.