Este projeto foi pensado para:
$ cd /path/to/project/
$ git clone https://github.com/filippogiruzzi/voice_activity_detection.git
$ cd voice_activity_detection/
$ pyenv install 3.7.3
$ pyenv virtualenv 3.7.3 vad-venv
$ pyenv activate vad-venv
$ pip install -r requirements.txt
$ pip install -e .
Você pode extrair a imagem mais recente do DockerHub e executar comandos Python dentro do contêiner:
$ docker pull filippogrz/tf-vad:latest
$ docker run --rm --gpus all -v /var/run/docker.sock:/var/run/docker.sock -it --entrypoint /bin/bash -e TF_FORCE_GPU_ALLOW_GROWTH=true filippogrz/tf-vad
Se você deseja construir a imagem do Docker e executar o contêiner do zero, execute os comandos a seguir.
Crie a imagem do Docker:
$ make build
(Isso pode demorar um pouco.)
Execute a imagem do Docker:
$ make local-nobuild
O objetivo deste projeto é projetar e implementar um algoritmo de detecção de atividade de voz em tempo real baseado em Deep Learning.
A solução projetada é baseada na extração de recursos MFCC e em um modelo 1D-Resnet que classifica se um sinal de áudio é fala ou ruído.
Modelo | Treinar acc. | Val, acc. | Teste conta. |
---|---|---|---|
1D-Resnet | 99% | 98% | 97% |
Os resultados de inferência brutos e pós-processados em um sinal de áudio de teste são mostrados abaixo.
O projeto voice_activity_detection/
possui a seguinte estrutura:
vad/data_processing/
: rotulagem, processamento, registro e visualização de dados brutosvad/training/
: dados, pipeline de entrada, modelo e treinamento/avaliação/prediçãovad/inference/
: exportando modelo treinado e inferência Baixe o conjunto de dados do corpus LibriSpeech ASR em https://openslr.org/12/ e extraia todos os arquivos para: /path/to/LibriSpeech/
.
O conjunto de dados contém aproximadamente 1.000 horas de fala em inglês lida em 16kHz em audiolivros e é adequado para detecção de atividade de voz.
Anotei automaticamente o conjunto test-clean
do conjunto de dados com um modelo VAD pré-treinado.
Sinta-se à vontade para usar os labels/
pasta e o modelo VAD pré-treinado (apenas para inferência) deste link.
$ cd /path/to/project/voice_activity_detection/vad/
Pule esta subseção se você já possui a pasta labels/
, que contém anotações de um modelo pré-treinado diferente.
$ python data_processing/librispeech_label_data.py --data-dir /path/to/LibriSpeech/test-clean/ --exported-model /path/to/pretrained/model/
Isso registrará as anotações em /path/to/LibriSpeech/labels/
como arquivos .json
.
$ python data_processing/data_to_tfrecords.py --data-dir /path/to/LibriSpeech/
Isso registrará os dados divididos no formato .tfrecord
em /path/to/LibriSpeech/tfrecords/
$ python training/train.py --data-dir /path/to/LibriSpeech/tfrecords/
$ python inference/export_model.py --model-dir /path/to/trained/model/dir/
$ python inference/inference.py --data-dir /path/to/LibriSpeech/ --exported-model /path/to/exported/model/ --smoothing
O modelo treinado será gravado em /path/to/LibriSpeech/tfrecords/models/resnet1d/
. O modelo exportado será gravado neste diretório.