关注上方深度学习技术前沿”,选择“星标公众号”

技术干货,第一时间送达!

【导读】前面我们详细介绍了目标检测领域常用的一些评价指标。详情见:【目标检测基础积累】常用的评价指标

本文我们来讨论一下在目标检测算法中必须掌握的两个基本概念:边框回归和NMS(非极大值抑制)。

边框回归的背景

如下图所示:

对于上图,绿色的框表示Ground Truth, 红色的框为Selective Search提取的Region Proposal。那么即便红色的框被分类器识别为飞机,但是由于红色的框定位不准(IoU<0.5), 那么这张图相当于没有正确的检测出飞机。如果我们能对红色的框进行微调, 使得经过微调后的窗口跟Ground Truth 更接近, 这样岂不是定位会更准确。确实,Bounding-box regression 就是用来微调这个窗口的。

边框回归的含义

对于窗口一般使用四维向量(x,y,w,h)来表示, 分别表示窗口的中心点坐标和宽高。边框回归的目的就是:在给定一组候选目标框  ,寻找到一个

映射 ,使得  。边界框回归过程图像表示如下图所示。在图2中红色框代表候选目标框,绿色框代表真实目标框,蓝色框代表边界框回归算法预测目标框,红色圆圈代表选候选目标框的中心点,绿色圆圈代表选真实目标框的中心点,蓝色圆圈代表选边界框回归算法预测目标框的中心点。

边界框回归中的变换

RCNN论文里指出,边界框回归是利用平移变换和尺度变换来实现映射 。平移变换的计算公式如下:

尺度变换的计算公式如下:

其中 ( 代表 ),接下来要做的就是求解这4个变换。在边界框回归中,我们利用了线性回归在RCNN论文代表这AlexNet第5个池化层得到的特征即将送入全连接层的输入特征的线型函数。在这里,我们将特征记作 ,那么 。因此,我们可以利用最小二乘法或者梯度下降算法进行求解 ,RCNN论文中给出了的求解表达式:

其中:

可以看出,上述模型就是一个Ridge回归模型。在RCNN中,边界框回归要设计4个不同的Ridge回归模型分别求解

宽高尺度设计

由于CNN具有尺度不变性,以下图为例:

那么我们假设经过CNN提取得到的特征分别为  和  。同时,我们假设  为第  个真实目标框的  坐标,  为第  个候选目标框的  坐标,边界框回归的映射关系为  。那么我们可以得出:

由于CNN具有尺度不变性,因此  。那么理论上  。但是观察上图就可明显得出  ,显然由于尺寸的变化,候选目标框和真实目标框坐标之间的偏移量也随着尺寸而成比例缩放,即这个比例值是恒定不变的。

因此,我们必须对  坐标的偏移量除以候选目标框的宽,  坐标的偏移量除以候选目标框的高。只有这样才能得到候选目标框与真实目标框之间坐标偏移量值的相对值。同时使用相对偏移量的好处可以自由选择输入图像的尺寸,使得模型灵活多变。也就说,对坐标偏移量除以宽高就是在做尺度归一化,即尺寸较大的目标框的坐标偏移量较大,尺寸较小的目标框的坐标偏移量较小。

我们想要得到一个放缩的尺度,也就是说这里限制尺度必须大于0。我们学习的tw,th怎么保证满足大于0呢?直观的想法就是EXP函数,如公式(2)所示,那么反过来推导就是Log函数的来源了。

为什么IoU较大时边界框回归可视为线性变换?

在这里我们需要回顾下在高等数学中有关等价无穷小的结论: 

也就是说当  趋向于0时,我们可有  ,即可将  近似看成线型变换。接下来我们将式(4)的后两个公式进行重写:

也就是说,当  和  趋向于0时,即  和  时,上式(6)可以近似将对数变换看成线性变换。  和  时候选目标框和真实目标框非常接近,即IoU值较大。按照RCNN论文的说法,IoU大于0.6时,边界框回归可视为线型变换。

NMS的定义

NMS(Non-maximum suppression),即非极大值抑制,在目标检测中的出镜率也很高呀。在目标检测中,不论是最初的region proposal,还是后来的anchor box,不可避免的一个问题就是对于同一个物体,会预测出多个bounding box,如下左图所示。而NMS所做的就是去除掉多余的bounding box,只保留和ground truth重叠度最高的bounding box,如下右图所示。

在目标检测中,分类器会给每个bounding box(bbox)计算出一个class score,就是这个bbox属于每一类的概率,NMS就是根据这些值来进行的,主要流程:

  • 对于每一类,首先把所有score<threshold的bbox的score设为0

  • 之后,将所有的bbox按照得分排序,选中最高分及其对应的bbox

  • 遍历其余的bbox,如果和当前最高分bb的重叠面积(IoU)大于一定的阀值,便将该bbox删除

  • 从未处理的bbox中继续选择一个最高分的bb,重复上述过程

  • 重复上述过程,直到找到全部保留的bbox

  • 然后根据所有保留bbox的class score和class color画出最后的预测结果

NMS的实现(Pytorch代码)

from __future__ import absolute_importimport numpy as np
import torchdef nms(dets, thresh):dets = dets.numpy()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.item(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 * hovr = inter / (areas[i] + areas[order[1:]] - inter)inds = np.where(ovr <= thresh)[0]order = order[inds + 1]return torch.IntTensor(keep)

参考链接:

1. https://blog.csdn.net/zijin0802034/article/details/77685438

2. https://zhuanlan.zhihu.com/p/76603583


推荐阅读

(点击标题可跳转阅读)

  • 干货|最全面的卷积神经网络入门教程

  • 【目标检测系列】CNN中的目标多尺度处理方法

  • Yolov3&Yolov4核心基础知识完整讲解

  • 惊!YOLOv5重磅来袭!还是基于Pytorch实现?

重磅!DLer-目标检测交流群已成立!

为了能给大家提供一个更好的交流学习平台!针对特定研究方向,我建立了目标检测微信交流群,目前群里已有百余人!本群旨在交流目标检测、密集人群检测、关键点检测、人脸检测、人体姿态估计等内容。

进群请备注:研究方向+地点+学校/公司+昵称(如目标检测+上海+上交+小明

广告商、博主请绕道!

???? 长按识别,即可进群!

原创不易,在看鼓励!比心哟!

目标检测算法基础概念:边框回归和NMS相关推荐

  1. OpenMMLab 实战营打卡 - 第 四 课 目标检测算法基础

    (四)计算机视觉之目标检测算法基础 目录 前言 一.目标检测是什么? 1.目标检测VS图像分类 2.检测最朴素方法--滑窗 Sliding Window (1)滑窗的效率问题 (2)改进 3.目标检测 ...

  2. 离群点检测算法-基础概念

    定义: Hawkins给出的离群点的本质性定义:离群点是数据集中偏离大部分数据的数据,由于偏离其它数据太多,使人怀疑这些数据的偏离并非由随机因素产生,而是产生于完全不同的机制. 大致分类: 一例分析步 ...

  3. 目标检测算法——YOLOv4

    以下内容如有错误,恳请指出. 而且查阅参考的资料也有点多,参考链接若有遗落,也恳请指出,会立刻补上 文章目录 1.YOLOv4简介 2.YOLOv4相关工作 1)对象检测模型 2)Bag of fre ...

  4. 基于Grad-CAM与KL损失的SSD目标检测算法

    基于Grad-CAM与KL损失的SSD目标检测算法 人工智能技术与咨询 来源:<电子学报>,作者侯庆山等 摘 要: 鉴于Single Shot Multibox Detector (SSD ...

  5. rcnn 回归_基础目标检测算法介绍:CNN、RCNN、Fast RCNN和Faster RCNN

    每次丢了东西,我们都希望有一种方法能快速定位出失物.现在,目标检测算法或许能做到.目标检测的用途遍布多个行业,从安防监控,到智慧城市中的实时交通监测.简单来说,这些技术背后都是强大的深度学习算法. 在 ...

  6. 深度学习和目标检测系列教程 1-300:什么是对象检测和常见的8 种基础目标检测算法

    @Author:Runsen 由于毕业入了CV的坑,在内卷的条件下,我只好把别人卷走. 对象检测 对象检测是一种计算机视觉技术,用于定位图像或视频中的对象实例.对象检测算法通常利用机器学习或深度学习来 ...

  7. 目标检测算法Faster R-CNN简介

    在博文https://blog.csdn.net/fengbingchun/article/details/87091740 中对Fast R-CNN进行了简单介绍,这里在Fast R-CNN的基础上 ...

  8. 基于深度学习的目标检测算法综述(从R-CNN到Mask R-CNN)

    深度学习目标检测模型全面综述:Faster R-CNN.R-FCN和SSD 从RCNN到SSD,这应该是最全的一份目标检测算法盘点 基于深度学习的目标检测算法综述(一) 基于深度学习的目标检测算法综述 ...

  9. 从0开始学习卷积神经网络与Yolo系列目标检测算法

    目录 (一)卷积神经网络初了解 一.卷积神经网络 1.1 计算机视觉 1.2 卷积运算 1.卷积运算介绍 2.卷积运算示例:边缘检测 3.对于一张RGB图像进行卷积 4.提取RGB图像的多个特征 1. ...

最新文章

  1. Roger Ver:BCH也可成为价值储备
  2. 如何通过outlet在SAP Spartacus的产品明细页面插入自定义UI
  3. compare to造句及翻译_compare to造句
  4. 【SQL语句】MySql、SqlServer查询近期记录
  5. linux如何给vm权限,linux – 如何创建一个每个用户的vm被隔离的环境
  6. chipsel语言_用VHDL语言对FPGA和CPLD器件进行开发时应注意的事项
  7. 计算机应用的时间地点意义,计算机应用在教学中的作用
  8. 面对人口塌方式下降,必须把房子转移到省会以上级别城市的理由
  9. Java生成和操作Excel文件
  10. 当公司辞掉85后测试员选择95后测试员后...
  11. 得到多组单选框的值_多组学如何构建预后预测模型,还发了7分+?
  12. WPF 自定义柱状图 BarChart
  13. Windows Mobile Web方式下载文件
  14. 如何启用sqlplus的AutoTrace功能
  15. UE4 官方文档阅读笔记——材质篇
  16. perl脚本GET系统命令执行
  17. 操作系统 | 实验五 页面置换算法
  18. verilog逻辑符
  19. hp DV4 声卡驱动 IDT声卡补丁1.1
  20. mysql中的去除空格函数

热门文章

  1. [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器...
  2. 为EditText输入框加上提示信息
  3. php之变量覆盖漏洞讲解,PHP中的变量覆盖漏洞代码深入解析
  4. win10恢复经典开始菜单_小编教你电脑如何升级win10
  5. 无法打开此程序因为计算机丢失,解决X-Scan安装后“无法启动此程序,因为计算机丢失NPPTools.dll”...
  6. 添加绿色版UltraEdit到右键菜单
  7. System.in.read()的用法
  8. 数据库名、实例名、数据库域名、全局数据库名、服务名,
  9. 这 100 个心理学知识你必须了解
  10. 变换域隐写术检测分析