PReMVOS论文理解
本文创新点\贡献
效果最好,但也最麻烦,用了很多的预训练操作
方法
使用目标检测网络来代替检测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 × 385 385 \times 385 385×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 × 128 128 \times 128 128×128的图片预训练的。
然后再微调,最后生成特征向量,能比较相似性。
有 无 嵌 入 的 效 果 有无嵌入的效果 有无嵌入的效果
Proposal Merging
时 序 聚 合 的 效 果 时序聚合的效果 时序聚合的效果
概述:
从第一帧的真实mask开始,每个帧都会对他们的每个推荐是否属于哪一具体类的轨迹进行评分,然后根绝每个帧的每个推荐的这个分数来构建物体的跟踪
每个ground turth物体都有一个跟踪,有最高的跟踪分数的推荐加到每个跟踪中
为什么每个都加?
跟踪分数是五个独立子分数的仿射结合,每个分数都在0,1之间。
然后 1 - 平均值
第一个分数:
物体分数,是第 t t t帧的 c t , i c_{t,i} ct,i的第 i i i个推荐的第 j j j个追踪的分数:
s o b j , t , i , j ( c t , i ) = M a s k O b j ( c t , i ) s_{obj,t,i,j}(c_{t,i}) = MaskObj(c_{t,i}) sobj,t,i,j(ct,i)=MaskObj(ct,i)
其中 M a s k O b j ( ⋅ ) MaskObj(\cdot) MaskObj(⋅)是区域生成网络(MaskRCNN)提供的置信度值
使用来自推荐的精准边界轮廓分离定义mask推荐,还能区分给定的第一帧中感兴趣的物体和其他物体,但是,如果出现多个目标,无法做实例的区分
第二个分数:
ReID分数,使用欧式距离计算第一帧的真实嵌入向量 r ( f j ) r(f_j) r(fj)和当前帧mask推荐的嵌入向量 r ( c t , i ) r(c_t,i)