https://www.crcv.ucf.edu/data/UCF101.php
NSDT工具推举: Three.js AI纹理开拓包 - YOLO合成数据天生器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开拓包
第二个最受欢迎的数据集包含来自连接到衣服的相机的记录:
(图片来自网络侵删)https://developer.qualcomm.com/software/ai-datasets/something-something
但这只是个中的一小部分。有任务“动作分类”、“视频分类”和“自监督动作识别”(这些是一些部分重叠的任务)。有带有骨架的数据集;有关于烹饪过程的数据集:
https://epic-kitchens.github.io/2023
在某些数据集中,它是短视频,而另一些则很长。
什么是动作?动作(action)是一个事宜(event),可以在视频上标记,先验地知道它可能在那里发生。一个人、一台机器、一只动物或其他东西可以产生一个事宜。为什么我对这个定义更满意?常日,在实践中(99% 的韶光),动作识别用于某些确定性过程。确定发生了一些须要计数/解释/掌握的事宜。
对付实际的打算机视觉任务来说,这个定义常日是精确的,但对付须要“通用定义”的学术研究来说就不是那么好了。它也不适用于所有视频流和内容剖析系统。
它有什么不同?什么是“真实天下的任务”?实际任务常日具有有限的数据、摄像机位置和情形。例如,我从未见过必须从任何角度找到 400 个不同动作的任务。相反,现实天下的问题可能是这样的:
掌握生产中操作的实行监督顾客/店员监督厨房的精确程序将摄像头挂在头部/身体上的行为掌握(运动员、警察等)事件探测器畜牧业过程识别等等。这只是个中的一小部分。但仍旧:
相机很可能是固定的/至少是拧在人身上的。你须要检测 1-10 个操作。非常非常罕见,10-100我将要描述的方案常日适用于许多任务。我将从比学术方法大略得多的方法开始。并以更具实验性和学术性的结束。
为了清楚起见,在大多数示例中,我将利用人物作为参考,从侧面的某个地方查看。
1、分区好的,让我们从一个基本的想法开始。假设您想识别一个人何时按门铃。你会怎么做?
在这种情形下,你能做的末了一件事便是从 Papers With Code 的首选方案开始运行演习。毕竟,从以下方面检测某些内容要随意马虎得多:
靠近门铃的男人的手一个男人在门口站了一下子你不须要火箭科学。一个演习有素的探测器和良好的定位相机就可以事情了。事情的结果将得到担保和解释。例如,如果手没有被创造,你可以看到缘故原由—并考试测验重新演习它(手套/奇怪的光等)。
因此,物体检测->检讨事情区->检讨干系条件非常有效。
你不须要知道“牛吃饲料”的动作,你须要知道她站在哪里(视频来自 - http://cows.ai/)
这个基本的思路是你不须要识别动作,你须要理解正在发生什么事情。
2、工具这种方法大致相同,个中操作描述是工具。当然,“在一样平常情形下”,你手中的煎锅并不虞味着什么。但是,知道安装摄像头的高下文,它可能是在厨房里“做饭”,在商店里“发卖”,或者在 PUBG 中“斗殴”。
PUBG官方艺术
通过组合“位置”和“工具”之间的逻辑,你可以组装永劫光动作或动作序列。
工具可以是任何东西。框架中的衣服/产品/汽车等。
3、时序动作让我们连续谈论适用于视频片段的方法。在这里,我会立即将“一段视频”的观点分为2.5种办法:
利用工具的骨骼模型直接处理视频(处理全体视频、处理选定工具(人物、汽车等))组合方法(利用感兴趣区域、与物体检测器组合、利用一些预处理(光流...等等,我什至不会写那个))有什么差异?当你须要处理视频时,神经网络非常未便利。如果你拥有更高的性能、更繁芜的数据集和更苛刻的演习,那将是最好的。摆脱视频处理的一种方法是预先检测骨架并对其进行处理。这可能是—
人体骨骼:
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
骨骼动画会丢失可能至关主要的纹理信息:服装、与之交互的物体和面部表情.....
也可以将这两个领域的一些东西结合起来。例如,将骨架用于可以从骨架中识别的动作部分。对付不能利用纹理信息的方法部分。
3、分类,经典方法下面是实现经典分类的一个很好的方法凑集:
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:
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
许多网络都在处理点数组。但是,由于速率的缘故原由,我更频繁地利用它们。
4、无监督/聚类/嵌入Papers with Code的zero shot 以及 自监督。
我能摆脱一些问题吗?是的。你可以摆脱数据集网络和演习。当然,有利于准确性。
目前最热门的方法利用类似 CLIP 的神经网络 + 一些技巧。例如,屏蔽视频编码器(或其他一些技巧):
https://github.com/OpenGVLab/InternVideo
常日,大多数方法都基于创建一些表征动作的“嵌入”向量。
但是,当然,紧张问题是一样的。演习数据集与你将利用的数据集相距多远?
另一种盛行的方法是自监督。这是我们在数据集 A 上演习,用这个网络标记数据集 B,然后在这个“自动标记”的数据上演习的时候。有时可以利用这种方法(当有大型数据集时,但不随意马虎标记)。
这在近年来准确性如何进步的图像中也很明显(来自 Papers with Code):
这是无监督示例(87%)
这是自我监督的 96%
这是一个完备监督的办理方案 98.6%
缺点相差三倍,但我们稍后会谈论。
随着在大型数据集上发布最新的预演习模型,事情将变得非常大略。
5、骨骼和3D动画这里有几个例子。在这里,许多动作都被骨骼成功识别(我与这家公司互助了很多):
https://get.cherryhome.ai/howitworks/
对付某些操作,1-2 个示例足以进行演习。但是你必须非常小心你选择在哪里实现。以下是一些关于该主题的学术论文和分类,以帮助构建逻辑:(1, 2, 3)。这是论文及代码。
当然,每个人都通过嵌入来做到这一点,但神奇的是如何创建它。
几年前,在 ODS Data Fest 上,Yandex 的家伙们对人脸模型(68 分)说了类似的话(骨骼嵌入),形成嵌入并利用它们来设置数据集/分类操作:
https://www.youtube.com/watch?v=4qwc_AQv8Z8
但视频是俄语的(1, 2)。
有几个项目是为手部天生嵌入的。个中之一是这样的:
https://github.com/yuxiaochen1103/DG-STA
在我看来,有人该当在产品中利用它来识别/记住手势。我们利用类似的方法进行韶光手部过滤和咀嚼速率打算。
以是,总而言之—文章很少,但我常常在产品中看到它们。
打算大略,易于演习(你不必在另一个数据集上演习),逻辑大略。如果将其与传统方法进行比较:
完全视频分类
基于骨骼的分类
基于骨骼的一次性动作识别(上一篇文章不是“骨架”而是骨架+3D网格)
缺点也差了好几倍!
6、预演习模型近年来的一个趋势是涌现了强大的预演习网络。近年来最有趣的网络是InterVideo。但到目前为止,开源代码中只涌现了一些声明的功能。它看起来很神奇:
https://arxiv.org/pdf/2212.03191.pdf
并非统统都令人愉快。这样的网络只演习一次,由于要只教授网络的一部分,你须要 128 个 A100 两周。
在Inter Video的情形下,它是两个编码器的演习:
掩码视频编码器类 CLIP 神经网络在此之后,对下贱任务进行transformer演习。
未来几年,这一领域可能会取得重大进展。当前的实现将变得更快、更便宜地利用调优。
7、无监督与有监督然而,我描述了监督和无监督方法。哪一个更随意马虎/更快/更方便?哪一个在哪里利用?
同样,这个问题没有明确的答案:
如果只有几个动作,并且可以天生数据集,则最好利用监督式。它更准确、更稳定、更可预测。无监督常日用于数据挖掘。有时进行一些初步剖析。在纯视频上,无监督要困难得多,而在骨骼上则更随意马虎。这又是一个限定。因此,你可以同时利用它们。“无监督”首先运行,然后缓慢地进入“监督”。奇怪的是,在某些类别的动作/示例中,Unsupervised 表现不佳。常日,这些是具有高度可变性的动作。例如,你不能为动作实行稳定嵌入。舞蹈便是一个很好的例子。有数百个。并且没有稳定的嵌入。但是定期演习做得很好。正如我之条件到的,在OneShot视频数据集上,偏差相差三倍。在骨骼 OneShot 和骨骼之间的骨骼数据集上,它是三倍,等等。
但在这里,你必须明白,偏差是不屈均的。OneShot险些可以完美地识别某些动作。这些紧张是与纹理没有交互的短动作。最好是没有变革的活动。例如,你可以以一百种办法“跌倒”。但是“从地板上捡起盒子”可能是一种精确的办法,也可能是 2-3 种缺点的办法。对付某些算法,角度至关主要。
如果你精确设置了问题,可以显著偷工减料。
8、结束语我会从开始的地方结束。在我看来,对付动作识别的非学术任务,开头描述的更直接的方法常日就足够了。只有百分之几的任务须要良好的动作识别。
办理问题时,你必须回答几个问题:
我是须要准确的动作识别,还是会利用可理解的逻辑?我须要骨骼,还是直策应用视频?我是否须要 One-Shot 方法供应的灵巧性,或者我是否须要处理繁芜操作的准确性和能力?预演习网络可以处理我的数据吗?这种神经网络的速率足够吗?这些问题的答案将大大简化和加快你的任务。
原文链接:动作识别终极指南 - BimAnt