论文日记五: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周三, ...
随机推荐
- 解决:Invalid HTTP_HOST header: '192.168.56.1:8001'. You may need to add '192.168.56.1' to ALLOWED_HOSTS.
在setting.py下的ALLOWED_HOSTS=['*']添加'*'就可以解决显示不出来的问题.
- .NET周报 【5月第2期 2023-05-14】
国内文章 XUnit数据共享与并行测试 https://www.cnblogs.com/podolski/p/17388602.html 在单元或者集成测试的过程中,需要测试的用例非常多,如果测试是一 ...
- 2023-05-16:给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。 请你找到这个数组里第 k 个缺失的正整数。 输入:arr = [2,3,4,7,11], k = 5。 输出:9
2023-05-16:给你一个 严格升序排列 的正整数数组 arr 和一个整数 k . 请你找到这个数组里第 k 个缺失的正整数. 输入:arr = [2,3,4,7,11], k = 5. 输出:9 ...
- .NET 通过源码深究依赖注入原理
依赖注入 (DI) 是.NET中一个非常重要的软件设计模式,它可以帮助我们更好地管理和组织组件,提高代码的可读性,扩展性和可测试性.在日常工作中,我们一定遇见过这些问题或者疑惑. Singleton服 ...
- 鼠标移入select options会触发mouseleave 事件处理方案
近来遇到一项目有一侧边工具菜单,在鼠标mouseenter事件打开对应的详细操作列表,当mouseleave时进行关闭,然操作列表中有一个select , 每当鼠标移入select options 时 ...
- Nucleic Acids Research上关于生物医学分析Galaxy平台在几个独立面上的最新发展。
该平台的官方主服务器拥有超过124000注册用户,每月新注册用户~2000。平均而言,......
本文分享自微信公众号 - 生信科技爱好者(bioitee).如有侵权,请联系 support@oschina.cn 删除.本文参与"OSC源创计划",欢迎正在阅读的你也加入,一起分 ...
- .netcore中的虚拟文件EmbeddedFile
以前一直比较好奇像swagger,cap,skywalking等组件是如何实现引用一个dll即可在网页上展示界面的,难道这么多html,js,css等都是硬编码写死在代码文件中的?后面接触apb里面也 ...
- 记一次BootCDN被黑产挂马导致站点跳转博彩网站的问题
近期发现公司某些站点出现偶尔跳转博彩网站的现象,经过排查发现该现象为供应链投毒攻击,BootCDN上的静态资源无一例外均被污染, 当外站引入BootCDN的静态资源时,如果请求携带的Referer头为 ...
- .Net7发现System.Numerics.Vector矢量化的一个bug,Issues给了dotnet团队
因为前几天做.Net7的矢量化性能优化,发现了一个bug.在类System.Numerics.Vector里面的成员变量IsHardwareAccelerated.但是实际上不确定这个bug是visu ...
- 【TVM模型编译】0.onnx模型优化流程.md
本文以及后续文章,着重于介绍tvm的完整编译流程. 后续文章将会按照以上流程,介绍tvm源码.其中涉及一些编程技巧.以及tvm概念,不在此部分进行进一步讲解,另有文章进行介绍. 首先介绍一下,从onn ...