Publicamos um moderno Detector de atividade de voz e muito mais

imagem







Ao trabalhar com a fala, existem sempre algumas questões muito "simples", para as quais não existem muitas ferramentas convenientes, abertas e simples: detecção da presença de uma voz (ou música), detecção da presença de números e classificação das línguas .







Para resolver o problema de detecção de voz (Voice Activity Detector, VAD), existe uma ferramenta bastante popular do Google - webRTC VAD . É pouco exigente em recursos e compacto, mas sua principal desvantagem é sua instabilidade ao ruído, um grande número de falsos positivos e a impossibilidade de ajuste fino. É claro que se reformularmos o problema não em detecção de voz, mas em detecção de silêncio (silêncio é a ausência de voz e ruído), então ele é resolvido de maneiras muito triviais (limiar de energia, por exemplo), mas com as mesmas desvantagens e limitações. O mais desagradável é que muitas vezes essas decisões são frágeis e alguns limites do hard code não são transferidos para outros domínios.







STT ( PyTorch ONNX), , , , VAD , MIT. .









"VAD"?







  • VAD — , ;
  • Number detector — , ;
  • Language classifier — ;
  • 4 (, , , ), VAD ( — - , , VAD !);


"" :







  • 4 ;
  • VAD WebRTC ;
  • ;
  • , 1 ;
  • edge ;
  • (PyTorch, ONNX);
  • WebRTC , ;
  • PyTorch (JIT), ONNX;




  • ;
  • ;
  • (- , , STT);
  • edge ;
  • ONNX ;
  • VAD 16 kHz, 8 kHz;




colab . , :







  • PyTorch ONNX;
  • — VAD — , / ;
  • — . VAD ;
  • , ( , 1 , - );


, VAD :







import torch
torch.set_num_threads(1)

model, utils = torch.hub.load(repo_or_dir='snakers4/silero-vad',
                              model='silero_vad',
                              force_reload=True)

(get_speech_ts,
 _, read_audio,
 _, _, _) = utils

files_dir = torch.hub.get_dir() + '/snakers4_silero-vad_master/files'

wav = read_audio(f'{files_dir}/en.wav')
speech_timestamps = get_speech_ts(wav, model,
                                  num_steps=4)
print(speech_timestamps)
      
      





VAD



, VAD. .







  • 250 . , 100 , 30-50. ( 100 250 );
  • VAD ( );
  • 500 ( 200 ) 4 8 ;
  • ;
  • , "" "". - ;




1 AMD Ryzen Threadripper 3960X. :







torch.set_num_threads(1) # pytorch
ort_session.intra_op_num_threads = 1 # onnx
ort_session.inter_op_num_threads = 1 # onnx
      
      





, :







  • num_steps — "";
  • number of audio streams — ;
  • , num_steps * number of audio streams;


:







Batch size Pytorch latency, ms Onnx latency, ms
2 9 2
4 11 4
8 14 7
16 19 12
40 36 29
80 64 55
120 96 85
200 157 137


, 1 :







Batch size num_steps Pytorch model RTS Onnx model RTS
40 4 68 86
40 8 34 43
80 4 78 91
80 8 39 45
120 4 78 88
120 8 39 44
200 4 80 91
200 8 40 46




, , VAD . WebRT, 0 1?







WebRTC 0 1. - 30 , 250 8 . , 0 1 .







:







imagem









, VAD , . , . VAD.








All Articles