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

目录

背景

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

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

工作

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

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

网络由三部分组成,分别是骨干网络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,非常耗费计算力。

相关推荐
m0_748708051 分钟前
C++中的观察者模式实战
开发语言·c++·算法
然哥依旧1 分钟前
【轴承故障诊断】基于融合鱼鹰和柯西变异的麻雀优化算法OCSSA-VMD-CNN-BILSTM轴承诊断研究【西储大学数据】(Matlab代码实现)
算法·支持向量机·matlab·cnn
king of code porter4 分钟前
百宝箱企业版搭建智能体应用-平台概述
人工智能·大模型·智能体
愚公搬代码8 分钟前
【愚公系列】《AI短视频创作一本通》004-AI短视频的准备工作(创作AI短视频的基本流程)
人工智能·音视频
物联网软硬件开发-轨物科技10 分钟前
【轨物洞见】告别“被动维修”!预测性运维如何重塑老旧电站的资产价值?
运维·人工智能
电商API_1800790524710 分钟前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫
qq_5375626713 分钟前
跨语言调用C++接口
开发语言·c++·算法
梁辰兴24 分钟前
百亿美元赌注变数,AI军备竞赛迎来转折点?
人工智能·ai·大模型·openai·英伟达·梁辰兴·ai军备竞赛
Tingjct25 分钟前
【初阶数据结构-二叉树】
c语言·开发语言·数据结构·算法
C雨后彩虹26 分钟前
计算疫情扩散时间
java·数据结构·算法·华为·面试