物体检测之选择性搜索(Selective Search)

2024-06-22 14:58

本文主要是介绍物体检测之选择性搜索(Selective Search),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

物体检测之选择性搜索Selective Search

  • 0 概述
  • 1 物体检测和物体识别
    • 1.1 滑窗法
    • 1.2 候选区域(Region Proposal)算法
      • 1.2.1 物体检测之选择性搜索(Selective Search)
        • 1.2.1.1 相似度
        • 1.2.1.2 效果
  • 2 参考资料

0 概述

本文牵涉的概念是候选区域(Region Proposal ),用于物体检测算法的输入。无论是机器学习算法还是深度学习算法,候选区域都有用武之地。

本文的来源是翻译参考资料里的《Selective Search for Object Detection (C++ / Python)》,这是国外一个大神的博客,讲的是择性搜索(Selective Search)这一种产生候选区域的算法。这个算法并不是那个博主的原创,原创是2013年的一篇论文,我发现国内很多博客都做了介绍。

由于本人想系统的把从机器学习到深度学习的物体检测算法捋一遍,所以在此把国外大神的博客翻译一下,另外加一些自己的理解。

1 物体检测和物体识别

物体识别是要分辨出图片中有什么物体,输入是图片,输出是类别标签和概率。物体检测算法不仅要检测图片中有什么物体,还要输出物体的外框(x, y, width, height)来定位物体的位置。

物体检测的核心就是物体识别。

为了定位物体,我们需要选择一些子区域并在子区域上运行物体识别算法。物体的位置就是物体识别算法返回最高概率的子区域内。

在这里插入图片描述
产生候选子区域的最直接的方法就是滑窗法,但是这种办法效率比较低,一般使用‘候选区域’算法,而择性搜索(Selective Search)就是最流行的候选区域产生算法之一(个人理解:这个最流行可能是针对论文那两年说的,现在深度学习都是使用网络产生候选区域,不用算法生成了)。

1.1 滑窗法

在滑窗方案中,我们要使用一个小窗口遍历搜索整张图片,在每个位置上对滑窗内的图片做物体识别算法。不仅要搜索不同的位置,还要遍历不同的大小,工作量可想而知。

问题还没完,对于人脸和人体这种长宽比基本固定的物体还好,对于长宽不固定的物体,搜索起来简直就是噩梦,计算量直接飙升。

1.2 候选区域(Region Proposal)算法

滑窗法的问题可以使用候选区域产生算法解决。这些算法输入整张图片,然后输出可能有物体的候选区域位置,这些候选区域可以有噪声或者重叠,或者和物体的重合度不是很好,这都不要紧,只要这些区域里有一个和实际物体的位置足够接近就行。因为不好的候选区域会被物体识别算法过滤掉。

候选区域算法用分割不同区域的办法来识别潜在的物体。在分割的时候,我们要合并那些在某些方面(如颜色、纹理)类似的小区域。相比滑窗法在不同位置和大小的穷举,候选区域算法将像素分配到少数的分割区域中。所以最终候选区域算法产生的数量比滑窗法少的多,从而大大减少运行物体识别算法的次数。同时候选区域算法所选定的范围天然兼顾了不同的大小和长宽比。

候选区域算法比较重要的特征就是要有较高的召回率。我们要通过这种方法保证拥有物体的区域就在候选区域列表里。所以我们不介意有很多区域什么都有,这都没关系,物体检测算法会过滤掉他们,虽然会浪费一点时间。

目前已有不少成熟的后续区域产生算法:

  • Objectness
  • Constrained Parametric Min-Cuts for Automatic Object Segmentation
  • Category Independent Object Proposals
  • Randomized Prim
  • Selective Search

由于Selective Search又快召回率又高,这个方法是最常用的。说了这么多,终于牵出本文的主角了。

1.2.1 物体检测之选择性搜索(Selective Search)

选择性搜索算法用于为物体检测算法提供候选区域,它速度快,召回率高。

选择性搜索算法需要先使用《Efficient Graph-Based Image Segmentation》论文里的方法产生初始的分割区域,然后使用相似度计算方法合并一些小的区域。

下列两张图分别是原图和原始分割图:

在这里插入图片描述
在这里插入图片描述
我们不能使用原始分割图的区域作为候选区域,原因如下:

  1. 大部分物体在原始分割图里都被分为多个区域
  2. 原始分割图无法体现物体之间的遮挡和包含。

如果我们试图通过进一步合并相邻的区域来解决第一个问题,我们最终会得到一个包含两个对象的分段区域。

我们不要需要完美的的分割区域,我们只想要和实际物体高度重合的区域就行了。

选择性搜索算法使用《Efficient Graph-Based Image Segmentation》论文里的方法产生初始的分割区域作为输入,通过下面的步骤进行合并:

  1. 首先将所有分割区域的外框加到候选区域列表中
  2. 基于相似度合并一些区域
  3. 将合并后的分割区域作为一个整体,跳到步骤1

通过不停的迭代,候选区域列表中的区域越来越大。可以说,我们通过自底向下的方法创建了越来越大的候选区域。表示效果如下:

在这里插入图片描述

1.2.1.1 相似度

选择性搜索算法如何计算两个区域的像素度的呢?

主要是通过以下四个方面:颜色、纹理、大小和形状交叠

最终的相似度是这四个值取不同的权重相加

1.2.1.2 效果

opencv实现了选择性搜索算法,可以给出上千个根据有物体的可能性降序排列的候选区域。

下图是画出了前面200250个候选区域的效果。一般来说。10001200个候选区域基本能胜任物体检测的任务了。

在这里插入图片描述

2 参考资料

Selective Search作者网站

国外的博客:Selective Search for Object Detection (C++ / Python)

国内翻译的上面的博客:选择性搜索(selective search)

国内的博客:Selective Search for Object Recognition

国内博客2:目标检测–Selective Search for Object Recognition(IJCV, 2013)

图像分割:Efficient Graph-Based Image Segmentation

这篇关于物体检测之选择性搜索(Selective Search)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084615

相关文章

KLayout ------ 旋转物体90度并做平移

KLayout ------ 旋转创建的物体 正文 正文 前段时间,有个小伙伴留言问我,KLayout 中如何旋转自己创建的物体,这里特来说明一下。 import pyapoly = pya.DPolygon([pya.DPoint(0, 0), pya.DPoint(0, 5), pya

探索Elastic Search:强大的开源搜索引擎,详解及使用

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选,相信大家多多少少的都听说过它。它可以快速地储存、搜索和分析海量数据。就连维基百科、Stack Overflow、

基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别

转发来源:https://swift.ctolib.com/ooooverflow-chinese-ocr.html chinese-ocr 基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别 环境部署 sh setup.sh 使用环境: python 3.6 + tensorflow 1.10 +pytorch 0.4.1 注:CPU环境

【文末附gpt升级秘笈】腾讯元宝AI搜索解析能力升级:千万字超长文处理的新里程碑

腾讯元宝AI搜索解析能力升级:千万字超长文处理的新里程碑 一、引言 随着人工智能技术的飞速发展,自然语言处理(NLP)和机器学习(ML)在各行各业的应用日益广泛。其中,AI搜索解析能力作为信息检索和知识抽取的核心技术,受到了广泛的关注和研究。腾讯作为互联网行业的领军企业,其在AI领域的探索和创新一直走在前列。近日,腾讯旗下的AI大模型应用——腾讯元宝,迎来了1.1.7版本的升级,新版本在AI搜

基于深度学习的轮廓检测

基于深度学习的轮廓检测 轮廓检测是计算机视觉中的一项关键任务,旨在识别图像中物体的边界或轮廓。传统的轮廓检测方法如Canny边缘检测和Sobel算子依赖于梯度计算和阈值分割。而基于深度学习的方法通过训练神经网络来自动学习图像中的轮廓特征,能够在复杂背景和噪声条件下实现更精确和鲁棒的检测效果。 深度学习在轮廓检测中的优势 自动特征提取:深度学习模型能够自动从数据中学习多层次的特征表示,而不需要

自动驾驶---Perception之Lidar点云3D检测

1 背景         Lidar点云技术的出现是基于摄影测量技术的发展、计算机及高新技术的推动以及全球定位系统和惯性导航系统的发展,使得通过激光束获取高精度的三维数据成为可能。随着技术的不断进步和应用领域的拓展,Lidar点云技术将在测绘、遥感、环境监测、机器人等领域发挥越来越重要的作用。         目前全球范围内纯视觉方案的车企主要包括特斯拉和集越,在达到同等性能的前提下,纯视觉方

代码随想录算法训练营第三十九天|62.不同路径 63. 不同路径 II 343.整数拆分 96.不同的二叉搜索树

LeetCode 62.不同路径 题目链接:62.不同路径 踩坑:二维的vector数组需要初始化,否则会报错访问空指针 思路: 确定动态数组的含义:dp[i][j]:到达(i,j)有多少条路经递推公式:dp[i][j] = dp[i-1][j] + dp[i][j-1]初始化动态数组:dp[0][0] = 1遍历顺序:从左到右,从上到下 代码: class Solution {pu

YOLOv9摄像头或视频实时检测

1、下载yolov9的项目 地址:YOLOv9 2、使用下面代码进行检测 import torchimport cv2from models.experimental import attempt_loadfrom utils.general import non_max_suppression, scale_boxesfrom utils.plots import plot_o

leetcode刷题(45)——35. 二叉搜索树的最近公共祖先

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5] 示例 1: 输入: root = [

【智能优化算法改进策略之局部搜索算子(五)—自适应Rosenbrock坐标轮换法】

1、原理介绍 作为一种有效的直接搜索技术,Rosenbrock坐标轮换法[1,2]是根据Rosenbrock著名的“香蕉函数”的特点量身定制的,该函数的最小值位于曲线狭窄的山谷中。此外,该方法是一种典型的基于自适应搜索方向集的无导数局部搜索技术。此法于1960年由Rosenbrock提出,它与Hooke-Jeeves模式搜索法有些类似,但比模式搜索更为有效。每次迭代运算分为两部分[3]: 1)