论文日记五:QueryInst
导读
实例分割领域21年的SOTA,整个模型结构设计总述为以下:
1)设计了类似于Cascade Mask R-CNN的多阶段迭代优化的bbox和mask预测头;
2)基于query的实例分割方法,延续了DETR(首次将Transformer成功整合为检测pipline中心构建块的目标检测框架模型)中的随机初始化N个object queries和匈牙利匹配损失函数、transformer的Mutil-head attention模块,提出了动态掩码头模块;
这里先解释第一点:多阶段优化
实例分割领域的使用多阶段优化迭代主要解决一个问题:Mismatch
Mismatch问题以两阶段的R-CNN为例子,我知道两阶段实例分割训练阶段大概流程为:输入图像-->backbone(一些卷积操作等等得到特征图)-->feature map --> Region Proposal Netword(RPN) --> Proposal --> Roi pooling/Roi Align(流程如下图所示),在这个得到proposal的时候,会计算proposal和GT的IOU,这时会有一个人为设定的阈值IOU,通过阈值将proposal分为正、负样本(一般为1:3),之后这些proposal送入到ROI Pooling/Roi Align中进行分类和回归;而在测试阶段,输入图像-->backbone-->feature map-->RPN-->proposal到proposal这一步无法采样,因为没有GT,只能将所有的proposal当做正样本进入ROI Pooling,这样导致的问题是:训练阶段的proposal被采样过,而inference没被采样过,输入ROI pooling/RoI Align的分布不一样,后者未经过筛选,质量更差,用前者训练的detector来测试后者的proposal,肯定不对;此外如果提高IOU阈值,1)满足阈值的Proposal更少,造成过拟合;2)training阶段的proposal减少,而inference不变,更加剧了“1)”。

因此,Cascade RCNN给出的方法是:多阶段(用一个stage的输出去训练下一个stage),例如,有一个IOU为0.65的proposal,有3个detector(0.6/0.7/0.8),这里的一个固有实验现象是:proposal经过detector后,IOU会提高,那这样,0.65的proposal经过0.6的detector后,IOU-->0.75,再经过0.7的detector又提高到0.85,再-->0.8的IOU,detector-->0.95,这样proposal的质量更高,而且因为阈值逐级上升,不会有多的样本筛选掉;
第二点结合模型结构来了解;
模型结构
1)Backbone:queryinst的backbone由ResNet50+FPN输出C2,C3,C4,C5四个分辨率的特征;
2)queries:这里延用了DETR中随机初始化N个object queries,采用nn.Embedding初始化N个object的queryinst bbox和queries features,并将初始化的bbox解码为原始尺寸的bbox表达,(bbox解码有中心点+高宽改为左上、右下角点表示);
3)bbox和cls预测:以第一阶段为例子,

- xFPN表示FPN输出的多分辨率特征图,bt-1表示上一阶段的bbox的预测,Pbox在这表示ROI Align,xboxt表示得到的7*7的bbox feature;
- qt-1是上一阶段的object query,MSAt是transformer中的Mutil-head self-attention,得到的q*t-1是transformer query;
- DynConvboxt是动态卷积,输出的qt和xbox*t分别是增强的bbox feature和object query;
- Bt代表有FFN构成的bbox预测分支,bt为这一阶段的预测结果;
4)最主要创新点:Dynconvbox和DynConvmask
这里有queryinst的动态掩码头示意图:

与以往不同的是,增添了一个DynConvmaskt模块,这样将query和mask feature 建立了联系,看下面公式:

看懂了第“3)”部分的公式,这部分也自然容易看懂,这里最重要的是,经过ROI Align的mask feature和query同时经过了动态卷积,
- 那这样在训练期间,每个掩码信息不仅传回Xmaskt,还会流回mask,这样使得mask和query之间建立了联系,训练完成后,掩码预测的信息存在query中;
- 在推理阶段,前5个stage丢弃所有的动态掩码头,仅在最后阶段使用,query隐式地携带了多阶段信息进行掩码预测(query+Xmaskt经过Dynconvtmask得到mask)
总结
- queryinst集成了Cascade Mask R-CNN的多阶段迭代优化和DETR的object queries和匈牙利匹配损失函数、transformer的Mutil-head attention模块,构建了一个基于query的实例分割框架,它由基于query的对象检查器和并行监督驱动的六个动态掩码头组成;
- 关键点是提出了Dynconvtmask模块,将query和mask信息建立了联系,同时利用不同阶段的query中固有的一对一对应关系提升了检查精度,即每个单独的的query在每个阶段均用来预测同样的目标;
3.多头自注意力
论文日记五:QueryInst的更多相关文章
- oracle入坑日记<五>数据表
1 数据表 1.1.数据表是存放数据字段信息的地方:在Oracle,数据表拥有者单位是用户,同时数据表属于表空间.如: 登录my_user用户在orcl表空间下创建的表就是 my_user用户在o ...
- 【社交系统研发日记五】ThinkSNS+如何计算字符显示长度?
今天我们来聊一下可能很多人都会头疼的东西:显示长度. 需求是这样的,在字符的显示上,两个英文单词才占一个中文或者其他语言的显示长度.如下: 上面排的是两个英文字母,一个汉字,一个Emoji.你会发现, ...
- Python学习日记(五) 编码基础
初始编码 ASCII最开始为7位,一共128字符.最后确定8位,一共256个字符,最左边的为拓展位,为以后的开发做准备. ASCII码的最左边的一位为0. 基本换算:8位(bit) = 1字节(byt ...
- oracle入坑日记<六>自增列创建和清除(含序列和触发器的基础用法)
0 前言 用过 SQLserver 和 MySQL 的自增列(auto_increment),然而 Oracle 在建表设置列时却没有自增列. 查阅资料后发现 Oracle 的自增列需要手动编写. ...
- oracle入坑日记<四>表空间
1 表空间是什么 1.1.数据表看做的货品,表空间就是存放货品的仓库.SQLserver 用户可以把表空间看做 SQLserver 中的数据库. 1.2.引用[日记二]的总结来解释表空间. 一个数 ...
- oracle入坑日记<三>用户详解(角色理解)
1 用户是什么 1.1.权限管理是Oracle的精华,不同用户登录到同一数据库中,可能看到不同数量的表,拥有不同的权限.Oracle 的权限分为系统权限和数据对象权限,共一百多种.如果把Oracl ...
- oracle入坑日记<二>认识oracle(含sqlplus基础使用)
1.SID(数据库实例) 1.1. oracle安装的时候有一项叫[全局数据库名]的填写项,这个就是oracle的SID也是数据库的唯一标识符: 1.2.一个oracle数据库有且只有一个SID(一般 ...
- oracle入坑日记<一> 安装
学习日记系列(前辈/大神勿喷) 一.下载 下载地址:http://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads ...
- 《Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments》论文解读
MADDPG原文链接 OpenAI bog DDPG链接 目录 一.摘要 二.效果展示 三.方法细节 问题分析 具体方法 伪代码 网络结构 四.实验结果 五.总结 附录 Proposition 1 一 ...
- 2015.12.20-2015.12.25 大论文迭代 A
进一步充实大论文内容.结构,完善一遍大论文 12.20周天,完成论文第五章总结部分,和第一章的修改 12.21周一,完成论文第二章的修改充实 12.22周二,完成论文第三章的修改充实 12.23周三, ...
随机推荐
- uni-app 打包发行
1.云端 发行-原生App-云打包 2.离线 运行-原生App本地打包-生成本地打包资源,如果提示安装依赖包,安装即可 注意:项目的AppID不能为空,请在该项目下的manifest.json中重新获 ...
- 一些JS过滤方法
一般过滤器我们都会卸载过滤filter文件内 本文这里就直接写正常methods格式的 //过滤空格 filterSpaces(data) { return data.replace(/\s+/g, ...
- 这可能是最全面的Java面试八股文了
Java的特点 Java是一门面向对象的编程语言.面向对象和面向过程的区别参考下一个问题. Java具有平台独立性和移植性. Java有一句口号:Write once, run anywhere,一次 ...
- 数据治理核心保障数据质量监控开源项目Apache Griffin分享
@ 目录 概述 定义 为何要做数据质量监控 基本概念 特性 架构 安装 Docker部署 Docker 镜像批处理使用 Docker 镜像流处理使用 UI界面操作 概述 定义 Apache Griff ...
- htop 和 bashtop 的一些不足
htop 和 bashtop 都是 Linux 资源监视器中非常好用的工具,尤其对于展示当前 Linux 操作系统的处理器.内存.硬盘.网络和进程等各项资源的使用情况与状态.但它们都有一个问题,就是当 ...
- 基于 gulp 的 fancybox 源码压缩
前不久,处理生信分析的网页版自动化报告时候就使用过 fancybox,今天在优化个人博客,为博文增加图片缩放效果,解决一些滚动条问题时,才从 fancybox 的 Github 源码中接触到 gulp ...
- c# 如何将枚举以下拉数据源的形式返回给前端
前言: 相信各位有碰到过与我类似的问题,当表中存一些状态的字段,无非以下几种形式1.直接写死 如: 正常:1,异常:2 ,还有一种则是写在字典中,再或者就是加在枚举上,前两者对于返回下拉数据源来说比较 ...
- Spring Boot异步请求处理框架
Spring Boot异步请求处理框架 1.前言 在Spring Boot项目中,经常会遇到处理时间过长,导致出现HTTP请求超时问题,状态码:502. 例如一个文件导入接口需要导入一个Exc ...
- 现代C++学习指南-方向篇
C++是一门有着四十年历史的语言,先后经历过四次版本大升级(诞生.98.11.17(20),14算小升级).每次升级都是很多问题和解决方案的取舍.了解这些历史,能更好地帮助我们理清语言的发展脉络.所以 ...
- 前端Vue自定义简单实用中国省市区三级联动选择器
前端Vue自定义简单实用中国省市区三级联动选择器, 请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13118 效果图如下: 使用方法 < ...