• 目标检测。


    目标检测

    目标检测即识别图片中有哪些物体及物体的坐标。然而,在目标检测中能检测出来的物体又受人为设定,它取决于当前任务(数据集)需要检测的物体有哪些。比如一个目标检测模型的当前任务是检测猫、狗、牛和羊这四种结果,那么模型对任何一张图片的输出结果绝对不会有猪等其他类型的结果。

    以图片的左上角为原点(0,0),目标检测的位置信息一般有两种格式:

    1. 极坐标表示(标注、绘图):(xmin, ymin, xmax, ymax)左上角右下角
    • xmin,ymin:x,y坐标的最小值
    • xmax,ymax:x,y坐标的最大值
    1. 中心点坐标(网络输出):(x_center, y_center, width, height)中心点坐标和宽、高

    IOU评价指标

    IOU(intersection over union,交并比),即两个矩形框相交的面积/两个矩形框相并的面积。是目标检测算法中用来评价两个矩形框之间相似度的指标。公式如下:

    I O U    =    A r e a    o f    i n t e r s e c t i o n A r e a    o f    u n i o n IOU\;=\;\frac{Area \;of \;intersection}{Area \; of \;union} IOU=AreaofunionAreaofintersection

    在这里插入图片描述

    当IOU大于一定的阈值(一般取0.5),则说明检测到目标物体。但是,数据集中的每一张图片可能包含着不同类别的其他物体,因此,用于图像分类问题的标准指标precision不能直接应用于此。

    mAP评价指标

    mAP(Mean Average Precision)是多个分类任务的平均值,而AP是图片中具体某一类Precision-Recall曲线下的面积。mAP则是计算所有类别Precision-Recall 曲线下面积的平均值。
    m A P    = ∑ i = 1 C A P i C mAP \;=\frac{\sum_{i=1}^CAP_{i}}{C} mAP=Ci=1CAPi
    其中,C为目标检测任务中的类别数量。

    先回顾下在分类评估指标中有以下这么一些定义:

    • TP(True Postive):将正类预测为正类数,真实为0,预测也为0;
    • FP(False Positive):将负类预测为正类数, 真实为1,预测为0;
    • FN(False Negative):将正类预测为负类数,真实为0,预测为1;
    • TN(True Negative):将负类预测为负类数,真实为1,预测也为1;

    在mAP评价指标中查准率和查全率计算公式如下:
    P r e c i s i o n    = T P T P + F P    = T P a l l    d e t e c t i o n s Precision\;=\frac{TP}{TP+FP}\;=\frac{TP}{all \;detections} Precision=TP+FPTP=alldetectionsTP
    R e c a l l    = T P T P + F N    = T P a l l    g r o u n d    t r u t h s Recall\;=\frac{TP}{TP+FN}\;=\frac{TP}{all \;ground \;truths} Recall=TP+FNTP=allgroundtruthsTP

    • TP: I O U > I O U t h r e s h o l d IOU\gt IOU_{threshold} IOU>IOUthreshold的检测框数量。(同一个Ground Truth只计算一次预测框为TP,若有多个预测框,则认为 IOU 最大且大于等于阈值的预测框标记为 TP)。
    • FP: I O U ⩽ I O U t h r e s h o l d IOU\leqslant IOU_{threshold} IOUIOUthreshold的检测框数量,或者是检测到同一个GT 的多余检测框的数量。
    • FN:没有检测到的 GT 的数量。

    得到查准率和查全率之后,绘制P-R曲线就可以计算mAP。举个例子,假设我们有 7 张图片(Images1-Image7),这些图片有 15 个目标,也就是GT的数量;以及 24 个预测边框(红色的框,A-Y 编号表示,并且有一个置信度值):
    在这里插入图片描述
    然后将每张图片的检测框标记成TP还是FP:
    在这里插入图片描述

    并根据检测框的置信度进行降序排序,见下表:
    )
    然后依次计算每个标号的Precision和Recall为PR曲线(横轴为Recall,纵轴为Precision)的坐标点,例如标号1的Precision=1/(1+0)=1;Recall=1/15=0.066;那么就得到了PR曲线的第一个坐标(0.066,1).
    标号20的Precision=6/(6+20)=0.3;Recall=6/15=0.4。坐标为(0.4,0.3)。其他标号同理,最后得出PR曲线如图下所示:
    在这里插入图片描述
    对于同一个Recall值,取Precision的最大值,如下图所示:
    在这里插入图片描述
    最后AP为曲线下的面积,即A1+A2+A3+A4的面积。
    在这里插入图片描述

    非极大值抑制(NMS)

    在目标检测任务中,滑动窗口提取特征,经过分类器分类识别后,每个预测窗口都会得到一个置信度值。但是滑动窗口会导致很多窗口与其他窗口存在或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高(某一类物体的概率最大),并且抑制那些分数低的窗口,从而达到去除冗余的检测框,保留最好的一个的目的。

    首先算法检测出所有预测框,其次将检测框按类别进行分类,将各个类别的检测框及其对应的置信度放入列表predict_list,假设当前predict_list为:[{‘bbox1’: ‘0.83’},{‘bbox2’: ‘0.93’},{‘bbox3’: ‘0.73’},{‘bbox4’: ‘0.63’},{‘bbox5’: ‘0.73’}],然后将置信度最大的预测框从列表B中抽出来放入列表result_list,此时predict_list和result_list变成:predict_list=[,{‘bbox2’: ‘0.53’},{‘bbox3’: ‘0.63’},{‘bbox4’: ‘0.43’}];result_list=[{‘bbox1’: ‘0.83’}],最后将result_list中的bbox1与变化后的predict_list中的其他检测框做IOU计算,IOU大于阈值的框从predict_list中移除,重复上述过程,直到predict_list为空,得到最终的检测结果。

    在这里插入图片描述

  • 相关阅读:
    Go线程实现模型-G
    Java并发 - (并发基础)
    ClassUtils.getQualifiedName()方法具有什么功能呢?
    【2023 高拓迅达 笔试题】~ 题目及参考答案
    K8S 集群搭建
    数字孪生技术助力城市轨道交通智慧升级
    OSI与TCP/IP与的体系结构的比较
    干货 | 每日十道Java集合面试题
    汇编指令集合
    C++设计模式_17_Mediator 中介者
  • 原文地址:https://blog.csdn.net/nmb_jiang/article/details/127746614