​Segment-and-Track Anything——通用智能视频分割、跟踪、编辑算法解读与源码部署

2023-09-21 14:41:28

一、 万物分割

随着Meta发布的Segment Anything Model (万物分割)的论文并开源了相关的算法,我们可以从中看到,SAM与GPT-4类似,这篇论文的目标是(零样本)分割一切,将自然语言处理(NLP)的提示范式引入了计算机视觉(CV)领域,为CV基础模型提供了更广泛的支持和深度研究的机会。
Segment Anything与传统的图像分割有两个很大的区别:

1、数据收集和主动学习的方式。

对于一个庞大的数据集,例如包含十亿组数据的情况,标注全部数据几乎是不可行的。因此,一个解决方案是采用主动学习的方法。这种方法可以分为以下步骤:
初步标注: 首先,对数据集的一部分进行手动标注。这可以是一个小样本,但应涵盖多种情况和类别,以确保模型获得足够的多样性。
半监督学习: 接下来,使用已标注的数据来训练一个初始模型。这个模型可以用来预测未标注数据的标签。
人工校验与修正: 模型生成的预测标签需要经过人工校验和修正,以确保其准确性。这可以通过专业人员或者众包的方式来完成。
迭代循环: 重复上述步骤,逐渐扩展已标注数据的数量。每次迭代都会提高模型的性能,因为它可以在更多数据上进行训练。
通过这种方式,可以逐步提高数据集的标注质量,而不需要手动标注所有数据。当数据集足够大并且模型被训练到一定程度时,其性能将会显著提升。

2. prompt

Segment Anything 引入了prompt的概念。Prompt是一种用户输入的提示,用于引导模型生成特定类型的回复。这在像GPT-3和SAM这样的模型中非常有用。用户可以提供一个问题或者描述,以帮助模型理解其意图并生成相关的回答或操作。
例如,在SAM中,你可以输入一个提示词,如“Cat”或“Dog”,以告诉模型你希望它分割出照片中的猫或狗。模型将自动检测并绘制框,以实现分割。这个提示词可以用来限定模型的任务,使其更专注于特定的信息提取或操作。
在这里插入图片描述
这两个概念都是在处理大规模数据和提高模型性能方面非常重要的工程性工作。通过合理的数据收集和主动学习策略,以及通过引导模型的prompt,可以更好地满足用户需求,提高模型的效果,并逐步改进模型的性能。

二、​Segment-and-Track Anything

1、算法简介

SAM的出现统一了分割这个任务很多应用,也表明了在CV领域可能存在大规模模型的潜力。这一突破肯定会对CV领域的研究带来重大变革,许多任务将得到统一处理。这一新的数据集和范式结合了超强的零样本泛化能力,将对CV领域产生深远影响。但缺乏对视频数据的支持。随后,浙江大学ReLER实验室的科研人员在最新开源的SAM-Track项目其中,解锁了SAM的视频分割能力,即:分割并跟踪一切(Segment-and-track anything,SAM-track)。SAM-Track在单卡上即可支持各种时空场景中的目标分割和跟踪,包括街景、AR、细胞、动画、航拍等,可同时追踪超过200个物体,为用户提供了强大的视频编辑能力。“Segment and Track Anything” 利用自动和交互式方法。主要使用的算法包括 SAM(Segment Anything Models)用于自动/交互式关键帧分割,以及 DeAOT(Decoupling features in Associating Objects with Transformers)(NeurIPS2022)用于高效的多目标跟踪和传播。SAM-Track 管道实现了 SAM 的动态自动检测和分割新物体,而 DeAOT 负责跟踪所有识别到的物体。

2、项目特点

自动/交互式分割:项目中的 SAM(Segment Anything Models)算法提供了自动和交互式关键帧分割的功能。通过 SAM,用户可以选择使用自动分割算法或与算法进行交互,以实现对视频中任意对象的精确分割。这种灵活性使得该项目适用于不同需求的应用场景。

高效多目标跟踪:Segment-and-Track-Anything 还引入了 DeAOT 算法,用于实现高效的多目标跟踪和传播。DeAOT 利用先进的跟踪技术,能够准确地跟踪视频中的多个对象,并支持对象之间的传播和关联。这使得项目在处理复杂场景和多目标跟踪任务时表现出色。

独立和开放性:该项目是一个独立的开源项目,可以直接访问和使用。它提供了丰富的文档和示例代码,帮助用户快速上手并进行定制开发。同时,项目欢迎社区的贡献和扩展,这使得用户能够与其他研究者和开发者共享经验和成果。

应用广泛性:Segment-and-Track-Anything 的分割和跟踪功能可以应用于各种视频分析任务,包括视频监控、智能交通、行为分析等。它为研究者和开发者提供了一个强大的工具,用于处理和分析具有复杂动态场景的视频数据。
在这里插入图片描述

三、项目部署

项目地址:https://github.com/z-x-yang/Segment-and-Track-Anything

1.部署环境

我这里测试部署的系统win 10, cuda 11.8,cudnn 8.5,GPU是RTX 3060, 8G显存,使用conda创建虚拟环境。
创建并激活一个虚拟环境:

conda create -n sta python==3.10
activate sta

下载项目:

git clone https://github.com/z-x-yang/Segment-and-Track-Anything.git
cd Segment-and-Track-Anything
pip install gradio
pip install scikit-image

因为要使用GPU,这里单独安装pytorch

conda install pytorch2.0.0 torchvision0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8 -c pytorch -c nvidia

因为项目的依赖要使用sh脚本进行安装,win下不支持bash,所以要单独安装m2-base:

conda install m2-base

安装项目依赖:

bash script/install.sh

当出现下面提示代表安装成功。
在这里插入图片描述
GroundingDINO可能会安装不成功,可以直接从源码安装:

git clone https://github.com/IDEA-Research/GroundingDINO.git
cd GroundingDINO/
pip install -e .
cd …

下载所需模型:

bash script/download_ckpt.sh

如果模型下载不成功,也可以手动复制这个地址把模型下载了放到指定目录目录.

2.运行项目

python app.py

然后打开http://127.0.0.1:7860/
在这里插入图片描述
导入一个视频,然后只追踪其中一个人,效果如下:
在这里插入图片描述

视频目标追踪:

目标分割与目标追踪

四、 报错

1.下载模型问题

requests.exceptions.SSLError: (MaxRetryError(“HTTPSConnectionPool(host=‘huggingface.co’, port=443): Max retries exceeded with url: /bert-base-uncased/resolve/main/tokenizer_config.json (Caused by SSLError(SSLEOFError(8, ‘EOF occurred in violation of protocol (_ssl.c:997)’)))”), ‘(Request ID: d4f21f96-45fd-47a1-9afb-b7e4260a6f3b)’)

https://huggingface.co/bert-base-uncased/tree/main

在这里插入图片描述
可以手动从这里下载模型,然后放到指定的目录:
在这里插入图片描述

2. imageio版本问题

TypeError: The keyword fps is no longer supported. Use duration(in ms) instead, e.g. fps=50 == duration=20 (1000 * 1/50).

pip uninstall imageio
pip install imageio==2.23.0

更多推荐

RecyclerView滑动时添加缩放效果

最近看到一个动画效果,感觉不错,所以动手试一试我实现的效果基本上是已经实现了头像无限滚动中itemview也伴随缩放效果初步实现基本思路:1、没选择用ViewPager,考虑到特定几张图片的循环显示和扩展我使用recyclerview2、头像重叠效果通过添加ItemDecoration可以实现3、无限循环效果可以重写r

【算法与数据结构】669、LeetCode修剪二叉搜索树

文章目录一、题目二、解法三、完整代码所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。一、题目二、解法思路分析:450、LeetCode删除二叉搜索树中的节点两道题的思路几乎是一样的,只不过终止条件和单层递归逻辑的顺序需要调换,因为本题需要删除的可能不止一个节点,需要先递归到最深

【算法与数据结构】450、LeetCode删除二叉搜索树中的节点

文章目录一、题目二、解法三、完整代码所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。一、题目二、解法思路分析:本题首先要分析删除节点的五种情况:1、没有找到节点2、找到节点左右子树为空左子树为空,右子树不为空右子树为空,左子树不为空左右子树均不为空程序当中我们选择递归法解题,终

selenium不定位元素直接使用键盘操作(如弹框操作)

今天在使用selenium进行定位时,发现直接定位不了chrome的弹框,如这种弹框:使用的是下面这行代码driver.switch_to.alert.accept()运行报错,说是没有alertwindown。。。。啊?难道chrome的弹框不是用alert写的?emmm……还真是,现在很少使用alert这种原生弹框

MyBatis源码剖析之Mapper代理方式细节

MyBatis是一个流行的Java持久层框架,它提供了多种方式来执行数据库操作,其中之一就是通过Mapper代理方式。通过Mapper代理方式,开发者可以编写接口,然后MyBatis会动态地生成接口的实现类,从而避免了繁琐的SQL映射配置。具体代码如下:思考⼀个问题,通常的Mapper接⼝我们都没有实现的⽅法却可以使⽤

pytest自动化测试框架tep环境变量、fixtures、用例三者之间的关系

tep是一款测试工具,在pytest测试框架基础上集成了第三方包,提供项目脚手架,帮助以写Python代码方式,快速实现自动化项目落地。在tep项目中,自动化测试用例都是放到tests目录下的,每个.py文件相互独立,没有依赖,1个文件即1条用例,彼此分离。虽然用例也能相互引用,但是除非万不得已,一般不建议这么做,牵一

深入实现 MyBatis 底层机制的任务阶段 6-实现任务阶段 6- 在 WyxConfiguration, 读取 XxxMapper.xml,能够创建 MappperBean 对象

😀前言在Java应用程序中,与数据库交互是常见的任务之一。为了简化和规范数据库操作,我们通常使用对象关系映射(ORM)框架。ORM框架允许我们将数据库表映射到Java对象,并提供了一种便捷的方式来执行数据库操作。在这一过程中,配置文件起到了关键作用,它定义了数据库表和Java对象之间的映射关系,以及如何执行数据库操作

四维轻云平台倾斜模型三种加载方式及单体化操作介绍

为了优化倾斜模型浏览效果,「四维轻云」v1.4.1针对倾斜模型新增了三种加载方式;此外,平台还增加了单体化等功能。但很多用户还不会使用这些功能,小编就来向大家介绍一些如何设置倾斜模型的三种加载方式和单体化操作。一、倾斜模型三种加载方式在倾斜模型的编辑窗口中,可设置数据的加载方式,保存后再次加载数据时生效。1、默认方式(

js创建动态key的对象ES6和ES5的方法

前提:有个场景,循环数组,根据每一项的值,往一个数组中push一个新对象,对象的key不同要从数组中获取情况解析:push没有什么问题,问题就是创建一个动态key的对象。下面就说一下如何以参数为key的条件下创建对象错误写法:varkey='name';varobj={key:'张三'}这样并不能得到想要的结果,创建对

刻字机尖角补偿

1刻字机尖角补偿原理刀具切割直线段过渡方法在文章旋转偏心裁切刀切向跟踪及半径补偿已经有过说明。刻字机由于刀具半径的影响,切割直角时会不直会比较圆滑,而且在闭合曲线的下刀点会容易不闭合。使用尖角补偿可以克服这些问题。如上图所示,切割俩条相邻线段AB和BC时,刀心需要走的轨迹是从A'-->B'-->B''-->C'。由于刻

springboot 去掉netflix 禁用Eureka

目录报错解决方法方法一:去掉maven依赖方法二:直接在application配置文件里禁用eureka(偷懒方法)方法三:检查eureka配置的地址是否正确(确实需要使用eureka)报错如果你接手别人的项目,启动的时候会一直报这个错:发现有netflix,eureka相关字眼,2023-09-1316:25:47.

热文推荐