当前位置: 首页 > java >正文

探索目标检测:边界框与锚框的奥秘

笔者在2022年开始学习目标检测的时候,对各种框的概念那是相当混淆,比如:

  • 中文名词:边界框、锚框、真实框、预测框等
  • 英文名词:BoundingBox、AnchorBox、Ground Truth等

同一个英文名词比如BoundingBox翻译成中文也有多个叫法。下面注重区分这些概念。

一、真实框Ground Truth & 边界框Bounding Box

1️⃣真实框Ground Truth与边界框Bounding Box的定义

目标检测需要识别图片中多个物体的位置与类别。

为了方便模型训练,我们人为地将图片中物体的位置与种类标注出来,这就是真实边界框Ground Truth

  • 「Ground Truth」等价于「Ground Truth Bounding Box(GT BBox)」

边界框Bounding Box则更多的是一种泛指,它可以指代各个类型的框。


2️⃣GT BBox的标注常见于两种形式:
  1. PascalVOC的xml标注文件: ( x 1 , y 1 , x 2 , y 2 ) (x_1, y_1, x_2, y_2) (x1,y1,x2,y2),分别是矩形框左上角、右下角的坐标;
    如下图中的坐标(1, 1)
  2. COCO的json标注文件: ( x , y , w , h ) (x, y, w, h) (x,y,w,h),xy是矩阵框的中心点坐标,wh是矩阵框的宽高;

标注文件中每行表示一个物体,一般是:图片文件名、物体类别、边缘框。

请添加图片描述



二、边界框的回归 BoundingBox Regression

模型对其「预测框」进行微调,使其接近Ground Truth Bounding Box。
如下图对红色的BBox回归,使其接近绿色的GT Box。

请添加图片描述



三、锚框Anchor Box

1️⃣Ground Truth Bounding Box与Anchor的区别:

锚框Anchor是算法自动生成出的,GT BBox是人为的标注框。

目前定位精准的目标检测算法还是基于锚框的,即Anchor-based。


2️⃣锚框的使用:
在训练集上利用k-means等方法聚类出多个大小宽高不同的锚框
预测:每个锚框中是否含有目标物体
预测:从该锚框到边界框的偏移

3️⃣在目标检测任务中,我们如何选择锚框尺寸?

1)要么设定好锚框的尺寸:

  •   anchors:- [10,13, 16,30, 33,23]  # P3/8- [30,61, 62,45, 59,119]  # P4/16- [116,90, 156,198, 373,326]  # P5/32
    

2)要么通过k-means自动生成锚框,比如yolov5默认通过k-means自动生成锚框尺寸

3)作为超参数学习。我还没见过,估计这会产生额外的计算量


4️⃣锚框的标注过程

主流的目标检测算法大多基于锚框Anchor Box,每一个锚框都是一个训练样本。

对于每个锚框,要么标注成背景(负样本),要么关联上一个真实边界框(正样本)。

一张图片可能会产生上万个锚框,其中绝大多数都是背景,即大量的负样本,与之相比,正样本可能只有几十个。

请添加图片描述

图. 锚框的标注
  • 假设4个目标物体对应着4个GT BBox,模型对每个目标物体各生成9个锚框;
  • 计算每个GT与Anchor之间的IoU值,找到当前最大的IoU值 x 23 x_{23} x23,将锚框关联上BBox_3,由它去预测BBox_3。删去该行该列;
  • 继续找当前最大的IoU值 x 71 x_{71} x71,重复如上操作,删去该行该列;

与BBox关联的锚框作为正样本,其他的作为背景就是负样本

PS:Anchor的概念最早出现在Faster RCNN提出的RPN网络,RPN网络的Anchor启发了后面的SSDYolov2算法。



四、额外:召回与排序的概念

召回:将所有“可能的正确结果”返回给排序

排序:会将所有召回的结果进行排序,将最靠前的结果作为最终答案

http://www.xdnf.cn/news/2890.html

相关文章:

  • leetcode 21. 合并两个有序链表(c++解法+相关知识点复习)
  • 目标检测和目标跟踪的区别与联系
  • 大前端开发——前端知识渐变分层讲解 利用金字塔原理简化前端知识体系
  • 长短期记忆网络(LSTM)
  • MySQL多表操作
  • Ansible 铸就 Linux 安全之盾(Ansible Builds Linux Security Shield)
  • 《软件测试52讲》学习笔记:如何设计一个“好的“测试用例?
  • 【学习资源】知识图谱与大语言模型融合
  • 在Mybatis中写sql的常量应用
  • 万物皆可执行:多功能机器人正在定义新生产力法则
  • Ceph IO读写流程详解(二)——RADOSGW请求处理
  • Lightroom 2025手机版:专业编辑,轻松上手
  • 基于 STM32 的智慧图书馆智能控制系统设计与实现
  • DeepSeek破界而来:重构大规模深度检索的算力与边界
  • Java云原生+quarkus
  • 1.1探索 LLaMA-Factory:大模型微调的一站式解决方案
  • Consul安装部署(Windows环境)
  • 链表反转_leedcodeP206
  • 判断图片url损坏无法展示工具类
  • UE5 Set actor Location和 Set World Location 和 Set Relative Location 的区别
  • 关于本地端口启动问题
  • JAVA--- 关键字static
  • 长效住宅IP是什么?如何获取长效住宅IP?
  • 工程管理部绩效考核关键指标与项目评估
  • 选择排序快速排序
  • 国标GB28181视频平台EasyCVR实用方案:如何实现画面拉伸
  • 大厂Java面试深度解析:Dubbo服务治理、WebSocket实时通信、RESTEasy自定义注解与C3P0连接池配置实践
  • 信创开发中的数据库详解:国产替代背景下的技术生态与实践指南
  • 百度「心响」:通用超级智能体,重新定义AI任务执行新范式
  • Linux CentOS 7 安装Apache 部署html页面