官方解读:https://medium.com/@asmitasinha/yolact-real-time-instance-segmentation-1-af0c27ee0bbc
论文:
代码:
https://github.com/ultralytics/ultralytics/issues/1710
找到一篇在yolov8中解释过的论文但是比较粗略
一个很好的回复:object detection - What does YOLOv8 for segmentation? - Stack Overflow
A summary of the concepts and main ideas used in the novel algorithm of YOLACT.
从YOLOv3到YOLOv5,其检测头一直都是“耦 合”(Coupled)的,即使用一层卷积同时完成分类和定位两个任务,直到YOLOX 的问世,YOLO系列才第一次换装“解耦头”(Decoupled Head)。
我们都知道:
实例分割 = 对象检测 + 语义分割
当前最先进的实例分割方法(如 Mask R-CNN、FCIS)都是建立在物体检测算法(如 Faster R-CNN 和 R-FCN)的基础上的。
那么,他的分支组成呢?
如图1所示,传统Mask R-CNN 和 Faster R-CNN 分别是两阶段的实例分割和对象检测算法,而 YOLACT 则是快速的单阶段实例分割模型,能提供不错的结果。
如图二所示,
两阶段检测器的两个步骤分别是区域建议网络和 ROI 池化,其中 ROI 池化将所有预测区域调整为相同的可比大小(特征定位),然后用于掩码预测。YOLACT 省略了这一步骤,而是将实例分割分成 2 个 "并行 "任务:
(1) 生成整个图像的非本地原型掩码字典
(2) 预测每个实例的一组线性组合系数。
YOLACT结构
输入从feature backbone 传到 FPN FPN如下图:
左侧的卷积网络是前向传递,最后进行预测。与输入图像(分辨率高但语义特征弱)相比,最后一层的分辨率低但语义特征强。FPN 提供了一个自上而下的路径(右图),可从语义丰富的层构建更高分辨率的层。
Protonet 分割分支网络
参与并行任务 1,利用 FCN 主干网生成原型掩膜。由于它使用的是来自 P3 的输入,而 P3 是更深的骨干层,因此生成的掩码更加稳健。原型掩码没有明显的损失。FCN 的信念层善于生成空间一致性掩码,它们生成的 k 个掩码是一个矩阵 P [h x w x k] 。
预测头
预测头和掩码系数头共同参与并行任务
这也是一个 FCN。
典型的预测头(在 1 级检测器中)有 2 个分支: 1 个用于类得分,1 个用于边界框
在 YOLACT 中,我们在预测头中有第 3 个分支,即掩码系数头。因此,每个锚点不会产生 4 + c 个系数,而是会产生 4 + c + k 个系数。
4 个系数用于边界框。
这个预测头会产生 "c "个类别、"a "个方框锚点和 "k "个掩码原型系数(C [n x k])
这里,n 是在 NMS 中存活的实例数量
掩膜系数头
为 Protonet 的 k 个掩膜原型中的每个原型预测 k 个掩膜系数。
将 Tanh 非线性应用于 k 个掩膜系数,从而获得更稳定的输出。此外,这样还可以从最终掩膜中减去原型掩膜。
掩码组装
对于最终的实例掩膜,Protonet 分支的输出与预测头 + 掩膜系数分支的系数进行线性组合,并通过 sigmoid 非线性处理。
裁剪和阈值
FCN 具有翻译不变性,但这项任务需要重新添加翻译差异。因此,FCIS 和 Mask R-CNN 等方法都尝试明确添加翻译差异。在这种方法中,唯一添加的翻译方差是用预测的边界框裁剪最终掩膜。不过,对于中型和大型物体,YOLACT 也可以在不裁剪的情况下工作。最后的阈值处理是 IoU 阈值处理
YOLACT 的优势
我们的研究表明,通过这种分割方式,网络可以自行学习如何定位实例掩码,在原型中,视觉上、空间上和语义上相似的实例会出现不同的掩码。
速度快:由于 YOLACT 的并行结构和极其轻量级的组装过程,它只给单级骨干检测器增加了微不足道的计算开销,因此即使使用 ResNet-101 [19],速度也能轻松达到 30 fps;事实上,整个掩码分支的评估时间仅为 ∼5ms。
高质量:由于掩码使用了整个图像空间,而不会因为重新池化而造成任何质量损失,因此我们对大型物体的掩码质量明显高于其他方法。
通用性:生成原型和掩码系数的想法几乎可以添加到任何现代物体检测器中。