题目简介
笔者个人的毕业设计课题如下:
简介:使用预训练的Diffusion Model图像生成模型生成图像,将这些生成的图像作为扩充训练集加入到2D目标检测器、2D图像分类器的训练过程。深度学习是数据驱动的,随着数据量的扩充,能够提高检测器、分类器的鲁棒性、准确性。
建议的baseline:
分类:ResNet
检测:YOLO
可以看到,给的题目难度还是比较轻松的;本次毕设的全过程会以周为单位采用博客的形式记录下来。
什么是数据增强
对机器学习尤其是深度学习有一定了解的朋友都会听过类似的说法【DL的首要驱动力是数据】。
也即不管是CV还是NLP,所有的深度学习方法都因其原理从而对数据有着强依赖性,按照笔者个人跑过的模型来看,数据本身的多少和好坏很多时候基本直接决定结果的好坏;在模型上提出方法和改进固然重要,但是大数据训练权值的神经网络思想决定了深度学习的模型一定对数据本身保有高要求。
此时另一个问题就会应运而生,假如在我们某项实际运用的项目中,我们并没有足够的数据量支撑模型的训练该怎么办?实际上,对于数据量来说,永远是不够的;所谓多多益善在这里是再合适不过的形容。
那么我们需要某种方法扩充数据量,但是对于深度学习来说,与其大费周章的寻找新的数据,不如充分利用已有的数据进行数据增强。以图片为例,由于数据化,对于算法来说,以下两张图片实际上是截然不同的样本。
所以这里可以就可以理解什么是数据增强,为什么需要数据增强。
数据增强有一些简单常用的方法,碍于篇幅不在这里展开解释
- 翻转
- 旋转
- 位移
- 裁剪
- 缩放
- 变形
- 噪声
- 模糊
- 擦除
- 填充
这里补充一点,在21-22年间各大顶刊热门的GAN对抗网络在数据增强上也有广泛应用
数据增强的主要效果有如下三点
- 避免过拟合
- 提升模型鲁棒性,降低模型对图像的敏感度
- 增加训练数据,提高模型泛化能力
在有些时候,数据增强同样可以被称作“上采样”,这时的上采样指的是针对数据集整体而言。
什么是Diffusion Model
Diffusion model是Encoder-Decoder架构的生成模型,分为扩散阶段和逆扩散阶段。 在扩散阶段,通过不断对原始数据添加噪声,使数据从原始分布变为我们期望的分布,例如通过不断添加高斯噪声将原始数据分布变为正态分布。 在逆扩散阶段,使用神经网络将数据从正态分布恢复到原始数据分布。 它的优点是正态分布上的每个点都是真实数据的映射,模型具有更好的可解释性。 缺点是迭代采样速度慢,导致模型训练和预测效率低。
上面展示的就是Diffusion Model的一些应用方面。事实上,从15年提出到现在,Diffusion Model的进展已经又不少了,那么如何将其应用在数据增强上呢?
让我们回到Diffusion Model本身来,Diffusion Model (扩散模型) 是一类生成模型, 和 VAE (Variational Autoencoder, 变分自动编码器), GAN (Generative Adversarial Network, 生成对抗网络) 等生成网络不同的是, 扩散模型在前向阶段对图像逐步施加噪声, 直至图像被破坏变成完全的高斯噪声, 然后在逆向阶段学习从高斯噪声还原为原始图像的过程。
具体来说, 前向阶段在原始图像 x0上逐步增加噪声, 每一步得到的图像 xt只和上一步的结果 xt-1相关, 直至第t步的图像xt变为纯高斯噪声. 前向阶段图示如下:
而逆向阶段则是不断去除噪声的过程, 首先给定高斯噪声xt通过逐步去噪, 直至最终将原图像x0给恢复出来, 逆向阶段图示如下:
模型训练完成后, 只要给定高斯随机噪声, 就可以生成一张从未见过的图像。基于次,我们可以用Diffusion Model的方法进行数据增强。
这部分的数学推导比较繁杂,笔者因为个人原因暂时没有办法在这里展开推到,后续会进行相关内容的补全,这里推荐一篇同站博客,在笔者阅读论文时该篇论文清晰的论述给与了本人极大的帮助。
https://blog.csdn.net/sunningzhzh/article/details/125118688
简单谈谈yolo和ResNet
题目的要求中有提到可以分别使用扩散模型对图像的分类和检测任务各自进行数据增强来进行效果的对比。
而这两者都是老熟人了,本篇博客就不花大篇幅进行从头到尾的介绍。
yolo
首先是yolo,yolo是图像的目标检测算法模型,目标检测,也叫目标提取,是一种基于目标几何和统计特征的图像分割。它将目标的分割和识别合二为一,其准确性和实时性是整个系统的一项重要能力。目标检测不仅要用算法判断图片中物品的分类, 还要在图片中标记出它的位置, 用边框或红色方框把物品圈起来, 这就是目标检测问题,如下图所示
yolo则是目标检测中singlestage类型的泰山北斗,从v1问世后经过版本的迭代改进,在算法的运行速度上已经是二维目标检测中最快的一批了;也正是印证了它的名称那样,你只需要看一眼;充分发挥了单阶段算法丢弃精修阶段而轻便的优势,而现版本的yolo本身也具有极好的工业集成性;本身已经具备了大量的完善方法。
上图展示的是经典的v1结构
上图展示的是较新的v5版本s形的网络结构。
ResNet
接着是更入门的ResNet,先来简单聊聊什么是图像分类,最简单的CV任务之一。图像分类是计算机视觉中最基础的一个任务,也是几乎所有的基准模型进行比较的任务。图像分类顾名思义就是一个模式分类问题,它的目标是将不同的图像,划分到不同的类别,实现最小的分类误差。总体来说,对于单标签的图像分类问题,它可以分为跨物种语义级别的图像分类,子类细粒度图像分类,以及实例级图像分类三大类别,下图就是一个简单的图像分类示例。
ResNet 网络则是在 2015年 由微软实验室中的何凯明等人提出,获当年ImageNet竞赛中分类任务第一名,目标检测第一名。获得COCO数据集中目标检测第一名,图像分割第一名,也是图像分类任务的集大成者,从今天去看,也是某种程度上给图像分类这个任务画上了一个漂亮的终止符的模型。其精髓在于在当时看来极深的网络结构,残差的应用以解决梯度爆炸和dropout加速训练。
经典的resnet网络结构,相信也是很多人接触CV时第一个学习的完整网络结构。
总结兼拆解
在上面简要的介绍后,本次毕设的理论部分所需要具备的东西就已经搭建完毕了;我们需要做的其实是很简单的实验对比,先跑通训练完Diffusion Model的模型,并在resnet和yolo中分别接上数据集读取部分的接口,各两次训练以上对比生成模型的精度,即可验证本次毕设的题意。