FCOS相关

news2024/12/21 14:48:45

因为用到了某家带bpu的(懂的都懂) 他们支持这个只是demo做的有点差 还没有c++的~~ 

因为他们用所以就搬来了 勿怪啊 基于昨天和他们相关的tops 又说说这个!!

FCOS是一种基于全卷积的单阶段目标检测算法,并且是一种Anchor box free的算法。其实现了无Anchor,无Proposal,并且提出了Center-ness的思想,极大的提升了Anchor-Free目标检测算法的性能。

全卷积单阶段目标检测

类型:基于multy-level的目标检测模型

Paper link:https://arxiv.org/pdf/1904.01355.pdf

Code link:https://github.com/tianzhi0549/FCOS

anchor box 的弊端:

1.太多超参数,调试复杂

检测性能对anchor的尺寸、宽高比、数量十分敏感。比如RetinaNet中,调整超参数能够影响4%的AP在COCO数据集上。因此对于anchor的超参数需要细致调整。

2.难以处理尺度变化很大的目标,尤其是很小的目标

预定义的anchor框尺寸和宽高比是固定的也会妨碍检测模型的泛化性能,检测模型会难以处理尺度变化很大的目标,尤其是很小的目标。

3.通用性差

对于新的检测任务就需要重新设计anchor

4.negative sample 占比太大,正负样本不均衡

为了获得更高的找回率,基于anchor的模型会在输入图像上密集放置anchor框,大多数anchor框在训练阶段被认为是负例,过多的负例加剧了正负样本之间的不平衡。

5.计算复杂

大量的anchor框也会明显增加计算量和内存占用,尤其在iou计算的阶段。

问题:

​ 全卷积FCN神经网络在密集预测任务(语义分割、高度估计、关键点检测、计数)上获得了巨大的成功。作为其中一种高层的视觉任务,目标检测因为用到了anchor,可能是唯一一个没有纯粹全卷积像素级预测的任务了。很自然我们会疑问:我们能通过简单的像素级预测来做目标检测吗,像语义分割中的FCN那样?

现有方法和存在的问题:

一些工作尝试去构造一种FCN-base的框架,如DenseBox、UintBox。具体来说,这些FCN-base的模型直接在特征图的一层的每个空间位置上预测一个4D向量和一个类别。如图1左所示,4D向量 (l,t,r,b)表示该位置到边界框四条边的偏移量。这些模型和语义分割的FCNs很像,除了每个位置需要回归一个4D向量以外。

DenseBox图像金字塔多次重复计算

为了处理不同尺寸的边界框,DenseBox将训练样本缩放成固定尺寸,从而在特征金字塔上进行检测,这和一次计算所有卷积的FCNs理念不同。

重叠处的像素回归的框是不明确的

而且,这些方法主要用在特定区域的检测上,比如场景文字检测和人脸检测,因为边界框大大重叠,所以这方法不适合在通用目标检测上使用。如图1右所示,高度重叠的边界框会给训练带来问题:重叠处的像素回归的框是不明确的。

 

如左图所式,FCOS预测一个4D向量 (l,t,r,b)来编码每个前景像素点对应边界框的位置(训练时由ground-truth监督)。右图展示了一个像素点对应多个边界框,这可能会给边界框的回归带来问题。

解决方法

1.使用FPN可以大幅度减弱目标分类和回归的这种不明确性。

2.“中心度”(center-ness)分支来预测一个像素到对应边界框中心的偏移,差的边界框会被”中心度“分支抑制

这种新的检测模型有如下优势:

  • 检测和其他FCNs的任务(如语义分割)统一,使它便于在任务间复用。
  • 检测也可以是proposal free和anchor free的,显著降低参数量。设计参数一般需要多次调整,用上很多tricks来获得好的性能。因此我们新的检测框架使检测模型大大简化,尤其是在训练阶段。而且我们的方法完全避免了anchor的复杂的iou计算和匹配,降低了两倍的内存占用。
  • 毫无疑问,我们达到了单阶段检测器sota的性能,而且我们提出的FCOS也可以用做RPN网络,在其他RPN的双阶段检测器中,达到了更好的性能。考虑到这是一个简单的、anchor free的、性能卓越的模型,我们建议学界重新思考anchor的必要性,而后者在当下被认为是检测中理所应当的标准。
  • 提出了模型通过少量调整可以立刻用于解决其他视觉任务,包括实例分割、关键点检测。我们相信这种新的方法可以成为实例级预测问题的新的baseline。

方法 

在这首先推导目标检测在像素级预测范式中的形式。其次展示了如何利用多层预测来提高召回率,解决训练中重叠边界框的不确定性的问题。最后,提出了“中心度”分支,抑制差的检测框,大幅度提高总体性能。

1.网络结构

FCOS采用的网络架构和RetinaNet一样,都是采用FPN架构,如图2所示,每个特征图后是检测器,检测器包含3个分支:classification,regression和center-ness。

 

2.正负样本定义

 

如果其落在任何GT的中心区域,就认为这个位置为正样本,并负责预测这个GT,在映射后的该点直接回归目标框,而不是把这个点看成目标框的中心点进行回归;否则为负样本。如果落在多个GT的区域内,则称其为模糊样本(ambiguous)。

3.FPN结构和ambiguous样本的处理

重叠框会在训练过程中带来二义性模糊的问题,因为重叠区域的像素需要判断:我到底该去回归哪个框呢?这是导致FCN based模型性能较差的一个原因。对于anchor-based方法,采用FPN时会将不同大小的anchor放置在不同大小的特征图上,特征图越小,感受野相应更大,用来检测更大的物体。同样地,这种设计理念可以用在FCOS模型上,以解决前面所说的模糊样本问题。

 

上python 

class Scale(nn.Module):
    def __init__(self, init_value=1.0):
        super(Scale, self).__init__()
        self.scale = nn.Parameter(torch.FloatTensor([init_value]))

    def forward(self, input):
        return input * self.scale

但是现在的版本中,前面已经提到每个特征图上的回归值其实是已经除以特征图的 s 进行缩放,这样就和学习一个scale值基本等同,所以加不加这个策略都可以。

模糊样本的出现大部分是由于物体重叠造成的,但是重叠的物体大部分其大小是不同的,所以FPN的使用可以更一步解决模糊样本问题。

4.网络输出和loss定义

  1. classification分支

和RetinaNet一样采用 C 个二分类,classification分支共输出C个预测值,loss采用focal loss。

2. regression分支

regression分支每个位置预测一个实数向量 t=(l,t,r,b) ,其对应的target为当前位置与GT框4个顶点间的距离:

 

​ loss计算使用的是IOU loss。

3. ceterness分支

FCOS在regression分支的末尾添加了一个额外的center-ness分支(最早的版本是放在classification分支,但是放在regression分支效果更好)来抑制那些由那些偏离目标中心的位置所预测的低质量检测框。center-ness分支只预测一个值:当前位置与要预测的物体中心点之间的归一化距离,值在[0, 1]之间,图4给出了可视化效果,其中红色和蓝色值分别1和0,其它颜色介于两者之间,从物体中心向外,center-ness从1递减为0。

给定回归的 target=(l∗,t∗,r∗,b∗) ,center-ness的target定义为: 

 

centerness 可视化

centerness 的loss计算使用BCE损失。

最终的loss是三个loss相加。(以下是分类和回归loss)

在测试阶段,最终的置信度为center-ness和分类概率的乘积:

六、实验

简要提一下,日后如果感兴趣再补。

COCO训练集上训练,验证集上测试和消融研究,在测试集上提交得到最终结果。

如果没额外说明:

训练: 主干resnet50,优化器SGD训练90K次迭代,初始学习率0.01,batchsize=16,学习率在60K和80K次迭代时减小10倍,衰减系数1e-4,动量0.9。用ImageNet预训练模型,RetinaNet中的初始化方法初始化其他参数,输入图像短边固定在800,长边小于等于1333。

预测: 输入图像经过模型,后处理和RetinaNet相同(包括超参数)。

消融分析

  • BPR:我们看到RetinaNet还是很强的,但是在使用了多层级FPN预测后,FCOS的召回也很棒。 

 

  • 二义性样本:使用了FPN后,二义性样本减小明显(第二列为不同类别的二义性样本个数)。 

 

  • FPN:FPN同样提升了10几个点

  • 候选框数量、存储:因为没有anchor,所以对比单个像素点上9个anchor框少了9倍的候选框数量就很显然了,与此同时,显存占用也只有一半,性能总体没掉,甚至看AP还比RetinaNet高。

 

  • 中心度:从上至下分别是没用中心度、使用每个像素上回归出来的向量计算得到中心度(间接的方法)、使用文中提到的额外分支预测的中心度(直接的方法+)。可见这个额外分支虽然只有单层,但在全指标上都有明显的提升。

 

  • RPN:FCOS可以作为two-stage模型的RPN网络,提了不少点。

 

  • 模型对比:文中结果看看起来基本稳坐one-stage方法第一的宝座。但模型共享了头部网络,也减小了anchor算iou的计算量,但是全文通篇没有提到前向速度。我姑且估计是因为ResNe(X)t-50/101+FPN的多层级预测减慢了速度,可以跑跑开源代码试试。 

  • 改进(这个作者不放在算法设计部分而是放在实验部分,不起眼但是很重要):

 

    • “ctr. on reg.”: 将 center-ness分支移到regression branch. 
    • “ctr. sampling”: 只采样中心点附近的 ground-truth boxes作为正样本.
    • “GIoU”: 使用GIOUloss
    • “Normalization”: 将regression targets 除以 the strides:
  • centerness可视化

 ​

 如左图所式,FCOS预测一个4D向量 (l,t,r,b)来编码每个前景像素点对应边界框的位置(训练时由ground-truth监督)。右图展示了一个像素点对应多个边界框,这可能会给边界框的回归带来问题。

分类得分乘以ceterness之后,,低质量的不准的框大大减少,相当于减少了FP.

下面在复习一下~~  whaosoft aiot http://143ai.com 

经典单阶段Anchor-Free目标检测模型

Anchor free的好处是:

  • 避免了Anchor Box带来的复杂计算,如计算重合度IoU;
  • 避免了Anchor Box相关的超参数设置,其对性能影响较大;

因此,FCOS的优点是:

  • 其可以和其他使用FCN结构的任务相统一,方便其他任务方法之间的re-use
  • proposal free和anchor free,减少了超参数数量,更简单
  • 减少了计算复杂度,如IoU计算
  • FCOS在单阶段算法中性能不错,并且证明了FCOS替换两阶段算法里的RPNs也可以取得更好的性能
  • 适用于各种instance-wise的预测问题

FCOS包含三个大模块:

正负样本定义

一个目标检测算法性能的优异性,最大影响因素就是如何定义正负样本。而FCOS的定义方式非常通俗易懂。主要分为两步: (1) 设置regress_ranges=((-1, 64), (64, 128), (128, 256), (256, 512),(512, INF),用于将不同大小的bbox分配到不同的FPN层进行预测即距离4条边的最大值在给定范围内 (2) 设置center_sampling_ratio=1.5,用于确定对于任意一个输出层距离bbox中心多远的区域属于正样本(基于gt bbox中心点进行扩展出正方形,扩展范围是center_sample_radius×stride,正方形区域就当做新的gt bbox),该值越大,扩张比例越大,选择正样本区域越大;(细节:如果扩展比例过大,导致中心采样区域超过了gt bbox本身范围了,此时需要截断操作)

损失函数

上面已经发了~~!!

Center-ness的计算公式如下,其范围为0-1,训练阶段使用BCE Loss并和之前的损失函数相加,测试阶段用于加权预测得分:

 

实验结果

对比实验结果:

有无Center-ness分支的消融实验:

 

替换RPN的消融实验:

 

 

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

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

相关文章

该反省了!元数据管理平台为什么会被当成一件“摆设”?

尽管企业越来越意识到元数据管理的重要性,但是在实际中很多应用并没有发挥应有的价值。 前不久与一个行业客户沟通,他提出让他们帮着总结一下元数据管理到底有哪些应用场景,他感觉元数据管理平台就是一种摆设呢? 说者无意听者有心…

1978,1990,2020,2026,2041,2051

文章目录总结1978. 上级经理已离职的公司员工1990. 统计实验的数量[建立两个临时表并笛卡尔积]2020. 无流量的帐户数2026. 低质量的问题2041. 面试中被录取的候选人2051.商店中每个成员的类别总结 多表左连接转2051题【重点】 其他待补充 1978. 上级经理已离职的公司员工 # Wr…

【前端】HTML入门 —— HTML的常见标签

JavaEE传送门JavaEE 网络原理——No.4 传输层_TCP协议中的延迟应答, 捎带应答, 面向字节流与TCP的异常处理 网络原理——网络层与数据链路层 目录网站HTML认识 HTML 标签HTML 常见标签注释标签标题标签段落标签换行标签格式化标签图片标签超链接标签表格标签列表标签表单标签…

【Java学习笔记】第三章 数组知识点大全

文章目录3. 数组3.1 数组的概述3.2 一维数组的使用3.2.1 一维数组初始化3.2.2 一维数组内存解析3.3 多维数组的使用3.3.1 多维数组初始化3.3.2 多维数组的注意事项:3.3.3 int[] x,y[]3.3.4 多维数组的内存解析3.4 数组中涉及到的常见算法3.4.1 线性查找3.4.2 二分法…

【PCL】PCL点云库介绍及VS环境配置

文章目录PCL介绍Windows PCL环境配置PCL介绍 PCL是跨平台点云处理库,用来点云可视化、分割、聚类等应用。 PCL官网在这:https://pointclouds.org/ Github库在这(这里用1.8.1):https://github.com/PointCloudLibrary…

DASCTF X GFCTF 2022十月挑战赛 - pwn

DASCTF X GFCTF 2022十月挑战赛 - pwn 简单题,自己做了一下发现要比官方wp思路麻烦一点,所以这里就用官方wp的思路 高版本编译出来的,所以没有csu这种万能的gadget,果断看一下汇编 看完之后仔细思考了一下发现这里完全可以使用…

案例篇:Python爬虫的多重领域使用

大家好呀! 相信大家早有体会,大数据时代已到,数据的获取和分析已被应用于各行各业,在诸多领域承担着重要决策的作用,如互联网就业选择。 Python爬虫作为最好的数据采集技术,市场对它需求一直在增涨&#xf…

vue3-tauri-chat:基于tauri聊天实例|tauri仿微信客户端

Vue3.jsTauri桌面端聊天实例|tauri仿微信/QQ聊天TauriChat。 基于taurivite3.xvue3element-plus等技术开发客户端仿微信/QQ聊天实战案例。实现发送消息、预览图片/视频/网址链接、拖拽/粘贴发送图片、朋友圈等功能。 使用技术 编辑器:VScode使用技术:ta…

【C++笔试强训】第十五天

🎇C笔试强训 博客主页:一起去看日落吗分享博主的C刷题日常,大家一起学习博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话:夜色难免微凉,前方必有曙光 🌞。 💦&a…

C++模板

目录 ​一、认识模板 1.什么是模板 2.模板的分类 二、函数模板 1.泛型和函数模板 2.函数模板的格式 三、类模板 四、实例化 1.隐式实例化 2.显式实例化 3.隐式类型转换 4.模板参数的匹配原则 一、认识模板 1.什么是模板 模板(Template)指C…

Java笔记(十一)

文献种类:专题技术总结文献 开发工具与关键技术: IntelliJ IDEA、Java 语言 作者: 方建恒 年级: 2020 撰写时间: 2022 年 10 月 28 日 Java笔记(十一) 今天我给大家继续分享一下我的Java笔记, 我们来了解…

CTFHub | 报错注入

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习,实训平台。提供优质的赛事及学习服务,拥有完善的题目环境及配套 writeup ,降低 CTF 学习入门门槛,快速帮助选手成长,跟随主流比赛潮流。 0x01 题目描述…

第二站:分支与循环(第二幕)

目录 三、循环 1.while循环 (1)基本原理与用法 (2)break在while循环中的作用 (3)continue在while循环中的作用 (4)一图总结while循环 2.for循环 (1)基…

[SpringBoot] 多模块统一返回格式带分页信息

✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专…

算法刷题路线总结与相关资料分享

算法刷题路线总结与相关资料分享前言一、算法刷题路线总结二、算法题刷题步骤三、基础数据结构与算法知识1、时间复杂度2、空间复杂度3、线性表4、栈与队列5、树四、算法学习相关资料推荐1.数据结构与算法基础2.专项刷题路线资料3.算法课程视频资料后记前言 本文为算法刷题路线…

双十一数码产品哪些值得买?双十一好物产品分享

双十一必然是数码产品最值得买的,因为这类产品的优惠力度往往是最大的,所以每年的双十一都是升级数码设备的好时机,今天为大家带来的是便是个人推荐的双十一数码好物。好了,废话不再多说,我们开车吧。 一、不伤耳的骨…

postman 实用教程(含带 token 访问需登录权限的接口)

下载安装 Postman 访问官网下载安装 Postman https://www.postman.com/downloads/?utm_sourcepostman-home 新建文档 右键菜单可以重命名 新建接口 选择接口类型输入接口若传入参数格式为 json ,则选择 Body 中的 raw 和 JSON输入传入的参数(json格式&a…

计算机网络--数据链路层

今天来讲网络协议栈的最后一层,数据链路层(物理层我们不考虑了),我们之前学到,TCP协议提供了数据传输的可靠性,IP层决定数据报从哪到哪,那么数据报是如何从一个结点到下一个结点呢?得到相应如何返回呢&…

(02)Cartographer源码无死角解析-(09) gflags与glog简介、及其main函数讲解

本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885 文…

软件工程结构化设计

目录 结构化分析与结构化设计的关系: 体系结构设计概念: 图形工具: 层次图:调用关系​编辑 HIPO图:层次图IPO图 软件结构图: 软件设计原则: 模块化: 模块划分注意事项&#xf…