当前位置: 首页 > news >正文

使用神经网络中的卷积核生成语谱图

主题思想:

  1. 正交基函数, sin,cos 是通过网络训练得到的参数。
    使用一维卷积核直接对于原始音频,进行卷积生成语谱图;

  2. 使用一维卷积核生成语谱图特征,

不同于以往的方式,正是因为这些正交基函数是通过卷积核构成的,
由于这些卷积核的参数可训练的, 这表明这些正交基是通过训练得来的, 理论上是更容易适配好当前的任务, 因为人为定义好的统一的正交基函数,并不能自适应在当前的任务上, 每个任务肯定自身对应的最好的正交基函数,通过训练得来,应该是恰当的;

但是,目前笔者实现下来, 这种方式占用显存特别高。

基本上需要 24G 显存以上, 多卡并行,比较好实验;

1. 使用神经网络生成语谱图的方式

现有的工作如下:

1.1 nnAudio

nnAudio: An on-the-fly GPU Audio to Spectrogram Conversion Toolbox Using 1D Convolutional Neural Networks

https://github.com/KinWaiCheuk/nnAudio;

1.2 PANN

PANNs: Large-Scale Pretrained Audio Neural Networks for Audio Pattern Recognition:

开源实现:
https://github.com/qiuqiangkong/audioset_tagging_cnn;

此外,  使用torch 完成 librosa 函数中的功能, 同样是基于神经网络;

公布使用torch 中一维卷积核的方式生成语谱图的仓库:

https://github.com/qiuqiangkong/torchlibrosa;

2. torch 实现的部分函数

下面实现的函数, 在上面的开源仓库中也实现了, 建议可以多阅读源码:

2.1 torch 实现power to db

#note: 使用torch 实现 librosa 中的power_to_db 函数:
# 将功率谱,转换为对数谱;
def power_to_db_torch(S, ref=1.0, amin=1e-10, top_db=80.0):#note 使用断言的方式,对输入检查;if amin <= 0:raise ValueError(" amin  must be strictly  positive")S = torch.tensor(S)amin = torch.tensor([amin])ref = torch.abs(torch.tensor([ref]))log_spec = 10.0 * torch.log10(torch.max(S, amin))log_spec -= 10.0  * torch.log10(torch.max(amin, ref))if top_db is not None:if top_db < 0:raise  ValueError("top_db  must be  non-negative")max_val = torch.max(log_spec)log_spec = torch.maximum(log_spec, max_val - top_db)return  log_spec

2.2 torch 实现 cv2.resize()

# 使用torch, 对单通道的图片进行缩放,
import  torch.nn.functional as F
def  resize_torch_single_channel(img, resz, method="bilinear"):# 函数的输入,需要使用断言,检查维度是否匹配assert  len(img.shape) == 2,  "Input image should have 2 dimension: (height, width)"#  检查张量是否是张量形式if not  isinstance(img, torch.Tensor):img = torch.tensor(img).float()# 增加batch, channel 维度img = img.unsqueeze(0).unsqueeze(0)height, width = img.shape[2], img.shape[3]new_height, new_width = int(height * resz), int(width * resz)if method == " bilinear":mode = 'bilinear'else:raise  ValueError("Unsupported  interpolation  method")# 使用torch 自带的线性插值函数, 完成尺寸的缩放resized_img = F.interpolate(img, size=(new_height, new_width),mode=mode, align_corners=False)# remove the  batch and  channel  dimresized_img = resized_img.squeeze(0).squeeze(0)return  resized_imgimport torch
import torch.nn.functional as Fdef resize_torch(img, resz, method='bilinear'):assert len(img.shape) == 3, "Input image should have 3 dimensions: (height, width, channels)"# Convert the input image to a PyTorch tensor if it's not already oneif not isinstance(img, torch.Tensor):img = torch.tensor(img).float()# Convert the image from HWC to CHW formatimg = img.permute(2, 0, 1).unsqueeze(0)  # Add an extra dimension for the batchheight, width = img.shape[2], img.shape[3]new_height, new_width = int(height * resz), int(width * resz)if method == 'bilinear':mode = 'bilinear'else:raise ValueError("Unsupported interpolation method")# Resize the image using torch.nn.functional.interpolateresized_img = F.interpolate(img, size=(new_height, new_width), mode=mode, align_corners=False)# Convert the image back to HWC format and remove the batch dimensionresized_img = resized_img.squeeze(0).permute(1, 2, 0)return resized_img
http://www.lryc.cn/news/45197.html

相关文章:

  • 文章五:Python 网络爬虫实战:使用 Beautiful Soup 和 Requests 抓取网页数据
  • 【大数据之Hadoop】八、MapReduce之序列化
  • Python网络爬虫之Selenium详解
  • 中睿天下受邀出席电促会第五次会员代表大会
  • Chat GPT:软件测试人员的危机?
  • 【Redis】高可用:Redis的主从复制是怎么实现的?
  • WLAN速度突然变慢
  • GDAL python教程基础篇(12)GDAL和 Pillow 的互操作
  • 快速学习java路线建议
  • 【MySQL】深入浅出主从复制数据同步原理
  • Redis持久化和高可用
  • 【数据结构】第六站:栈和队列
  • python matplotlib 绘制训练曲线 综合示例——平滑处理、图题设置、图例设置、字体大小、线条样式、颜色设置
  • vue-element-plus-admin整合后端实战——实现系统登录、缓存用户数据、实现动态路由
  • Shader Graph2-PBR介绍之表面属性(图解)
  • Java多线程编程,Thread类的基本用法讲解
  • TIA博途Wincc_多路复用变量的使用方法示例(实现多台相同设备参数的画面精简)
  • 关于console你不知道的那些事
  • Java设计模式-责任链模式
  • 顺序表设计循环队列
  • UEFI 基础教程 (十四) - 设置默认启动项为UEFI Shell
  • python编程:判断一个数是否是超级素数
  • 雷迪RD8200管线探测仪参数/管线仪使用方法/管线仪说明书
  • 会话共享保存到redis
  • python 曲线平滑处理——方法总结(Savitzky-Golay 滤波器、make_interp_spline插值法和convolve滑动平均滤波)
  • 小驰私房菜_10_camx Otp Dump
  • priority_queue(堆)干货归纳+用法示例
  • miniprogram-to-uniapp使用指南(各种小程序项目转换为uni-app项目)
  • BZOJ2720: [Violet 5]列队春游 【概率与期望】
  • 脉诊之脉象——平脉,常见病脉,七绝脉