论文阅读与工具使用

工具

xshell连接服务器 github管理代码 LaTex论文撰写

copilot加chatgpt辅助代码编写

关键词理解

卷积相关

卷积核的个数决定了输出通道的个数
卷积核的的维度33n,n取决于输入特征图的维度如1281283,则n=3

bottle neck

1x1卷积核 的作用,将通道数增多或减少。减少参数。 优势:在较低的通道数上执行卷积操作要比在较高通道数上更为高效。同时,1x1卷积核还可以引入非线性,增强模型的表达能力。

降维: 通过1x1卷积将输入通道数降低,可以减少参数量和计算复杂度,同时保留一定的特征信息。

升维: 通过接下来的3x3卷积操作,可以在较低维度上进行更复杂的特征学习。这种结构有助于网络更好地学习和表达特征。

1*1卷积核用来减少参数

batchNorm(不懂)

问题:由于反向传播从后往前,对于深度神经网络,后面的层训练的很快.浅层网络一般式提取纹理细节信息,前面训练不好导致浅层信息一发生改变,后面就白训练了.

思想:为了避免顶部(深层)重新训练

位置:放在激活函数前

两次33的卷积核相当于一次5x5的卷积的感受野,并且因为两次卷积后都有一次激活层,能有更好的非线性表达。
感受野:全连接中感受野是整张图片,卷积感受野更小,参数少,效果也好
卷积进行局部连接,与全连接不同,减少了参数量(64个3
3大小,通道数为2的卷积核,参数个数为64x3x3x2,而一个神经元跟和feature map每个像素连接都有一个权重和偏置,参数巨大.)

为什么效果好?全连接中参数太多了,训练集的数量应当大于参数的数量,否则容易过拟合
卷积就是提取特征,一个卷积核提取一种特征,比如一个卷积核是提取鸟类嘴部特征的,图片与嘴部特征相似的区域,则卷积出来的值也就越大.前面的卷积是提取特征的,后面的卷积是特征筛选的 卷积核数量:卷积核数量不应该太多,否则参数过多,模式太固定(可能把衣服的颜色也当成特征,太细致)导致模型泛化性不够好
大尺度图像上用较大的卷积核较好,比如第一层卷积往往用5x5或7x7

全局平均池化:卷积网络输出结果输入岛全连接网络时,需要将feature map拉伸为一维向量。拉伸的方法有全局平均池化和flatten,相对于flatten,全局平均池化减少了参数量,保留了空间信息。(解释:全局平均池化将每一个通道取平均再输出,保留了输入特征图的整体分布,有助于维持图像的全局结构特征,保留了像素之间相对位置信息,flatten输出的一维向量的长度明显大于全局平均池化,这意味着全连接网络的输入维度降低,减少了参数)

__反卷积__

过拟合:计算loss的时候,我们计算的是经验风险,实际上应该求期望风险,期望风险很难直接计算.
减少参数量可以减少过拟合的风险.
视角重建普通方法数据量太少,nerf方法简洁方法增加了数据量.

有一个约定,在提取特征图时,一般将通道数增加两倍,宽高缩小两倍

卷积分组?

padding是维持分辨率的手段

使用大于一的步长是降低分辨率的手段

特征融合:将不同通道的特征图直接相加,或者叠加为多通道的特征图,fpn中指的是相加操作。

hog:一种提取图像特征的方法,主要是关于形状的特征。 图像每一个像素计算梯度,将图像划分为nxn的cell,统计各个方向的梯度的数量,每k个cell组成一个block,一个图像又m个block, 就有了这么多维度的特征。轮廓部分梯度比较明显。用于提取形状。 对比:卷积考虑得更多,所以提特征的效果更好

hook:钩子,在不同阶段可以自己定义的部分 轮子:已有的库或开源软件

正负样本:IOU达到阈值为正样本,反之为负样本。

前面的网络好像已经能做到分类了,为什么后面还要接网络?

训练数据太少了怎么办?基于已有的数据集微调

注意力机制(Attention):人关注的重点与图片包含的各种信息的相似度,相似度越大,该部分信息

anchor锚框

冻结权重?

非极大值抑制(NMS):一张图片对应多个训练样本。由于一张图可能有上万个框,很多框都是相似的,比如多个框都框住了这个狗,只是大小比例和偏移有区别,为了使得预测输出比较干净,一个目标只有一个或少量的目标框,使用nms(非极大值抑制)。1. 选取非背景的最大预测值(置信度)2. 去除其他与它iou值大于sita的预测框。重复上述过程,直到所有预测要么被选中,要么被去除

前景,相对于背景,是感兴趣的目标,可能是人,车,兔子等

Head 是网络的末端部分,通常针对特定任务进行设计。Head 根据 Backbone 提取的特征来进行最终的任务,如分类、检测、分割等。Head 的设计取决于特定的应用需求。

在不同的应用中,Head 的功能可能包括:

分类:在图像分类任务中,Head 通常包括一些全连接层,用于根据特征对图像进行分类。 目标检测:在目标检测任务中,Head 负责根据特征图识别对象并定位其边界框(Bounding Box)。 语义分割:在语义分割任务中,Head 会输出每个像素的类别。

消融实验(Ablation Study)是一种在计算机科学和机器学习领域常用的实验方法,特别是在算法和模型的研究与开发中。这种实验的目的是通过逐步移除或修改模型的某些部分(例如特定的层、特征、训练方法等),来理解这些部分对模型整体性能的影响。如检查不同feature map的作用.

FCN-base:基于全卷积网络 FCN网络于CNN不同的地方,FCN没有全连接层,这意味着设计网络结构的时候,不需要实现确定全连接层输入神经元的个数。意味着输入图像的尺寸不需要固定。

dropout:Dropout 操作是指在每次更新参数的时候,随机选择一些神经元,将它们的输出设置为零。是一种用于正则化神经网络的技术,旨在减少过拟合的风险。相当于L2正则化

计算

卷积输入输出

wxw 的图像经过 mxm的卷积核, 0p,0s, 输出尺寸为 w-m+1 如边长32的图像,经过5x5的卷积核,输出边长是32-5+1 = 28

LeNet

在minst数据集上进行手写数字识别的网络,主要利用了5x5卷积核,包含卷积层,池化层.全连接层,激活函数用softmax.设计的多层结构. lenet

Alex-Net

在大规模的 ImageNet 数据集上训练;包含 8 个层次,其中有五个卷积层和三个全连接层。ReLU 激活函数,引入了 Dropout 技术降低过拟合,提升泛化性. 网络结构 创新点,网络切分

GoogLeNet

介绍:同时使用不同大小的卷积核(1x1、3x3、5x5)和最大池化操作,从不同尺度上提取特征。这样的设计有助于网络同时捕捉局部和全局的特征,提高了网络的表达能力。

最后分类前使用全局平均池化

中间层添加了两个辅助分类器,引入额外的梯度,有助于缓解梯度消失问题

引入了bottle neck,提升效率

googlenet结构

vgg

目的:卷积神经网络架构,旨在进行图像分类和物体识别任务

特点

  1. 卷积层的重复: VGG网络的基本构建块是连续的卷积层,通常都使用小尺寸的3x3卷积核。这些卷积层的重复有助于提高网络的非线性表达能力。

  2. 池化层: 在卷积层之间,VGG网络使用最大池化层进行下采样,减小特征图的尺寸。

  3. 多尺度的卷积层: VGG网络通过增加网络的深度来扩展感受野。它使用多个卷积层来逐渐增加网络的复杂度。

  4. 全连接层: 在卷积层之后,VGG网络通常包含一个或多个全连接层,最终输出分类结果。

网络结构

vgg-16结构

参数量计算

第1层:1792 = 33364+64 第2层:36928 = 336464+64 第3层:73856 = 3364128+128 第4层:147584 = 33128128+128 第5层:295168 = 33128256+256 第6层:590080 = 33256256+256 第7层:590080 = 33256256+256 第8层:1180160 = 33256512+512 第9层:2359808 = 33512512+512 第10层:2359808 = 33512512+512 第11层:2359808 = 33512512+512 第12层:2359808 = 33512512+512 第13层:2359808 = 33512512+512 第14层:102764544 = 775124096+4096 第15层:16781312 = 40964096+4096 第16层:4097000 = 40961000+1000

可变形卷积

nerf

RCNN

背景

ResNet

深度网路好.但随着网络越深,会面临梯度爆炸和梯度消失的问题. 过拟合不是随着深度越深训练误差增大,而是训练误差变小。
理论上随着网络变深,模型至少在浅层效果与浅层的网络相似,
在深层可以把权重学成0,但在实际过程中用SGD很难去优化成这样。identity mapping。与浅层网络相同.
ResNet方法:显示构造identity mapping,即x = f(x) + x; 其中,x为浅层网络的输出,f(x)是追加的网络层,其输出是f(x)+x;
由于算梯度的时候,原来需要对f(x)求梯度,现在对f(x)+x求梯度,更容易求了. 一个问题,上一层的高宽和通道数目与f(x)的输出图匹配,作者通过1x1的卷积核并且将stride改成2.(这样改x不会丢失信息吗?)

问题,参数个数,计算过开销如何保持的? bottleneck:通常用于减少网络中的参数数量和计算复杂度.在 ResNet 中,一个瓶颈块包括三个卷积层:第一个和第三个卷积层用较小的卷积核(例如 1x1),主要用于降维和升维;第二个卷积层用较大的卷积核(例如 3x3),用于提取特征。这种设计有助于减少计算量,同时保持网络的性能。

skip connection指的就是这个方法 作用:1. 深层网络利用了浅层网络的信息。而浅层网络有更丰富的细节。2. 加速训练,更容易拟合。减少了过拟合。

FPN

 fpn中需要对不同特征图进行融合后放到网络训练.不同特征图来自于backbone中不同层的输出,由于输出特征图比例和通道数不同,大尺度特征图需要用1x1的卷积核统一通道数.小尺寸特征图需要进行两倍上采样.  问题哪一个propose预测到哪一个特征层上?(不懂)

浅层的网络feature map保留的细节信息更多,适合预测小目标;深层网络feature map更适合大目标

fcos

锚框的问题:

  1. 基于锚框的方法对于超参数(锚框大小,纵横比和数量)敏感
  2. 锚框大小和纵横比保持固定,探测处理形状变化较大的候选目标不好.即训练数据与实际数据中物体尺寸不一致需要重新设计anchor
  3. 大量的锚框导致正负样本不平衡
  4. 锚框涉及计算如交并比
  5. denseBox对于多目标重叠场景并不适合,一个像素点到底是预测哪一个物体的4d向量模糊.

利用FPN可以解决DenseBox单个像素对多个重叠目标的模糊性,利用NMS抑制低质量的预测框.

FCOS: 训练集合:对每一个特征图上的每一个像素,如果它在gtbox中,则视为该类的正例,并计算其到gtbox四个边的距离.这一方法充分利用了前景样本进行训练.锚框则只考虑IOU大的锚框作为阳性样本,一个像素到gt最大距离边的长度大于该特征图最大目标边长直接视为负样本,文章后来改进,最好是距离中心位置更近的像素点作为正类更好.由于不同feature map对不同尺寸目标的检测效果不同,需要将不同尺寸的目标分配到不同feature map上,即在该featuremap上是正类,在其他上面是负类.

网络输出:类别(80维度),边界框(4维(l,t,r,b)和需要映射到原图尺寸获得),预测该像素的类别分数和位置t以及center-ness,center-ness反映了当前点偏离图像中心的程度(0,1)之间,.通过四个边界框的计算方式反推出边界框.

损失函数:分类损失和回归损失以及center-ness损失

优点:多级预测减少模糊性,步长大仍能产生良好的BPR?多个特征图上预测可以统一,选择面积最小的gt作为目标. 中心度表示距离图像中心的值,在0到1,需要乘以分类分数.避免了较远的低质预测.最后还会进行非极大值抑制操作,更好的减少了低质量的预测.

网络结构:backbone是resNet-50 fcos网络结构图

mAP(PASCAL VOC 2012) 作用:用来评估目标检测的神经网络的性能,高mAP表示性能越好.

计算该方法:1.计算每个类别的AP;2.计算所有类别的平均AP

  1. 计算AP
    • 目标检测的结果按照置信度降序排列,并且分配给其对应的目标.如果gt和预测结果的标签一致并且IoU>=0.5,同时这个gt没有被匹配过,那么这个预测被认为是tp
    • 按照查准率和查全率公式计算这两个指标
    • 绘制PR曲线:查准率单调减少.取对应的最大查全率(同一查准率可能对应不同查全率).在坐标系中按照查准率和查全率的点绘制图像.
    • 计算曲线下的面积
  2. 计算每一个类别的AP

直接使用源代码肯定是不行的 因为对于confidence和IoU的定义是不一样的,并且我的目标是没有框的

方案:1.直接使用代码 2.基本重写代码

按照原理弄清楚每一个函数在干什么(功能),重写功能,按照搭积木方式搭起来.

YOLO v1


本文章使用limfx的vscode插件快速发布