目标检测及锚框、IoU

news/2024/7/10 3:10:27 标签: 目标检测, 人工智能, 计算机视觉

1. 目标检测

物体检测(目标检测)是计算机视觉和数字图像处理的热门方向,意在判断一幅图像上是否存在感兴趣物体,并给出物体分类及位置等(What and Where)。本文主要进行物体检测研究背景、发展脉络、相关算法及评价指标的概述。

我们要识别中所有我们感兴趣的物体,并且找出每个物体的位置。

边缘框

边缘框是图片中物体的真实位置和范围,有两种表示方式,一种是边角坐标表示法,通过物体左上和右下两个角的坐标表示一个矩形框,还有一种是中心表示法,用物体的中心和宽高表示矩形框。

  • 一个边缘框可以通过4个数字定义
    • (左上x,左上y,右下x,右下y)
    • (左上x,左上y,宽,高)

在这里插入图片描述

目标检测数据集

  • 每行表示一个物体
    • 图片文件名、物体类别、边缘框
  • COCO数据集
    • 80物体,330K图片,1.5M物体

定义两种边缘框之间的转换函数

import torch
def box_corner_to_center(boxes):
    """ 从(左上,右下)转换到(中间,宽度,高度) """
    x1,y1,x2,y2 = boxes[:,0],boxes[:,1],boxes[:,2],boxes[:,3]
    cx = (x1+x2)/2
    cy = (y1+y2)/2
    w = x2-x1
    h = y2-y1
    boxes = torch.stack((cx,cy,w,h),dim=1)
    return boxes

def box_center_to_corner(boxes):
    """从(中间,宽度,高度)转换到(左上,右下)"""
    cx,cy,w,h = boxes[:,0],boxes[:,1],boxes[:,2],boxes[:,3]
    x1 = cx - 0.5 * w
    y1 = cy - 0.5 * h
    x2 = cx + 0.5 * w
    y2 = cy + 0.5 * h
    boxes = torch.stack((x1, y1, x2, y2), dim=1)
    return boxes

边缘框实现

from matplotlib import pyplot as plt

# 将边界框在图中画出
def bbox_to_rect(bbox,color):
    return plt.Rectangle(
        xy=(bbox[0], bbox[1]), width=bbox[2] - bbox[0], height=bbox[3] - bbox[1],
        fill=False, edgecolor=color, linewidth=2)

dog_bbox, cat_bbox = [60.0, 45.0, 378.0, 516.0], [400.0, 112.0, 655.0, 493.0]

fig = plt.figure(figsize=(5,8),dpi=100)
ax1 = fig.add_subplot(1,1,1)
image= plt.imread("code/images/catdog.jpg")
ax1.imshow(image)

ax1.axes.add_patch(bbox_to_rect(dog_bbox, 'blue'))
ax1.axes.add_patch(bbox_to_rect(cat_bbox, 'red'));
plt.show()

2. 锚框

在众多经典的目标检测模型中,均有先验框的说法,有的paper(如Faster RCNN)中称之为anchor(锚点),有的paper(如SSD)称之为prior bounding box(先验框),实际上是一个概念。

锚框的作用:

对于目标检测任务,有这样一种经典解决方案:遍历输入图像上所有可能的像素框,然后选出正确的目标框,并对位置和大小进行调整就可以完成目标检测任务。这些进行预测的像素框就叫锚框。这些锚框通常都是方形的。

同时,为了增加任务成功的几率,通常会在同一位置设置不同宽高比的锚框。锚框的设置形式有很多种。

  • 一类目标检测算法是基于锚框
    • 提出多个被称为锚框的区域(边缘框)
    • 预测每个锚框里是否含有关注的物体
    • 如果是,预测从这个锚框到真实边缘的偏移

在这里插入图片描述


3. IoU - 交并比

IoU用来计算两个框之间的相似度

在这里插入图片描述

  • 0表示无重叠,1表示重合

这是Jacquard指数的一个特殊情况

给定两个集合$\ A\ 和 和 \ B\ $
J ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ J(A,B)=\frac{|A \cap B|}{|A \cup B|} J(A,B)=ABAB


4. 赋予锚框标号

  • 每个锚框是一个训练样本

  • 将每个锚框,要么标注成背景,要么关联上一个真实边缘框

  • 我们可能会生成大量的锚框

    • 这个导致大量的负类样本

在蓝色格子里面寻求IoU的最高值,选中,比如:

第一个最大值为$\ x_{23}\ $,那就用锚框2来预测边缘框3,去除锚框2边缘框3所对应的行列。

继续在剩下的格子里面寻找最大值,如$\ x_{71}\ $,那就用锚框7来预测边缘框1,去除锚框7边缘框1所对应的行列。

在这里插入图片描述

赋予标号的方式有很多种。


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

  • 每个锚框预测一个边缘框
  • NMS可以合并相似的预测
    • 选中的是非背景类的最大预测值
    • 去掉所有其它和它IoU值大于$\ \theta\ $的预测
    • 重复上诉过程直到所有预测要么被选中,要么被去掉

如:

在这里插入图片描述

首先选取狗类别的最大预测值,为0.9,然后去除该类别预测值小于0.9且IoU大于$\ \theta\ 的值。然后选取猫类别的最大预测值,为 0.9 ,然后去除该类别预测值小于 0.9 且 I o U 大于 的值。 然后选取猫类别的最大预测值,为0.9,然后去除该类别预测值小于0.9且IoU大于 的值。然后选取猫类别的最大预测值,为0.9,然后去除该类别预测值小于0.9IoU大于\ \theta\ $的值。
在这里插入图片描述

总结:

  • 一类目标检测算法基于锚框来预测
  • 首先生成大量锚框,并赋予标号,每个锚框作为一个样本进行训练
  • 在预测时,使用NMS来去掉冗余的预测

http://www.niftyadmin.cn/n/5127675.html

相关文章

深圳公司税 务异常解除 深圳公司地址异常 深圳公司异常注销

一、导致税 务异常原因有哪些? 1、没有按时申报纳税:一般很多企业可能没有实际经营业务,认为就不需要记账报 税,长时间下去,就会出现记账报 税税 务异常; 2、关联企业税 务异常:企业有分公司的…

竞赛选题 深度学习图像修复算法 - opencv python 机器视觉

文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步:将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…

springboot+vue基于协同过滤算法的私人诊所管理系统的设计与实现【内含源码+文档+部署教程】

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

LeetCode|股票问题|121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II、123. 买卖股票的最佳时机 III

目录 一、121. 买卖股票的最佳时机 1.题目描述 2.解题思路 3.代码实现 二、122. 买卖股票的最佳时机 II 1.题目描述 2.解题思路 3.代码实现 三、123. 买卖股票的最佳时机 III 1.题目描述 2.解题思路 3.代码实现 一、121. 买卖股票的最佳时机 1.题目描述 给定一个…

为什么把k8s比做操作系统:kubernetes与os的架构对比

你还在背八大件吗?不如把k8s的架构和os一起看,你会发现一些超有趣的事情!本文旨在将k8s的架构和os做个对比,帮助读者理解为什么k8s要这么设计。 kubernetes架构 kubernetes架构中由master节点和minion节点组成,maste…

智能水厂运行与调控3D模拟仿真在线展示提高整个系统的协同效应

水厂在生活中的重要性不可忽视。它们提供清洁、安全的水源,满足人们饮用、洗浴、烹饪等基本需求,保障公共卫生,预防疾病传播;同时,水厂也促进经济发展,为工业生产和农业灌溉提供保障,吸引和支持企业的投资和…

C++学习笔记之三(标准库、标准模板库、vector类)

C 1、C标准库2、C标准模板库2.1、vector2.1.1、vector与array2.1.2、vector与函数对象2.1.3、vector与迭代器 1、C标准库 C C C标准库指的是标准程序库( S t a n d a r d Standard Standard L i b a r a y Libaray Libaray),它定义了十个大类,其中包括…

awk学习笔记2-基础正则表达式

(一)正则表达式基础 1.重复匹配 * 匹配前面的模式零次或多次/匹配前面那个字符 0 或多次匹配前面的模式一次或多次/匹配前面那个字符 1 次以上 ? 匹配前面的模式零次或一次/匹配前面那个字符 0 或一次 {M,N} 匹配前面那个字符至少 M&#xff0…