Datawhale AI 夏令营-Task2

夏令营2期-deepfake音视频-baseline

Task2:从baseline入门深度学习

一. 主要任务和相关知识点

主要任务

  实现一个基于深度学习的Deepfake检测模型。通过实践项目,我们将从数据集准备、模型训练到性能评估,全方位了解如何利用深度学习技术检测Deepfake内容。

     1. 精读baseline代码,学习特征抽取进阶

     2. 学习音频和视频特征提取技术。

     3 .提取并分析关键帧和其他相关特征。

相关知识点

  1. 预训练模型的使用:学习如何加载和微调预训练模型,以加快训练过程并提高模型性能。

  2. 性能评估与优化:如何通过准确率等指标评估模型性能,并进行相应的优化。.........

  3. 音视频特征抽取进阶

  4. 深度学习模型训练流程:掌握模型训练步骤,包括前向传播、损失计算、反向传播和参数更新。    

实操代码地址:https://www.kaggle.com/finlay/deepfake-ffdv-ch2​​​​​​

二. 预训练模型

模型训练的步骤

通常包括以下几个阶段:

1. 前向传播(Forward Propagation):将输入数据通过网络模型的前向传输过程,计算出模型的输出结果。

2. 损失计算(Loss Computation):计算模型输出结果与真实标签之间的差距,通常使用损失函数来度量模型的预测与真实值之间的差异。

3. 反向传播(Backward Propagation):根据损失函数的计算结果,通过链式法则计算模型中每个参数对损失的梯度。通过反向传播算法,将梯度从输出层向输入层传递。

4. 参数更新(Parameter Update):利用计算得到的梯度信息,通过优化算法来更新模型的参数。常见的优化算法包括随机梯度下降(SGD)、Adam、RMSprop等。

以上四个步骤循环迭代进行,直到达到训练停止的条件,如达到指定的迭代次数或损失函数收敛等。通过这些步骤,模型可以根据训练数据不断调整参数,最终使得模型的预测结果更加准确。

加载和微调预训练模型

在深度学习中,加载和微调预训练模型可以帮助加快训练过程并提高模型性能。以下是在deepfake中加载和微调预训练模型的一般步骤:

1. 选择预训练模型:选择一个在相似任务上表现良好的预训练模型。例如,在人脸合成任务中,可以选择在大规模人脸识别或人脸验证任务上训练的预训练模型。

2. 加载预训练模型:通过加载模型的权重文件或使用现有的深度学习库,加载预训练模型的架构和参数。

3. 冻结一部分层:为了保留预训练模型的有用特征表示,可以选择冻结一部分层。冻结层的参数将被保留为预训练模型的权重,不会在微调过程中进行更新。

4. 替换输出层:根据任务需求,将预训练模型的输出层替换为新的适应目标任务的层。例如,在deepfake中,可以将输出层替换为合成图像的生成器或鉴别器。

5. 定义损失函数:根据任务需求,定义适当的损失函数来衡量预测结果与真实结果之间的差异。在deepfake中,损失函数可以包括像素级对比损失、结构相似性损失、感知损失等。

6. 进行微调训练:使用目标任务的训练数据集对微调后的模型进行训练。可以使用梯度下降等优化算法,通过最小化损失函数来更新模型的参数。在训练过程中,可以根据需要调整学习率、批量大小等超参数。

7. 评估模型性能:使用验证集或测试集评估微调后的模型性能。可以计算准确率、损失值等指标来评估模型的性能。

8. 进行调优:根据模型的性能表现和需求,可以调整微调过程中的各个步骤。例如,可以尝试不同的预训练模型、微调层的数量、损失函数等。

通过加载和微调预训练模型,可以利用预训练模型在大规模数据上学习到的特征表示,加速训练过程并提高模型性能,尤其在数据量有限的任务中尤为有用。然而,对于deepfake这样敏感的任务,还需要特别注意模型的使用方式和潜在风险。

三. 性能评估与优化

对于deepfake的预训练模型,性能评估和优化是非常重要的。以下是一些常见的性能评估和优化方法:

1. 数据集:选择适当的数据集对模型进行训练和测试。数据集应包含各种不同类型的人脸图像,并且应包括真实的和合成的深度伪造图像。

2. 损失函数:选择合适的损失函数来衡量模型的性能。常用的损失函数包括L1和L2损失函数,以及GAN的生成器和判别器损失函数。

3. 训练策略:优化训练策略以提高模型性能。例如,可以使用迭代的训练方法,每次迭代都从真实图像和伪造图像中随机选择一定数量的样本。

4. 数据增强:使用数据增强技术来扩充数据集,提高模型的泛化能力。例如,可以使用随机翻转、旋转、缩放和裁剪等技术来生成更多的数据样本。

5. 模型架构:选择合适的模型架构来提高性能。常用的架构包括深度卷积神经网络(CNN)和生成对抗网络(GAN)。

6. 超参数调优:调整模型的超参数以找到最佳配置。常用的超参数包括学习率、批量大小和训练步数等。

7. 模型评估:使用适当的评估指标来评估模型性能。常用的指标包括准确率、精确率、召回率和F1分数等。

8. 对抗攻击防御:考虑对抗攻击,采取相应的防御措施。例如,可以使用对抗训练方法来增加模型的鲁棒性。

总之,对于deepfake的预训练模型,性能评估和优化是一个动态的过程,需要综合考虑数据、损失函数、训练策略、模型架构、超参数、评估指标和对抗攻击等因素。通过不断优化和调整这些因素,可以提高模型的性能

四. 音频和视频特征提取

深度学习中常用的技术,用于从音频和视频中提取有用的特征信息。在deepfake中,音频和视频特征提取技术可以用于分析和识别虚假视频中的潜在问题。

音频特征提取技术主要包括以下几种方法:

1. 短时傅里叶变换(STFT):将音频信号分解为时频域表示,提取其频谱特征。

2. 梅尔频率倒谱系数(MFCC):通过模拟人耳的感知特性,提取音频信号的频谱包络特征。

3. 波形特征:利用音频信号的波形形状信息,如振幅、频率等。

视频特征提取技术主要包括以下几种方法:

1. 光流特征:通过分析视频中相邻帧之间的像素变化,提取出视频中物体的运动信息。

2. 帧间差分特征:计算相邻帧之间像素的差异,从而捕捉到视频中物体的变化。

3. 卷积神经网络(CNN):利用深度学习模型学习视频中的空间和时间特征,可以提取出更高级别的语义信息。

在deepfake中,音频和视频特征提取技术可以用于检测和对抗虚假视频。例如,可以通过分析视频中物体的运动轨迹和频谱信息,识别出可能存在的合成痕迹或不连贯性。同时,也可以应用深度学习模型对真实和虚假视频进行分类和对比,从而对抗deepfake技术的滥用。

五. 深度学习与机器学习

多类分类与激活函数的选择

1. 深度学习是什么?

  深度学习(Deep Learning)是机器学习的一个分支,它使用神经网络模拟人脑的学习方式,从大量数据中自动学习和提取特征,进行预测和决策。深度学习依赖于多层神经网络,每一层神经元接受前一层神经元的输出,并通过权重和激活函数进行计算,传递到下一层神经元。

                                                生物学模型

                                                          数学模型

为了增强神经元表达能力而引用激活函数

2. 深度学习适用

深度学习适用于许多领域,包括但不限于:

1. 图像识别和计算机视觉:深度学习在图像分类、目标检测、人脸识别等方面具有卓越的表现。它可以对大量的图像数据进行训练,从而实现高精度的图像识别任务。

2. 自然语言处理:深度学习在语言模型、文本分类、机器翻译等任务上取得了很大的成功。通过深度学习模型,可以对大规模文本数据进行建模和处理,从而实现自然语言的理解和生成。

3. 语音识别:深度学习在语音识别方面有着显著的应用。通过深度神经网络,可以实现对语音信号的特征提取和建模,从而实现高准确率的语音识别任务。

4. 推荐系统:深度学习可以用于构建个性化推荐系统,通过对用户行为数据的学习,可以实现准确的推荐结果。

5. 强化学习:深度学习在强化学习领域也有着广泛的应用。通过深度神经网络的建模和优化,可以实现智能体在复杂环境中的学习和决策。

总的来说,深度学习适用于大数据和复杂问题的场景,能够通过对大规模数据的学习和优化,实现高精度的模式识别和决策。

3. 机器学习是什么

  机器学习是一种人工智能的分支,它通过让计算机系统从数据中自动学习和改进,而不需要明确地编程指令。机器学习的目标是让计算机可以通过经验的积累而自动改善性能,并从数据中发现规律和模式。通过使用算法和模型来分析和解释数据,机器学习可以识别模式、进行预测和决策,从而实现人工智能的功能。常见的机器学习应用包括图像和语音识别、自然语言处理、推荐系统、预测分析等。

  机器学习算法通过数据进行训练,识别数据中的模式和规律,并在此基础上进行预测或决策。随着数据量的增加和算法的优化,机器学习模型能够不断改进其性能,使其在特定任务上表现得越来越好。

  1. 神经网络

  • 非线性假设:通过非线性激活函数来建模数据中的复杂非线性关系。

  • 层次化假设:通过分层结构来学习数据的不同层次和抽象

        2. 决策树

  • 独立性假设:每个特征在决策过程中是相互独立的。

  • 连续性假设:特征可以是连续的或离散的,算法通过找到最佳分割点来构建树。

        3. 线性回归

  • 线性假设:假设输入特征与输出标签之间存在线性关系。

  • 独立同分布(IID):训练集中的数据是独立且同分布的。

下面是一个简单的机器学习程序,使用Python编写,用于训练一个线性回归模型来预测房价:

import numpy as np
from sklearn.linear_model import LinearRegression

# 输入特征(房间数)
X = np.array([[1], [2], [3], [4], [5]])

# 目标变量(房价)
y = np.array([100, 200, 300, 400, 500])

# 创建线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X, y)

# 预测新样本
new_X = np.array([[6]])
predicted_y = model.predict(new_X)

print("预测房价:", predicted_y)
 

  这个程序使用了scikit-learn库中的线性回归模型。首先,我们定义了输入特征X和目标变量y。然后,创建了一个线性回归模型,并使用fit函数对模型进行训练。最后,我们用新的输入特征new_X来预测房价,并打印出预测结果。

  请注意,这只是一个简单的示例程序,实际的机器学习程序可能会涉及更复杂的数据预处理、特征工程、模型选择和评估等步骤。

决策树是一种基于树状结构的机器学习算法,常用于分类和回归问题。它通过构建一棵树来进行决策和预测。树的每个内部节点表示一个特征或属性,每个叶节点表示一个类别或数值。决策树的构建过程是递归的,从根节点开始,根据特征进行划分,直到达到叶节点。

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 构建决策树分类器
clf = DecisionTreeClassifier()

# 训练模型
clf.fit(X_train, y_train)

# 进行预测
y_pred = clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
 

以上代码使用sklearn库中的DecisionTreeClassifier实现了一个决策树分类器。首先加载数据集,然后将数据集划分为训练集和测试集。接着构建决策树分类器,训练模型,并对测试集进行预测。最后计算准确率来评估模型的性能,是一个简单的决策树分类器的示例。

4. 机器学习与深度学习的关系

 机器学习和深度学习是两个相关但不完全相同的概念。

机器学习是一种通过让机器从数据中学习,以便做出预测或决策的方法。它涵盖了一系列算法和技术,包括监督学习、无监督学习和强化学习等。机器学习的目标是让机器具备从经验中学习和适应的能力,而不需要显式地编程。

深度学习是机器学习的一种特殊形式,它是一种基于人工神经网络的机器学习方法。深度学习的核心是深层神经网络,它由许多层组成,每一层都有许多节点。这些层之间的连接权重通过大量的数据进行训练和调整,以便网络能够从数据中提取和学习更加复杂的特征和模式。

可以将它们的关系表示为一个嵌套的关系图。机器学习是一个更加广泛的概念,包括许多不同的方法和技术。而深度学习是机器学习的一个子集,是其中的一种特定方法,利用深层神经网络进行学习和推理。深度学习可以被视为机器学习的一种进化,它在许多领域取得了重大突破和应用。

传统的机器学习算法往往需要人工设计特征,这一过程称为特征工程,既费时又需要专业知识。深度学习能够自动从原始数据中学习到有用的特征,减少了对人工特征工程的需求。深度学习模型可以实现端到端的学习,即直接从原始输入数据到最终输出结果(如分类标签或翻译文本)的学习,而无需中间步骤。

六. 深度学习与迁移学习

1. 迁移学习是什么

  迁移学习是一种机器学习技术,它将已在一个任务上学到的知识(如模型参数、特征表示等)应用到另一个相关任务上。这种技术特别有用,因为它允许模型在数据稀缺的情况下也能表现出色。通常使用在大规模数据集上预训练的模型作为起点,例如在ImageNet数据集上预训练的卷积神经网络(CNN)。在预训练模型的基础上,使用少量标记数据对模型进行微调,以适应新任务。

import torch
import torch.nn as nn
import torchvision.models as models

# 加载预训练模型
pretrained_model = models.resnet50(pretrained=True)

# 冻结参数
for param in pretrained_model.parameters():
    param.requires_grad = False

# 替换最后的全连接层
num_features = pretrained_model.fc.in_features
pretrained_model.fc = nn.Linear(num_features, num_classes)

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(pretrained_model.fc.parameters(), lr=learning_rate)

# 迁移学习训练过程
for epoch in range(num_epochs):
    for i, (images, labels) in enumerate(train_loader):
        images = images.to(device)
        labels = labels.to(device)
        
        # 前向传播
        outputs = pretrained_model(images)
        loss = criterion(outputs, labels)
        
        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        
        if (i+1) % 100 == 0:
            print(f'Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{total_steps}], Loss: {loss.item():.4f}')
 

以上代码是一个典型的迁移学习示例,使用预训练的ResNet-50模型进行特征提取,并替换最后的全连接层用于分类特定的类别数。在训练过程中,我们冻结了预训练模型的参数,只训练了新添加的全连接层。然后使用交叉熵损失函数计算损失,使用随机梯度下降(SGD)优化器进行参数更新。

注意:示例代码中的参数和数据加载部分需要根据实际情况进行调整,包括类别数、学习率、数据加载器等。还需要根据你的具体任务进行其他的必要调整,比如添加验证和测试步骤,保存和加载模型等。

2. 迁移学习实现方法

以下是一些常用的迁移学习实现方法:

1. 特征提取:将预训练的模型作为特征提取器,将原始数据输入模型中,去掉最后一层分类器,将输出作为新任务的特征输入到新的分类器中。目的是为了利用已有的知识来提高新任务的性能。同时,需要注意的是,不同任务之间的差异也可能会导致迁移学习的效果不佳,因此选择合适的迁移学习方法和特征提取策略非常重要

2. 微调:在预训练的模型基础上进行微调,即对预训练模型的部分或所有参数进行重新训练,并在新任务上进行fine-tuning。

3. 网络融合:将预训练的模型与新任务的模型进行融合,例如采用模型的中间层作为新任务的输入,或将预训练模型的输出与新任务的模型输出进行融合。

4. 多任务学习:同时训练多个相关任务,将它们的知识进行共享,以提高每个任务的性能。

5. 领域自适应:通过对数据进行领域适应,使得模型可以适应新数据的特征分布,从而在新任务上获得更好的性能。

以上是一些常用的迁移学习实现方法,具体选择哪种方法取决于任务的具体要求和数据的特点。

3. 迁移学习与深度学习的关系

  1. 特征迁移:深度学习的核心是学习到高级的特征表示,而迁移学习可以将这些学到的特征迁移到其他任务中,以提供更好的初始特征表示。例如,可以使用在大规模图像分类任务上预训练的深度神经网络模型作为图像特征提取器,在其他图像任务中使用这些提取到的特征。

  2. 知识迁移:深度学习的模型通常需要大量的标注数据来进行训练,而迁移学习可以利用已有的标注数据和模型知识来加速模型的训练过程。例如,可以使用在一个任务上训练的深度学习模型的参数作为另一个任务的初始参数,以提高学习效率。

  3. 领域适应:深度学习模型在训练和测试数据之间存在分布差异时,性能往往会下降。迁移学习可以通过在源领域上学习到的知识和经验来适应目标领域,以提高模型的泛化能力。例如,可以使用源领域上的训练数据来训练深度学习模型,再使用目标领域上的少量标注数据进行微调。

总之,迁移学习可以利用深度学习的特征学习能力和模型表达能力,提高深度学习模型的学习效率、泛化能力和适应性。同时,深度学习也可以为迁移学习提供更强大和灵活的模型工具。因此,迁移学习与深度学习之间存在着紧密的关系,可以互相促进和补充。

七. 深度学习如何训练

梯度下降算法

梯度下降是一种优化算法,用于最小化函数。梯度下降算法基于这样一个原理:损失函数的梯度指向函数增长最快的方向。因此,如果我们希望减少损失函数的值,我们就需要沿着梯度的反方向调整模型的参数。这样,每次迭代都会使模型参数朝着减少损失的方向移动。在深度学习中,我们希望最小化损失函数,即模型预测值与真实值之间的差异。梯度是损失函数关于模型参数的导数,它指示了参数的调整方向,以减少损失函数的值。

    权重减少从而产生新的的输出

import numpy as np

# 定义线性回归模型
class LinearRegression:
    def __init__(self, learning_rate=0.01, num_iterations=1000):
        self.learning_rate = learning_rate
        self.num_iterations = num_iterations
        self.weights = None
        self.bias = None

    def fit(self, X, y):
        # 初始化参数
        num_samples, num_features = X.shape
        self.weights = np.zeros(num_features)
        self.bias = 0

        # 梯度下降迭代更新参数
        for _ in range(self.num_iterations):
            # 计算模型输出
            y_pred = np.dot(X, self.weights) + self.bias

            # 计算参数的梯度
            dw = (1/num_samples) * np.dot(X.T, (y_pred - y))
            db = (1/num_samples) * np.sum(y_pred - y)

            # 更新参数
            self.weights -= self.learning_rate * dw
            self.bias -= self.learning_rate * db

    def predict(self, X):
        y_pred = np.dot(X, self.weights) + self.bias
        return y_pred

# 生成样本数据
np.random.seed(1)
X = np.random.rand(100, 1)
y = 2 + 3 * X + np.random.randn(100, 1) * 0.2

# 创建线性回归模型并训练
model = LinearRegression()
model.fit(X, y)

# 进行预测
X_test = np.array([[0.2], [0.5], [0.8]])
y_pred = model.predict(X_test)

# 打印预测结果
print(y_pred)
 

以上代码实现了一个简单的线性回归模型,并使用梯度下降算法进行参数优化。首先生成100个随机样本作为训练数据,然后创建一个LinearRegression类的实例,调用fit方法对模型进行训练,最后使用predict方法进行预测。结果将打印出预测值。

八. 动手实践

解析程序

def train(train_loader, model, criterion, optimizer, epoch):

    # switch to train mode
    model.train() # eval()

    for i, (input, target) in enumerate(train_loader):
    
        input = input.cuda(non_blocking=True)
        target = target.cuda(non_blocking=True)

        # compute output
        output = model(input)
        loss = criterion(output, target)

        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

这段代码看起来是一个训练函数,用于训练神经网络模型。在这段代码中,主要包括以下步骤:

1. 将模型设置为训练模式:通过调用 `model.train()` 将模型设置为训练模式,这通常会启用训练中特定的层,如Dropout或Batch Normalization。
   
2. 遍历训练数据集:通过 `enumerate(train_loader)` 遍历训练数据集,其中 `train_loader` 是用于加载训练数据的数据加载器。在每个迭代中,从数据加载器中获取输入数据 `input` 和目标数据 `target`。

3. 数据移动到GPU:通过 `input.cuda(non_blocking=True)` 和 `target.cuda(non_blocking=True)` 将输入数据和目标数据移动到GPU上进行加速计算。

4. 前向传播:通过 `output = model(input)` 将输入数据输入到模型中进行前向传播,得到模型的输出结果。

5. 计算损失:通过 `loss = criterion(output, target)`  将两个值相互比较,计算模型输出和目标之间的损失值,`criterion` 是定义的损失函数。

6. “优化器”  梯度清零:通过 `optimizer.zero_grad()` 将优化器中的梯度清零,以避免梯度累积。

7. 反向传播和参数更新:通过 `loss.backward()` 进行反向传播计算梯度,然后通过 `optimizer.step()` 执行参数更新,即根据梯度更新模型参数。优化器再传播过程中更新权重

这段代码实现了神经网络模型的训练过程,包括了数据加载、前向传播、损失计算、反向传播和参数更新等步骤。接下来可以在训练循环中添加评估模型性能的代码,以及记录训练过程中的指标和可视化等功能,来完善训练过程。

九. 思考拓展

AlexNet

AlexNet是一种经典的卷积神经网络架构,由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton在2012年提出。它是第一个在ImageNet图像识别竞赛中取得显著优势的深度神经网络模型。

AlexNet采用了8个卷积层和3个全连接层,共计约6000万个参数。它对输入图像进行多层的卷积与池化操作,然后进行全连接层的分类。其中一些关键的设计特点包括:

1. 使用ReLU激活函数:相较于传统的Sigmoid函数,ReLU激活函数加速了模型的训练过程,提高了准确性。

2. 使用Dropout正则化:为了减少过拟合,AlexNet在全连接层中引入了Dropout层,随机丢弃部分神经元。

3. 使用数据增强:AlexNet使用了水平翻转、随机裁剪等数据增强技术,扩大了训练集的规模,提高了模型的泛化能力。

4. 使用GPU加速训练:为了处理大规模的图像数据,AlexNet首次使用了多个GPU来加速网络的训练过程。

AlexNet的提出对深度学习的发展有着深远的影响。它表明深度卷积神经网络可以在大规模图像识别任务上取得优秀的性能。随后的研究工作在AlexNet的基础上进一步改进,为现代的深度学习技术奠定了基础。

这就是AlexNet的关系图。它的核心思想是通过多层卷积和池化操作逐渐提取图像的特征,并通过全连接层将特征映射到类别。AlexNet的创新之处在于引入了ReLU激活函数、Dropout正则化和GPU计算等技术,大大提升了深度神经网络的性能

AlexNet的关系图描述解析·:

输入层:AlexNet的输入层接受图像数据作为输入。在ImageNet竞赛中,图像尺寸为227x227x3。

卷积层1:AlexNet的第一个卷积层由96个卷积核组成,每个卷积核的尺寸为11x11x3,步长为4。它将原始图像进行卷积运算,提取图像的低级特征。

池化层1:紧跟在卷积层1后面的是一个最大池化层,窗口大小为3x3,步长为2。它对卷积层的输出进行下采样,减少特征向量的维度。

卷积层2:第二个卷积层由256个卷积核组成,每个卷积核的尺寸为5x5x48,其中48是卷积层1输出的通道数。它进一步提取图像的中级特征。

池化层2:与卷积层2对应的是一个最大池化层,窗口大小为3x3,步长为2。它再次对卷积层的输出进行下采样。

卷积层3、4、5:接下来是三个卷积层,分别由384、384和256个卷积核组成,尺寸为3x3。它们进一步提取图像的高级特征。

池化层3:与卷积层5对应的是最后一个最大池化层,窗口大小为3x3,步长为2。

全连接层1:在提取了图像的特征之后,全连接层负责将特征映射到预定义的类别。它由4096个神经元组成。

全连接层2:与全连接层1对应的是第二个全连接层,也有4096个神经元。

输出层:最后一个全连接层的输出被送入softmax函数,得到一个概率分布,表示图像属于每个类别的概率。

特征提取

  • chroma_stft:是一种音频特征提取方法,用于计算音频信号中的音色(chroma)信息。chroma_stft是基于短时傅里叶变换(Short-Time Fourier Transform, STFT)的方法,它将音频信号分割成小的时间窗口,并对每个窗口进行傅里叶变换。然后,对于每个窗口,通过计算其频谱中各个音高(pitch)对应的幅度或能量,得到一个音色向量。这样,就可以得到整个音频信号的音色序列,用于音频分析、音乐信息检索等应用。chroma_stft通常用于音频信号的音乐分析,例如音乐旋律识别、音乐风格分类等。

  • rms:是一种常用的音频特征提取方法,用于分析音频信号的能量。RMS代表均方根(Root Mean Square),它表示信号的平方平均值的开平方是一种简单且有效的方法,用于提取音频信号的能量特征,可以方便地应用于多种音频相关的任务。

  • spectral_centroid:是一种常用的音频特征,用于描述音频信号的频谱集中程度。它可以被用于音频分类、音频分割以及声音检索等应用中

  • spectral_bandwidth:是一种音频特征,用于描述信号频谱的宽度。它是频谱中能量分布的度量,表示频谱在频率上的波动范围。频谱带宽可以用来衡量音频信号的音调或频率范围。提取spectral bandwidth特征的方法是通过计算频谱中每个频率的带宽,并将其加权求和。常见的方法是使用一阶差分算法或线性回归拟合法来估计频谱的斜率,从而计算频谱带宽。

  • rolloff:用于描述音频信号的频谱衰减情况。它是通过计算频谱中能量超过总能量的某个阈值的频率,来度量频谱的高频衰减速度。

  • zero_crossing_rate:(过零率)是音频信号分析中常用的特征之一,它反映了信号波形的快速变化程度。通常用于音频信号的语音和音乐特征提取,也常用于音频信号的分类、识别和分割等任务

  • mfcc:梅尔频率倒谱系数(Mel-frequency cepstral coefficients,MFCC)是一种常用于语音信号分析和语音识别的特征提取方法。

十. 附言

部分内容引用:‍​‍‍⁠⁠​​​‍‬​​​​⁠​‍​​​‬‍​​⁠‌​​⁠‌⁠​​​‍‬⁠‌‌​​‬​‬Task2:从baseline入门深度学习 - 飞书云文档 (feishu.cn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值