• 动手学习深度学习——锚框


    锚框

    目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边界从而更准确地预测目标的真实边界框.不同的模型使用的区域采样方法可能不同。 这里我们介绍其中的一种方法:以每个像素为中心,生成多个缩放比和宽高比(aspect ratio)不同的边界框。 这些边界框被称为锚框(anchor box)

    用锚框检测的步骤

    基于锚框的目标检测算法就是随机生成多个锚框,比较这些锚框与真实边缘框的差异来预测

    • 提出多个被称为锚框的区域(边缘框)
    • 预测每个锚框里是否含有关注的物体
    • 如果是,预测这个锚框到真实边缘框的偏移

    在这里插入图片描述

    处理锚框

    即计算锚框与真实边缘框的距离

    并交比(IoU)
    用来计算两个框之间的相似度

    • 0表示无重叠,1表示重合
      这是Jaccard指数的一个特殊情况
      杰卡德系数(Jaccard)可以衡量两组之间的相似性。 给定集合和,他们的杰卡德系数是他们交集的大小除以他们并集的大小:
      在这里插入图片描述
      在这里插入图片描述

    赋予锚框编号

    为了训练目标检测模型,我们需要每个锚框的类别(class)和偏移量(offset)标签,其中前者是与锚框相关的对象的类别,后者是真实边界框相对于锚框的偏移量。

    • 每个锚框是一个训练样本
    • 将每个锚框,要么标注成背景,要么关联上一个真实边缘框
    • 我们可能会生成大量锚框
      • 这可能会导致大量的父类样本

    将真实边界框分配给锚框

    • 算法步骤:
      在这里插入图片描述
    • 举例:
      矩阵的横向(1,2,3,4)表示边缘框(即图像中四个物体的真实边框),纵向(1到9表示随机生成的锚框)
      假设矩阵X中的最大值x23,我们将真实边界框B3分配给锚框A2。然后,我们丢弃矩阵第2行和第3列中的所有元素,在剩余元素(阴影区域)中找到最大的x71,然后将真实边界框B1分配给锚框A7。丢弃矩阵第7行和第1列中的所有元素,在剩余元素(阴影区域)中找到最大的x54,然后将真实边界框分配B4给锚框A5。 丢弃矩阵第5行和第4列中的所有元素,在剩余元素(阴影区域)中找到最大的x92,然后将真实边界框B2分配给锚框A9。之后,我们只需要遍历剩余的锚框A1,A3,A4,A6,A8,然后根据阈值确定是否为它们分配真实边界框。
      在这里插入图片描述

    使用非极大值抑制输出(NMS)

    当有许多锚框时,可能会输出许多相似的具有明显重叠的预测边界框,都围绕着同一目标。 为了简化输出,我们可以使用非极大值抑制(non-maximum suppression,NMS)合并属于同一目标的类似的预测边界框

    • 工作原理
      在这里插入图片描述

    总结

    • 我们以图像的每个像素为中心生成不同形状的锚框。
    • 交并比(IoU)也被称为杰卡德系数,用于衡量两个边界框的相似性。它是相交面积与相并面积的比率。
    • 在训练集中,我们需要给每个锚框两种类型的标签。一个是与锚框中目标检测的类别,另一个是锚框真实相对于边界框的偏移量。
    • 在预测期间,我们可以使用非极大值抑制(NMS)来移除类似的预测边界框,从而简化输出
  • 相关阅读:
    【英语:基础进阶_原著扩展阅读】J5.阅读分析中的常用概念
    3、RGB和通道(channel)
    C语言-存储期2.0
    一个优美的时间片轮转调度算法模拟Python实现
    MongoDB-1入门介绍
    vue脚手架基础demo1
    G. SlavicG‘s Favorite Problem(树的遍历DFS,BFS均可)
    计算机网络面经八股-什么是 SYN洪泛攻击?如何防范?
    记一次服务器Cuda驱动崩溃修复过程
    深度学习之基于Tensorflow人脸面部表情识别系统
  • 原文地址:https://blog.csdn.net/m0_51474171/article/details/126369828