En este repositorio se encuentra el código implementado durante el desarrollo del trabajo de grado Audio inteligente: reducción de ruido de fondo con inteligencia artificial, y también se encuentran los modelos entrenados y los resultados obtenidos. A continuación se describe el proyecto asi como los contenidos del repositorio, y cómo utilizar el código para entrenar los modelos y/o utilizarlos.
- 📦TG_Audio_Inteligente #Repositorio
- 📋config.json #Configuracion para Dataset, Perceptron y Evaluation
- 📂Dataset #Carpeta con codigos para crear el conjunto de datos
- 📃div_audio.py #Codigo para dividir audios originales
- 📃mix_audio.py #Código para mezclar audios de voz y ruido
- 📃dataset_list.py #Código para porcionar los datos
- 📋train_list_dataset.txt
- 📋validation_list_dataset.txt
- 📋test_list_dataset.txt
- 📂Perceptron #Carpeta con los códigos del primer modelo
- 📃generator.py #Generador de datos para el modelo 1
- 📃model.py #Arquitectura del modelo 1
- 📃train.py #Entrenamiento del modelo 1
- 📃enhance.py #Uso del modelo 1
- 📂CRN #Carpeta con los códigos del segundo modelo
- 📂config #Configuraciones para el segundo modelo
- 📂train
- 📋baseline_model.json5 #Conficuración para entrenamiento del modelo 2
- 📂inference
- 📋basic.json5 #Configuración para uso del modelo 2
- 📂train
- 📃inference.py #Código para usar el modelo 2
- 📃train.py #Código para entrenar el modelo 2
- 📂config #Configuraciones para el segundo modelo
- 📂Evaluation #Código para evaluar los modelos
- 📃evaluation_metrics.py #Definición de las medidas
- 📃evaluate.py #Evaluacion de los modelos
Se deben tener los siguientes módulos de python en el ambiente:
Tensorflow
PyTorch
librosa
numpy
pandas
matplotlib
json5
tqdm
scikit-learn
scipy
pesq
pystoi
torchinfo
En caso de ya tener los audios de voz y de ruido con longitud de 5s y con el mismo muestreo ejecutar solamente el código dataset_list.py.
Se debe modificar el archivo config.json y colocar las rutas de las carpetas y metadatos de los audios antes de ejecutar cualquiera de los códigos en la carpeta Dataset. Una vez modificado el archivo config.json, ejecutar de la siguiente manera:
python3 Dataset/dataset_list.py
Al correr dataset_list.py, la particion del conjunto de datos es de 70/15/15 (train/test/val) por defecto.
Para entrenar el modelo 1 se debe modificar el archivo config.json con la ruta de los audios de mezcla (voz+ruido) y de voz, y adicionalmente, se debe especificar el número de epochs y el número de neuronas por capa:
"train.py": {
"mixed_path": "...ruta de audios con mezcla",
"clean_path": "...ruta de audios de voz",
"dataset_csv": "...ruta de los metadatos del conjunto/nombre_del_archivo.csv",
"layers": [100,100,50],
"epochs": 20
}
Para entrenar el modelo ejecutar de la siguiente manera:
python3 Perceptron/train.py
El modelo 2 se basa en el código desarrollado por haoxiangsnr . Para un mejor entendimiento de este, revisar el repositorio A-Convolutional-Recurrent-Neural-Network-for-Real-Time-Speech-Enhancement Así como la publicación A Convolutional Recurrent Neural Network for Real-Time Speech Enhancement
Antes de entrenar el segundo modelo se debe cambiar el parámetro "root_dir" por la ruta al directorio donde se tiene o se guardará el modelo, los parámetros "dataset_list" por la ruta y nombre del archivo de texto que contiene la lista con los audios para el entrenamiento y validación respectivamente dentro de "train_dataset" y "validation_dataset". Adicionalmente se puede cambiar el número de epochs modificando el valor del parámetro "epochs" dentro de "trainer".
Para entrenar el segundo modelo:
python3 CRN/train.py -C CRN/config/train/baseline_model.json5
o entrar a la carpeta CRN y ejecutar el archivo train.py:
cd CRN
python3 train.py -C config/train/baseline_model.json5
Para usar el modelo 1 (perceptron) en el conjunto de datos de evaluacion usar el código enhance.py de la carpeta Perceptron. Antes de ejecutar, configurar los parámetros de "enhance.py" en el archivo de config.json:
"enhance.py":{
"mixed_path": "...ruta de los audios de mezclas",
"clean_path": "...ruta de los audios de voz",
"dataset_csv": "...ruta de los datos del conjunto de datos/nombre_archivo.csv",
"perceptron_path": "...ruta de la carpeta con el modelo",
"perceptron_enhancement_path": "...ruta para guardar audios y datos"
},
Luego ejecutar el código:
python3 Perceptron/enhance.py
Para usar el modelo 2 (CRN) en el conjunto de datos de evaluacion se debe configurar la ruta del conjunto de datos (carpeta o archivo con extension .txt) en los parámetros de "dataset" en el archivo basic.json5 de la carpeta CRN/config/inference. Luego ejecutar el código inference.py especificando el archivo de configuración, la ruta del directorio del modelo, y la ruta del directorio de destino,
desde la base:
python3 CRN/inference.py \
-C CRN/config/inference/basic.json5 \
-cp Model2/baseline_model/checkpoints/latest_model.tar \
-dist Output_crn/enhanced
o desde la carpeta CRN:
cd CRN
python3 inference.py \
-C config/inference/basic.json5 \
-cp ./Model2/baseline_model/checkpoints/latest_model.tar \
-dist ../Output_crn/enhanced
Para evaluar los modelos configurar los parametros de "evaluate.py" en el archivo config.json:
"evaluate.py":{
"mixed_path": "...ruta de los de las mezclas",
"clean_path": "...ruta de los audios de voz",
"dataset_csv": "...ruta de los datos del conjunto de audio/nombre_archivo.csv",
"perceptron_enhancement_path": "...ruta del modelo 1",
"crn_enhancement_path": "...ruta del modelo 2",
"results_csv_path": "...ruta para guardar el archivo con la tabla de resultados"
}
Luego, ejecutar el código evaluate.py:
python3 Evaluation.evaluate.py