随着AI技术的发展,人工智能已在各行业中不断被应用。
正常新生儿一天至少哭3小时,但不同的哭声代表不同涵义,一般家长可能听不出来。
对婴儿来说,哭声是一种通讯的方式,一个非常有限的,但类似成年人进行交流的方式。它也是一种生物报警器,向外界传达着婴儿生理和心理的需求。基于啼哭声声波携带的信息,婴儿的身体状况才能被确定,疾病才能被检测出来。因此,有效辨识啼哭声,成功地将婴儿啼哭声“翻译”成“成人语言”,让我们能够读懂啼哭声的含义,有重大的实际意义。
数据集一共6类
每类随机抽取13个样本做为测试集总共73。
安装环境
!pip install matplotlib
!pip install soundfile
!pip install librosa
!pip install torchlibrosa
!conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch
!apt-get update
!apt-get install libsndfile1
环境可以直接使用配置好的免费云gpu
我用的是pytorch1.6 gpu 2080ti
把剩下数据集集按照85:15随机切割
#用audio预训练提取特征 ,转存hdf5
DATASET_DIR="audio"
WORKSPACE="panns_transfer"
!python panns_transfer/utils/features.py pack_audio_files_to_hdf5 --dataset_dir=$DATASET_DIR --workspace=$WORKSPACE
#训练并保存loss小于0.1 valacc>0.62
PRETRAINED_CHECKPOINT_PATH2="Cnn14_16k_mAP=0.438.pth"
CUDA_VISIBLE_DEVICES=0
!python panns_transfer/pytorch/main2.py train --dataset_dir=$DATASET_DIR --workspace=$WORKSPACE --holdout_fold=1 --model_type="Transfer_Cnn14" --pretrained_checkpoint_path=$PRETRAINED_CHECKPOINT_PATH --loss_type=clip_nll --augmentation='mixup' --learning_rate=1e-4 --batch_size=16 --resume_iteration=0 --stop_iteration=7000 --cuda
训练并保存loss小于0.1,acc大于0.62的权重。
得到最好的三个模型
验证集acc最高为0.647
开始批量测试
import argparse
import librosa
import matplotlib.pyplot as plt
import torch
from utilities import create_folder, get_filename
from models import *
from pytorch_utils import move_data_to_device
import config
mel_bins = config.mel_bins
fmin = config.fmin
fmax = config.fmax
freeze_base=False
audiodir_path="audiotest/"
checkpoint_path="valacc_0.647_Valloss0.099_5155_iterations.pth"
model_type="Transfer_Cnn14"
#CUDA_VISIBLE_DEVICES=0
device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')
#classes_num = config.classes_num
classes_num = 6
labels = config.labels
with torch.no_grad():
model.eval()
batch_output_dict = model(waveform, None)
clipwise_output = batch_output_dict['clipwise_output'].data.cpu().numpy()[0]
"""(classes_num,)"""
sorted_indexes = np.argsort(clipwise_output)[::-1]
#print(sorted_indexes)
# Print audio tagging top probabilities
label=labels[sorted_indexes[0]]
if list88[pic].find(label, 0, len(list88[pic]))>= 0:
true_num=true_num+1
print("预测分类为"+label)
print('预测正确')
else:
print("预测分类为"+label)
print('预测错误')
total_num=total_num+1
print('----------------------------------')
print("Test-set classification accuracy: {0:.2%}".format(true_num/total_num))
测试结果