目标检测_目标检测: AnchorFree 时代

e373ed85a135e8bdcffc604a389c15b0.gif

本文转载自Smarter。

自从2018年8月CornerNet开始,Anchor-Free的目标检测模型层出不穷,最近达到了井喷的状态,宣告着目标检测迈入了Anchor-Free时代。

其实Anchor-Free并不是一个新概念了,大火的YOLO算是目标检测领域最早的Anchor-Free模型,而最近的Anchor-Free模型如FASF、FCOS、FoveaBox都能看到DenseBox的影子。

下面主要讲一下有代表性的Anchor-Free模型(包括DenseBox、YOLO、CornerNet、ExtremeNet、FSAF、FCOS、FoveaBox),分成3个部分来介绍(早期探索、基于关键点、密集预测),具体细节就不展开了~

早期探索

1.DenseBox

最早知道这篇文章,是在去年刚接触目标检测的时候,看了一篇地平线对DenseBox作者的采访,当时因为刚接触感触不深,但是从当前的时间节点回头看,DenseBox的想法是多么的超前啊。采访中说道,当年DenseBox其实早在2015年初就已经开发出来了,这比同期的Faster-RCNN系列提前数月,但是论文直到9月才在arxiv上发布。如果DenseBox能在2015年初就发表,那么最近几年目标检测的发展会不会是另外一番景象呢~~

地平线HorizonRobotics:黄李超:让算法成为一种生活方式 | 地平线算法工程师特稿 | https://zhuanlan.zhihu.com/p/24350950

两点贡献:

1.证明单个FCN可以检测出遮挡严重、不同尺度的目标。

2.通过多任务引入landmark localization,能进一步提升性能。

265a9b85db2ec7fbf989e96b9837d813.png

如图1所示,单个FCN同时产生多个预测bbox和置信分数的输出。测试时,整个系统将图片作为输入,输出5个通道的feature map。每个pixel的输出feature map得到5维的向量,包括一个置信分数和bbox边界到该pixel距离的4个值。最后输出feature map的每个pixel转化为带分数的bbox,然后经过NMS后处理。

Ground Truth Generation

45d6c14cdc94597b27de4d2b01c024e9.png

第一个通道ground truth map的正标签区域由半径为r的圆填充,圆的中心点位于bbox的中点。而剩下的4个通道由bbox的2个角点决定。

Refine with Landmark Localization

29e57f86406da20f4eda18b9cf7c05ba.png

在FCN结构中添加少量层能够实现landmark localization,然后通过融合landmark heatmaps和score map可以进一步提升检测结果。

2.YOLO

YOLO将目标检测作为一个空间分离的边界框和相关的类概率的回归问题。可以直接从整张图片预测出边界框和分类分数。

三个优点:

1.速度快

2.通过整幅图进行推理得到预测结果

3.能学到目标的一般特征

832df8521eb24d90b71b43469965cff0.png

Unified Detection

541f49e889c0e523e476ded2a350b695.png

YOLO将输入图片分成SXS个网格,如果某个目标的中心点落到其中一个格点,那么该格点就负责该目标的检测。每个格点预测出B个bbox和每个bbox的置信分数。

定义置信度为:

316c20b85844c28650fe9505fa7abc48.png

每个bbox由5个预测值组成:x,y,w,h 和 置信度。每个格点也预测C个类概率

7147edac5eaa711a9f10b35e6b3f0e98.png

测试的时候,将类概率和置信分数相乘,得到类置信分数

5a5cfb328fa3e8fc23a5f938adb2995a.png

举个例子,在Pascal VOC数据集上评估YOLO,使用S=7,B=2,VOC有20类,所以C=20,那么最终的预测结果是7x7x30的向量。

DenseBox和YOLO的区别:

1.DenseBox应用于人脸检测,相当于只有两类,而YOLO是通用检测,通常大于两类。

2.DenseBox是密集预测,对每个pixel进行预测,而YOLO先将图片进行网格化,对每个grid cell进行预测。

3.DenseBox的gt通过bbox中心圆形区域确定的,而YOLO的gt由bbox中心点落入的grid cell确定的。

基于关键点

3.CornerNet

两点贡献:

1.通过检测bbox的一对角点来检测出目标。

2.提出corner pooling,来更好的定位bbox的角点。

4b6d324032afbdf9574b2b27c39285dc.png

Detecting Corners

c72d16a0cfab6c89924fce6dbbafc8ee.png

首先预测出两组heatmaps,一组为top-left角点,另一组为bottom-right角点。每组heatmaps有C个通道,表示C个类别,尺寸为HxW。每个通道是一个binary mask,表示一个类的角点位置。

1873c1df8acd8ad8d9d9d1e58b69f0e5.png

对于每个角点来说,只有一个gt正例位置,其他都为负例位置。训练时,以正例位置为圆心,设置半径为r的范围内,减少负例位置的惩罚(采用二维高斯的形式),如上图所示。

Grouping Corners

受到多人姿态估计论文的启发,基于角点embedding之间的距离来对角点进行分组。

Corner Pooling

40686d8ac94e1b4bf2e57fc8d5039386.png

在每个pixel位置,最大池化第一个feature map右方的所有特征向量,最大池第二个feature map下方的所有特征向量,然后将两个池化结果相加。

4.ExtremeNet

两个贡献:

1.将关键点定义为极值点。

2.根据几何结构对关键点进行分组。

4d712b41cfbb5f4608657b03b7823989.png

作者使用了最佳的关键点估计框架,通过对每个目标类预测4个多峰值的heatmaps来寻找极值点。另外,作者使用每个类center heatmap来预测目标中心。仅通过基于几何的方法来对极值点分组,如果4个极值点的几何中点在center map上对应的分数高于阈值,则这4个极值点分为一组。

d74a15eccbe85962330240a8e98b5add.png

offset的预测是类别无关的,而极值点的预测是类别相关的。center map没有offset预测。网络的输出是5xC heatmaps和4x2offset maps,C是类别数。

Center Grouping

f7f43d967d3dc003340513de64660ea5.png

分组算法的输入是每个类的5个heatmaps,一个center heatmap和4个extreme heatmaps,通过检测所有的峰值来提取出5个heatmaps的关键点。给出4个极值点,计算几何中心,如果几何中心在center map上对应高响应,那么这4个极值点为有效检测。作者使用暴力枚举的方式来得到所有有效的4个关键点。

CornerNet和ExtremeNet的区别:

1.CornerNet通过预测角点来检测目标的,而ExtremeNet通过预测极值点和中心点来检测目标的。

2.CornerNet通过角点embedding之间的距离来判断是否为同一组关键点,而ExtremeNet通过暴力枚举极值点、经过中心点判断4个极值点是否为一组。

密集预测

5.FSAF

Motivation

让每个实例选择最好的特征层来优化网络,因此不需要anchor来限制特征的选择。

637acabe8a8d3a8dfc940fb676cd907e.png

一个anchor-free的分支在每个特征金字塔层构建,独立于anchor-based的分支。和anchor-based分支相似,anchor-free分支由分类子网络和回归子网络。一个实例能够被安排到任意层的anchor-free分支。训练期间,基于实例的信息而不是实例box的尺寸来动态地为每个实例选择最合适的特征层。选择的特征层学会检测安排的实例。推理阶段,FSAF模块和anchor-based分支独立或者联合运行。

Feature Selective Anchor-Free Module

a7f6bf58ef6d088fff32dcf12c63525b.png

在RetinaNet的基础上,FSAF模块引入了2个额外的卷积层,这两个卷积层各自负责anchor-free分支的分类和回归预测。具体的,在分类子网络中,feature map后面跟着K个3x3的卷积层和sigmoid,在回归子网络中,feature map后面跟着4个3x3的卷积层和ReLU。

Ground-truth

066d0a8cc95a05749fb2a36d9e542f94.png

白色为有效区域,灰色为忽略区域,黑色为负样本区域。

Online Feature Selection

c609d6845630e2e309b050532270fc6e.png

实例输入到特征金字塔的所有层,然后求得所有anchor-free分支focal loss和IoU loss的和,选择loss和最小的特征层来学习实例。训练时,特征根据安排的实例进行更新。推理时,不需要进行特征更新,因为最合适的特征金字塔层自然地输出高置信分数。

6.FCOS

四个优点:

1.将检测和其他使用FCN的任务统一起来,容易重用这些任务的思想。

2.proposal free和anchor free,减少了超参的设计。

3.不使用trick,达到了单阶段检测的最佳性能。

4.经过小的修改,可以立即拓展到其他视觉任务上。

1ce79c197adae752cd8a939050b3804c.png

和语义分割相同,检测器直接将位置作为训练样本而不是anchor。具体的,如果某个位置落入了任何gt中,那么该位置就被认为是正样本,并且类别为该gt的类别。基于anchor的检测器,根据不同尺寸安排anchor到不同的特征层,而FCOS直接限制边界框回归的范围(即每个feature map负责一定尺度的回归框)。

Center-ness

83388df5916c385bccb61f8be4a2b48d.png

为了剔除远离目标中心的低质量预测bbox,作者提出了添加center-ness分支,和分类分支并行。

780a7ab173855ccacaa6a8dc5efee308.png

开根号使center-ness衰退缓慢。center-ness范围为0-1之间,通过BCE训练。测试时,最终分数由center-ness预测结果和分类分数乘积得到。

7.FoveaBox

Motivation

人类眼睛的中央凹:视野(物体)的中心具有最高的视觉敏锐度。FoveaBox联合预测对象中心区域可能存在的位置以及每个有效位置的边界框。由于特征金字塔的特征表示,不同尺度的目标可以从多个特征层中检测到。

7a51f4bebb85e811c20734fce5771d65.png

FoveaBox添加了2个子网络,一个子网络预测分类,另一个子网络预测bbox。

Object Fovea

ffc87cce9b00de0e6bbd011f9bd6e84c.png

目标的中央凹如上图所示。目标中央凹只编码目标对象存在的概率。为了确定位置,模型要预测每个潜在实例的边界框。

FSAF、FCOS、FoveaBox的异同点:

1.都利用FPN来进行多尺度目标检测。

2.都将分类和回归解耦成2个子网络来处理。

3.都是通过密集预测进行分类和回归的。

4.FSAF和FCOS的回归预测的是到4个边界的距离,而FoveaBox的回归预测的是一个坐标转换。

5.FSAF通过在线特征选择的方式,选择更加合适的特征来提升性能,FCOS通过center-ness分支剔除掉低质量bbox来提升性能,FoveaBox通过只预测目标中心区域来提升性能。

(DenseBox、YOLO)和(FSAF、FCOS、FoveaBox)的异同点:

1.都是通过密集预测进行分类和回归的。

2.(FSAF、FCOS、FoveaBox)利用FPN进行多尺度目标检测,而(DenseBox、YOLO)只有单尺度目标检测。

3.(DenseBox、FSAF、FCOS、FoveaBox)将分类和回归解耦成2个子网络来得到,而(YOLO)分类和定位统一得到。

总结:

1.各种方法的关键在于gt如何定义

ps:关于这一点我稍加一点补充,目标检测的gt是一个矩形框,然而用这个矩形框信息来检测目标显然是不合理的,因为矩形框内只有一小部分是目标,而剩下的是背景,这可能会导致检测器的精度下降,而最近的一些anchor-free模型其实是改变了gt的定义,比如cornernet定义为角点,extremenet定义为极值点和中心点,FSAF、FoveaBox定义为矩形框的中间区域,FCOS虽然是矩形框,但是经过center-ness抑制掉低质量的框,其实也是一种变相的将gt定义为矩形框中心区域。gt重新定义之后,需要检测的目标语义变得更加明确了,有利于分类和回归。

所以,我认为设计合适的gt,是提升目标检测速度和精度的关键!

个人所见,欢迎探讨~

2.主要是基于关键点检测的方法和密集预测的方法来做Anchor-Free

3.本质上是将基于anchor转换成了基于point/region

Reference【1】DenseBox: Unifying Landmark Localization with End to End Object Detection【2】You Only Look Once: Unified, Real-Time Object Detection【3】CornerNet: Detecting Objects as Paired Keypoints【4】Bottom-up Object Detection by Grouping Extreme and Center Points【5】Feature Selective Anchor-Free Module for Single-Shot Object Detection【6】FCOS: Fully Convolutional One-Stage Object Detection【7】FoveaBox: Beyond Anchor-based Object Detector

END

0de0a28f4602fed4493abd71413ac147.png

备注:目标检测

03ee838028e870fdfd4a6d3f55204102.png

目标检测交流群

2D、3D目标检测等最新资讯,若已为CV君其他账号好友请直接私信。

我爱计算机视觉

微信号:aicvml

QQ群:805388940

微博知乎:@我爱计算机视觉

投稿:amos@52cv.net

网站:www.52cv.net

7f4d9cef513e3cee64295f5d4c1ff94c.png

在看,让更多人看到  c08395ba047f9ca282c6f8d2b16e91cc.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

热点地图

使用H5制作一个中国的热点地图&#xff0c;地图上标识出的地方会有波纹向四周散发的动态效果。 效果演示 代码演示 <!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml"><head><meta http-equiv"Content-Type" content&qu…

【youcans 的 OpenCV 例程200篇】154. 边缘检测之 Canny 算子

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】154. 边缘检测之 Canny 算子 2.7 Canny 边缘检测算法 Canny 算法希望在提高边缘的敏感性的同时抑…

段码液晶屏笔段电压范围_LCD段码(笔段)液晶显示屏和点阵液晶显示屏

液晶显示屏简称LCD屏&#xff0c;主要材料为液晶。液晶是一种有机材料&#xff0c;在特定温度范围内&#xff0c;既有液体流动性又有某些光学特性&#xff0c;其透明度和颜色随电场、磁场、光及温度等外界条件的变化而变化。液晶屏是一种被动式显示器件&#xff0c;液晶本身不会…

按规律插入一个数字到数组中

根据控制台的文本提示输入一个数&#xff0c;程序会把这个数按照规律插入到原来已经存在的数组中&#xff0c;并且会输出此数组。 结果演示 代码展示 package com.five;import java.util.Scanner;public class Crpx {public static Scanner input new Scanner(System.in);p…

【youcans 的 OpenCV 例程200篇】155. 边缘连接的局部处理方法

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】155. 边缘连接的局部处理方法 2.8 局部处理连接边缘 在实际应用中&#xff0c;由于噪声、光照等原…

【youcans 的 OpenCV 例程200篇】156. 边缘连接局部处理的简化算法

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】156. 边缘连接局部处理的简化算法 2.8 局部处理连接边缘 在实际应用中&#xff0c;由于噪声、光照…

矩阵对角线元素之和

根据控制台文本内容的提示输入9个数字&#xff0c;这九个数字将会组成一个3*3的矩阵&#xff0c;程序会计算出你输入的矩阵的对角线之和。 结果演示 代码演示 package com.five;import java.util.Scanner;public class Juzhen {public static Scanner input new Scanner(Sy…

mysql master-user_【MySQL】MySQL5.6数据库基于binlog主从(Master/Slave)同步安装与配置详解...

主从数据库同步原理image.png主从数据库同步工作原理(流程)&#xff1a;当主库的数据发生修改时&#xff0c;数据更改的记录将写入到主库的二进制文件中&#xff0c;从库此时将会调用一个IO线程读取主库的二进制文件&#xff0c;并与中继日志作对比&#xff0c;并将存在差异的事…

计算数字的位数并逆序输出

根据控制台文本提示输入一个数&#xff0c;这个数不能大于5位&#xff0c;并且要求是一个整数&#xff0c;程序会输出你输入数字的位数并且会输出每个数字在第几位&#xff0c;然后进行逆序输出显示。 结果演示 代码演示 package com.five;import java.util.Scanner;public …

【youcans 的 OpenCV 例程200篇】157. 霍夫变换直线检测

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】157. 霍夫变换直线检测 2.9 霍夫变换 霍夫变换&#xff08;Hough Transform&#xff09;是图像处…

数字排序

对数字进行排序输出&#xff0c;根据提示输入你要输入数字的个数&#xff0c;然后输入相关的数字&#xff0c;程序会进行排序输出。 结果演示 代码演示 package com.five;import java.util.Scanner;public class Paixu {public static Scanner input new Scanner(System.in…

linux 清除mysql密码_linux重置mysql密码

一般这个错误是由密码错误引起&#xff0c;解决的办法自然就是重置密码。假设我们使用的是root账户。1.重置密码的第一步就是跳过MySQL的密码认证过程&#xff0c;方法如下&#xff1a;#vim /etc/my.cnf(注&#xff1a;windows下修改的是my.ini)在文档内搜索mysqld定位到[mysql…

【youcans 的 OpenCV 例程200篇】158. 阈值处理之固定阈值法

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】158. 阈值处理之固定阈值法 3.1 阈值处理基础 阈值就是临界值。图像阈值处理简单、直观&#xff…

【youcans 的 OpenCV 例程200篇】159. 图像分割之全局阈值处理

【OpenCV 例程200篇】 系列&#xff0c;持续更新中… 【OpenCV 例程200篇 总目录-202205更新】 【youcans 的 OpenCV 例程200篇】159. 图像分割之全局阈值处理 3.2 全局阈值处理基本方法 当图像中的目标和背景的灰度分布较为明显时&#xff0c;可以对整个图像使用固定阈值进行…

求最大值

在一个整数数组里面求最大的一个数并输出显示。 结果演示 代码演示 package com.six; public class Max {public static void main(String[] args) {int[] arr{4,8,3,30,7,5};int maxgetMax(arr);System.out.println("max"max);}static int getMax(int[] arr){int…

【youcans 的 OpenCV 例程200篇】160. 图像处理之OTSU 方法

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】160. 图像处理之OTSU 方法 3.3 全局阈值处理 Otsu 方法 阈值处理本质上是对像素进行分类的统计决策问题。 OTSU 方法又称大津算…

【youcans 的 OpenCV 例程200篇】161. OTSU 阈值处理算法的实现

OpenCV 例程200篇 总目录-202205更新 欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程200篇】161. OTSU 阈值处理算法的实现 3.3 全局阈值处理 Otsu 方法 OTSU 方法又称大津算法&#xff0c;使用最大化类间方差&#xff08;…

近似值匹配

根据文本提示输入英文的星期一到星期日的任意一天的英文的首字母&#xff0c;程序会自动进行近似匹配并输出根据你输入的首字母匹配到的星期。 程序分析 1.大小写的转化 2.判断是否是星期几的英文首字母 3.如果是&#xff0c;输出星期几 4.如果不是给出相应的提示 结果演示 输…

mysql plsql cursor_Oracle--plsql游标创建和使用

游标(cursor)是Oracle系统在内存中开辟的一个工作区&#xff0c;在其中存放SELECT语句返回的查询结果。&#xff0c;PL/SQL隐式建立并自动管理这一游为什么要Oracle游标&#xff1a;先看这个&#xff1a;DECLAREv_empno emp.empno%type;v_ename emp.ename%type;BEGINSELECT emp…

【youcans 的 OpenCV 例程200篇】162. 全局阈值处理改进方法

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】162. 全局阈值处理改进方法 3.4 全局阈值处理改进方法 在实际的图像处理中&#xff0c;噪声严重影响阈值处理的结果&#xff0c;…