0


Datawhale AI 夏令营——从零入门CV图像竞赛(Deepfake攻防) & Task2

从baseline入门深度学习

深度学习

概念

深度学习(Deep Learning)是一种机器学习方法,通过使用人工神经网络(Artificial Neural Networks)来模拟人脑的功能,从而进行数据处理和模式识别。它属于人工智能(Artificial Intelligence)的一个分支,主要通过大量数据和计算资源来训练多层神经网络模型,以实现复杂的任务。

主要特点

1. 多层次结构:深度学习模型通常具有多层结构,包括输入层、隐藏层和输出层。隐藏层的数量可以非常多,这也是“深度”的含义。
2. 自动特征提取:深度学习能够自动从数据中提取特征,而不需要人为地进行特征工程。
3. 大数据处理:深度学习通常需要大量的数据进行训练,数据越多,模型的性能通常越好。
4. 高计算需求:深度学习的训练过程通常需要高性能的计算资源,如GPU(图形处理单元)和TPU(张量处理单元)。

相关应用

1. 计算机视觉:图像识别、物体检测、图像生成等。
2. 自然语言处理:机器翻译、文本生成、情感分析等。
3. 语音识别:语音转文字、语音合成等。
4. 推荐系统:个性化推荐、广告投放等。 自动驾驶:环境感知、路径规划等。

常用框架

1. TensorFlow:由Google开发的开源深度学习框架,广泛用于研究和生产。
2. PyTorch:由Facebook开发的深度学习框架,以其灵活性和易用性受到研究人员的青睐。
3. Keras:一个高级神经网络API,能够运行在TensorFlow、CNTK和Theano之上,易于快速原型设计。

模型训练过程

1. 数据准备

  • 数据收集:获取大量高质量的数据,可以是公开数据集、自行收集或企业内部数据。
  • 数据清洗:处理缺失数据、异常值、重复数据等,确保数据的质量。
  • 数据预处理:标准化、归一化、图像增强等,使数据适合输入到神经网络中。

2. 模型构建

  • 选择模型:根据任务选择合适的模型结构,如卷积神经网络(CNN)用于图像处理,循环神经网络(RNN)或其变体(如LSTM、GRU)用于序列数据处理。
  • 定义层次结构:设置输入层、隐藏层(若干层)和输出层,选择激活函数(如ReLU、Sigmoid、Tanh)和损失函数。

3. 模型编译

  • 选择优化器:常用的优化器包括随机梯度下降(SGD)、Adam、RMSprop等,用于调整模型的权重以最小化损失函数。
  • 设置学习率:学习率决定了每次更新模型权重的步长,是一个非常关键的超参数。

4. 模型训练

  • 前向传播:输入数据经过各层神经网络的计算,生成预测输出。
  • 计算损失:将预测输出与真实标签进行比较,计算损失(误差)。
  • 反向传播:通过梯度下降算法,根据损失对模型参数进行更新,从输出层反向传播到输入层。
  • 迭代更新:以上步骤重复进行,通常通过批量(Batch)处理来提高效率。整个数据集的一个完整遍历称为一个Epoch。

5. 模型评估

  • 验证集评估:在训练过程中,使用一部分数据作为验证集,实时评估模型性能,以防止过拟合。
  • 性能指标: 分类任务常使用准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1-score、混淆矩阵(Confusion Matrix)、AUC(Area Under the ROC Curve)等指标评估模型; 回归任务常使用均方误差(Mean Squared Error, MSE)、均方根误差(Root Mean Squared Error, RMSE)、平均绝对误差(Mean Absolute Error, MAE)、平均绝对百分比误差(Mean Absolute Percentage Error, MAPE)、R² or Coefficient of Determination等指标评估模型。

6. 模型调优

  • 超参数调整:通过调整学习率、批量大小、网络层数、每层神经元数量等超参数来优化模型。
  • 正则化:使用L1/L2正则化、Dropout等方法来防止过拟合。
  • 交叉验证:使用交叉验证方法进一步验证模型的稳定性和性能。

7. 模型部署

  • 保存模型:将训练好的模型保存为文件,以便在实际应用中加载和使用。
  • 部署到生产环境:将模型部署到服务器、云平台或嵌入式设备上,用于实际任务,如预测、分类等。

迁移学习

概念

迁移学习(Transfer Learning)是一种机器学习技术,它利用在源任务(source task)上学习到的知识来帮助或改善目标任务(target task)的学习效果。

微调过程
在下面代码中,timm.create_model(‘resnet18’, pretrained=True, num_classes=2)表示加载一个预训练的ResNet-18模型,其中pretrained=True表示使用在ImageNet数据集上预训练的权重,num_classes=2表示模型的输出层被修改为有2个类别的输出,以适应二分类任务(例如区分真实和Deepfake图像)。通过model = model.cuda()将模型移动到GPU上进行加速。

import timm 
model = timm.create_model('resnet18', pretrained=True, num_classes=2)
model = model.cuda()

关键点

  • 源任务与目标任务:源任务通常是指那些拥有大量数据,并且已经被充分研究的任务,而目标任务则通常是数据稀缺或研究不充分的任务。
  • 知识迁移:迁移学习试图将源任务上学到的知识(如模型参数、特征表示、模型结构等)迁移到目标任务上。
  • 相关性:源任务和目标任务之间通常有一定的关联性,这使得知识迁移成为可能。

优势

  • 数据效率:在数据稀缺的情况下,迁移学习可以显著减少对大量标注数据的依赖。
  • 训练效率:通过利用预训练模型,可以减少训练所需的时间和计算资源。
  • 性能提升:在目标任务上,迁移学习可以带来比从头开始训练更好的性能。
  • 模型泛化:迁移学习可以帮助模型更好地泛化到新的领域或任务。

场景

  • 计算机视觉:使用在大型图像数据集(如ImageNet)上预训练的卷积神经网络(CNN)作为特征提取器,用于图像分类、目标检测等任务。
  • 自然语言处理:利用预训练的语言模型(如BERT、GPT等)来改进文本分类、情感分析、机器翻译等任务。
  • 语音识别:将预训练的语音模型应用于新的语言或方言的识别任务。

方法

  • 特征迁移:直接使用在源任务上学习到的特征表示。
  • 参数迁移:将源任务的模型参数作为目标任务模型的初始化参数。
  • 模型适配:调整预训练模型以适应目标任务,可能包括微调(fine-tuning)等操作。
  • 多任务学习:同时学习多个任务,使得知识可以在这些任务之间共享。

常见的图像分类网络

1.LeNet-5:

由Yann LeCun等人在1998年提出。最早的卷积神经网络之一,主要用于手写数字识别(如MNIST数据集)。

LeNet中的数据流。输入是手写数字,输出为10种可能结果的概率。
LeNet 的简化版

2.AlexNet:

由Alex Krizhevsky等人在2012年提出。通过在ImageNet竞赛中获得巨大成功而闻名,是深度学习在计算机视觉领域突破的标志。

从LeNet(左)到AlexNet(右)

3.VGG:

由Oxford大学的Visual Geometry Group (VGG)在2014年提出。VGG16和VGG19是其常用版本,特点是使用3x3的卷积核和深层网络结构。

从AlexNet到VGG,它们本质上都是块设计。

4.NIN(Network In Network)

由Min Lin等人在2013年提出。主要创新在于引入了称为“网络中的网络”的概念,其主要思想是在每个卷积层之后使用多层感知机(MLP)进行非线性映射,以增强模型的表达能力。

对比 VGG 和 NiN 及它们的块之间主要架构差异。

5.GoogLeNet/Inception:

由Google团队在2014年提出。引入了Inception模块,通过不同大小的卷积核和池化操作来捕捉不同尺度的特征。

Inception块的架构
GoogLeNet架构

6.ResNet(Residual Network):

由微软研究院的Kaiming He等人在2015年提出。引入了残差块(Residual Block)结构,解决了深层网络训练中的梯度消失问题,常用版本包括ResNet50、ResNet101和ResNet152。

一个正常块(左图)和一个残差块(右图)
包含以及不包含1X1卷积层的残差块
ResNet-18 架构

7.DenseNet(Densely Connected Convolutional Networks):

由Gao Huang等人在2016年提出。特点是每一层都连接到前面所有层,通过密集连接减少了梯度消失,并提高了特征复用,在某种程度上是ResNet的逻辑扩展。
任意函数 𝑓(𝑥) 在 0 处的泰勒展开式可以表示为:


同样,ResNet将函数展开为:


ResNet将 𝑓 分解为两部分:一个简单的线性项和一个复杂的非线性项。

ResNet(左)与 DenseNet(右)在跨层连接上的主要区别:使用相加和使用连结。
ResNet和DenseNet的关键区别在于,DenseNet的输出是连接,而不是如ResNet的简单相加。 因此,在应用越来越复杂的函数序列后,执行从 𝑥 到其展开式的映射:


最后,将这些展开式结合到多层感知机中,再次减少特征的数量。DenseNet这个名字由变量之间的“稠密连接”而得来,最后一层与之前的所有层紧密相连,如下图所示:

稠密连接
稠密网络主要由2部分构成:稠密块(dense block)和过渡层(transition layer)。 前者定义如何连接输入和输出,而后者则控制通道数量,使其不会太复杂。

DenseNet
注:相关图片来源于Dive into Deep Learning《动手学深度学习》


本文转载自: https://blog.csdn.net/qq_43653758/article/details/140506426
版权归原作者 FreyDeng1984 所有, 如有侵权,请联系我们删除。

“Datawhale AI 夏令营——从零入门CV图像竞赛(Deepfake攻防) & Task2”的评论:

还没有评论