NSDT工具推举: Three.js AI纹理开拓包 - YOLO合成数据天生器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开拓包 - 3D模型在线减面 - STL模型在线切割
为了展示动作识别任务的繁芜性,我想举这个例子:
你能明白我在这里做什么吗?我想不能。至少你不会确定答案。我正在钻孔。
(图片来自网络侵删)你能弄清楚我接下来要做什么吗?
可能也猜不出来。好吧,我的意思是,钉钉子,这很明显。但这个动作的全名该当是“挂画”。
在第一个例子中,我们的相机设置是缺点的。因此,只有当你有透视能力或知道高下文时,才能识别出这个动作。在第二个例子中,我们有一个非平凡的高下文,个中动作描述具有特定于任务的繁芜构造。我见过有几十个类似动作的任务。而这只是动作识别问题的一小部分。一个有效的算法必须能够稳定地应对如此繁芜的情形。我们将不得不面对以下问题:
问题陈述的不完全性(动作的边界不明确,不清楚如何处理中间动作)任务办理方案须要大量数据集。当代动作识别的强大算法须要得当的硬件。任务是可变的:新的相机悬挂、不同的衣服、新的动作办法等。但是,如果事情真的那么糟糕——我就不会写这篇文章了。因此,在这里你可以找到如何偷工减料、办理了哪些问题、最近涌现了哪些事情以及问题陈述中包含哪些生活技巧。
1、问题定义让我们先试着布局问题。但是,我立时要说的是,在一样平常情形下,这是不可能的。什么是“动作”?如果我们看看研究任务“动作识别”,这里也没有共识。第一个最受欢迎的学术数据集包含 2-20 秒的涉及人物情景的镜头片段:
https://www.crcv.ucf.edu/data/UCF101.php
第二受欢迎的数据集包含来自附在衣服上的摄像机的记录:
https://developer.qualcomm.com/software/ai-datasets/something-something
但这只是个中很小的一部分。还有“动作分类”、“视频分类”和“自监督动作识别”等任务(这些是部分重叠的任务 1、2、3)。有带骨架的数据集;有带烹饪过程的数据集:
https://epic-kitchens.github.io/2023
在某些数据集中,它是短视频;无关紧要的是长视频。
什么是动作?动作是可以在视频上标记的事宜,并且事先知道它可以在那里发生。人、机器、动物或其他东西可以产生事宜。为什么我更喜好这个定义?常日,在实践中(99% 的韶光),动作识别用于某些确定性过程。确定发生了须要计数/解释/掌握的某些事宜。
对付实际的 ComputerVision 任务,这个定义常日是精确的,但对付须要“通用定义”的学术研究来说,它并不那么好。它也不适用于所有视频流和内容剖析系统。
它有什么不同?什么是“现实天下的任务”?实际任务常日具有有限的数据、摄像机位置和情形。例如,我从未见过须要从任何角度找到 400 种不同动作的任务。相反,现实天下的问题可能是这样的:
掌握生产中动作的实行监督客户/店员监督厨房中的精确程序用挂在头上/身上的摄像头进行行为掌握(运动员、警察等)事件探测器畜生过程识别等等。这只是个中很小的一部分。但仍旧:
摄像头很可能是固定的/至少是拧在人身上的。你须要检测 1-10 个动作。非常非常罕见的是 10-100 个我将描述的方案常日适用于许多任务。我将从比学术方法大略得多的方法开始。并以更具实验性和学术性的方法结束。
为了清楚起见,在大多数例子中,我将利用人作为参考,从侧面某处看。
我不会在这里写。相同的算法用于视频剖析任务。我相信 Youtube 和 Netflix 有很多动作识别和视频分类。
2、区域检测好的,让我们从一个基本想法开始。假设你想识别某人何时按门铃。你将如何做?
在这种情形下,你能做的末了一件事是从 Papers With Code 的首选开始运行演习。毕竟,从以下内容检测某些东西要随意马虎得多:
男人的手靠近门铃一个男人在门口站了一下子你不须要火箭科学。一个演习有素的检测器和良好的定位相机就可以事情。事情结果将得到担保和可阐明。例如,如果没有检测得手,你可以理解缘故原由 - 并考试测验重新演习它(手套/奇怪的光芒等)。
以是。物体检测->检讨事情区域->检讨干系条件事情非常出色:
你不须要知道“牛吃草”的动作,你须要知道她站在哪里
基本思路是,你不须要行动;你须要理解发生了什么。
3、工具检测方法大致相同,个中动作描述是工具。当然,“在一样平常情形下”,你手中的煎锅并不虞味着什么。但是,理解摄像头安装的环境,它可能是在厨房里“做饭”,在商店里“卖东西”,或者在 PUBG 中“斗殴”。
通过结合“位置”和“工具”之间的逻辑,你可以组合长动作或动作序列。
工具可以是任何东西。框架中的衣服/产品/汽车等。
4、时序动作让我们连续谈论处理视频片段的方法。在这里,我会立即将“一段视频”的观点分成两种:
利用工具的骨架模型直接处理视频,处理全体视频,处理选定的工具(人,汽车等)组合方法,利用感兴趣的区域,与工具检测器组合,利用一些预处理,如光流……等等,我乃至不会写这些有什么差异?当你须要处理视频时,神经网络非常未便利。最好有更高的性能、更繁芜的数据集和更苛刻的演习。一种摆脱处理视频的方法是预先检测骨架并利用它。这可能是:
人物骨骼:
https://github.com/CMU-Perceptual-Computing-Lab/openpose
动物骨骼:
https://benchmark.deeplabcut.org/datasets.html
手臂骨骼:
https://mks0601.github.io/InterHand2.6M/
脸部点模型:
https://www.epfl.ch/labs/vita/
物体的骨架模型(汽车、沙发等)。当然,更有趣的是那些可以动态的模型,例如挖掘机/机器人/等:
https://openpifpaf.github.io/plugins_apollocar3d.html
骨骼动画会丢失可能至关主要的纹理信息:衣服、与之交互的物体和面部表情……
也可以将两个领域的某些内容结合起来。例如,将骨骼用于可以从骨骼中识别出的部分动作。以及不能利用纹理信息的方法。
5、分类,经典方法这里有一个很好的实现经典分类的方法凑集:
MMAction 是一个基于 MMCV 和 PyTorch 的开拓但粗糙的框架。它变得越来越好。但还远远不足完美。
PyTorchVideo 是 Facebook 考试测验制作一个仿照,但它仍旧很弱。但原生的 PyTorch。
这里有一个很好的文章凑集——动作分类,动作识别,来自Papers with code。
从全局来看,任务是按原样设置的,现在仍旧是。“输入一堆帧”(或骨架),输出动作。统统都始于 2D 卷积:
2015 год, https://arxiv.org/pdf/1412.0767.pdf
然后的发展对应于经典的“骨干,衰减”:
2020 — https://arxiv.org/abs/2005.06803
将所有内容移至 TimesFormer(所有轴上的transformer):
2021 — https://arxiv.org/pdf/2102.05095.pdf
现在他们乃至把 RL 放在了它之上:
2022 — https://arxiv.org/pdf/2112.14238v1.pdf
2023年最盛行的是超大型预演习网络(我们稍后会商到它们)。
把稳:此外,所有基准测试常日都在不同的数据集上,因此您无法进行比较。
可能须要把稳的是,所有方法都存在相同的问题:
数据集。很难构建,也很难标记。常规数据集包含数千个示例。你须要各种人物、姿势和角度(如果这是目标的话)。没有人喜好组装这样的数据集。收敛。许多模型很难收敛。有时你可以构建一个小的数据集,但它不会收敛。但很难事先估计这一点。例如,我们碰着过在三个数据集上起浸染的动作识别模型在第四个数据集上不起浸染的情形。很难明得它不起浸染的缘故原由。框架不同部分中的相同动作是同一件事吗?在不同的姿势中呢?对付类似的活动,边界会经由哪里?繁芜的动作呢?问题的模糊性在动作分类任务中得到了很好的表示。关于“利用全体视频”与“利用裁剪视频”的事情。选择算法时不要忘却这一点,并精确选择它。你可以一次识别全体视频,也可以识别人物的区域(预先检测和跟踪)。在第一种情形下,帧中有许多人时会涌现问题。但是,当帧中有大量信息来帮助识别动作时,它会很好地事情。
此外,关于骨骼动画分类的几句话:那里没有什么邪术。文章很少。最好的作品是 PoseC3D,它属于上述 MMAction。这些作品的紧张差异在于精确利用卷积网络,而不是在点阵列上事情的经典方法:
https://arxiv.org/pdf/2104.13586v1.pdf
但是,如你所见,该模型对付 2021 年来说足够大略。并且它有很多地方利用:
https://github.com/open-mmlab/mmaction2
许多网络都在处理点阵列。但是,由于速率快,我更常常利用它们。
6、无监督 / 聚类 / 嵌入Papers with code中的 Zero-shot 带代码。自监督也在那里。
我能摆脱一些问题吗?是的。你可以摆脱数据集网络和演习。当然,这有利于准确性。
当前顶级方法利用类似 CLIP 的神经网络 + 一些技巧。例如,蒙版视频编码器(或其他一些技巧):
https://github.com/OpenGVLab/InternVideo
一样平常来说,大多数方法都是基于创建一些表征动作的“嵌入”向量。
但当然,紧张问题是一样的。演习数据集与你将利用的数据集有多远?
另一种盛行的方法是自监督。当我们在数据集 A 上进行演习,用这个网络标记数据集 B,并在这个“自动标记”的数据上进行演习时。有时可以利用这种方法(当数据集很大但不随意马虎标记时)。
这在近年来准确率如何进步的图像中也很明显(来自 Papers with Code):
这是无监督的示例(87%)
这是自监督的 96%
这是一个完备监督的办理方案,准确率 98.6%
关于缺点我们稍后会谈论。
随着最新的大型数据集预演习模型的发布,事情将变得相称大略。
7、骨骼和 3D 动画以下是几个示例。这里许多动作都被骨骼成功识别(我与这家公司互助过很多次):
https://get.cherryhome.ai/howitworks/
对付某些动作,1-2 个示例足以进行演习。但你必须非常小心选择履行的位置。以下是有关该主题的一些学术论文和排序,以帮助构建逻辑。这里是带有代码的论文。
当然,每个人都通过嵌入来实现这一点,但神奇之处在于如何创建它。
几年前在 ODS Data Fest 上,来自 Yandex 的人对人脸模型(68 分)说了类似的话(骨架嵌入),形成嵌入并利用它们来设置数据集/分类动作:
https://www.youtube.com/watch?v=4qwc_AQv8Z8
但视频是俄语的。
有几个项目为手天生了嵌入。个中一个是这样的:
https://github.com/yuxiaochen1103/DG-STA
我以为该当有人在产品中利用它来识别/记住手势。我们已经利用了类似的方法进行韶光手部过滤和咀嚼速率打算。
以是,总结一下——文章很少,但我常常在产品中看到它们。
打算大略,易于演习(你不必在另一个数据集上进行演习),逻辑大略。如果将其与传统方法进行比较:
全视频分类
骨架根本分类
基于骨架的一次性动作识别(上篇文章不是“骨架”而是骨架+3d网格)
缺点也有所不同!
8、预演习近年来的一个趋势是涌现了强大的预演习网络。近年来最有趣的网络是 InterVideo。但到目前为止,只有一些声明的功能涌如今开源中。它看起来很神奇:
https://arxiv.org/pdf/2212.03191.pdf
并非所有事情都令人愉快。这样的网络只需演习一次,由于要只教授网络的一部分,你须要 128 个 A100 持续两周。
在 Inter Video 的情形下,它是两个编码器的演习:
蒙版视频编码器类似 CLIP 的神经网络在此之后,对下贱任务进行transformer演习。
未来几年,这一领域可能会取得重大进展。当前的实现将变得更快,利用调度的本钱也更低。
9、无监督与监督然而,我描述了监督和无监督方法。哪一个更随意马虎/更快/更方便?哪一个在哪里利用?
同样,这个问题没有明确的答案:
如果你只有几个动作并且可以构建一个数据集,最好利用监督。它更准确、更稳定、更可预测。无监督常日用于数据挖掘。有时用于一些初步剖析。无监督在纯视频上更难提取,在骨架上更随意马虎提取。这又是一个限定。以是,你可以同时利用它们。首先运行无监督,然后逐步进入监督。奇怪的是,有些动作/例子种别在无监督下表现不佳。常日,这些动作具有很高的可变性。例如,你不能对一个动作进行稳定的嵌入。一个很好的例子是舞蹈。有数百种。而且没有稳定的嵌入。但常规演习效果相称不错。正如我之条件到的,在 OneShot 视频数据集上,缺点率相差三倍。而在 OneShot 骨架和骨架之间的数据集上,缺点率相差三倍,等等。
但在这里,你必须明白缺点率并分歧一。有些动作险些可以完美地被 OneShot 识别。这些紧张是与纹理没有交互的短动作。最好是没有变革的活动。例如,你可以用一百种办法“跌倒”。但“从地板上捡起盒子”可能只有一种精确办法,而有两三种办法是缺点的。对付某些算法来说,角度至关主要。
如果你精确设置了问题,你可以大大地偷工减料。
10、结束语我将从头开始。在我看来,对付非学术性的动作识别任务,开头描述的更直接的方法常日就足够了。只有百分之几的任务须要良好的动作识别。
办理问题时,你必须回答几个问题:
我须要准确的动作识别,还是姑息利用可理解的逻辑?我须要骨架,还是利用视频?我须要 One-Shot 方法供应的灵巧性,还是须要准确度和处理繁芜动作的能力?预先演习的网络可以处理我的数据吗?这种神经网络的速率是否足够?这些问题的答案将大大简化和加快你的任务。
原文链接:动作识别综合指南 - BimAnt