前几期,我们陆续推出了关于视频目标感知开源工具箱的3个重要任务: 视频目标检测(VID)任务、多目标跟踪(MOT)任务、单目标跟踪(SOT)任务。
10 月,MMTracking 最新支持了视频感知任务:视频实例分割(VIS)任务。欢迎大家上手使用!
有什么问题,或者对MMTracking的想法、建议,有想支持的新数据集、新方法、新任务,随时在评论区里留言!
本文内容
VIS 任务简介
VIS 数据集介绍
MMTracking 支持的 VIS 算法与数据集
上手指南
MaskTrack R-CNN 实现解析
1. VIS 任务简介
VIS 旨在检测、跟踪、分割视频里出现的物体,也就是在多目标跟踪任务的基础上更进一层,需要提供每个物体的 mask 信息。
2. VIS 数据集介绍
目前 VIS 领域主流的数据集为 YouTube-VIS 2019、YouTube-VIS 2021。主要的评估指标是 Mask AP,与检测领域的 Mask AP 不同,VIS 中的 Mask AP 计算方式需要考虑算法的跟踪性能。
3. MMTracking 支持的 VIS 算法与数据集
MMTracking 目前支持以下 VIS 算法:
- MaskTrack R-CNN (ICCV 2019)
链接:https://arxiv.org/abs/1905.04804
MMTracking 目前支持 YouTube-VIS 2019、YouTube-VIS 2021 数据集。
4. 上手指南
接下来,本文详细地介绍在 MMTracking 里如何运行 VIS demo、测试 VIS 模型、训练 VIS 模型。
使用 MMTracking,你只需要克隆一下 github 上面的仓库到本地,然后按照安装手册配置一下环境即可,如果安装遇到什么问题,可以给 MMTracking 提 issue,我们会尽快为小伙伴们解答。
安装手册链接:
https://github.com/open-mmlab/mmtracking/blob/master/docs/install.md
假设已经将预训练权重放置在 MMTracking 根目录下的 checkpoints/ 文件夹下(预训练权重可以在相应的 configs 页面下载)。
运行 VIS demo
在 MMTracking 根目录下只需执行以下命令,即可使用 MaskTrack R-CNN 算法运行 VIS demo。
python demo/demo_mot_vis.py \
configs/vis/masktrack_rcnn/masktrack_rcnn_r50_fpn_12e_youtubevis2019.py \
--input ${VIDEO_FILE} \
--checkpoint checkpoints/masktrack_rcnn_r50_fpn_12e_youtubevis2019_20211022_194830-6ca6b91e.pth \
--output ${OUTPUT} \
--show
测试 VIS 模型
在 MMTracking 根目录下使用以下命令即可在 YouTube-VIS 2019 上测试 MaskTrack R-CNN,并且生成一个用于提交结果的 zip 文件。
./tools/dist_test.sh \
configs/vis/masktrack_rcnn/masktrack_rcnn_r50_fpn_12e_youtubevis2019.py \
--checkpoint checkpoints/masktrack_rcnn_r50_fpn_12e_youtubevis2019_20211022_194830-6ca6b91e.pth \
--out ${RESULTS_PATH}/results.pkl \
--format-only \
--eval-options resfile_path=${RESULTS_PATH}
训练 VIS 模型
在 MMTracking 根目录下使用以下命令即可在 YouTube-VIS 2019 数据集上训练 MaskTrack R-CNN。由于 YouTube-VIS 没有提供 validation 集的注释文件,因此在训练过程中不会进行评估。
bash ./tools/dist_train.sh \
./configs/vis/masktrack_rcnn/masktrack_rcnn_r50_fpn_12e_youtubevis2019.py \
8 --work-dir ./work_dirs/
其实在 MMTracking 中支持了一些 VIS 模型,并且提供了公共的 checkpoint 供大家使用,在快速上手教程中也有更详细地介绍。
5. MaskTrack R-CNN 实现解析
经过上述步骤,本文已经介绍了怎样运行 VIS 算法,接下来将介绍 MaskTrack R-CNN 在 MMTracking 下的实现。
MaskTrack R-CNN 的配置文件
model = dict(
type='MaskTrackRCNN',
detector=dict(type='MaskRCNN'),
track_head=dict(type='RoITrackHead'),
tracker=dict(type='MaskTrackRCNNTracker'))
MaskTrack R-CNN 的配置文件如上所示,可以看到 MaskTrack R-CNN 由 3 部分构成:
detector:使用 MaskRCNN 算法,检测视频里的物体,并给出每个物体的 mask;
track_head:使用 RoITrackHead,计算相邻两帧物体的相似度得分,用于相邻两帧物体的匹配;
tracker:MaskTrack R-CNN 的 Tracker,用来进行相邻两帧物体的跟踪。
Track Head 的配置文件
track_head=dict(
type='RoITrackHead',
roi_extractor=dict(type='SingleRoIExtractor'),
embed_head=dict(type='RoIEmbedHead'),
train_cfg=dict(
assigner=dict(type='MaxIoUAssigner'),
sampler=dict(type='RandomSampler')))
Track Head 的配置文件如上所示,可以看到 Track Head 由 3 部分构成:
- roi_extractor:使用 RoI Align 为 proposals 提取特征;
- embed_head:使用 RoIEmbedHead 对提取出的特征进行进一步加工,然后计算相邻两帧物体的相似度得分;
- train_cfg:track head 的训练配置,其中 assigner 基于最大 IoU 分配正负样本,sampler 基于分配后的结果采样正负样本,在 RoITrackHead 中,一般只使用正样本进行相邻两帧物体的计算。
作为 MM 系列的成员, MMTracking 将持续更新,力图早日成长为一个完善的视频目标感知平台,而社区的声音能够帮助我们更好地了解到大家的需求,所以如果大家在使用的过程中遇到什么问题、想法、建议,或者有想支持的新数据集、新方法、新任务,欢迎在评论区里发言。请记住我们的 repo 是您永远的家!
MMTracking:
https://github.com/open-mmlab/mmtracking