让我们从尝试构建问题开始。但是,我会马上说,在一般情况下,这是不可能的。什么是动作(action)?如果我们看一下研究任务动作识别(action recognition),这里也没有达成共识。第一个最受欢迎的学术数据集包含 2-20 秒涉及人员的情况片段:
CRCV | Center for Research in Computer Vision at the University of Central Florida
第二个最受欢迎的数据集包含来自连接到衣服的相机的记录:
Moving Objects Dataset: Something-Something v. 2 - Qualcomm Developer Network
但这只是其中的一小部分。有任务“动作分类”、“视频分类”和“自监督动作识别”(这些是一些部分重叠的任务)。有带有骨架的数据集;有关于烹饪过程的数据集。在某些数据集中,它是短视频,而另一些则很长。
什么是动作?动作(action)是一个事件(event),可以在视频上标记,先验地知道它可能在那里发生。一个人、一台机器、一只动物或其他东西可以产生一个事件。为什么我对这个定义更满意?通常,在实践中(99% 的时间),动作识别用于某些确定性过程。确定发生了一些需要计数/说明/控制的事件。
NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包
对于实际的计算机视觉任务来说,这个定义通常是正确的,但对于需要“通用定义”的学术研究来说就不是那么好了。它也不适用于所有视频流和内容分析系统。
它有什么不同?什么是“真实世界的任务”?实际任务通常具有有限的数据、摄像机位置和情况。例如,我从未见过必须从任何角度找到 400 个不同动作的任务。相反,现实世界的问题可能是这样的:
- 控制生产中操作的执行
- 监督顾客/店员
- 监督厨房的正确程序
- 将摄像头挂在头部/身体上的行为控制(运动员、警察等)
- 事故探测器
- 畜牧业过程识别
- 等等。
这只是其中的一小部分。但仍然:
- 相机很可能是固定的/至少是拧在人身上的。
- 你需要检测 1-10 个操作。非常非常罕见,10-100
我将要描述的方案通常适用于许多任务。我将从比学术方法简单得多的方法开始。并以更具实验性和学术性的结束。
为了清楚起见,在大多数示例中,我将使用人物作为参考,从侧面的某个地方查看。
1、分区
好的,让我们从一个基本的想法开始。假设您想识别一个人何时按门铃。你会怎么做?
在这种情况下,你能做的最后一件事就是从 Papers With Code 的首选方案开始运行训练。毕竟,从以下方面检测某些内容要容易得多:
- 靠近门铃的男人的手
- 一个男人在门口站了一会儿
你不需要火箭科学。一个训练有素的探测器和良好的定位相机就可以工作了。工作的结果将得到保证和解释。例如,如果手没有被发现,你可以看到原因—并尝试重新训练它(手套/奇怪的光等)。
因此,物体检测->检查工作区-