单阶段实例分割之YOLACT阅读笔记

论文:YOLACT:Real-time Instance Segmentation

代码:https://github.com/dbolya/yolact

一句话概括:YOLACT提出了一个单阶段实例分割模型,通过匹配(assembly)目标检测分支和原型(prototype)分支获得最终的实例分割结果。

评价:YOLACT的提出为研究者们提供了解决单阶段实例分割的新角度。后来的BlendMaskCentermaskCondinst等实例分割模型都是对YOLACT的继承与发展。

 

本篇博文将通过网络结构,LOSS计算。展开YOLACT

YOLACT网络结构

图一:论文网络结构引用自feiyuhuahuo

 

Backbone:Resnet50   Neck:FPN    Head:Retinanet    Protonet:FCN

 Resnet50出来三个feature map:C3,C4,C5 大小分别是原图大小的1/8,1/16,1/32。这三个feature map送入FPN网络进行特征再提取。

FPN主要解决的是:物体检测中的多尺度问题,通过简单的网络连接改变,在基本不增加原有模型计算量的情况下,大幅度提升了小物体检测的性能。低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。另外虽然也有些算法采用多尺度特征融合的方式,但是一般是采用融合后的特征做预测 FPN不一样的地方在于预测是在不同特征层独立进行的。

 FPN出来5个头其中P5下采样得到P6P6下采样得到P7P3, P4, P5, P6, P7都共享检测一个头,检测头三个分支分别对应class,box and coef(激活函数为tanh)。

在这里我们把Protonet称为掩码分支,掩码分支的输入来自FPNP3(Blendmask一文中拓展了这一方面的内容)。掩码分支为FCN全卷积网络,最终得到大小为原图1/4的原型掩码。这里k表示为k个原型掩码

图二:掩码分支                                                                                          图三:检测分支

 

 

 YOLACT:LOSS计算

在代码中我们发现YOLACT计算4个loss。

其中loss_c为类别损失,loss_b为回归框的损失,loss_mask和 loss_s 语义分割的损失。在训练阶段添加辅助loss。

具体做法是在最大的feature map后面接1×1卷积,输出一个通道数为c的feature map。它对应的ground truth从实例分割的标注中获得,因此没有强制要求每个像素只能属于单一类别。所以此处使用的loss计算方法是在c个通道上分别运行sigmoid,类似YOLO-v3多标签分类的loss设计。如图一所示

分类损失和框回归损失同SSD,mask损失为预测mask和ground truth mask的逐像素二进制交叉熵。这里具体要看代码 这里给到的是别人/bubbliiiing复现的代码比较易懂 。 :)

 

posted @ 2022-05-30 16:28  yyyyuqing  阅读(766)  评论(0)    收藏  举报