文章目录
前言🎈(只要学习,就会一直写!)
简单记录一下,自己在学习目标检测过程中遇到的一些概念问题🐱🐉
backbone
主干网络,用来做特征提取的网络(比如ResNet,VGG等等),一般用来提取图片信息,然后生成Feature map。
neck
放在backbone和head之间,作用是更好的利用backbone提取的特征。
head
是获取网络的输出内容,head部分利用backbone提取的特征作出预测。
bottleneck
意为瓶颈,通常指的是网络输入的数据维度和输出的维度不同,输出的维度比输入的小了许多,就像脖子一样,变细了。经常设置的参数 bottle_num=256,指的是网络输出的数据的维度是256 ,可是输入进来的可能是1024维度的。
GAP(Global Average Pool)
全局平均池化。即将某个通道的特征值取平均值。
warm up
Warm up指的是用一个小的学习率先训练几个epoch,这是因为网络的参数是随机初始化的,一开始就采用较大的学习率容易数值不稳定。
目标检测结果评价标准
box_loss:边界框回归损失 预测预测框和标定框之间的损失。
obj_loss: 目标存在的置信度损失。
csl_loss: 分类损失,计算锚框和对应的标记分类是否正确。
一般来说mAP针对整个数据集而言的;AP针对数据集中某一个类别而言的;而percision和recall针对单张图片某一类别的。
-
precision(精确率):简单来说就是都被模型判断为positive的目标,其中判断对了多少个。
-
recall(召回率) :在真实标签为positive的所有样本中,找到了多少个。
注: Precision和Recall之间往往是一种博弈关系,好的模型让Recall值增长的同时保持Precision的值也在很高的水平,而差的模型性可能会损失很多Precision值才能换来Recall值的提高。通常情况下,都会使用Precision-recall曲线,来显示分类模型在Precision与Recall之间的权衡。 -
准确率:计算的是分类正确个数占全体样本的比例,针对的是所有类别。一般不直接使用准确率。主要是因为类别不平衡问题,如果大部分是negative的 而且大部分模型都很容易判别出来,那准确率都很高, 没有区分度,也没有实际意义(因为negative不是我们感兴趣的)
-
IoU :就是模型预测的框和自己标记的框之间的重合度。
-
AP :多个类别物体检测中,每一个类别都可以根据recall和precision绘制一条曲线。AP是Precision-Recall Curve(PRC)曲线所覆盖的面积,用来衡量模型在每个具体类别上的好坏
-
mAP(mean average precision) :衡量精度的指标。即多个类别AP的平均值。这里average等于是对recall取平均。而mAP的mean,是对所有类别取平均。
Ablation experiment(消融实验)
第一次看到Ablation experiment忘记是哪篇论文了,一直到现在才搞懂到底什么是消融实验。其实很简单,比如在一次目标检测中,因为加入了A、B、C 因此取得了不错的效果,但是不知道到底是因为ABC哪一个。因此,消融实验就是保留A,去除B、C·····依次查看到底是哪个起了作用。
BN(Batch Normalization)
概念: 用于神经网络的正则化技术,加速模型的训练。他对输入进行标准化,得每层的输入在训练时都具有相似的统计特性,从而加速模型的训练过程。
作用:
- 将每个批次的数据标准化为均值为0和方差为1的分布,通过引入批次统计信息,可以减少模型的过拟合现象,提高模型的泛化能力。
- 可以解决梯度消失和梯度爆炸等问题,提高模型的稳定性和收敛速度。
GFLOPs(Giga Floating-point Operations)
GFLOPs指的是模型的浮点运算量。
它是衡量深度学习模型计算量的一种常用指标,通常用于比较不同模型之间的计算复杂度大小。一个GFLOP表示模型在一秒钟内所执行的十亿次浮点运算数。
通常情况下,GFLOPs越高,模型的复杂度越高,模型的计算量也就越大,训练和推理的时间也就越长。但是,GFLOPs并不能单独决定模型的性能好坏,还需要考虑其他指标,比如精度、召回率、速度等。
过拟合
今天在训练模型的时候,发现训练损失一直在下降,但是验证损失在下降之后开始上升,这就是过拟合了。
也就是说 在训练集上表现的好,在验证集或测试集(也就是没见过的数据)上表现差,即为过拟合。
解决方法有:
- 数据增强:增加训练数据的多样性,有助于提高模型泛化能力。
- 正则化:通过添加惩罚项限制模型参数的大小,减少过拟合现象。
- 早停:在验证损失开始上升之前停止训练,避免模型过拟合。