Este es el repositorio del método presentado en el documento "Modelado de lenguaje para la detección de eventos de sonido con forzamiento de maestros y muestreo programado", por K. Drossos, S. Gharib, P, Magron y T. Virtanen.
Nuestro documento se presenta a la detección y clasificación del taller de escenas y eventos acústicos (Dcase) 2019. Puede encontrar una versión en línea de nuestro artículo en ARXIV: https://arxiv.org/abs/1907.08506
Si usa nuestro método, cite nuestro documento.
Puede obtener la versión del código utilizado en el documento desde
La detección de eventos de sonido (SED) es la tarea de identificar actividades de eventos sólidos de representaciones de audio a corto plazo. Por ejemplo, dado un vector de características de audio que se extrae de 0.04 segundos, un método SED debe identificar las actividades de diferentes eventos de sonido en este vector. Por lo general, SED se aplica en una secuencia de vectores de características de audio de corto tiempo y la identificación de actividades de eventos de sonido se realiza para cada vector de características de entrada. Es decir, como se da una matriz, con T y F para ser la cantidad de vectores y características de características, respectivamente, la salida es la matriz, que contiene las predicciones para cada una de las clases C en cada vector de características t
En las grabaciones de la vida real, los diversos eventos sólidos probablemente tengan estructuras temporales dentro y entre los eventos . Por ejemplo, un evento de "pasos" podría repetirse con pausas intermedias (estructura intraeventos). Por otro lado, es probable que la "bocina del automóvil" siga o precedue al evento de sonido "CAR Passing by" (estructura entre eventos). Dichas estructuras temporales se emplean y se usan en otras tareas de aprendizaje automático, por ejemplo en traducción automática, subtítulos de imágenes y reconocimiento de voz. En estas tareas, el método desarrollado también aprende un modelo de las asociaciones temporales de las clases específicas. Estas asociaciones generalmente se denominan modelo de idioma.
Los métodos SED pueden beneficiarse de un modelo de idioma. El método en este repositorio es exactamente esto. Un método para aprovechar el modelo de lenguaje para SED.
Para aprovechar las estructuras temporales mencionadas anteriormente, utilizamos la técnica de forzamiento del maestro [1]. El forzamiento del maestro es el acondicionamiento de la entrada a un RNN con las actividades de eventos de sonido en el paso de tiempo anterior. Eso es,
¿Dónde está la salida del RNN en el paso de tiempo T , está la entrada al RNN (desde una capa anterior) y en el paso de tiempo T , y son las actividades de los eventos de sonido en el paso de tiempo T-1 ?
Si como se usa los valores de verdad de tierra, el RNN no será robusto para los casos en que no es una actividad de clase correcta. Por ejemplo, en el proceso de prueba donde no hay valores de verdad terrestre.
Si como se usa las predicciones del clasificador, el RNN tendrá dificultades para aprender cualquier dependencia de los eventos de sonido, porque durante la capacitación (y especialmente al comienzo del proceso de capacitación) se alimentará de actividades de clase incorrectas.
Para abordar los dos anteriores, empleamos la técnica de muestreo programada [2]. Es decir, al comienzo de la capacitación que usamos como valores de verdad de tierra. A medida que avanza la capacitación y el clasificador aprende a predecir actividades de clase cada vez más correctas, empleamos gradualmente las predicciones del clasificador como.
[1] RJ Williams y D. Zipser, "Un algoritmo de aprendizaje para ejecutar continuamente redes neuronales totalmente recurrentes", Neural Computation, vol. 1, no. 2, págs. 270–280, junio de 1989.
[2] S. Bengio, O. Vinyals, N. Jaitly y N. Shazeer, "Muestreo programado para la predicción de secuencia con redes neuronales recurrentes", en Actas de la 28ª Conferencia Internacional sobre Sistemas de Procesamiento de Información Neural, Volumen 1, Ser. NIPS'15. Cambridge, MA, EE. UU.: MIT Press, 2015, pp. 1171–1179. En línea. Disponible: http://dl.acm.org/citation.cfm?id=2969239.2969370
Para comenzar a usar nuestro proyecto, debe:
Use Python 3.6. El código en este repositorio se prueba y funciona con Python 3.6. Probablemente, usar otras versiones de Python 3.x estará bien, pero tenga en cuenta que este código es para Python 3.6.
Configure las dependencias utilizando los archivos pip (PIP_Requirements.txt) o conda (Conda_Rquirements.txt). Navegue con su terminal dentro del directorio raíz del proyecto (es decir, el directorio que se crea después de clonar este repositorio) y luego emite el comando adecuado en el terminal:
pip : $ pip install -r requirements/pip_requirements.txtconda , puede emitir el comando $ conda install --yes --file requirements/conda_requirements.txtDescargue los datos de audio. Puede descargar los tres conjuntos de datos de audio desde:
Tut-Sed Synthetic 2016 DataSet está disponible desde aquí.
Descargue los archivos de audio (es decir, el audio 1/5, audio 2/5, ..., audio 5/5), haga su extracción de funciones y siga las instrucciones en la sección de configuración de datos.
El Tut Sound Events 2016 está disponible desde aquí.
Descargue los archivos de audio, haga su extracción de funciones y siga las instrucciones en la sección Configuración de datos.
El evento Tut Sound 2017 está disponible desde aquí
Descargue los archivos de audio, haga su extracción de funciones y siga las instrucciones en la sección Configuración de datos.
Ahora el proyecto está configurado y puede usarlo con los datos que obtuvo del paso 3.
Puede usar SEDLM directamente para sus datos, o puede verificar el código y adoptar el SEDLM en su tarea SED, o repetir el proceso descrito en nuestro documento.
El código SEDLM se basa en Pytorch, versión 1.1.0.
En el formulario actual, se especifican diferentes variables del código en un archivo YAML, manteniendo todas las configuraciones para el código. Todos los archivos YAML están en el directorio settings , y la función de carga YAML busca en el directorio settings para archivos YAML. En general, puede alterar los valores de la configuración en el archivo YAML y luego ejecutar el código.
Los datos deben estar en el directorio data .
Si desea utilizar los cargadores de datos existentes, debe organizarse sus datos de manera específica. En primer lugar, debe tener diferentes archivos para funciones de entrada y valores de destino. Por ejemplo, input_features.npy y target_values.npy . Luego, dependiendo del conjunto de datos que usará, debe tener sus datos en diferentes directorios. Eso es:
Tutsed Synthetic 2016.
Los datos deben estar en un directorio llamado synthetic , en el directorio data . Es decir, data/synthetic . Luego, los archivos para los datos de capacitación, validación y prueba deben estar en un directorio diferente. Eso es:
data/synthetic/trainingdata/synthetic/validationdata/synthetic/testingDebe tener diferentes archivos numpy para las características de entrada y los valores de destino. Puede especificar el nombre de cada uno de los archivos de entrada o destino en el archivo de configuración YAML. Por ejemplo, los archivos de capacitación deben ser como:
data/synthetic/training/input_features.npydata/synthetic/training/target_values.npyEl código cargará los archivos Numpy y los usará para entrenar el método SEDLM. Sin embargo, puede asegurarse de que las características de entrada y los valores de destino se ordenan correctamente. Es decir, el primer elemento en las características de entrada corresponde al primer elemento en los valores de destino.
Tut Life Real 2016
Los datos deben estar en un directorio llamado real_life_2016 , en el directorio data . Es decir, data/real_life_2016 . Luego, los archivos para cada uno de los pliegues deben estar en un directorio diferente. Eso es:
data/real_life_2016/fold_1data/real_life_2016/fold_2data/real_life_2016/fold_3data/real_life_2016/fold_4Debe tener diferentes archivos de encopulaciones para las características de entrada y los valores de destino, y para la capacitación y prueba de cada pliegue. Dado que hay múltiples archivos por escena y por pliegue, no puede tener todas las características en una matriz Numpy. Por lo tanto, debe tener todos los datos en una lista y serializar (es decir, almacenar en disco) esa lista utilizando el paquete Pickle. Además, hay archivos para capacitación y pruebas en cada redil.
Por conveniencia, SEDLM usa automáticamente un pre-fijo para los nombres de los archivos. Es decir, agrega automáticamente "tren" y "prueba" al nombre del archivo especificado.
Puede especificar el nombre de cada uno de los archivos de entrada o destino en el archivo de configuración YAML. Por ejemplo, los archivos deben ser como:
input_features.ptarget_values.pLuego, el código SEDLM buscará los archivos adecuados y cada pliegue. Por ejemplo, para el plegamiento 1 y la escena en casa, se buscarán los siguientes archivos:
data/real_life_2016/home/fold_1/train_input_features.pdata/real_life_2016/home/fold_1/train_target_values.pdata/real_life_2016/home/fold_1/test_input_features.pdata/real_life_2016/home/fold_1/test_target_values.pEl código cargará los archivos de encurtido y los usará para entrenar el método SEDLM. Sin embargo, puede asegurarse de que las características de entrada y los valores de destino se ordenan correctamente. Es decir, el primer elemento en las características de entrada corresponde al primer elemento en los valores de destino.
Tut Life Real 2017
Los datos deben estar en un directorio llamado real_life_2017 , en el directorio data . Es decir, data/real_life_2017 . Luego, los archivos para cada uno de los pliegues deben estar en un directorio diferente. Eso es:
data/real_life_2017/fold_1data/real_life_2017/fold_2data/real_life_2017/fold_3data/real_life_2017/fold_4Debe tener diferentes archivos de encopulaciones para las características de entrada y los valores de destino, y para la capacitación y prueba de cada pliegue. Dado que hay varios archivos por pliegue, no puede tener todas las características en una matriz Numpy. Por lo tanto, debe tener todos los datos en una lista y serializar (es decir, almacenar en disco) esa lista utilizando el paquete Pickle. Además, hay archivos para capacitación y pruebas en cada redil.
Por conveniencia, SEDLM usa automáticamente un pre-fijo para los nombres de los archivos. Es decir, agrega automáticamente "tren" y "prueba" al nombre del archivo especificado.
Puede especificar el nombre de cada uno de los archivos de entrada o destino en el archivo de configuración YAML. Por ejemplo, los archivos deben ser como:
input_features.ptarget_values.pLuego, el código SEDLM buscará los archivos adecuados y cada pliegue. Por ejemplo, para Fold 1, se buscarán los siguientes archivos:
data/real_life_2017/fold_1/train_input_features.pdata/real_life_2017/fold_1/train_target_values.pdata/real_life_2017/fold_1/test_input_features.pdata/real_life_2017/fold_1/test_target_values.pEl código cargará los archivos de encurtido y los usará para entrenar el método SEDLM. Sin embargo, puede asegurarse de que las características de entrada y los valores de destino se ordenan correctamente. Es decir, el primer elemento en las características de entrada corresponde al primer elemento en los valores de destino.
Los hiper-parámetros se pueden ajustar desde los archivos de configuración YAML. Los hiper-parametros disponibles para el ajuste son:
Puede ejecutar el sistema usando un script bash. Un ejemplo de tal script son los archivos:
example_bash_script_baseline.sh , que ejecuta la configuración de línea de base para el SEDLMexample_bash_script_tf.sh , que ejecuta el SEDLM con el conjunto de datos Tut Real Life 2017.