代码解读 | Hybrid Transformers for Music Source Separation[03]

一、背景

        接着上一篇代码解读 | Hybrid Transformers for Music Source Separation[02]文章,继续对Hybrid Transformer Demucs 代码进行解读。

        解读目标:明确数据从进入算法,在算法内部,以及在算法输出 这三个阶段中 数据的大小是如何变换的。例如:算法输入数据大小为[BatchSize,Channels,Length],算法内部的数据大小为[BatchSize,Channels,Freqency,Time],算法输出的数据大小为[BatchSize,Channels,Length]。

二、解读

        在htdemucs.py文件中编写测试代码print,把每个模块输出的数据大小打印出来。控制台打印的结果如下所示。例如:时域[1, 2, 258602] 可以理解成[BatchSize,Channels,Time];频域[1, 4, 2048, 253]可以理解成[BatchSize,Channels,Frequency,Time]

        再具体一些,不管是时域还是频域第一个维度数字1表示批大小(Batch_Size)第二个数字表示通道数(Channels)频域第三个数字可以理解成频域维度属性(对应模型图中的freq)频域第四个数字理解成时间维度属性(对应模型图中的time steps)时域的第三个数字可以理解成时间维度属性(对应模型图中的time steps)。根据这个先知条件,我们再和算法模型图中的Cin、Cout、xxx freq对比便一目了然了。

算法输入 torch.Size([1, 2, 258602])
频域输入(STFT输出) torch.Size([1, 4, 2048, 253])
频域输入(归一化) torch.Size([1, 4, 2048, 253])
时域输入(归一化) torch.Size([1, 2, 258602])
时域第1个编码层输出torch.Size([1, 48, 64651])
频域第1个编码层输出torch.Size([1, 48, 512, 253])
时域第2个编码层输出torch.Size([1, 96, 16163])
频域第2个编码层输出torch.Size([1, 96, 128, 253])
时域第3个编码层输出torch.Size([1, 192, 4041])
频域第3个编码层输出torch.Size([1, 192, 32, 253])
时域第4个编码层输出torch.Size([1, 384, 1011])
频域第4个编码层输出torch.Size([1, 384, 8, 253])
crosstransformer输出频域:torch.Size([1, 384, 8, 253]),时域:torch.Size([1, 384, 1011])
频域第1个解码层输出torch.Size([1, 192, 32, 253])
时域第1个解码层输出torch.Size([1, 192, 4041])
频域第2个解码层输出torch.Size([1, 96, 128, 253])
时域第2个解码层输出torch.Size([1, 96, 16163])
频域第3个解码层输出torch.Size([1, 48, 512, 253])
时域第3个解码层输出torch.Size([1, 48, 64651])
频域第4个解码层输出torch.Size([1, 16, 2048, 253])
时域第4个解码层输出torch.Size([1, 8, 258602])
频域输出(STFT输出) torch.Size([1, 4, 2, 258602])
时域输出(归一化) torch.Size([1, 4, 2, 258602])
算法输出(时域输出+频域输出) torch.Size([1, 4, 2, 258602])

     总结:打印出每个环节的数据大小,这样就能和算法模型图中的参数对应上。至于各个模块更具体的细节还需仔细阅读源码进行理解。


        感谢阅读,最近开始写公众号(分享好用的AI工具),欢迎大家一起见证我的成长(桂圆学AI)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pyqt 进度条QProgressBar

pyqt 进度条 QProgressBar效果代码 QProgressBar 在 PyQt 应用程序中,进度条(通常称为 QProgressBar)是一个用于显示任务进度的控件。它可以显示一个水平或垂直的条形图,条形图的长度会随着进度的增加而增加。 QProgressBar 的主…

分布式数据库架构:从单实例到分布式,开发人员需及早掌握?

现在互联网应用已经普及,数据量不断增大。对淘宝、美团、百度等互联网业务来说,传统单实例数据库很难支撑其性能和存储的要求,所以分布式架构得到了很大发展。而开发人员、项目经理,一定要认识到数据库技术正在经历一场较大的变革,及早掌握好分布式架构设计,帮助公司从古…

小米开放式耳机怎么样?倍思、西圣、小米开放式耳机测评比较!

作为一名热衷于分享真实体验的博主,我在过去两年开始接触开放式耳机,并因此受到许多朋友的咨询,询问哪款开放式耳机更加出色。为了找出最佳的开放式耳机,我进行了深入的调查和实地测试。我发现高价并不总是代表高质量,…

C++基础与深度解析 | 类与面向对象编程 | 数据成员 | 成员函数 | 访问限定符与友元 | 构造、析构成员函数 | 字面值类、成员指针与bind交互

文章目录 一、结构体与对象聚合二、成员函数(方法)三、访问限定符与友元1.访问限定符2.友元(慎用) 四、构造、析构与复制成员函数1.构造函数2.析构函数3.补充 五、字面值类,成员指针与bind交互1.字面值类2.成员指针3.b…

大小堆运用巧解数据流的中位数

​​​​​​​​​​ 一、思路 我们将所有数据平分成两份,前面那一部分用小堆来存,后面的部分用大堆来存,这样我们就能立刻拿到中间位置的值。 如果是奇数个数字,那么我们就将把中间值放在前面的大堆里,所以会有两种…

Windows取证分析 | 如何最大程度提升分析效率

本文由安全研究人员Amr Ashraf发表于Cyber5w的官方博客,研究人员在本文中讨论了如何对可疑设备中的内存映像进行安全调查,并利用了Volatility 3和MemProcFS来最大程度提升Windows取证分析的工作效率。 介绍 内存取证是任何计算机取证分析人员的必备技能…

如何给 MySQL 表和列授予权限?(官方版)

目录 授予表级别权限 授予列级别权限 如何给MySQL表和列授予权限是MySQL数据操作中非常重要的步骤,也是企业级使用MySQL数据库的起步点,以下分别参照官方教程整理的MySQL数据库的权限操作。 以下的语句可以直接使用MySQL的命令行进行操作(如何…

3038. 相同分数的最大操作数目 I

题目 给你一个整数数组 nums,如果 nums 至少包含 2 个元素,你可以执行以下操作: 选择 nums 中的前两个元素并将它们删除。一次操作的分数是被删除元素的和。 在确保所有操作分数相同的前提下,请你求出最多能进行多少次操作。 …

排序数组 ---- 分治-归并

题目链接 题目: 分析: 用这道题来回顾一下归并排序的思想找到中间结点, 将数组分成两半, 运用递归的思想, 继续对一半进行分半, 分到最后剩一个元素, 再将左右数组合并, 合并两个有序数组, 是先分解, 再合并的过程在合并两个有序数组时, 需要一个额外的数组来记录, 为了避免每…

Unity DOTS技术(九) BufferElement动态缓冲区组件

文章目录 一.简介二.例子 一.简介 在之前的学习中我们发现Entity不能挂载相同的组件的. 当我们需要用相同的组件时则可以使用.IBufferElementData接口 动态缓冲区组件来实现 二.例子 1.创建IBufferElementData组件 using Unity.Entities; using UnityEngine; //[GenerateAu…

three.js官方案例(animation / multiple)webgl_animation_multiple.html学习笔记

目录 ​编辑 1 骨架工具(SkeletonUtils) 1.1 clone方法 2 蒙皮网格(SkinnedMesh) 3 自测 4 webgl_animation_multiple.html全部脚本 1 骨架工具(SkeletonUtils) 用于操控 Skeleton、 SkinnedMesh、和…

网络编程: 高级IO与多路转接select,poll,epoll的使用与介绍

网络编程: 高级IO与多路转接select,poll,epoll的使用与介绍 前言一.五种IO模型1.IO的本质2.五种IO模型1.五种IO模型2.同步IO与异步IO3.IO效率 二.非阻塞IO1.系统调用介绍2.验证代码 三.select多路转接1.系统调用接口2.写代码 : 基于select的TCP服务器1.封装的Socket接口2.开始写…

1-Maven-settings配置

1-Maven-settings配置 整理下Maven工具的使用。 【本地仓库、私服、镜像仓库、远程仓库、中央仓库】 本文基于阅读其他博客和对公司Maven配置的学习整理出来的。希望通过本此学习能对Maven有个整体性的掌控。 顺序:profile.repository > pom文件中的repository &…

asp.net core使用httpclient

主要讲解常见的get请求和post请求 GET var client new HttpClient(); //3秒钟不响应就超时 client.TimeoutTimeSpan.FromSeconds(3); using HttpResponseMessage response await client.GetAsync("todos/3"); var jsonResponse await response.Content.ReadAsSt…

postman测试接口(springboot+shiro)带token也不通的解决方案

前几天做项目遇到个问题,在系统可以正常使用的接口,拿postman带token访问时候确一直不通(后台返回需要登录的提示信息) 但是我明明加了token的呀 打断点发现 subject.isAuthenticated()false 查资料猜测可能是因为请求的安全上…

【WP】猿人学_16_js逆向_window蜜罐

https://match.yuanrenxue.cn/match/16 抓包分析 荷载一个加密参数,一个时间戳 时间: 2024-06-07 15:52:31时间戳: 1717746751 1717746751000时间戳和现在对得上,直接生成就行。 追栈 追栈找m的生成位置。 点进去打断点,重新点击其他…

C语言基础——函数

ʕ • ᴥ • ʔ づ♡ど 🎉 欢迎点赞支持🎉 个人主页:励志不掉头发的内向程序员; 专栏主页:C语言基础; 文章目录 前言 一、函数的概念 二、库函数 2.1 库函数和头文件 2.2 库函数的使用/…

出售iPhone前的必做步骤:完全擦除个人数据的方法

当您准备在闲鱼上转售旧 iPhone、将其捐赠、送给朋友或通过 Apple 回收之前,您可能会选择执行“恢复”操作来擦除您的数据。但请注意,这一操作并不能真正删除设备中的数据。被“删除”或“格式化”的数据实际上仍存在于 iPhone 中,只是被系统…

SpringBoot+Vue在线文档管理系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 系统角色对应功能 员工管理员 系统功能截图

《精通ChatGPT:从入门到大师的Prompt指南》第1章:认识ChatGPT

第1章:认识ChatGPT 1.1 ChatGPT是什么 ChatGPT,全称为Chat Generative Pre-trained Transformer,是由OpenAI开发的一种先进的自然语言处理模型。它利用了深度学习中的一种技术——Transformer架构,来生成类人文本。ChatGPT通过对…