前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >目标检测系列之一(候选框、IOU、NMS)

目标检测系列之一(候选框、IOU、NMS)

作者头像
Minerva
修改于 2020-05-31 05:11:01
修改于 2020-05-31 05:11:01
6.4K00
代码可运行
举报
运行总次数:0
代码可运行

目标检测系列之一(候选框、IOU、NMS)

目前计算机视觉(CV,Computer Vision)与自然语言处理(NLP,Natural Language Process)是深度学习的主要研究领域。而计算机视觉的三大任务是图像分类、目标检测和目标分割。

图像分类就是给定一些包含不同目标的图像,通过深度学习技术将图像结构化为某一个类别的信息,比如猫、狗、桌子、汽车、树木等等,学习任务的重点是图像的整体。 目标检测则关注的是图像中的特定物体目标,并给出该目标的类别信息(Classification,类别概率表示)和位置信息(Localization,矩形框的坐标表示)。 目标分割是对图像的像素级描述,相当于给图像的每个像素都进行像素级的分类。语义分割(Semantic Segmentation)是对图像中不同语义的目标进行分割,从而分离出不同的目标和背景。实例分割(Instance Segmentation)是目标检测任务的精细化,需要描绘出不同目标的轮廓。

内容目录

1 目标检测概述2 目标候选框(Instance Bounding Boxes)2.1 滑窗法(Sliding Window)2.2 选择性搜索(Selective Search)3 IOU交并比4 NMS非极大值抑制

1 目标检测概述

目标检测需要同时解决分类定位两个任务。 分类任务需要通过卷积神经网络+Softmax判断目标类别(ClassNum = 目标个数+背景)。 定位任务需要通过卷积神经网络回归输出四个数值来代表围绕目标的边界框的位置(如中心点坐标、边界框的长宽)。

目标检测的方法主要分为两类: 两阶段(Two Stages):第一阶段由卷积神经网络基于输入图像生成一系列目标候选框,第二阶段对这些候选框进行分类。常见的算法有R-CNN、Fast R-CNN和Faster R-CNN等。 一阶段(One Stage):只有一个阶段,不需要生成候选框了,直接对图像中的目标进行回归,生成目标对应的类别、边界框的位置信息。常见的算法有YOLO和SSD等。 基于候选区域的两阶段算法在检测准确性和定位精度上有优势,而一阶段算法在运算速度上占优势。

我们首先介绍一些目标检测涉及到的名词理解,如候选框、IOU交并比、NMS非极大值抑制等。

2 目标候选框(Instance Bounding Boxes)

两阶段目标检测算法需要首先对图像中的目标进行候选框生成,主要有两种方法,滑窗法选择性搜索

2.1 滑窗法(Sliding Window)

滑窗法是采用不同大小和长宽比的窗口在图像上进行从左到右、从上到下的滑动搜索,并对这些窗口进行分类,实现对整张图像的候选框查找。这个方法有一个缺点,因为我不知道目标的大小,设置不同大小的窗口对候选框查找结果有很大的影响,而且滑动窗的步长太小会产生过多的候选框,带来很大的计算量,步长太大又容易错过精确的目标候选框,对于实时性和速度要求较高时不推荐使用滑窗法。

2.2 选择性搜索(Selective Search)

选择性搜索对图像中最有可能包含目标的区域进行搜索以提高效率,首先对输入图像进行分割产生很多小区域(如2000个),根据这些小区域的相似性(颜色、纹理、大小等)采用子区域合并的方法进行区域迭代合并,生成外切矩形,也就是候选框。选择性搜索既提高了运算效率,又可以包含各种大小的候选框。

3 IOU交并比

为了计算算法提出的候选框的准确性,我们引入了IOU(Intersection Over Union)指标来计算候选框和目标实际标注边界框的重合度。假如我们要计算两个矩形框A和B的IOU,就是它们的交集与并集之比。

IOU 为 0 时,两个框不重叠,没有交集。 IOU 为 1 时,两个框完全重叠。 IOU 取值为 0 ~ 1 之间的值时,代表了两个框的重叠程度,数值越高,重叠程度越高。 A和B的面积都容易求得,而AB交集的面积需要根据A和B的相对位置得到边长,我们用W代表横轴的边长,H代表纵轴的边长,

Python代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def iou(box1, box2):
    '''
    两个框(二维)的 iou 计算

    注意:边框以左上为原点

    box:[top, left, bottom, right]
    '''
    in_h = min(box1[2], box2[2]) - max(box1[0], box2[0])
    in_w = min(box1[3], box2[3]) - max(box1[1], box2[1])
    inter = 0 if in_h<0 or in_w<0 else in_h*in_w
    union = (box1[2] - box1[0]) * (box1[3] - box1[1]) + \
            (box2[2] - box2[0]) * (box2[3] - box2[1]) - inter
    iou = inter / union
    return iou

4 NMS非极大值抑制

NMS(Non-Maximun Suppression)非极大值抑制就是抑制不是极大值的元素。该方法主要是为了降低候选框数量,我们在之前提取出目标的候选框数量非常多(几千个),每个候选框经过分类器会有一个属于某个类别的概率值,我们需要NMS方法来去掉多余的候选框。

假设我们的目标分类任务有6类,在第一阶段得到2000个候选框,输出向量为2000*6,每列对应一类,每行是各个建议框的得分,有2000个,NMS算法步骤如下: 1)对2000×6维矩阵中的每列按从大到小进行排序(概率值越大排名越靠前); 2)从每列最大的得分候选框开始,分别与该列后面的候选框进行IOU计算,若IOU>给定阈值(如0.5),则剔除得分较小的候选框,剩余多个候选框我们认为图像中可能存在多个该类目标; 3)依次对得分越来越小的候选框重复步骤②,同样剔除IOU得分较小的候选框; 4)重复步骤③直到遍历完该列所有建议框; 5)遍历完2000×20维矩阵所有列,即所有物体种类都做一遍非极大值抑制;

Python代码,来自知乎用户HunterKun,在文章中他还给出了多种实现方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
def nms(dets, thresh):
    """Pure Python NMS baseline."""
    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
        ovr = inter / (areas[i] + areas[order[1:]] - inter)
        inds = np.where(ovr <= thresh)[0]
        order = order[inds + 1]
    return keep

参考: https://blog.csdn.net/u014061630/java/article/details/82818112 https://zhuanlan.zhihu.com/p/64423753 https://www.cnblogs.com/xiaoboge/p/10544336.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python编程和深度学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
目标检测算法之NMS后处理相关
昨天盘点了一下目标检测算法的常见数据集还有评判标准,但目标检测过程还有一个后处理算法的重要性确常被忽略,今天我们就来盘点一下目标检测算法中的NMS相关知识吧。
BBuf
2019/12/09
1.4K0
解释 NMS (Non Maximum Suppression) 算法的原理
NMS(Non-Maximum Suppression,非极大值抑制)是目标检测中常用的一种后处理技术,用于消除冗余的检测框,保留最有可能的检测结果。其主要目的是解决多个边界框重叠的问题,确保每个目标只有一个边界框。
代码小李
2025/01/23
1800
【目标检测系列】非极大值抑制(NMS)的各类变体汇总
所以本文针对目标检测中的NMS作进一步研究,基本的NMS方法,利用得分高的边框抑制得分低且重叠程度高的边框。NMS方法虽然简单有效,但在更高的目标检测需求下,也存在如下缺点:
深度学习技术前沿公众号博主
2020/06/19
3.3K0
【目标检测系列】非极大值抑制(NMS)的各类变体汇总
【计算机视觉——RCNN目标检测系列】三、IoU与非极大抑制
在上一篇文章:【计算机视觉——RCNN目标检测系列】二、边界框回归(Bounding-Box Regression)中我们主要讲解了R-CNN中边界框回归,接下来我们在这篇文章我们讲解R-CNN中另外一个比较种重要的模块——IoU与非极大抑制。
AI那点小事
2020/04/15
1.1K0
【计算机视觉——RCNN目标检测系列】三、IoU与非极大抑制
非极大值抑制(Non-Maximum Suppression)
本文介绍了非极大值抑制(Non-Maximum Suppression, NMS)在计算机视觉目标检测中的应用,主要讲述了如何通过 Python 和 OpenCV 库实现 NMS 算法。首先介绍了 NMS 的基本概念和作用,然后通过具体的实验过程展示了 NMS 算法的实现过程,最后给出了参考资料和实验结果。
Tyan
2017/12/28
2.2K0
非极大值抑制(Non-Maximum Suppression)
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
object detection,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。所以,object detection要解决的问题就是物体在哪里以及是什么的整个流程问题。
智能算法
2019/12/06
11.3K1
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
object detection中的非极大值抑制(NMS)算法
前言 什么是NMS算法呢?即非极大值抑制,它在目标检测、目标追踪、三维重建等方面应用十分广泛,特别是在目标检测方面,它是目标检测的最后一道关口,不管是RCNN、还是fast-RCNN、YOLO等算法,都使用了这一项算法。 一、概述 非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索。这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域的大小。这里不讨论通用的NMS算法(参考论文《Efficient Non-Maximum Suppression》对1维和2维数据的NMS实现),而是用于目标检测中提取分数最高的窗口的。例如在行人检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分数。但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高(是行人的概率最大),并且抑制那些分数低的窗口。 NMS在计算机视觉领域有着非常重要的应用,如视频目标跟踪、数据挖掘、3D重建、目标识别以及纹理分析等。本文主要以目标检测中的应用加以说明。
小草AI
2019/06/02
7.3K0
一分钟速学 | NMS, IOU 与 SoftMax
简单的说,就是模型给出了多个重叠在一起的候选框,我们只需要保留一个就可以了。其他的重叠的候选框就删掉了,效果可见下图:
机器学习炼丹术
2020/07/23
9850
一分钟速学 | NMS, IOU 与 SoftMax
python opencv-有点意思同学讨论问题记录
还有很多,懒得发了,通过讨论,问题基本上都已经解决了,本来懒得写了,觉得太花时间了,想了想决定还是写吧,别问为啥,问就是热爱编程,乐于助人。
叶子陪你玩
2021/12/08
6830
python opencv-有点意思同学讨论问题记录
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD「建议收藏」
之前我所在的公司七月在线开设的深度学习等一系列课程经常会讲目标检测,包括R-CNN、Fast R-CNN、Faster R-CNN,但一直没有比较好的机会深入(但当你对目标检测有个基本的了解之后,再看这些课程你会收益很大)。但目标检测这个领域实在是太火了,经常会看到一些写的不错的通俗易懂的资料,加之之前在京东上掏了一本书看了看,就这样耳濡目染中,还是开始研究了。
全栈程序员站长
2022/06/30
8300
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD「建议收藏」
目标检测 - 非极大值抑制(Non Maximum Suppression)
NMS 对检测得到的全部 boxes 进行局部的最大搜索,以搜索某邻域范围内的最大值,从而滤出一部分 boxes,提升最终的检测精度.
AIHGF
2019/02/18
6610
目标检测算法发展简史
比起图像识别,现在图片生成技术要更加具有吸引力,但是要步入AIGC技术领域,首先不推荐一上来就接触那些已经成熟闭源的包装好了再提供给你的接口网站,会使用别人的模型生成一些图片就能叫自己会AIGC了吗?那样真正成为了搬运工了,而且是最廉价的。 生成图片技术更多是根据一些基础的图像处理技术来演变而来,从最基础的图像处理技术学习,你就能明白图片生成是怎么一回事。最近看了很多关于目标检测的文章和博客,也在学习AIGC技术,从基础手工设计特征到如今的深度学习模型,二者技术发展历史其实可以说是有比较共同性的。
fanstuck
2024/01/26
2.7K0
目标检测算法发展简史
目标检测算法基础概念:边框回归和NMS
【导读】前面我们详细介绍了目标检测领域常用的一些评价指标。本文我们来讨论一下在目标检测算法中必须掌握的两个基本概念:边框回归和NMS(非极大值抑制)。
深度学习技术前沿公众号博主
2020/06/10
1.4K0
目标检测算法基础概念:边框回归和NMS
即插即用 | 或许你的NMS该换了,Confluence更准、更稳的目标检测结果
---- 新智元报道   来源:AI人工智能初学者 作者:ChaucerG 【新智元导读】本文提出了一种优于NMS的非IoU替代方案,其在边界框保留和抑制方面不依赖IoU或最大置信度得分。在YOLOv3、RetinaNet和Mask R-CNN等检测器上实验证明,Confluence比NMS性能更强,更可靠! 简介 本文提出了一种在目标检测中的边界框选择和抑制任务中替代贪婪非极大值抑制(NMS)的新颖方法。它提出了Confluence,该方法不仅不依赖于置信度得分来选择最佳边界框,也不依赖于IoU
新智元
2023/05/22
5460
即插即用 | 或许你的NMS该换了,Confluence更准、更稳的目标检测结果
【深度学习】目标检测
目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。
杨丝儿
2022/03/01
2.9K0
【深度学习】目标检测
目标检测基本概念与性能评价指标计算
不同的问题和不同的数据集都会有不同的模型评价指标,比如分类问题,数据集类别平衡的情况下可以使用准确率作为评价指标,但是现实中的数据集几乎都是类别不平衡的,所以一般都是采用 AP 作为评价指标,分别计算每个类别的 AP,再计算mAP。
嵌入式视觉
2022/09/05
9490
目标检测基本概念与性能评价指标计算
目标检测算法中检测框合并策略技术综述
物体检测(Object Detection)的任务是找出图像或视频中的感兴趣目标,同时实现输出检测目标的位置和类别,是机器视觉领域的核心问题之一,学术界已有将近二十年的研究历史。随着深度学习技术的火热发展,目标检测算法也从基于手工特征的传统算法转向了基于深度神经网络的检测技术。从最初 2013 年提出的 R-CNN、OverFeat,到后面的 Fast/Faster R-CNN、SSD、YOLO 系列,以及Mask R-CNN、RefineDet、RFBNet等(图 1,完整论文列表参见[1])。短短不到五年时间,基于深度学习的目标检测技术,在网络结构上,从 two stage 到 one stage,从 bottom-up only 到 Top-Down,从 single scale network 到 feature pyramid network,从面向 PC 端到面向移动端,都涌现出许多好的算法技术,这些算法在开放目标检测数据集上的检测效果和性能都很出色。
SIGAI学习与实践平台
2018/12/05
1.3K0
无需NMS的目标检测,OneNet
目标检测是计算机视觉领域的基础性任务之一,并且赋能大量的下游应用。当前目标检测器存在的一大挑战是标签分配问题。特别地,如何定义每个目标的正样本和背景的负样本始终是一个悬而未决的难题。数十年来,目标检测中的正样本一直是候选框,它与真值框的 IoU 大于阈值。现代检测器在图像网格上预定义数千个锚框,并在这些候选框上执行分类和回归任务。这种基于框的标签分配方法被称为「框分配」。
计算机视觉
2021/01/12
8410
无需NMS的目标检测,OneNet
CVPR2021目标检测 | Weighted boxes fusion(附github源码及论文下载)
当不需要实时推理时,模型的整合就有助于获得更好的结果。在这项工作中,研究者提出了一种新的方法来结合目标检测模型的预测:加权边界框融合。新提出的算法利用所有提出的边界框的置信度分数来构造平均的边界框。
计算机视觉研究院
2021/05/08
1.2K0
CVPR2021目标检测 | Weighted boxes fusion(附github源码及论文下载)
计算机视觉-YOYO-
对计算机而言,能够“看到”的是图像被编码之后的数字,但它很难理解高层语义概念,比如图像或者视频帧中出现的目标是人还是物体,更无法定位目标出现在图像中哪个区域。目标检测的主要目的是让计算机可以自动识别图片或者视频帧中所有目标的类别,并在该目标周围绘制边界框,标示出每个目标的位置,如 图1 所示。
zhangjiqun
2024/12/14
1130
计算机视觉-YOYO-
推荐阅读
相关推荐
目标检测算法之NMS后处理相关
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验