Anchor-free应用一览:目标检测、实例分割、多目标跟踪

作者|杨阳@知乎
来源|https://zhuanlan.zhihu.com/p/163266388

本文整理了与Anchor free相关的一些工作。一方面是分享近期在目标检测领域中一些工作,另一方面,和大家一起梳理一下非常火热的网络模型CenterNetFCOS,当我们把他们迁移到分割多目标追踪等其他任务上时,大佬们是如何去设计的。

从去年5月开始,我一直对Anchor-free工作保持着一定的关注。本次借组内的paper reading分享的契机,整理了与Anchor free相关的一些工作。一方面是分享近期在目标检测领域中一些工作,另一方面,和大家一起梳理一下非常火热的网络模型CenterNet、FCOS,当我们把他们迁移到分割、多目标追踪等其他任务上时,大佬们是如何去设计的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、anchor free在目标检测中的应用

首先我们要回答为什么要有 anchor?在前几年,物体检测问题通常都被建模成对一些候选区域进行分类和回归的问题。在单阶段检测器中,这些候选区域就是通过滑窗方式产生的 anchor;在两阶段检测器中,候选区域是 RPN 生成的 proposal,但是 RPN 本身仍然是对滑窗方式产生的 anchor 进行分类和回归。

在这里插入图片描述
这里我列出的几种anchor-free 方法,是通过另外一种手段来解决检测问题的。CornetNet通过预测成对的关键点(左上角与右下角)来表征目标框;CenterNetFCOS通过预测物体中心点及其到边框的距离来表征目标框;ExtremeNet是通过检测物体四个极值点,将四个极值点构成一个物体检测框;AutoAssign也是近期的一篇论文,提出一种在anchor free检测器上,正负样本标签的新的分配策略;Point-Set是近期ECCV 2020的一个工作,提出来一个更加泛化的point-based的anchor表示形式,统一了目标检测、实例分割、姿态估计的三个大任务,后面我们会进一步展开。

在这里插入图片描述
首先我们来简单回顾一下FCOS的网络架构,其中C3, C4, C5表示骨干网络的特征图,P3到P7是用于最终预测的特征级别。这五层的特征图后分别会跟上一个head,head中包括了三个分支,分别用于分类、中心点置信度、回归的预测。整体的架构非常简洁,有很多人通过修改FCOS的输出分支,用于解决实例分割、关键点检测、目标追踪等其他任务。

下边我列出来原作者在更新论文版本时,做出的三点细节上的调整,一是使用了新的中心点采样的方式,在判断正负样本时,考虑了不同阶段的步长值,去调整了正样本所处框的大小。而非像FCOS v1中,直接判断其是否落在gt bbox里。这种新的center sampling方式,使得难判别的样本减少,是否使用center-ness branch造成的精度区别也减小了。二是将回归的loss换成了GIoU loss。三是FCOS v2 的不同特征层在回归参数的时候,使用了不同的reg范围(除以了stride)。(而在FCOS v1中,是用过乘以一个可以学习的参数,该参数在FCOS v2有保留,但重要性减小。)

在这里插入图片描述
为了提升fcos的效果,特别考虑到一些不稳定环境,由于传感器噪声或不完整的数据,目标探测器需要考虑定位预测的置信度,有人提出加入一个预测bbox的不确定度的分支。

这里的不确定度是通过预测bbox的四个offset的分布得到的。这里假设每一个示例都是独立的,用多元高斯分布的输出与协方差矩阵的对角矩阵去表征每一个bbox的offset。在FCOS的分类、中心点、回归的三个loss上,新增了一个衡量bbox offset的不确定度的loss。下边我们来具体看一下他的实现方式。

在这里插入图片描述
这里的box offsets我们用 ( l , r , t , b ) (l, r, t, b) (l,r,t,b) 来表示, θ \theta θ是网络的可学习的参数,B的维度是4。 μ B \mu_B μB是bbox的偏置,计算得到的多元高斯分布, ∑ B \sum_B B是之前提到的协方差矩阵的对角矩阵

带入网络设计的衡量bbox offset的不确定度的loss,我们可以着重关注红色线左边的这一项,当预测出的 u k u_k uk与真实的bbox的高斯分布 B x , y , w g B_{x,y,w}^g Bx,y,wg相差很大时,网络会倾向于得到一个很大的标准差 σ k \sigma_k σk也就是说这个时候的不确定度是很大的。当然它后边还有一个类似正则化的约束 σ k \sigma_k σk,去限制 σ k \sigma_k σk不要过大。

在这里插入图片描述
对比FCOS,同样使用ResNet-50的框架,它在coco数据集上AP能提升0.8个点。对比两个loss,其回归情况也是更好的。
在这里插入图片描述
下面我们来看看,《Point-Set Anchors for Object Detection, Instance Segmentation and Pose Estimation》这个point-based的网络,是如何使用回归的思路去统一Object Detection, Instance SegmentationPose Estimation三个大任务的。作者称这是统一这三大任务的第一人。

作者认为,在object detection领域,无论是若干个IOU大于一定阈值的anchor表示正样本,还是用物体的中心点来表示正样本。不论是anchor based或者anchor-free based的方法,对于正样本在原图的定位,都是基于回归的形式直接回归矩形坐标,或者是矩形长宽+矩形中心点offset。Anchor从某种程度上来说,表示的只是一种先验信息,anchor可以是中心点,也可以是矩形,同时它还可以提供更多的模型设计思路,如正负样本的分配,分类、回归特征的选择。所有作者的思路是,能不能提出更加泛化的anchor,泛化的应用于更多的任务中,而不只是目标检测中,并给出一个更好的先验信息。

对于Instance Segmentation和Object Detection,使用最左边的Anchor,其有两个部分:一个中心点和n个有序锚点,在每个图像位置,我们会改变边界框的比例和长宽比来形成一些anchor,这里和anchor-based的方法一样,涉及到一些超参数的设置。对姿态估计中的anchor,使用训练集中最常见的姿态。Object Detection的回归任务比较简单,用中心点或者左上/右下角点回归即可。对于Instance Segmentation来说,作者使用了特定的匹配准则去匹配右图中绿色的Point-set anchor中的anchor points和黄色的gt实例的points,并且转换为回归任务。

右边的三个图分别是将绿色与黄色的点,最近的相连;将绿色的点与最近的边缘相连;最右侧中时作者优化后的方式,对角点采用最近点的方法,根据角点得到的最近四个点将gt的轮廓划分成4个区域。将上边界与下边界上绿色的点,做垂线对应到有效的gt point(若不在区域内,则无效,例如图中的绿色空心点)。

在这里插入图片描述
总的来说,Point-set用它提出的新的anchor的设计方式代替传统的矩形anchor,并在头部附加一个并行的回归分支用于实例分割或姿态估计。图中展示了它的网络架构,和retinanet一样,作者使用了不同尺度的特征层,head包含了用于分类、分割姿态的回归、检测框的回归的子网络。每一个子网络都包含了四个3乘3的、stride为1的卷积层,只在姿态估计任务上使用的FAM模块,和一个输出层。下边的表格中,列出的是输出层的维度,分别对应了三个任务。
在这里插入图片描述
其损失函数非常简单,对分类使用focal loss,对回归任务使用L1 loss。
除了目标归一化和将先验知识嵌入anchor的形状之外,作者也提到了我们如何进一步用anchor去聚合特征,以保证特征变换不变性、并拓展到多阶段学习当中。

  • (1)我们将可变卷积中的可学习偏移量替换为point-based anchor中点的位置。
  • (2)由于人体形状的这个回归,是相对检测更加困难的。一方面是由于它对特征的提取要求非常大,另一方面是不同的关键点之间存在差异。所以作者提出,可以直接使用第一阶段的姿态预测作为第二阶段的anchor(分类、掩模或位姿回归、边界盒回归),使用额外的细化阶段进行姿态估计。

在这里插入图片描述

二、介绍三篇在实例分割领域的模型

它们都参考了FCOS的做法,将目标检测中anchor-free的思想,迁移到了实例分割的任务上。网络的具体细节不会展开讲,这里只会说到他们在解决实例分割任务时,在FCOS的整体架构上做了哪一些调整。

在这里插入图片描述
首先讲到的是CenterMask,把这个放在最前面是因为他的想法非常直接,这个结构可以理解成 FCOS + MaskRCNN 的 mask的分支。

在这里插入图片描述
我们可以将它和FCOS做一下对比,输入图像通过 FCOS 得到目标框,这一部分是一样的。之后类似 MaskRCNN,用 ROIAlign 把对应的区域 crop 出来,resize 到 14 x14 ,最后经过 mask branch 计算 loss。想法非常简单。

在这里插入图片描述

第二篇是EmbedMask,在保证近似精度的基础上,它的最快速度可以达到MaskRCNN的三倍。它采取了one-stage方法,相当于直接使用语义分割得到分割结果之后,在使用聚类或者一些手段将同一个实例的整合到一起,得到最终实例的分割结果
在这里插入图片描述
整个网络的结构如上图所示,还是一个FPN的结构,在分辨率最大的特征曾P3使用pixel的embedding,将每个pixel都embedding成一个D长度的向量,因此最后得到的是H_W_D的特征图。然后依次对每个特征图P3、P4、P5、P6、P7使用proposal head,也就是传统的目标检测的head,再其中的改进就是,对于每个proposal也都embedding成一个D长度的向量。使用一个margin来定义两个embedding之间的关联程度,如果小于这个embedding,就认为这个pixel和这个proposal是同一个instance。但是呢,文中提出使用一个人为定义的margin,会导致一些问题,因此呢,本文就提出了一个learnable margin,让网络自动学习每个proposal的margin,就如结果图中所示的proposal margin那条路径。对比FCOS,EmbedMask加入了图中蓝色的模块。

虽然EmbedMask和CenterMask等工作都是基于一阶段的检测算法,来做实例分割,但是它的核心要点,其实并没有变,都是基于一个足够好的detector来从proposal里面生成mask。事实证明这非常有效,基于一个足够好的detector的实例分割方法不仅仅有利于找到更多的mask,同时这些mask的生成反过来会提升detector本身的效果。所以你可以看到这两个实例分割的box AP都要比FCOS要高,当然这也是必然。

在这里插入图片描述
第三篇是PolarMask,它也是基于FCOS,把实例分割统一到了FCN的框架下。PolarMask提出了一种新的instance segmentation建模方式,在将极坐标的360度等分成36分,通过预测这36个方向上,边缘到极坐标中心的距离,从而得到物体的轮廓。

在这里插入图片描述
在这里插入图片描述

三、对多目标追踪领域的一些关注

这里主要对比了两篇基于CenterNet的扩展出的工作。首先简单介绍一下MOT(Multi-Object Tracking)的任务,它需要对视频中的每一帧进行物体检测,并对每一个物体赋予一个id,去追踪这个目标。

在这里插入图片描述
CenterTrack是CenterNet的原作者做的工作,在将目标检测任务扩展到多目标检测上时,作者通过追踪物体的中心点,来解决追踪问题。多目标检测任务有两个关键,一是我们需要把每一帧当中的物体检测出来,这里包括了遮挡物体;二是我们需要在时间维度上,对物体做id的匹配。
在这里插入图片描述
下边这张图中的红色区域是为了解决Track任务时,输入了t时刻的图像 I t I^t It、t-1时刻的图像 I t − 1 I^{t-1} It1以及在t-1时刻的检测出的所有物体 T t − 1 T^{t-1} Tt1,这里的红色区域是不同于目标检测任务的,新增了四个通道(其中三个通道是图像的输入、还有一个通道的计算会在后边展开)。

在输出部分,网络除了输出检测的中心峰值点的heatmap预测长宽的特征图之外,网络还输出了一个2通道的offset,这里的offset表示的是两帧之间,物体的移动距离

在这里插入图片描述
左边是网络的输入,右边是网络的输出。在数学上的表示I 为的是图像输入、T中的b表示的是bbox,右边分别是检测的中心峰值点、长宽的特征图、物体移动的偏移量。

在这里插入图片描述
以上是在网络训练时,其对应中心峰值点、长宽的特征图、物体移动的偏移量的三个损失函数的具体表现形式。在解决中心点预测的任务是,这里采用的是focal loss,x、y表示了点在heatmap上的位置,c是类别。Y是属于0,1的峰值图, R q R^q Rq渲染了高斯形状的凸起的峰值,对每一个位置,如果它在某个类别数存在中心点,在对应的channel上就会形成一个峰,我们对每个位置取出最大的坡高。其中p表示中心点,q为位置。我们得到这些最大坡高之后,放到1个通道的heatmap中,做为网络输入的一部分。和上一帧的三通道的图片,就组成了前面说的,在解决tracking任务时,新增的4个channel的输入。

对长宽和偏移量的损失计算,用的就是简单的L1 loss。有了足够好的偏移量预测,网络就可以去关联前一时刻的目标。对于每个检测位置p,我们将它与之前最近的物体赋予同一个id,如果在一个半径κ中,没有前一个时刻的目标,我们就生成一个新的追踪。
在这里插入图片描述
FairMOT也是基于CenterNet的工作,和CenterTrack是同期的。与CenterTrack引入目标框在前后帧中的移动距离偏置不同,它借鉴了重识别的想法,在检测的分支上,加入了一个Re-ID的分支,它将目标的id识别的embedding作为分类任务。在训练时,所有训练集中具有相同id的所有对象实例都被视为一个类。通过给特征图上的每一个点,附上一个128维的Embedding向量,最后将这个向量映射到每一个类的分数p(k)。其中k是类别数(即出现过的id), L i ( k ) L^i(k) Li(k) 是gt的one-hot的编码,最后用softmax 计算loss。

2020-7-24更新:可能有人会对这里的embedding映射到分类的做法,提出一些质疑,当在后续帧中出现大量新的人的时候,FairMot能给这些新的人赋予一正确的新id吗?作者在解决这个问题的时候,在训练的时候采用的是分类loss,测试阶段采取用cos距离做判断。并且,当reid不可靠的时候,就用bbox IOU来匹配。具体地,对 reid embedding没匹配上bbox,用IOU得到前一帧中可能的追踪框,计算他们之间的相似度矩阵,最后用匈牙利算法得到最后的结果

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA下Logback.xml自动提示功能配置

首先打开logback的配置文件&#xff0c;在configuration标签中加入xsd的配置 <configuration xmlns"http://ch.qos.logback/xml/ns/logback"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://ch.qos.logback/xml…

消防通道堵塞识别 opencv

消防通道堵塞识别系统通过opencvpython网络模型技术&#xff0c;消防通道堵塞识别对消防通道的状态进行实时监测&#xff0c;检测到消防通道被堵塞时&#xff0c;将自动发出警报提示相关人员及时采取措施。OpenCV的全称是Open Source Computer Vision Library&#xff0c;是一个…

XILINX 4种7系列FPGA的特点与应用场景详解

&#x1f3e1;《Xilinx FPGA开发宝典》 目录 1&#xff0c;概述2&#xff0c;性能成本分析3&#xff0c;性能提升方法4&#xff0c;总结 1&#xff0c;概述 7系列FPGA包括Spartan-7&#xff0c;Artix-7&#xff0c;Kintex-7和Virtex-73类&#xff0c;分别简称为S7,A7,K7和V7。本…

微服务远程调用openFeign整合

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; 微服务探索之旅 ✨特色专…

Spring Boot中的@GetMapping注解,如何使用

Spring Boot中的GetMapping注解 介绍 Spring Boot是一个流行的Java框架&#xff0c;它提供了许多方便的注解和工具&#xff0c;使得Web应用程序的开发变得更加容易。其中&#xff0c;GetMapping注解是Spring Boot中最常用的注解之一&#xff0c;它可以帮助开发者定义和处理HT…

Visual modflow Flex地下水数值模拟及参数优化、抽水实验设计与处理、复杂的饱和/非饱和地下水流分析

专题一 地下水数值软件的操作流程、建模步骤和所需资料处理及相关注意事项 [1] Visual MODFLOW Flex特征 [2] Visual MODFLOW Flex软件界面及模块 [3] 地下水数值模拟的建模步骤及数据需求 专题二 模型建模操作方法 技巧、真实案例演练、特殊问题处理 [1] 直接模型建模的操…

农产品批发采购APP开发 手机里的农产品市场

农业发展是民生之本&#xff0c;随着互联网时代的到来各行各业都迎来了新的发展机遇&#xff0c;农产品批发采购、配送服务等方面也发生了很大的改变&#xff0c;各种农产品商城APP、农产品批发采购平台、农产品供应管理系统的开发让包含农产品信息、数据、物流、配送、仓储、质…

Web3通过 MetaMask简单演示对ganache虚拟环境账号进行管理操作

上文 Web3通过ganache运行起一个本地虚拟区块链 我们通过ganache在本地运行起了一个虚拟的区块链环境 那么 接下来 我们就要用 MetaMask 来管理这个东西了 如果您还没有安装 可以访问文章Web3 将 MetaMask添加入谷歌浏览器 扩展程序中和Web3开发准备工作 手把手带你创建自己的 …

微信小程序页面导航

1.声明式导航 1.1声明式跳转Tab页面 1.1.1配置的Tab页面 1.1.2页面跳转书写 <navigator url"/pages/home/home" open-type"switchTab">跳转首页</navigator> 1.2.3页面展示 1.2声明式跳转到非Tab页面 1.2.1页面跳转代码 <navigator ur…

一面、二面、三面有什么区别?

很多公司面试都分一面、二面、三面甚至更多&#xff0c;大家可能会好奇&#xff0c;为什么要面这么多面&#xff0c;每一面又有啥区别呢&#xff1f; 首先我来回答下为什么要这么多面&#xff0c;最核心的是最后3点&#xff1a; 如果光是一个人面&#xff0c;担心会看走眼&…

详解如何使用nvm管理Node.js多版本

目录 NVM进行NodeJS多版本管理 背景 安装步骤 1. 下载nvm安装包 2. 安装nvm 使用步骤 下载nodejs 切换版本nodejs ​编辑 常用命令 NVM进行NodeJS多版本管理 背景 有的时候开发环境需要多个NodeJS的版本&#xff0c;这个时候就可以用NVM进行管理。 安装步骤 1. 下载n…

LeetCode 打卡day44--完全背包问题及其应用

一个人的朝圣 — LeetCode打卡第44天 知识总结 Leetcode 518. 零钱兑换 II题目说明代码说明 Leetcode 377. 组合总和 Ⅳ题目说明代码说明 知识总结 今天结束了完全背包问题, 完全背包问题与01背包问题的区别在于可以无限次的使用物品的数量. 其和01背包的差别在于, 01背包先遍…

easypoi 导出word并插入echart图片和文件

一 pom 文件引入&#xff1a;<!-- 目前的版本对应 poi 4.1.2 和 xmlbeans 3.1.0 , poi 3.17 和 xmlbeans 2.6.0 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version&…

《后端存储实战课》课程学习笔记(三)

流量大、数据多的商品详情页系统该如何设计&#xff1f; 电商的商品系统主要功能就是增删改查商品信息&#xff0c;没有很复杂的业务逻辑&#xff0c;支撑的主要页面就是商品详情页。设计这个系统的存储&#xff0c;你仍然需要着重考虑两个方面的问题。 第一&#xff0c;要考虑…

【计算机网络】可靠传输的实现机制

参考视频 https://www.bilibili.com/video/BV1c4411d7jb 1、停止-等待协议SW (Stop-and-Wait) 1.1 信道利用率 1.2 题目 1.3 小结 2.回退N帧协议GBN (Go-Back-N) 1.1 题目 1.2 小结 3.选择重传协议SR (Selective-Repeat) 3.1 过程 3.2 发送窗口 和 接收窗口尺寸范围 4.小结 5.…

Centos7单机安装Redis

安装Redis依赖 Redis是基于C语言&#xff0c;因此首先需要安装Redis所需要的gcc依赖&#xff1a; yum install -y gcc tcl ​ 上传安装包并解压 上传安装包redis-6.2.12至/home目录下 ​ # 解压 tar -xzf redis-6.2.12.tar.gz # 安装 cd redis-6.2.12 make && mak…

第七十天学习记录:高等数学:微分(宋浩板书)

微分的定义 基本微分公式与法则 复合函数的微分 微分的几何意义 微分在近似计算中应用 sin(xy) sin(x)cos(y) cos(x)sin(y)可以用三角形的几何图形来进行证明。 假设在一个单位圆上&#xff0c;点A(x,y)的坐标为(x,y)&#xff0c;点B(x’, y’)的坐标为(x’, y’)。则以两点…

文言一心,ChatGLM-6B和ChatGPT等模型概述

原文首发于博客文章大语言模型概况 定义 &#xff08;个人理解的&#xff09;大语言模型&#xff08;Large Language Model&#xff09;是一种基于深度学习技术的自然语言处理通用模型&#xff0c;它可以通过学习大规模文本数据的模式和规律&#xff0c;从而实现对自然语言的理…

生物群落(生态)数据统计分析与绘图

R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂&#xff0c;涉及众多统计分析方法。以生物群落数据分析中的最常用的统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法为主线&#xff0c;通过多个来自经典…

Vue Router 相关理解 基本路由 多级路由

6.1.相关理解 6.1.1.vue-router 的理解 vue的一个插件库&#xff0c;专门用来实现SPA应用 6.1.2.对SPA应用的理解 单页Web应用&#xff08;single page web application&#xff0c;SPA&#xff09;整个应用只有一个完整的页面点击页面中的导航链接不会刷新页面&#xff0c…