Swin-Transformer再次助力夺冠 | Kaggle第1名方案解读(工程人员建议必看)
共 3225字,需浏览 7分钟
·
2021-10-28 13:40
在报告中介绍了two-step “detect-then-match”的视频实例分割方法。第1步对每一帧进行实例分割得到大量的instance mask proposals。第2步是利用光流进行帧间instance mask matching。用high quality mask proposals证明了一个简单的匹配机制可以促使得到更好的跟踪。本文的方法在2021年UVO比赛中取得了第1名的成绩。
1实例分割
这里作者采用了先检测后进行语义分割的Pipeline的方法。
首先,训练一个目标检测器为视频的每一帧生成边界框。 然后,取前100个bounding box proposals,裁剪带有这些bounding box的图像,并将调整大小后的图像块输入前景/背景分割网络,以获得Instance Mask。
1、检测网络
作者采用Cascade Region Proposal Network作为Baseline,采用Focal loss和GIoU loss进行分类和边界框回归。
在训练过程中,作者使用2个独立的SimOTA采样器进行正/负样本采样,其中一个用于分类,另一个用于边界框回归。与此同时作者也放宽了边界框回归采样器的选择标准,以获得更多的正样本。
与分类头和边界框回归头并行增加一个IoU分支,用于预测预测边界框与ground truth之间的IoU。
为了解决目标检测中分类任务和回归任务之间的冲突问题,作者采用了decoupled head算法。
为了节省内存,所有金字塔的头部都有相同的权重。
将decoupled head的第1卷积层替换为DCN。
作者在FPN中添加了CARAFE块,并使用Swin-Transformer作为Backbone。
2、语义分割
前面使用检测网络预测的边界框来裁剪图像,并将它们的大小调整为512×512。裁剪后的图像路径被输入到分割网络以获得Instance Mask。
作者采用了Upernet架构和Swin-Transformer作为Backbone。
该分割网络是一种二值分割网络,如果像素属于目标,则被预测为前景,否则被预测为背景。
2帧间Mask匹配
图1显示了本文方法的概述。
作者的想法类似于IoU-tracker。利用预测的光流将前一帧的跟踪器wrapped 到当前帧,然后通过计算被wrapped Mask与detected Mask之间的IoU将跟踪器与当前帧的detected Mask匹配。
用M表示所有帧的 mask proposals,表示帧t的mask proposal。t表示视频长度,F表示光流,其中表示帧t与帧t+1之间的光流。
首先,用第1帧中的mask proposal初始化跟踪器。 然后,使用光流将跟踪器的warpped mask到第2帧。 然后,通过计算它们之间的IoU,将warpped mask与detected Mask 匹配。
作者认为只有当IoU大于固定阈值时匹配才会成功。如果跟踪器与detected Mask匹配,则用匹配的Mask替换跟踪器的最新Mask。如果跟踪器和中的Mask之间没有匹配,则使用warpped mask更新其最新的Mask。如果跟踪器没有连续匹配5帧,从跟踪器列表中删除这个跟踪器。对于中没有匹配跟踪器的Mask,作者用这些Mask初始化新的跟踪器,并将这些跟踪器添加到跟踪器列表中使用非最大抑制(NMS)来去除最新Mask IoU大于0.7的跟踪器。
给每个跟踪器分配一个分数,这个分数是被跟踪的帧数和检测分数之和的乘积。
3复现细节
1、检测模型
作者使用MMDetection来训练检测器。对于Backbone网络,作者通过ImageNet 22k预训练了Swin-Transformer。
这里所有的检测器都经过了Detectron ‘1x’ setting的训练。2个SimOTA采样的中心比设置为0.25,分类头的top-K数设置为10,回归头的top-K数设置为20,以获得更多的正样本。
分类分支和回归分支使用4个的卷积层,IoU分支和回归分支共享相同的卷积层。为了训练以Swin-Transformer为Backbone的检测器,作者采用AdamW作为优化器,初始学习率设置为1e-4。批量大小设置为16。在COCO上进行训练后,结合6个epoch的UVO-Sparse和UVO-Dense数据集对检测器进行微调。所有的检测器都是以 class-agnostic的方式训练的。在推理过程中增加测试时间,进一步提高网络性能。
2、语义分割
作者使用MMSegmentation来训练分割网络。这里使用与检测网络相同的Backbone。
在训练过程中,给定一幅图像和一个Instance Mask,首先生成一个bounding box,bounding box包含Instance Mask,然后在bounding box的各个方向上添加20像素的边界。
作者使用生成的边界框来裁剪图像,并调整图像补丁的大小为。随机翻转、随机光度失真和随机bounding box抖动被用作数据增强。
作者还采用多元学习率策略,初始学习率设置为6e-5。批大小被设置为32,AdamW被用作优化器。
首先,在OpenImage, PASCALVOC和COCO数据集的组合上训练网络为300k iter, 然后,在UVO-Density和UVO-Sparse数据集的组合上优化网络为100k迭代,初始学习率设置为6e-6。
所有的分割网络都是用class-agnostic的方式训练的,因此,分割裁剪路径中的目标成为一个前景/后景分割问题。推理过程中仅使用翻转试验增强。
3、光流估计
作者在FlyingTh-ings上训练的模型。FlyingThings是一个用于光流估计的大规模合成数据集。数据集是通过随机化从ShapeNet数据集中收集的相机的运动和合成对象生成的。先在FlyingThings上对光流估计模型进行预训练,每次迭代10万次,BS为12;然后在FlyingThings3D上进行10万次迭代,BS为6。
指标与可视化结果
在图2中,作者展示了一些视频实例分割结果。本文的方法可以适用于不同形状的物体。
潜在的改进点
本文简单的“检测然后匹配”框架可以作为视频实例分割的Baseline。它严重依赖于每帧mask proposals的质量。该方法的性能可能受到严重遮挡、物体出现/消失/重新出现等因素的影响。通过在Mask匹配过程中考虑目标层理,可以很好地解决这些问题。
4参考
[1].1st Place Solution for the UVO Challenge on Video-based Open-World Segmentation 2021
5推荐阅读
YOLOv5-Lite 树莓派实时 | 更少的参数、更高的精度、更快的检测速度(C++部署分享)
HR-Former | 随迟但到,HRNet+Transformer轻装归来(非常值得学习!!!)
Kaggle第一人 | 详细解读2021Google地标识别第一名解决方案(建议全文背诵)
长按扫描下方二维码添加小助手。
可以一起讨论遇到的问题
声明:转载请说明出处
扫描下方二维码关注【集智书童】公众号,获取更多实践项目源码和论文解读,非常期待你我的相遇,让我们以梦为马,砥砺前行!