本文首发至微信大众号:CVHub,不得以任何形式转载或售卖,仅供学习,违者必究!
Title: Track Anything: Segment Anything Meets Videos
Paper: arxiv.org/pdf/2304.11…
Code: github.com/gaomingqi/T…
导读
近来,南边科技大学 VIP 实验室开源了一款根据 SAM 的盯梢模型——Track-Anything
,能够轻松地对视频中感兴趣的方针进行标示、盯梢和一键隐藏。所见即所得,一键触发。先给咱们展现一段Demo
:
回到正题。本文首要介绍了一个新的核算机视觉算法模型Track Anything Model, TAM
。该模型的规划创意来自于现已遭到广泛重视的Segment Anything Model, SAM
,SAM
是一种在图画切割方面体现出色的模型。但是,SAM 在视频中的切割性能一般体现较差。因而,本文提出了一种根据交互式规划的新模型TAM
,旨在完成视频中的高性能交互式盯梢和切割。在该模型中,只需求少量的人类参加即可通过点击追踪感兴趣的任何物体,并在一次推理进程中获得令人满足的成果。在不进行额定练习的状况下,这种交互式规划在视频物体盯梢和切割方面体现出色。
笔者闲暇的时分亲身测验了一把,感觉作用相对来说还是不错滴,尽管存在一些问题。文末会附上装置教程和留意事项,不想了解细节的小伙伴可直接跳转到文末。
特色
Track Anything
旨在完成在恣意视频中对物体的灵活盯梢。因而,作者界说了该使命的方针方针能够根据用户的兴趣进行灵活挑选、增加或删去,用户挑选的视频的长度和类型也能够是恣意的,而不只仅限于修剪视频。在这样的设置下,能够完成多种下流使命,包含单个/多个方针盯梢、长期方针盯梢、无监督VOS、半监督VOS 和 交互式VOS 等各类 VOS。
注:Video Object Segmentation, VOS,即视频方针切割。
办法
背景介绍
本文办法首要是根据已有算法组装成一个pipeline
,下面简略介绍下几个首要成员。
Segment Anything Model
SAM 是由 Meta AI Research 提出的,近期引起了学术界和工业界广泛的重视。作为图画切割的根底模型,SAM 根据 ViT 模型,在大规模数据集 SA-1B 进步行了练习。显然,SAM 在图画切割方面体现出色,特别是在零样本切割使命上。但是,SAM 只在图画切割方面体现优异,不能处理复杂的视频切割使命。因而,这也是本文办法提出的意义。
XMem
该模型能够根据方针物体在第一帧的掩码描绘,在后续帧中盯梢该物体并生成相应的掩码。XMem
的规划创意来源于Atkinson-Shiffrin记忆模型,旨在通过统一的特征内存存储处理长视频中的困难问题。但是,XMem 的缺点也很明显:
- 作为半监督 VOS 模型,它需求一个精确的掩码来初始化;
- 对于长视频来说,XMem 很难从盯梢或切割失败中康复已有方针。
在本文中,作者通过引进与 SAM 的交互盯梢来处理这两个问题。
Interactive Video Object Segmentation
交互式 VOS(Interactive VOS)模型旨在将用户交互(如涂鸦)作为输入,用户能够迭代地细化切割成果,直到满足停止。交互式 VOS 因为比为方针掩码指定每个像素点更简单供给涂鸦而遭到了广泛的重视。但是,作者发现当时的交互式 VOS 办法需求多轮迭代才干细化成果,这影响了它们在实践运用中的功率。
这个挺有意思的,光看字面意思其实没啥感觉,咱们能够装置布置完亲身去体会下。简而言之,就是你点一下图片中自己感兴趣的方针,图片就会渲染一次,将当时方针的掩码自动打出来。不过因为 SAM 自身切割的粒度比较细,例如当一个人身上背了一个包,如果你的鼠标点击包的位置,那大概率就会把属于包的语义给出来,这时分就需求你再点一下属于人身体躯干上的其它位置,一般几下以内就能够到达不错的作用。
当然,工程上还用到了其他模型,如 MMEditing 供给的视频超分辨率模型 BasicVSR 用于对推理后的成果进行处理,有兴趣的可自行查源码,此处不打开细讲。
完成细节
TAM 模型的处理流程如上图所示,首要分四个进程,下面逐一介绍。
Step 1: Initialization with SAM
在进程1中,作者运用了 SAM 来进行初始化。因为 SAM 供给了运用弱提示(例如点和鸿沟框)来切割感兴趣区域的时机,因而这儿咱们能够直接用来供给方针方针的初始掩码。按照 SAM 的流程,用户能够通过单击或运用几个单击修正方针掩码,以获得满足的初始化成果。
Step 2: Tracking with XMem
在进程2中,作者运用了 XMem 来进行盯梢。在给定初始掩码后,XMem 会在后续帧上执行半监督 VOS。因为XMem 是一种先进的 VOS办法,能够在简略的状况下输出令人满足的成果,因而在大多数状况下输出 XMem 的猜测掩码。这儿还有个细节,就是当掩码质量不太好时,作者会保存 XMem 的猜测成果以及相应的中心参数,例如Probes
和Affinities
,并跳到进程3,不清楚的可参考图示。
上面两个名词简略说下个人理解。在 XMem 办法中,每个像素都有一个特征表示,而且它们被存储在一个比如 “feature memory store” 的内存中。探针(probe)是一组查询特征,用于核算与 feature memory store 中其他特征的类似度。亲和力(affinity) 则是类似度的核算成果,用于衡量两个像素之间的类似度。因而,在这个进程中,当 XMem 无法输出令人满足的掩码时,作者保存了探针和亲和力,以便在进程3中从头初始化 XMem,并测验康复盯梢。这一块笔者此前没接触过,凭感觉写的,如有谬论,敬请体谅。
Step 3: Refinement with SAM
在 VOS 模型的推理进程中,继续地猜测一致性和精确性的切割掩码是具有应战性的。实践上,大多数最先进的视频方针切割模型在推理进程中倾向于越来越粗略地切割方针。因而,当 XMem 猜测的切割质量不抱负时,本文利用 SAM 对其进行改善。详细来说,作者将 XMem 生成的探针和关联信息投影为 SAM 的点提示,将进程2中生成的猜测掩码用作 SAM 的掩码提示。然后,SAM 能够利用这些提示生成通过改善的切割掩码。如此一来,改善掩码还将被增加到 XMem 中,以改善一切后续的切割方针。
Step 4: Correction with human participation
进程4首要就是人工的参加啦。通过以上三个进程,TAM 现在能够成功处理一些常见的应战并猜测出切割掩模。但是,咱们留意到在一些极具应战性的状况下,尤其是处理长视频时,依然很难准确地区分方针。因而,TAM 提出在推理进程中增加人类批改,只需求很小的人类工作量就能够在性能上完成质的飞跃。详细而言,用户能够强制停止 TAM 的进程,并运用正负点击批改当时帧的掩模。
运用场景
Efficient video annotation
在视频注释方面,TAM 具有将感兴趣的区域进行切割并灵活挑选用户想要盯梢的方针的能力。因而,它能够用于视频注释使命,如视频方针盯梢和视频方针切割。另一方面,根据点击的交互使其易于运用,注释进程高效。这意味着,TAM 能够用于快速标示视频数据集,然后促进视频领域的进一步开展。
Long-term object tracking
长期方针盯梢是指在盯梢方针时,需求应对方针消失和从头呈现的状况,这一问题更加靠近实践运用需求。当时的长期方针盯梢使命要求盯梢器具有这种能力,但仍受限于裁剪后的视频规模。而 TAM 则在实在国际运用中更为先进,能够应对长视频中的镜头改换等复杂状况。
User-friendly video editing
通过 TAM 咱们还能够将视频中的物体进行切割,然后方便咱们删去或修正视频中的物体。作者还提到了 E2FGVI 这个东西,该东西能够用来评价 TAM 在视频修改方面的运用价值。
Visualized development toolkit for video tasks.
为了方便运用,本文还供给了多种视频使命的可视化界面,例如 VOS、VOT、视频修正等等。运用供给的东西包,用户能够将自己的模型运用于实在国际的视频,并即时可视化成果。相应的演示可在Hugging Face
中找到,或者自己装置在本地布置。
作用
装置教程
TAM 现在可支持 Linux & Windows 进步行装置运用,大体的装置流程如 Github Repo 所示:
# Clone the repository:
git clone https://github.com/gaomingqi/Track-Anything.git
cd Track-Anything
# Install dependencies:
pip install -r requirements.txt
# Run the Track-Anything gradio demo.
python app.py --device cuda:0
# python app.py --device cuda:0 --sam_model_type vit_b # for lower memory usage
这儿有几个小问题需求留意下:
-
请提前准备并测试好的你的 git 环境,运转进程需求下载许多插件和第三方库,网速欠好的真的能够摔键盘了;
-
requirements
并没有指定详细的包版别,相信绝大部分小伙伴 pip 完会发现少这少那,比较常见的过错就是 mmcv 和 torch 这两个库。例如 torch 库默认会装 2.0,如果你的机器不支持,大概率是会报无法编译 CUDA 的过错,这时分你就需求装置适配自己机器版别的 torch 环境了。此外,mmcv 这个需求装置完整版和适配版别。
装置链接:
pytorch: pytorch.org/get-started…
mmcv: mmcv.readthedocs.io/en/latest/g…
- 装置完之后或许没报错,当你运转打开 localhost 时,会发现 505 过错或者直接一片空白的网页。这时分不要慌,请测验将 app.py 文件中,将
server_name
的 ip 地址替换后从头运转下即可。
# app.py
...
iface.launch(debug=True, enable_queue=True, share=True, server_port=args.port, server_name="0.0.0.0")
# 替换为
iface.launch(debug=True, enable_queue=True, share=True, server_port=args.port, server_name="127.0.0.1")
Windows 上布置装置教程请参考视频:www.youtube.com/watch?v=MQJ…
此外,需求留意的是,不同的模型运转的显存不一样,显存不行的可测验运用小一点的模型,如:
python app.py --device cuda:0 --sam_model_type vit_b
详细可参考:github.com/gaomingqi/T…
笔者的运用体会:
- 对于遮挡的状况,现在看来有必定概率会呈现方针丢失的状况。例如当图中这个绿框的人走到这个橙色框时,后续的帧就完全断了。
-
在进行
Tracking
处理时,显存会不断的增大,而非一开始就 OOM。 -
运用 point 交互式操作,有时分遇到图画太大方针太小,很简单点错。gradio 没有供给像 CVAT 上的缩放功用,这一点用户体会不是很好。
最终,有任何疑问或沟通需求的,欢迎请增加小编微信:cv_huber,补白 Track-Anything
加入沟通群一同探讨吧。