【算法思考】端到端实例分割模型 SOLO

2023-10-12 04:04

本文主要是介绍【算法思考】端到端实例分割模型 SOLO,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 背景
  • 工作
  • 总结

背景

不同于语义分割,实例分割不仅需要输出图像的语义蒙版,还要对图像中不同的实例作区分。如下图所示,实例分割任务需要多不同的羊做区分,输出不同的实例蒙版。

实例分割

由于图片中实例个数的不确定性,实例分割一直以来都是比较难的话题。因此在端到端的方法问世之前,大多数方法可以分为两类:一类是先做目标检测,提出包围盒,然后从包围盒中分割出语义实例,比如 mask RCNN。另一类是给每个像素预测出一个向量表示,然后基于向量表示进行聚类。如果想要了解这两类方法的一些具体做法,可以参考 SOLO 这篇论文中的一些讨论。我们今天主要介绍的也是SOLO这篇文章的算法,其可以说是第一篇能做到端到端训练实例分割任务的模型,不要任何包围盒的辅助。

工作

SOLO这篇工作中提出了三个模型,分别是SOLO HEAD,Decoupled SOLO Head,Decoupled SOLO Light Head。我们今天把Decoupled SOLO Light Head的架构拿出来进行分析,方便大家深度了解这篇工作。

首先,如果输入是 288x384, 那么其网络的数据流和架构如下所示:

solo decoupled light
网络由三部分组成,分别是骨干网络resnet,fpn,solo head 这三个模块。
在图示中,蓝色模块表示卷积, 橙色块表示上采样, 如果橙色块的值为-1表示采样到上一层特征图大小。如果橙色块的值为2表示长采样2倍。灰色的块有 gridX文本, 表示会对feature map resize到(X, X) 大小。白色的块表示不包含batch_size 的特征维度。

在SOLO中很重要的一点是如何表示不同的实例,并从网络的输出中提取出不同的实例。
SOLO采用了这样的解决方法,对于不同的实例,认为每个实例的中心点的位置是不同的。在实际应用中,可以对图像进行划分,比如划分成12x12的网格(后面都用12x12来举例子),规定不同实例的中心点不会落在相同的网格上。通过这种定义,SOLO就可以通过一个类似语义分割模型的mask head进行实例的预测,而语义类别的个数就是划分得到的格子的数量。
除了得到每个实例的mask之外,SOLO模型还需要确定每个实例的语义,也就是通过 classification head得到具体的语义类别。classification head的实现就比较简单,会直接将特征图 resize到 12x12, 对网格中的每个特征进行语义分类。具体某个实例的语义类别,就通过取实例中心对应网格位置的分类结果得到。

总结

总的来说,SOLO这个模型稍微有些复杂,目前在实例分割方面已经有了一些更好的基于transformer的工作,比如mask2former等。SOLO的缺点很明显,其生硬地认为不同的实例中心位置应该不一样,并不适用于某些情况。另外,SOLO在处理不同大小实例的时候不够灵活,不同的分支只能输出固定范围内的实例mask,非常耗费计算力。

这篇关于【算法思考】端到端实例分割模型 SOLO的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/193117

相关文章

Nginx服务器部署详细代码实例

《Nginx服务器部署详细代码实例》Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,:本文主要介绍Nginx服务器部署的相关资料,文中通过代码... 目录Nginx 服务器SSL/TLS 配置动态脚本反向代理总结Nginx 服务器Nginx是一个‌高性

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

springboot+mybatis一对多查询+懒加载实例

《springboot+mybatis一对多查询+懒加载实例》文章介绍了如何在SpringBoot和MyBatis中实现一对多查询的懒加载,通过配置MyBatis的`fetchType`属性,可以全局... 目录springboot+myBATis一对多查询+懒加载parent相关代码child 相关代码懒

Java领域模型示例详解

《Java领域模型示例详解》本文介绍了Java领域模型(POJO/Entity/VO/DTO/BO)的定义、用途和区别,强调了它们在不同场景下的角色和使用场景,文章还通过一个流程示例展示了各模型如何协... 目录Java领域模型(POJO / Entity / VO/ DTO / BO)一、为什么需要领域模

C++中的解释器模式实例详解

《C++中的解释器模式实例详解》这篇文章总结了C++标准库中的算法分类,还介绍了sort和stable_sort的区别,以及remove和erase的结合使用,结合实例代码给大家介绍的非常详细,感兴趣... 目录1、非修改序列算法1.1 find 和 find_if1.2 count 和 count_if1

MySQL中如何求平均值常见实例(AVG函数详解)

《MySQL中如何求平均值常见实例(AVG函数详解)》MySQLavg()是一个聚合函数,用于返回各种记录中表达式的平均值,:本文主要介绍MySQL中用AVG函数如何求平均值的相关资料,文中通过代... 目录前言一、基本语法二、示例讲解1. 计算全表平均分2. 计算某门课程的平均分(例如:Math)三、结合

深入理解Redis线程模型的原理及使用

《深入理解Redis线程模型的原理及使用》Redis的线程模型整体还是多线程的,只是后台执行指令的核心线程是单线程的,整个线程模型可以理解为还是以单线程为主,基于这种单线程为主的线程模型,不同客户端的... 目录1 Redis是单线程www.chinasem.cn还是多线程2 Redis如何保证指令原子性2.

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

PyQt6 键盘事件处理的实现及实例代码

《PyQt6键盘事件处理的实现及实例代码》本文主要介绍了PyQt6键盘事件处理的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起... 目录一、键盘事件处理详解1、核心事件处理器2、事件对象 QKeyEvent3、修饰键处理(1)、修饰键类

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4