【五一培训】Day 2
注:
1. 本次培训内容的记录将以“Topic”的方式来呈现,用于记录个人对知识点的理解。
2. 由于培训期间,作者受限于一些现实条件,本文的排版及图片等相关优化,需要过一段时间才能完成。
3. 关于老板点评的一些思考
你也是一只老鸟了,可以有更深的体会。
如何理解“更深的体会”,我觉得应该从以下四个方面入手:即 what,why,how,transfor,code。时刻多问这五点,将每一个关键的五点搞清楚,其掌握程度就能有所保障。另外,对于今天的回答,提醒了我,更要在如下几个方面深入学习。
(1)对原理的追根溯源:越往深处做,扎实基础带来的优势就越大。由于最开始是直接从python入手,很多原理实际上并没有搞清楚(引用现成封装好的功能),多数是泛泛而谈。这一点在今天的回答中也有体现,这是不应该的。
(2)落实到自己手头的工作中:将概念性的知识,理解后结合自己的工作来说明,这样更加能够体现对知识点的掌握程度。
Topic 1:可形变卷积
这个概念最早在 Deformable Convolutional Networks 中提出。
what:可变形卷积是指卷积核在每一个元素上额外增加了一个参数方向参数,这样卷积核就能在训练过程中扩展到很大的范围。
why:提高泛化能力。如何理解?
我们知道卷积核的目的是为了提取输入物的特征。我们传统的卷积核通常是固定尺寸、固定大小的(例如3x3,5x5,7x7.)。这种卷积核存在的最大问题就是,对于未知的变化适应性差,泛化能力不强。
卷积单元对输入的特征图在固定的位置进行采样;池化层不断减小着特征图的尺寸;RoI池化层产生空间位置受限的RoI。网络内部缺乏能够解决这个问题的模块,这会产生显著的问题,例如,同一CNN层的激活单元的感受野尺寸都相同,这对于编码位置信息的浅层神经网络并不可取,因为不同的位置可能对应有不同尺度或者不同形变的物体,这些层需要能够自动调整尺度或者感受野的方法。再比如,目标检测虽然效果很好但是都依赖于基于特征提取的边界框,这并不是最优的方法,尤其是对于非网格状的物体而言。
解决上述问题最直观的想法就是,我们的卷积核可以根据实际情况调整本身的形状,更好的提取输入的特征。
how:(这里给出总结要点,后续需要补充图片以及相关说明)
可变形卷积是在传统卷积的基础上,增加了调整卷积核的方向向量,使的卷积核的形态更贴近特征物。那么这个过程是如何实现的?下面我们详细说一下这个过程。
① 一开始,和正常的卷积神经网络一样,根据输入的图像,利用传统的卷积核提取特征图。
②然后把得到的特征图作为输入,对特征图再施加一个卷积层,这么做的目的是为了得到可变形卷积的变形的偏移量。
③偏移层是2N,是因为我们在平面上做平移,需要改变 x 值和 y 值两个方向。
④在训练的时候,用于生成输出特征的卷积核和用于生成偏移量的卷积核是同步学习的。其中偏移量的学习是利用插值算法,通过反向传播进行学习。
相关图说明,20250502_1,20250502_2
【可变形卷积网络】
transfor:可形变池化。这一点的思路与可形变卷积是一样的,同样提出来也是为了加强网络对不同尺度和变形物体的识别。
code:回家补充
【【论文精读】DCNv1:可变形卷积网络和可变形ROI池化(Deformable Convolutional Networks)】
Topic 2:密集连接块
what:简单来说,密集连接块即在保证网络中层与层之间最大程度的信息传输的前提下,直接将所有层连接起来,为了能够保证前馈的特性,每一层将之前所有层的输入进行拼接,之后将输出的特征图传递给之后的所有层。
需要说明的是,DenseNet的创新点在于将所有层都连接起来,这是一种更为激进的做法(相比于ResNet)
why:随着有关输入或梯度的信息经过许多层,在到达网络的末端(或开始)时,它可能损耗或者消失。密集连接块的提出便是对于此类问题的一种解决方法。
how:补网络结构图,20250502_3
1. 每一层都可以直接使用loss函数的梯度以及最开始的值,这样有助于训练更深的网络,同时能够减轻梯度消失现象。
2. 稠密连接模块的优点是相比传统卷积网络,其参数数量更少,原因是因为它不需要再学习多余的特征图。DenseNet结构中,增加到网络中的信息与保留的信息有着明显的不同。DenseNet的dense block中每个卷积层都很窄(例如每一层有12个滤波器),仅仅增加小数量的特征图到网络的“集体知识”(collective knowledge),并且保持这些特征图不变——最后的分类器基于网络中的所有特征图进行预测。另外作者这种密集连接有正则化的效果,因此对于过拟合有一定的抑制作用,因为参数减少了,所以过拟合现象减轻。
3. 特征重用
4. 计算(此部分的latex公式后续补充)
transfor:结合自己的工作,显然再做Fusion part中,由于其中一部分来源与进行过边缘处理的图像,很有可能会损失色块相关信息,而这部分信息,是可以通过DenseNet的思想来优化的。
DenseNet核心思想在于建立了不同层之间的连接关系,充分利用了feature,进一步减轻了梯度消失问题,加深网络不是问题,而且训练效果非常好。另外,利用bottleneck layer,Translation layer以及较小的growth rate使得网络变窄,参数减少,有效抑制了过拟合,同时计算量也减少了;
DenseNet的不足在于由于需要进行多次Concatnate操作,数据需要被复制多次,显存容易增加得很快,需要一定的显存优化技术,应用起来没有ResNet广泛。
code:回家补充
【轻量级卷积网络DenseNet:密集连接卷积网络 】
Topic 3:空间注意力机制(SAM)
在理解空间注意力机制前,应该先去了解什么是通道注意力机制(CAM)。
通道注意力机制(Channel Attention Mechanism, CAM),通过特征内部之间的关系来通道注意力机制。特征图的每个通道都被视作一个特征检测器,所以通道特征聚焦的是图像中有用的信息是"什么"(what)。
what:通过对特征图空间内部的关系来产生空间注意力特征图。不同于通道注意力,空间注意力(Spatial Attention Mechanism, SAM)聚焦于特征图上的有效信息在"哪里"(where)。
补充CAM,SAM结构图,20250502_4, 20250502_5
why:在深度学习模型中动态地调整输入数据的不同空间位置的重要性,以增强有用信息并抑制无用信息。
how:SAM思路流程如下
1. 对输入特征图在通道维度上进行最大池化和平均池化,得到两个单通道的特征图。
2. 将这两个特征图沿通道维度拼接在一起。
3. 通过一个卷积层生成空间注意力图。
4. 使用sigmoid函数归一化权重,使得每个空间位置的注意力值在[0, 1]之间。
transfor:暂时没想到,待补充
code:回家补充
【通俗易懂理解通道注意力机制(CAM)与空间注意力机制(SAM) 】
【注意力机制:通道注意力机制、空间注意力机制、CBAM(附有完整代码) 】
Topic 4:Lossfuction
what:简单的理解就是每一个样本经过模型后会得到一个预测值,然后得到的预测值和真实值的差值就成为损失(当然损失值越小证明模型越是成功),我们知道有许多不同种类的损失函数,这些函数本质上就是计算预测值和真实值的差距的一类型函数,然后经过库(如pytorch,tensorflow等)的封装形成了有具体名字的函数。
why:在机器学习中,我们想让预测值无限接近于真实值,所以需要将差值降到最低(在这个过程中就需要引入损失函数)。通过让损失函数去反向作用于训练模型,从而获得更加精准的结果。具体的过程如下:
在机器学习中,我们知道输入的feature(或称为x)需要通过模型(model)预测出y,此过程称为向前传播(forward pass),而要将预测与真实值的差值减小需要更新模型中的参数,这个过程称为向后传播(backward pass),其中我们损失函数(lossfunction)就基于这两种传播之间,起到一种有点像承上启下的作用,承上指:接収模型的预测值,启下指:计算预测值和真实值的差值,为下面反向传播提供输入数据。
how:常见的损失函数有:MSE, Cross-Entropy Loss(交叉熵),这部分的代码实现即简单的数学原理,知道即可。
这里强调出SSIM与MS-SSIM,本身是图像领域的特化损失函数,通过一定迁移,同样可以运用到我们的领域中。
transfor, code:略
【损失函数(lossfunction)的全面介绍(简单易懂版)】
【损失函数(loss function)(基本介绍,作用,场景,特点,常见损失函数,代码示例)】
额外拓展:正则化
why:加入惩罚项,防止过拟合
【损失函数正则化详解 】
Topic 5:Adam优化器
在开始这部分知识的整理之前,需要强调作者在今天会上回答的不足。老板当时挖了一个坑,问:“网络中是Lossfuction是如何作用的?”。由于作者在最开始学习相关知识时,直接选择从python代码入手,爽爽使用已经封装好的优化器,以至于并不清楚具体是如何影响的,所以一顿插科打诨。此等情况下不为例!!!
优化器是一个很大的topic,这里我们着重介绍Adma优化器(所谓自动,也就解释了不深入学习的话,为什么作者会直接略过了这一部分)
what:Adam吸收了Adagrad(自适应学习率的梯度下降算法)和动量梯度下降算法的优点,既能适应稀疏梯度(即自然语言和计算机视觉问题),又能缓解梯度震荡的问题
why:在正向得到对应的lossfuction后,如何借此去优化模型,优化算法
how:补充adma latex公式
公式1:计算 历史梯度的一阶指数平滑值,用于得到带有动量的梯度值
公式2:计算 历史梯度平方的一阶指数平滑值,用于得到每个权重参数的学习率权重参数
公式3:计算变量更新值,由公式3可知,变量更新值正比于历史梯度的一阶指数平滑值,反比于历史梯度平方的一阶指数平滑值;
code:后续补充
【通俗理解 Adam 优化器 】
【Adam优化器(通俗理解) 】
Topic 6:关于方法论以及自己当前工作的一些思考
由于地震波图与自然图像有本质上的共性:即由边界和色块构成。所以一定程度上视觉领域上的方法与模块,是可以迁移过来的。
最开始做自己这个方向时,也会怀疑我这究竟是不是就是水罢了,本质上没有什么价值。但就像老板和师姐所言,将别的领域的好方法,好效果迁移应用到自己的领域中,通过改进使得这些方法和模块能够更加契合本领域,这也是一种贡献。不用怀疑,这种创新同样有其价值所在。