导读

实例分割领域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)

总结

  1. queryinst集成了Cascade Mask R-CNN的多阶段迭代优化和DETR的object queries和匈牙利匹配损失函数、transformer的Mutil-head attention模块,构建了一个基于query的实例分割框架,它由基于query的对象检查器和并行监督驱动的六个动态掩码头组成;
  2. 关键点是提出了Dynconvtmask模块,将query和mask信息建立了联系,同时利用不同阶段的query中固有的一对一对应关系提升了检查精度,即每个单独的的query在每个阶段均用来预测同样的目标;

    3.多头自注意力

论文日记五:QueryInst的更多相关文章

  1. oracle入坑日记<五>数据表

    1   数据表 1.1.数据表是存放数据字段信息的地方:在Oracle,数据表拥有者单位是用户,同时数据表属于表空间.如: 登录my_user用户在orcl表空间下创建的表就是 my_user用户在o ...

  2. 【社交系统研发日记五】ThinkSNS+如何计算字符显示长度?

    今天我们来聊一下可能很多人都会头疼的东西:显示长度. 需求是这样的,在字符的显示上,两个英文单词才占一个中文或者其他语言的显示长度.如下: 上面排的是两个英文字母,一个汉字,一个Emoji.你会发现, ...

  3. Python学习日记(五) 编码基础

    初始编码 ASCII最开始为7位,一共128字符.最后确定8位,一共256个字符,最左边的为拓展位,为以后的开发做准备. ASCII码的最左边的一位为0. 基本换算:8位(bit) = 1字节(byt ...

  4. oracle入坑日记<六>自增列创建和清除(含序列和触发器的基础用法)

    0   前言 用过 SQLserver 和 MySQL 的自增列(auto_increment),然而 Oracle 在建表设置列时却没有自增列. 查阅资料后发现 Oracle 的自增列需要手动编写. ...

  5. oracle入坑日记<四>表空间

    1   表空间是什么 1.1.数据表看做的货品,表空间就是存放货品的仓库.SQLserver 用户可以把表空间看做 SQLserver 中的数据库. 1.2.引用[日记二]的总结来解释表空间. 一个数 ...

  6. oracle入坑日记<三>用户详解(角色理解)

    1   用户是什么 1.1.权限管理是Oracle的精华,不同用户登录到同一数据库中,可能看到不同数量的表,拥有不同的权限.Oracle 的权限分为系统权限和数据对象权限,共一百多种.如果把Oracl ...

  7. oracle入坑日记<二>认识oracle(含sqlplus基础使用)

    1.SID(数据库实例) 1.1. oracle安装的时候有一项叫[全局数据库名]的填写项,这个就是oracle的SID也是数据库的唯一标识符: 1.2.一个oracle数据库有且只有一个SID(一般 ...

  8. oracle入坑日记<一> 安装

    学习日记系列(前辈/大神勿喷) 一.下载 下载地址:http://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads ...

  9. 《Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments》论文解读

    MADDPG原文链接 OpenAI bog DDPG链接 目录 一.摘要 二.效果展示 三.方法细节 问题分析 具体方法 伪代码 网络结构 四.实验结果 五.总结 附录 Proposition 1 一 ...

  10. 2015.12.20-2015.12.25 大论文迭代 A

    进一步充实大论文内容.结构,完善一遍大论文 12.20周天,完成论文第五章总结部分,和第一章的修改 12.21周一,完成论文第二章的修改充实 12.22周二,完成论文第三章的修改充实 12.23周三, ...

随机推荐

  1. uni-app 运行项目

    运行-运行到浏览器-选择浏览器 运行新项目:真机测试需要打开真机的开发者选项usb安装调试功能

  2. Java 网络编程 —— 实现非阻塞式的服务器

    创建阻塞的服务器 当 ServerSocketChannel 与 SockelChannel 采用默认的阻塞模式时,为了同时处理多个客户的连接,必须使用多线程 public class EchoSer ...

  3. 「高频面试题」Redis的持久化方式有哪些?

    RDB RDB(Redis DataBase)持久化是把当前Redis中全部数据生成快照保存在硬盘上.RDB持久化可以手动触发,也可以自动触发.save和bgsave命令都可以手动触发RDB持久化.除 ...

  4. RESTful API 简介

    RESTful API 简介 想必使用过 PHP.JSP 这一类服务器动态页面技术的程序员应该都还记得,在使用这种传统的动态页面架构构建应用程序的时候,用于描述用户界面的 HTML 页面通常都是在服务 ...

  5. VLAN——提高网络性能、安全性和灵活性的利器

    前言 VLAN是Virtual Local Area Network的缩写,它是一种通过网络交换机虚拟划分局域网的技术.VLAN可以将一个物理局域网划分成多个逻辑上的虚拟局域网,各个虚拟局域网之间相互 ...

  6. C#设计模式19——装饰器模式的写法

    装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许你动态地给一个对象添加一些额外的职责,而不需要修改这个对象的代码. What(什么) 装饰器模式是一种结构型设计模式,它允许 ...

  7. JavaWeb编程面试题——Spring Web MVC

    引言 面试题==知识点,这里所记录的面试题并不针对于面试者,而是将这些面试题作为技能知识点来看待.不以刷题进大厂为目的,而是以学习为目的.这里的知识点会持续更新,目录也会随时进行调整. 关注公众号:编 ...

  8. 南洋才女,德艺双馨,孙燕姿本尊回应AI孙燕姿(基于Sadtalker/Python3.10)

    孙燕姿果然不愧是孙燕姿,不愧为南洋理工大学的高材生,近日她在个人官方媒体博客上写了一篇英文版的长文,正式回应现在满城风雨的"AI孙燕姿"现象,流行天后展示了超人一等的智识水平,行文 ...

  9. Python进行大文件的备份

    Python进行大文件的备份的思路:每次仅从原文件中读取指定字符的内容后写入新文件,然后循环操作. def copy_big_file(): # 接收用户输入的文件名 old_file = input ...

  10. RabbitMQ快速使用代码手册

    本篇博客的内容为RabbitMQ在开发过程中的快速上手使用,侧重于代码部分,几乎没有相关概念的介绍,相关概念请参考以下csdn博客,两篇都是我找的精华帖,供大家学习.本篇博客也持续更新~~~ 内容代码 ...