> 技术文档 > YOLO-实例分割头

YOLO-实例分割头


记录

介绍实例分割头的 网络结构,以及在推理阶段后处理流程

1.对三个特征图P3,P4,P5的处理及输出

对于目标检测头Detect  和 实例分割头Segment  其输入都是一样,三个不同通道数,不同长宽的特征图输入。 

即三个输入为:

分割头部分

最后得到分割头的输出(上图最右边)

在拿到分割结果后,使用该结果进行后处理,得到最终输出结果

1.特征层输入

输入三个特种层P3,P4,P5

P3 (1,64,80,80)

P4    (1,128,40,40)

P5   (1,256,20,20)

 第一条支路,输出原型掩码

期间经过一条转置卷积上采样 HW从 80x80 变为160x160

第二条支路,输出掩码系数

内部包含三条小支路,

将三个输入的特征图通道数转换为

P3: 64 --》32

P4: 128--》32

P5: 256--》32

第三条支路,原来目标检测任务中的检测头 Detect

将Detect Head结果进行后处理   输出为   (1,84,8400),以及原来的三个输出结果

将三个支路的输出进行整合,输出两个结果

结果1

x[0],mc

x[0]=116=  80个类别+4bbox+32mc (原型掩码·)

结果2

x[1],mc,p

检测头输出、原型掩码、掩码系数

 上述图:左图代表第一条支路,右图代表 第二条支路

2.后处理

 

一组掩码系数为32个, 表示对于32个通用形状基底的权重, 每个实例掩膜是32个通用形状的加权和

针对分割头(有两个输出)的第一个输出,使用NMS, 将8400检测实例  剔除部分后,仅保留5个(这里是举例子,具体结合实际),38表示   x1,y1,x2,y2,confidence,class, 32个掩码系数

将32个原型掩码  乘以 掩码系数(160x160=25600),  进行加权和操作 @  -->得到(5,25600),再经过view得到 (5,160,160), 至此得到5个实例(object)的mask

(这个有些晕了,不清楚是否正确)

将 5个实例的bbox   (5,4)  与  5个实例的mask  (5,160,160)

 进行crop_mask操作

crop_mask 

将落在bbox的mask进行保留, 落在bbox以外的maks进行去除 

然后对bbox里面的mask进行  阈值截断,bbox内部mask的数值:0~0.5的置0, 0.5~1置1

效果如下:

白色对图像右下角的人的一部分像素

 

原来mask尺寸为160x160,经过双线性插值上采样,得到mask为640x640

个人:

看完了,但是比较疑惑? 

1.原图如果为1280x720,  是不是实例分割效果会比  原图为640x720会差一些,因为将1280x720压缩到640x640, 则1280x720中的小像素目标可能会有信息丢失,

2.该怎么改进分割头呢?加上深度可分离卷积吗?  类似yolo11的detect head

问题后续看看,查看是否有答案?()

参考资料:

bup-Enzo-Mi

yolo 实例分割 | Segmentation Head 结构 与 推理阶段后处理流程_哔哩哔哩_bilibili