当前位置:   article > 正文

yolov论文翻译(转载、学习与复盘)_yolov8论文原文

yolov8论文原文

参考:
yolo论文翻译
图解yolo
非极大值抑制算法的理解
性能参数的理解
IOU

概述

  1. yolo将目标检测框架看做回归问题从空间上分割边界框和相关的类别概率。仅仅用单个卷积网络就能同时预测多个边界框和它们的类别概率,使用yolo得到图片上的问题是什么和其具体位置。
  2. 由于整个检测流水线是单一神经网络,所以可以直接对检测性能进行端到端的优化。
  3. 以前的目标检测工作利用分类器来执行检测。为了检测目标,这些系统为该目标提供分类器,并在不同的位置对其进行评估,并在测试图像中对其进行缩放。像可变形部件模型(DPM)这样的系统使用滑动窗口法,其分类器在整个图像的均匀间隔的位置上运行。
  4. 目标检测的本质就是回归,因此一个实现回归功能的CNN并不需要复杂的设计。
  5. yolo没有选择滑窗或者提取proposal的方式训练网络,而是直接用整图训练。这样做的好处是可以更好的区分目标和背景。
  6. 对比Fast-R-Cnn就常把北京区域误检为目标。
  7. 不可避免的,yolo在提升速度的同时也损失了一些精度。
  8. 与基于分类器的方法不同,yolo是通过与检测性能直接对应的损失函数进行训练的,并且整个模型是一起训练的。
对比RCNN的思路
  1. RCNN首先在图像中生成潜在的边界框,然后在这些框上运行分类器。在分类之后,细化边界框,消除重复的检测,并根据场景中的其他目标重新定位边界框。这些流程很慢且难优化。因为每个单独的组件都必须单独训练。
  2. 从R-CNN到Fast R-CNN采用的思路是proposal+分类。proposal提供位置信息,分类提供的是类别信息。精度很高但是速度不行。
  3. 所以yolo提供的思路是:直接在输出层回归bounding box的位置和bounding box所属的类别。整张图作为网络的输入,把目标检测的问题转化为回归的问题。
优点:
  1. yolo速度非常快,将检测视为回归问题,可以在不到25毫秒的延迟内实时处理流媒体视频,。
  2. yolo是在整张图片上进行推断的,与基于滑动窗口和候选框的技术不同,yolo在训练期间和测试期间都会顾及到整张图片,所以隐式的包含了关于类的上下文信息以及外观。Fast-RCNN由于看不到更大的上下文,会将背景块误检为目标,与Fast-RCNN对比,yolo的误检率少了一半。
  3. yolo能学习到目标的泛化表征,yolo具有高泛化能力,所以在应用于新领域或者碰到意外输入时不太会出现故障。
缺点:
  1. 虽能快速识别目标,但是在定位小物体或者密集物体时的精度不高。例如一群小鸟。
  2. 虽然可以降低将背景检测为目标的错误,但同时召回率较低。
  3. 测试时,当同一类物体出现不常见的长宽比和其他情况时泛化能力弱。
  4. 由于损失函数的问题,定位误差是影响检测效果的主要原因。
yolo检测系统的工作分为三步:
  1. 把图像缩放到448*448

  2. 在图上运行卷积网络

  3. 根据模型置信度对检测结果进行阈值处理

特点:统一检测
  1. 将目标检测的独立部分整合到单个神经网络,网络使用整个图像的特征来预测每个边界框,可以预测一张图片中所有物体的所有边界框。
  2. yolo可以实现端到端的训练、实时速度、且较高的平均精度。
检测规则
  1. yolo系统将输入图像分成s*s的网格,若目标中心若如某个网格中,那么该网格就负责检测该目标。

  2. 每个网格单元都会预测B个边界框和这些框的置信度分数(反映模型对框内是否含有目标的信心)。

置信度定义:
在这里插入图片描述

  1. 我们希望置信度分数等于预测框predict box与真实标签框ground truth之间联合部分的交集IOU。

  2. 每个边界框都包含5个预测:x,y,w,h,置信度。(x,y)坐标反映的是边界框的中心相对于网格单元边界的值。宽度和高度是相对于整张图片来预测的,置信度表示预测框与任意实际边界框之间的IOU。

  3. 每个网格单元还预测C个条件类别概率,这些概率以包含目标的网格单元为条件。

  4. 置信度评分如上面的公式所示,反映了基于当前模型bounding box内存在目标的可能性Pr(project),和bounding box预测目标位置的准确性IOU(predtruth)。如果bounding box内不存在物体,则Pr(object)=0,如果存在物体,则根据预测的bounding box和真实的bounding box计算IOU,同时会预测存在物体的条件下该物体属于某一类的后验概率Pr(Class_iObject)。
    在这里插入图片描述

  5. 不管边界框的数量B是多少,每个网格单元只预测一组类别概率。在测试时,把条件类概率与每个框的预测置信度值相乘。
    在这里插入图片描述

  6. 上面的公式给出了每个框特定类别的置信度分数,这些分数体现了该类出现在框中的概率以及预测框拟合目标的程度。

  7. 假设有C类物体,那么每一个网格只预测一次C类物体的类条件概率Pr(Class_iObject),i=1,2,……C,每一个网格预测B个bounding box的位置,即这B个bounding box共享一套条件类概率。基于计算得到的Pr(Class_iObject),在测试时可以计算某个bounding box类相关置信度。

  8. 为在pascal voc上评估yolo,使用S=7,B=2,pascal voc有20个标注类,C=20,最终的预测是7730的张量。

    如上图所示,系统将检测模型化为一个回归问题,图像划分为SS的网格图,这里是77,并且每个网格单元预测B个边界框、以及这些框的置信度和C类概率。这些预测被编码成SS(B5+C)这里即是77*(25+20)=77*30张量。

  9. 最后一层输出7730的维度。每个1130的维度对应原图77个cell中的一个(原图划分为了77的网格)。1130中含有类别预测和bbox坐标预测。即网格负责类别信息,bounding box主要负责坐标信息(部分负责类别信息:confidence也算类别信息)。

  10. 每个网格要负责预测两个bounding box,下图中的(两个黄色实线框)的坐标(x,y,w,h),
    在这里插入图片描述
    中心坐标x,y是相对于对应的网格把值归一化到0-1之间。w,h坐标值是图像的weight和height值归一化到0-1之间。

  11. 每个bounding box除了要回归自身的位置外,还要预测一个confidence值。这个confidence代表了所预测的box中含有object的置信度和这个box预测得有多准两重信息。confidence的值为在这里插入图片描述这两个量的乘积。如果ground true box人工标记的物体落在一个grid cell里,则上面confidence式子中第一个因子取值1,否则取值0。式子中的第二个因子是预测的bounding box和实际的ground truth box之间的IOU值。综上,即每个bounding box要预测5个值(x,y,w,h,confidence),两个bounding box共十个值,对应1130维度特征中的前十个。如下图所示:
    在这里插入图片描述

  12. 每个网格还要预测类别信息,论文中是20个类别。77的网格,每个网格要预测2个bounding box和20个类别概率。输出即为77*(52+20)=77*30的一个张量。

  13. 注意类别信息是针对每个网格的,而confidence信息是针对每个bounding box的。
    在这里插入图片描述

  14. 损失函数设计
    在这里插入图片描述
    损失函数的设计目标就是让坐标(x,y,w,h, ),confidence,classification这三个方面达到很好的平衡。

第一种思路:是不好的方法。简单的全部采用sum-squared error loss来做这件事会有以下不足:
(1)8维的localization error和20维的classification error同等重要是不合理的。
(2)如果一个网格中没有object,那么就会将这些网格中的box的confidence值push到0。(一幅图中这种网格中没有object是普遍的,而网格中有object是较少的情况),所以这种把值push到0的行为是overpowering,会导致网络不稳定甚至发散。

第二种思路:为了解决第一种简单思路产生的问题而有了思路二。
(1)在上面损失函数设计的图中,更重视8维的坐标预测(对应着上面损失函数设计框图中的蓝色框的式子部分),即2个bounding box预测的坐标(x,y,w,h)。2*4=8维。给这些坐标预测维度的损失前面赋予更大的loss weight。记为
在这里插入图片描述
(2)对没有object的bbox的confidence loss,(对应损失函数设计框图中的黄色框图的式子部分)赋予小的loss weight,记为
在这里插入图片描述
(3)有object的bbox的confidence loss(对应于损失函数框图设计中的红色框图)和类别的loss(对应于紫色框图)的loss weight正常取1。
(4)对不同大小的bbox预测中,大bbox预测存在小偏差可以忍受,但是对于小bbox存在小偏差都无法忍受。而sum-square error loss中对同样的偏移loss是一样的。为了缓和这个问题,解决办法是将box的width和height取平方根代替原本的width和height。如下图所示:small bbox的横轴值较小,发生偏移时,反映到y轴上的loss(下面图中绿色框出来的部分)比big bbox(下面图中红色框出来的部分)要大。
在这里插入图片描述
(5)一个网格预测多个bounding box,在训练时我们需要每个object(ground true box)只有一个bounding box负责(一个object一个bbox)。具体做法是与ground true box(object)的IOU最大的bounding box负责该ground true box的(object)的预测。这种做法称作bounding box predictor的specialization(专职化)。每个预测期会对特定的(sizes,aspect ratio,classed of object)的ground true box的预测越来越好。

特点:网络设计
  1. 将上面提到的模型作为卷积神经网络来实现,并且在pascal voc检测数据集上来评估。

  2. 网络的初始卷积层从图像中提取特征,全连接层负责预测输出概率和坐标。

  3. 网络模型受图像分类模型GoogleNet的启发,网络有24个级联的卷积层,其中卷积层包括33和11两种kernel,后面是2个全连接层。

  4. 只使用11降维层,后面是33卷积层。

在这里插入图片描述
上图是架构图,检测网络有24个卷积层,然后是2个全连接的层,交替的11卷积层减少了来自前面层的特征空间。在分辨率的一半(224224输入图像)上预训练ImageNet分类任务上的卷积层,然后将分辨率加倍以进行检测训练。

训练

  1. 使用ImageNet上的1000类竞赛数据集预训练卷积层。
  2. 在预训练中,使用上面架构图中的24个卷积层的前20个卷积层,接着是平均池化层和全连接层。
  3. 使用darknet框架进行所有的训练和预测。darknet框架是一个源码为c和cuda的神经网络小众框架。(而流行的框架有tensorflow和caffe)
  4. 预训练网络中增加卷积层和全连接层可以增加性能。
  5. 检测通常需要细粒度的视觉信息,故把网络的输入分辨率从224224改为448448。
  6. 模型的最后一层预测类概率和边界框坐标,通过图像的宽度和高度来规范边界框的宽度和高度,使它们落在0和1之间。
  7. 将边界框x和y坐标参数化为特定网格单元位置的偏移量,所以它们的值被限定在0和1之间。
  8. 模型的最后一层使用线性激活函数,而所有其他的层使用下面的leaky rectified activation。

在这里插入图片描述

  1. 对模型输出的平方和误差进行优化。
  2. 选择平方和误差是因为其易于优化 ,但是它并不完全符合最大化平均精度的目标,它给分类误差和定位误差的权重是一样的,这点可能并不理想。
  3. 除此之外,每个图像都有很多网格单元没有包含任何目标,这将这些单元格的置信度分数推向零。通常压制了包含目标的单元格的梯度。这可能导致模型不稳定,从而导致训练在早期就发散。
  4. 为了弥补平方和误差的缺陷,增加边界框坐标预测的损失,减少不包含目标的框的置信度预测的损失。使用两个参数来实现这一点,设定这两个参数值为

在这里插入图片描述
在这里插入图片描述

  1. 平方和误差对大框和小框的误差权衡是一样的,而我们的错误指标要体现出,大框的小偏差的重要性不如小框的小偏差的重要性,为了部分解决这个问题,直接预测边界框宽度和高度的平方根,而不是宽度和高度。

  2. yolo为每个网格单元预测多个边界框,在训练时,每个目标只需要一个边界框预测器来负责。

  3. 若某预测器的预测值与目标的实际值的IOU最高,则这个预测器被指定为负责预测该目标。这带来边界框预测器的专业化。

  4. 每个预测器可以更好的预测特定大小、方向角或者目标的类别,从而改善整体召回率。

  5. 在训练期间,优化以下多部分损失函数。如下式子:
    在这里插入图片描述

在这里插入图片描述

  1. 在网络训练过程中,如果从大的学习率开始训练,模型会由于不稳定的梯度而发散。所以从小的学习率慢慢提高。
  2. 为避免过拟合,使用dropout和大量的数据增强。在第一个连接层的dropout层的丢弃率设置为0.5,以防止层之间的相互适应。对于数据增强,引入高达20%的原始图像大小的随机缩放和平移。还在HSV色彩空间以高达1.5的因子随机调整图像的曝光度和饱和度。

推断

  1. 和训练一样,预测测试图像的检测也只需要一次网络评估,yolo在测试时非常快,因为只需要一次网络评估。
  2. 网格设计强化了边界框预测中的空间多样性,通常一个目标落在哪一个网格单元中是很明显的,网络只能为每个目标预测一个边界框。但是一些大的目标或者是接近多个网格单元的边界的目标能被多个网格单元定位。非极大值抑制可以用来修正这些多重检测。
  3. 非最大抑制对于yolo性能的影响不像对于R-CNN和DPM那样重要,但也能增加2%-3%的mAP。

yolo的限制

  1. yolo给边界框预测强加空间约束,因为每个网格单元只预测两个框和只能有一个类别。这个空间约束限制了我们的模型可以预测的邻近目标的数量,yolo模型难以预测群组中出现的小物体(比如鸟群)。
  2. 模型学习是从数据中预测边界框,因此很难泛化到新的、不常见的长宽比和配置的目标。模型使用相对粗糙的特征预测边界框,因为输入图像在架构中历经了多个下采样层。
  3. 模型的训练基于一个逼近检测性能的损失函数,这个损失函数无差别的处理小边界框和大边界框的误差。大边界框的小误差是无关紧要的,但是小边界框的小误差对于IOU的影响要大得多。可以看出主要错误在于不正确的定位。

yolo与其他检测系统的比较

一般的目标检测流程:

  1. 第一步:从输入图像上首先提取一组鲁棒特征(Haar[25],SIFT[23],HOG[4],卷积特征[6])。
  2. 第二步:用分类器[36,21,13,10]或者定位器[1,32]识别特征空间中的目标。
  3. 分类器/定位器在整个图像上/图像的某个子区域上以滑动窗口的形式运行[35,15,39]。

例举几种顶级的检测框架

DPM
  1. 即Deformable parts models可变形部分模型。使用滑动窗口法进行目标检测,DPM使用不相交的流程提取静态特征,对区域分类,预测高评分区域的边界框等。

yolo与DPM相比较

  1. yolo系统使用一个卷积神经网络替换DPM所有不同的部分,yolo系统同时进行特征提取、边界框预测、非极大值抑制、上下文推理。
  2. yolo系统网络的特征是在线训练出来的,因此可以根据特定的检测任务进行优化。
  3. yolo的统一架构比DPM更快更准。
R-CNN
  1. R-CNN及其变体使用区域提议而不是滑动窗口来查找图像中的目标,选择性搜索生成潜在的边界框。卷积网络提取特征,SVM对框进行评分,线性模型调整边界框,非最大抑制消除重复检测。上面提到的整个复杂流水线的所有过程都要独立地精确调整,得到的系统非常缓慢,在测试阶段每张图像需要超过40s。

yolo与R-CNN相比较

  1. yolo与R-CNN的相似之处,yolo的每个网格单元提出潜在的边界框,并且使用卷积特征对这些框进行评分。
  2. yolo与R-CNN的不同之处在于:yolo系统会对网格单元的候选框施加空间限制,这有助于缓解对同一目标的多次检测的问题。
  3. yolo与R-CNN的另一个不同之处在于相比较R-CNN,yolo系统生成更少的边界框,每张图像只有98个,选择性搜索则有约2000个。最后yolo系统将这些单独的组件组合成一个单一的、共同优化的模型。
Fast与Fast-RCNN
  1. Fast与Fast-RCNN通过共享计算和使用神经网络替代选择性搜索,用候选区域来加速RCNN框架,虽然提供比RCNN更快速度和更高准确度,但是仍然达不到实时效果。
  2. 加速HOG计算,使用级联,将计算推动到GPU上,加快DPM进程。

yolo与Fast-RCNN相比较

  1. yolo并不采用类似上面的思路:优化DPM大型检测流程的各部分。
  2. yolo完全抛弃了这个大型检测流程。
  3. yolo是通用检测器,可以检测多个目标。
Deep MultiBox
  1. 与R-CNN不同的是,利用卷积神经网络预测感兴趣的区域而不是使用选择性搜索。MultiBox可以通过单个类别预测替换置信度预测来执行单个目标检测。
  2. 但是MultiBox无法执行一般的目标检测,并且只是较大检测流水线中的一部分。需要进一步的图像补丁分类。

yolo与Deep MultiBox比较

  1. yolo和MultiBox都是利用卷积神经网络来预测边界框,但是yolo是一个完整的检测系统,而MultiBox只是较大检测流水线中的一部分。
OverFeat
  1. 利用一个卷积神经网络来执行定位,并使用该定位器来进行检测。
  2. OverFeat执行滑动窗口检测,但仍是一个不相交的系统。
  3. OverFeat优化了定位功能而不是检测功能。
  4. 像DPM一样定位器在预测时只能看到局部信息。OverFeat无法推断全局上下文,因此需要大量的后处理来产生连贯的检测。
MultiGrasp
  1. 系统在设计上类似于Redmon的抓取检测。网络边界框预测方法基于MultiGrasp系统进行回归分析。抓取检测比物体检测要简单得多。
  2. MultiGrasp只需要为包含一个目标的图像预测一个可抓取区域,它不必估计目标的大小、位置、边界、预测它的类别,而只需要找到适合抓取的区域就可以。
  3. 而yolo是预测图像中多个类的多个目标的边界框和类概率。
测试
  1. 测试的时候,每个网格预测的class信息即
    在这里插入图片描述和bounding box预测的confidence信息即在这里插入图片描述相乘就得到每个bounding box的class-specific confidence score。
    在这里插入图片描述
    上面等式中左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence信息。等式左边的乘积就encode预测的box属于某一类的概率,也是该box准确度的信息。
    在这里插入图片描述
  2. 对每一个网格的每一个bbox执行同样的操作,772=98bbox(每个bbox既有对应的坐标信息也有对应的class信息。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 得到每个bbox的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到了最终的检测结果。如下图。

在这里插入图片描述
4. 补充解释NMS非极大值抑制。non maximum suppression。
(1)在目标检测中得到多个候选框及其置信度得分。NMS对多个候选框,去除重合率大的冗余候选框,得到最具有代表性的结果,加快检测进程。将分类器进化为检测器的关键是:在原始图像上从多个尺寸产生窗口,并且resize到固定尺寸,然后送给分类器做判断。最常用的方法是滑动窗口。如下图,由于滑动窗口,所以同一个人可能有好几个框,每一个框都带有一个分类器得分。
在这里插入图片描述
虽然同一个人脸上出现好几个框,但是目标是保留最优的那个框。所以用到非极大值抑制来抑制冗余的框。抑制的过程是:迭代-遍历-消除的过程。

非极大值抑制的步骤如下:
(2)第一步:将所有框的得分排序,选择分最高的那个框。如下图:假设图中有A:0.75 , B:0.98 , C:0.83 ,(A,B,C是女生人脸上的三个框) D: 0.67 , E: 0.81(D E是男生人脸上的两个框)
在这里插入图片描述
上面五个框A B C D E中的最高得分是:B:0.98
(3)第二步:遍历其余的框,如果和当前最高分框的重叠面积(IOU)大于一定的阈值,就将这个框删除。由B:0.98对其余A C D E框计算IOU,B与A C的IOU>阈值,所以删除这两个框,所以第一轮后剩下三个框即A D E,如下图:
在这里插入图片描述
(4)第三步:从未处理的框中继续选一个得分最高的,重复上述的过程。在未处理的D E两个框中选择得分高的是D 所以删除E。故最终保留的是A D两个框。如下图:
在这里插入图片描述
NMS的python代码如下:

'''
非极大值抑制python程序
候选框boxes为5列,分别为[x1 y1 x2 y2 score],score为置信度得分
threshold:IOU阈值
'''

def py_nms(dets,thresh):
    # 取出候选框左上角和右下角坐标以及置信度得分
    x1 = dets[:,0]
    y1 = dets[:,1]
    x2 = dets[:,2]
    y2 = dets[:,3]
    scores = dets[:,4]

    # 计算每一个框的面积
    areas = (x2-x1+1)*(y2-y1+1)
    # 按照置信度升序排列
    order = scores.argsort()[::-1]
    keep = []
    # 循环直至所有框处理完成
    while order.size > 0:
        i = order[0]
        keep.append(i)
        # 计算当前置信度最大矩形框与其他矩形框的重叠面积
        xx1 = np.maximum(x1[i],x1[order[1:]])
        yy1 = np.maximum(y1[i],y1[order[1:]])
        xx2 = np.minimum(x2[i],x2[order[1:]])
        yy2 = np.minimum(y2[i],y2[order[1:]])
        w = np.maximum(0.0,xx2-xx1+1)
        h = np.maximum(0.0,yy2-yy1+1)
        inter = w*h
        # 计算IOU
        ovr = inter/(areas[i]+areas[order[1:]]-inter)
        # 保留所有重叠面积小于阈值的框
        inds = np.where(ovr <= threshold)[0]
        order = order[inds+1]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

一些程序上的零碎知识点

  1. batch: 每一次迭代送到网络的图片数量,也叫做批数量。增大这个值可以让网络在较少的迭代次数内完成一个epoch。在固定最大迭代次数的前提下,增大batch会延长训练时间,但会更好的寻找到梯度下降的方向。如果显存够大,可以提高这个值来提高内存利用率。要注意:这个batch值过小会导致训练不够收敛,过大会陷入局部最优。
  2. subdivision: 这个参数会让你的每一个batch不是一下子丢进网络里,而是分成division份。一份一份地跑完后,再一起打包算作完成一次iteration。这样会降低对显存的占用情况。即subdivion=1,则一次把所有batch的图片都丢到网络里。若subdivision=2则一次丢一半。
  3. learning_rate: 训练发散、loss不变等情况可以降低学习率。
  4. step,scales: 这两个是组合在一起的,如:learning_rate:0.001 step:100,25000,35000 scales:10,.1,.1 这组初始值的意思就是:在0-100次iteration之间learning_rate为0.001;在100-25000次iteration之间learning_rate为上一次值的10倍即为0.01;在25000-35000次iteration之间learning_rate为上一次值的0.1倍即为0.001;在25000-35000次iteration之间learning_rate为上一次值的0.1倍即为0.0001。可以看出随着iteration增加,降低学习率可以使得模型更有效的学习,即更好的降低train loss。
  5. 使用GPU监视命令来查看GPU使用情况
watch -n 1 nvidia-smi
  • 1

watch的作用是周期性地执行某一命令,-n 的后面指多少秒执行一次命令。这里的指令表示每1秒更新一下GPU的使用情况。

关于性能评价参数的理解

例子:
假如有如下图所示的测试集,测试集有飞机和大雁两种图片。若分类系统的目的是:能取出测试集中所有飞机的图片。

有如下四个定义:
true positive:飞机的图片识别为飞机
true negative:大雁的图片没有被取出(因为能正确识别是大雁)
false positive:大雁被识别为飞机
false negative:飞机图片没有取出来,因为识别成了大雁

性能参数:

  1. precision
    就是识别出来的图片中true positive占的比例。总的识别出来的图片数量也就是true positive的数量加上false positive的数量和。

  2. recall
    是正确识别出来的飞机个数与测试集中所有飞机个数的比值。测试集中所有飞机个数就是true positive的数量加上false negative的数量和。

  3. 阈值
    可以通过调整阈值,选择让系统识别出多少张图片,进而改变precision和recall的值。

  4. precision-recall曲线
    用于评估分类器的性能,观察当阈值变化时,precision和recall值的变化情况。
    (1)若分类器性能好,则应该表现为:被识别出的图片中飞机所占的比重较大,且在识别出大雁之前,尽可能多的正确的识别出飞机,也就是让recall增长的同时保持precision在一个很高的水平。
    (2)性能较差的分类器表现为:可能需要损失很多的precision才能提高recall值。

  5. Approximated Average precision
    (1)相比于precision-recall曲线,一个具体的数值更能直接表现出分类器的性能。
    (2)average precision的公式为:
    在这里插入图片描述
    上面的积分公式中,p代表precision,r代表recall,p是一个以r为参数的函数,积分就相当于函数曲线下的面积。这个积分公式中得到的值与下面求解得到的值是想接近的。对每一种阈值分别求(precision值)乘以(recall值的变化情况),再把所有阈值下求得的乘积值进行累加,公式如下:
    在这里插入图片描述
    在上面的乘积再求和公式中,N代表测试集中所有图片的个数,P(k)表示在能识别出k张图片时的precision值,
    在这里插入图片描述表示识别图片从k-1变化到k时(通过调整阈值)recall值的变化情况。
    在下面给出的precision-recall曲线图所对应的例子中,套用上面的乘积再求和公式即为如下式子:
    在这里插入图片描述
    在这里插入图片描述=[1*(0.2-0)]+[1*(0.4-0.2)]+[0.66*(0.4-0.4)]+[0.75*(0.6-0.4)]+[0.6*(0.6-0.6)]+[0.66*(0.8-0.6)]+[0.57*(0.8-0.8)]+[0.5*(0.8-0.8)]+[0.44*(0.8-0.8)]+[0.5*(1-0.8)]=0.782
    那些recall值没有变化的地方对增加average precision值没有贡献。

  6. Interpolated 插值 average precision
    这个算法不适用P(k),而是使用
    在这里插入图片描述
    每次都使用:在所有阈值的precision中,最大值的那个precision值与recall的变化值相乘。公式如下:
    在这里插入图片描述

下图是approximated average precision和interpolated average precision两种方法的对比:
在这里插入图片描述
由上图可以看出,
(1)approximated average precision与精度曲线挨得很近。
(2)使用interpolated average precision算出的average precision值要比approximated average precision算出的值要高。
(3)很多文章都是使用的interpolated avrage precision,例如PASCAL Visual Objects Challenge认为interpolated average precision能有效减少precision-recall曲线中的抖动。
(4)在比较文章中的average precision值时,要弄清楚是使用的approximated average precision还是interpolated average precision的度量方法。

  1. IOU intersection交集-over-union并集
    指的是系统预测出来的框和原来图片中标记的框的重合程度。也即模型产生的目标窗口与原来标记窗口的叠合率。
    在这里插入图片描述
    IOU的值是检测结果(detection result)与ground truth的交集比上它们的并集。
    用python实现IOU的程序如下:
def IOU(Reframe,GTframe):
    # 自定义函数,计算两矩形IOU,传入为矩形对角线(x,y)坐标
    # Reframe:detection result   GTframe:ground truth
    x1 = Reframe[0]
    y1 = Reframe[1]
    width1 = Reframe[2]-Reframe[0]
    height = Reframe[3]-Reframe[1]
    x2 = GTframe[0]
    y2 = GTframe[1]
    width2 = GTframe[2]-GTframe[0]
    height2 = GTframe[3]-GTframe[1]

    endx = max(x1+width1,x2+width2)
    startx = min(x1,x2)
    width = width1+width2-(endx-startx)

    endy = max(y1+height1,y2+height2)
    starty = min(y1,y2)
    height = height1+height2-(endy-starty)

    if width <= 0 or height <= 0:
        # 重叠率为0
        ratio = 0
    else:
        # 两矩形相交面积
        Area = width*height
        Area1 = width1*height1
        Area2 = width2*height2
        ratio = Area*1./(Area1+Area2-Area)
    # return IOU
    return ratio,Reframe,GTframe
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

性能参数的小结

  1. 精确度和召回率是评估分类器性能的指标。
  2. 精确度和召回率因分类器阈值的严格程度而异。
  3. 有多种方法可以用平均精度的值来评价分类器性能,所以在比较平均精度时要知道是用的哪种方法。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/345880
推荐阅读
相关标签
  

闽ICP备14008679号