Python深度学习婴儿啼哭声分类识别,测试集准确率67.5%

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-28 15:22   291   0

随着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))
      
    

测试结果

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP