PReMVOS论文理解

ⅰ亾dé卋堺 提交于 2020-02-28 22:00:13

本文创新点\贡献

效果最好,但也最麻烦,用了很多的预训练操作

方法

在这里插入图片描述

在这里插入图片描述
使用目标检测网络来代替检测ROI,以此来获得一个粗到的目标推荐,然后只在裁剪并resize的bbox上做分割,再用聚合算法结合物体分数,光流,Re-ID特征嵌入向量,空间约束,对第一帧的每个物体进行追踪,最终根据追踪分数来做mask


Image Augmentation

每个video使用第一帧的ground truth生成2500个增强的图片,使用的 Lucid Data Dreaming方法,只是生成单个图片,将物体裁剪出来,随机加上背景,然后微调这些数据,效果会更好


Proposal Generation

使用Mask RCNN来生成粗糙的目标推荐,将网络设置成了类别未知,将N类别换成了1类别,通过将所有的类别映射到一个单一的前景类别来检测一般的物体

只要识别有没有就行了,不管分类,应该能更好的抓取物体

从COCO和Mapillary上得到预训练权重ImageNet,然后用增强的2500个图片做3个epoch来微调网络,生成粗糙mask、bbox、物体分数,设置分数为0.05的阈值,IoU为66的NMS


Proposal Refinement

原理

  • 微调网络只提取每个物体的interest区域的深层特征,而不是全部图片,能捕捉更多的边缘纹理;
  • 能复原在粗糙的推荐中的失去的部分,因为只输入了粗糙的bbox,舍弃了粗糙mask,只利用继承自object的信息来生成更好的mask
  • 有时候bbox不能覆盖全部物体,所以就扩大了50像素

跟我们之前讨论的方法基本一样

操作
输入是385×385385 \times 385的图像,从上一环节的bbox里抠出来的,在bbox的框的所有方向都加了50像素的空白,又加了个第四通道,编码原来的bbox作为像素mask,放到第四个通道里

bbox的mask,在DeepIM里也用到过

然后做了数据增强,每个维度最多5%的抖动,再做5个epoch来微调

只输入这些推荐的bbox,把自己生成的粗糙mask扔掉,然后使用网络对之前的粗糙的推荐生成精准的像素mask推荐

在这里插入图片描述
在这里插入图片描述


Mask Propagation using Optical Flow

聚合的一部分:使用连续图像pair之间的光流来将推荐的mask翘曲到下一个帧,来计算两个mask推荐的时序连续,使用FlowNet 2.0来计算光流。

光流还有这功能,有点厉害


ReID Embedding Vectors

还是使用基于ReID 嵌入网络的triple-loss来给每个mask推荐计算ReID嵌入向量。
特征嵌入网络用的是这个:Large-scale object discovery and detector adaptation from unlabeled video.也是预训练了,用的都是裁剪到128×128128 \times 128的图片预训练的。

然后再微调,最后生成特征向量,能比较相似性。

在这里插入图片描述

有无嵌入的效果


Proposal Merging

在这里插入图片描述
时序聚合的效果

概述

从第一帧的真实mask开始,每个帧都会对他们的每个推荐是否属于哪一具体类的轨迹进行评分,然后根绝每个帧的每个推荐的这个分数来构建物体的跟踪

每个ground turth物体都有一个跟踪,有最高的跟踪分数的推荐加到每个跟踪中

为什么每个都加?

跟踪分数是五个独立子分数的仿射结合,每个分数都在0,1之间。

然后 1 - 平均值

第一个分数
物体分数,是第tt帧的ct,ic_{t,i}的第ii个推荐的第jj个追踪的分数:
sobj,t,i,j(ct,i)=MaskObj(ct,i)s_{obj,t,i,j}(c_{t,i}) = MaskObj(c_{t,i})
其中MaskObj()MaskObj(\cdot)是区域生成网络(MaskRCNN)提供的置信度值

使用来自推荐的精准边界轮廓分离定义mask推荐,还能区分给定的第一帧中感兴趣的物体和其他物体,但是,如果出现多个目标,无法做实例的区分

第二个分数
ReID分数,使用欧式距离计算第一帧的真实嵌入向量r(fj)r(f_j)和当前帧mask推荐的嵌入向量r(ct,i)r(c_t,i)r()r(\cdot)表示使用ReID网络,||\cdot||表示L2正则化,fjf_j是第一帧的第jj个ground truth物体,然后用所有推荐中的最大距离来做正则化:
sreid,t,i,j(ct,i,fj)=1r(ct,i)r(fj)maxt~,i~r(ct~,i~)r(fj)s_{reid,t,i,j}(c_{t,i},f_j) = 1 - \frac{||r(c_{t,i}) - r(f_j)||}{\max_{\tilde{t},\tilde{i}} ||r(c_{\tilde{t},\tilde{i}}) - r(f_j)||}

区分外观看起来不同的物体,像人和自行车这样的

第三个分数
MaskPropagationMask Propagation分数,计算当前的mask推荐和这个物体跟踪的前一帧的mask翘曲生成的推荐之间的IoU,翘曲使用给的光流:
smaskprop,t,i,j(ct,i,pt1,j)=IoU(ct,i,warp(pt1,j))s_{maskprop,t,i,j}(c_{t,i},p_{t-1,j}) = IoU(c_{t,i},warp(p_{t-1},j))

用在做时序一致性的,能很好区分非常相似的物体,但是如果相互严重遮挡的或者消失再重现,就不行了

变化不大才行

第四个分数
InverseReIDInverse ReID,计算当前mask推荐和所有的其他目标跟踪kk(除了jj)之间最大ReID分数:
sinv_reid,t,i,j=1maxkj(sreid,t,i,k)s_{inv\_reid,t,i,j} = 1- \max_{k\not = j}(s_{reid},t,i,k)

这个是计算和其他的不相似性吧,值越小越好

第五个分数
InverseMaskPropagationInverse Mask Propagation,计算当前mask推荐和所有的其他目标跟踪kk(除了jj)之间最大MaskPropagationIoUMask Propagation IoU分数:

sinv_maskprop,t,i,j=1maxkj(smaskprop,t,i,k)s_{inv\_maskprop,t,i,j} = 1- \max_{k\not = j}(s_{maskprop},t,i,k)

四五是用来在每个帧迫使被选上的mask区分开,只用前三个,在为不同的对象选择非常相似的mask推荐的时候会失败,在外观相似的物体重叠或一个物体消失的时候会出现这种情况

这两个子组件通过区分在视觉上和时间上与视频序列中的其他对象不一致的推荐来其效果,从而产生与感兴趣的对象一致的信息

通过差异来分配,而不是相似

但是只能在前景物体间进行区分,不能处理前景物体和背景的关系

最终分数
ii是推荐,jj是跟踪,tt是帧
scomb,t,i,j=qallαqsq,t,i,js_{comb,t,i,j} = \sum_{q \in all}\alpha_qs_{q,t,i,j}
其中qαq=1\sum_q\alpha_q = 1,所有的alpha>0alpha > 0
然后最终的选择:
kj=arg maxiscomb,t,i,jk_j = \argmax_i s_{comb,t,i,j}

选择

jj追踪,在所有的ii上找到一个分数最高的类jj的分数,把这个推荐ii设为类jj

如果在一个时间步内为不同对象选择的建议重叠,将重叠像素分配给合并轨道得分最高的建议

根据追踪对象选区域,如果两个对象选的区域重叠了,就取追踪得分最高的那个,这位这个对象的区域。

提升总结:

最后,使用的随机搜索超参数的方法,试了25000个超参
在这里插入图片描述
使使超参研究,打勾表示使用,-表示不使用

实验结果

J是计算推荐mask和真实mask的平均IoU
F是计算推荐mask和真实mask的boundary的之间的平均boundary相似?
在这里插入图片描述

总结

嵌入向量针对外观;MaskRCNN对于区分不同种物体还行,对于实例不是那个好;如果很像可以比较有多不像,而不是有多像;光流对于相蛮有效。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!