You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化基于神经网络的羽毛球击球声时间戳提取模型?

羽毛球击球音频识别模型优化问题

我试图从羽毛球比赛的源音频文件中识别选手击球的时刻,已为时间戳标注了正样本(击球声)和负样本(无击球声:如解说/观众声等)标签,具体如下:

shot_timestamps = [0,6.5,8, 11, 18.5, 23, 27, 29, 32, 37, 43.5, 47.5, 52, 55.5, 63, 66, 68, 72, 75, 79, 94.5, 96, 99, 105, 122, 115, 118.5, 122, 126, 130.5, 134, 140, 144, 147, 154, 158, 164, 174.5, 183, 186, 190, 199, 238, 250, 253, 261, 267, 269, 270, 274] 
shot_labels = ['no', 'yes', 'yes', 'yes', 'yes', 'yes', 'no', 'no', 'no', 'no', 'yes', 'yes', 'yes', 'yes', 'yes', 'no', 'no','no','no', 'no', 'yes', 'yes', 'no', 'no', 'yes', 'yes', 'yes', 'yes', 'yes', 'yes', 'yes', 'no', 'no', 'no', 'no', 'yes', 'no', 'yes', 'no', 'no', 'no', 'yes', 'no', 'yes', 'yes', 'no', 'no', 'yes', 'yes', 'no'] 

我围绕这些时间戳截取了1秒的音频片段,代码如下:

import math
from scipy.io import wavfile

rate, source = wavfile.read(source) 
def get_audio_snippets(shot_timestamps): 

    shot_snippets = []  # 存储所有时间戳对应的音频片段

    for timestamp in shot_timestamps: 
        start = math.ceil(timestamp*rate)
        end = math.ceil((timestamp + 1)*rate)
        if start >= source.shape[0]: 
            start = source.shape[0] - 1

        if end >= source.shape[0]: 
            end = source.shape[0] - 1  

        shot_snippets.append(source[start:end]) 
        
    return shot_snippets

随后将这些片段转换为频谱图输入模型,但模型未有效学习,准确率仅约50%。请问该如何优化此模型?

补充信息:

  • 有对应的羽毛球比赛音频文件、详细的击球时刻标注文件及完整代码仓库
  • 已在Data Science Stack Exchange发布相关提问

优化建议

一、数据层面优化

  1. 调整样本截取窗口
    击球声是短促脉冲声,1秒窗口过长会混入大量无关噪音,稀释正样本特征。建议将窗口缩小至200-500ms,并以标注的击球时刻为中心截取,比如取timestamp-0.1到timestamp+0.4的片段,确保核心击球声落在窗口内。
  2. 平衡正负样本分布
    先统计现有shot_labels中正负样本数量,若比例失衡(如1:3以上),可通过以下方式解决:
    • 过采样正样本:复制或对正样本做数据增强
    • 欠采样负样本:随机剔除部分无击球片段
    • 使用加权损失函数:给正样本分配更高权重
  3. 扩充数据集
    现有样本量仅50左右,不足以支撑模型学习。可:
    • 从同场比赛其他无击球时段截取更多负样本
    • 加入其他羽毛球比赛的音频标注数据
    • 对正样本做数据增强:添加轻微噪声、小幅度调整音量/时间拉伸(不改变击球声核心特征)
  4. 优化标注质量
    核查现有标注准确性:确认标注为yes的时段确实包含击球声,no的时段无击球声;改用新标注的完整击球时刻文件替换现有样本,提升标注精准度。

二、特征提取优化

  1. 更换频谱图类型
    普通频谱图难以捕捉击球声瞬态特征,建议改用梅尔频谱图(Mel Spectrogram),它更贴合人耳感知,能有效区分击球声与背景噪音;或使用梅尔频率倒谱系数(MFCC),提取更紧凑的声音特征。
  2. 补充时域特征
    除频谱特征外,可提取时域特征辅助识别:比如音频片段的峰值能量(击球声峰值远高于背景声)、过零率(击球声过零率有明显差异)。
  3. 标准化特征
    对提取的频谱图或特征做标准化处理(减去均值、除以标准差),确保不同样本特征分布一致,避免模型被异常值干扰。

三、模型结构与训练优化

  1. 选择适配模型
    • 若用CNN处理频谱图,优先选择轻量型结构(如MobileNet、简单卷积+池化+全连接层),避免过拟合
    • 尝试RNN/LSTM捕捉音频时序特征,注意控制模型复杂度
    • 采用预训练音频模型(如AudioSet预训练模型)做迁移学习,利用通用音频特征再针对击球任务微调
  2. 调整训练参数
    • 降低学习率:从1e-4开始尝试,避免因学习率过高导致训练震荡
    • 配合早停机制:适当增加训练轮次,当验证集准确率不再提升时停止训练,防止过拟合
    • 使用Adam优化器:相比SGD更适合音频分类任务,收敛速度更快
  3. 加入正则化
    • 在全连接层添加Dropout层(比例0.2-0.5),随机丢弃部分神经元防止过拟合
    • 使用L2正则化,限制模型权重大小,避免过度依赖单一特征
  4. 优化评估方式
    按8:2比例划分训练集与验证集,不要用测试集调整训练。评估时除准确率外,还要关注精确率、召回率、F1值,避免因正负样本失衡导致准确率失真。

内容的提问来源于stack exchange,提问作者ChaoS Adm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:20:21