8

我正在尝试创建一个程序,可以在使命召唤游戏的视频中找到人物。我已经从该视频中编译了大约 2200 张单独图像的列表,这些图像要么包含人物,要么不包含人物。然后我尝试训练一个神经网络来区分两组图像之间的差异。

然后,我将每个视频帧分成几百个网格矩形,并用我的 ANN 检查每个。矩形重叠以尝试捕获网格矩形之间的图形,但这似乎效果不佳。所以我有几个问题:

  1. 神经网络是要走的路吗?我读到它们与其他机器学习算法相比非常快,最终我计划将其用于实时视频,速度非常重要。

  2. 搜索图像帧中的数字以在 ANN 上测试的最佳方法是什么?我觉得我做的方式不是很好。它绝对不是很快或准确的。960 x 540 的图像每帧大约需要 1 秒,并且精度很差。

  3. 我遇到的另一个问题是构建特征向量以用作 ANN 输入的最佳方法。目前,我只是将所有输入图像缩小到 25 x 50 像素,并创建一个包含每个像素强度的特征向量。这是一个非常大的向量(1250 个浮点数)。构建特征向量的更好方法是什么?

有关我在这里所做的更详细的解释:CodAI:计算机视觉

编辑:我想要更多细节。计算特征的最佳方法是什么。我需要能够识别许多不同位置的人物。我是否需要创建单独的分类器来识别直立、蹲伏和俯卧之间的区别?

4

4 回答 4

7
  • 使用原始强度作为特征向量是行不通的1。灯光等引起的变化太大。
  • 作为第一步,一个很好的特性是 HOG。opencv 2.2 有一个 GPU (cuda) 版本的检测器,它速度很快。
  • 神经网络可能不是最好的方法。通常你会使用 SVM 或 boosting 作为分类器2。并不是神经网络不够强大,而是很难让训练/参数正确。你经常陷入局部最小值等。
  • 对于俯卧/蹲伏/站立的人物,您肯定需要不同的分类器并将它们用于混合模型。
  • 您要求一种“最佳方式”——到目前为止,人类检测还不是一个已解决的问题,因此没有人知道最佳方式。众所周知,上面提到的东西效果很好。
  • 如果你想要一个好的结果,你肯定想利用你的目标是特定的——所以,利用你试图检测人类的使命召唤。您需要检查的位置范围不是整个图像,数字将靠近地面。这使您可以加快搜索速度并减少错误检测。如果可以的话,减少渲染的细节——更少的细节意味着更少的变化,这意味着一个更容易学习的问题。

脚注:
1对于挑剔者:没有高度复杂的分类器。
2您还可以使用级联的增强分类器来提高速度,而不会牺牲太多的检测率。

于 2011-01-24T15:35:28.723 回答
7

这个问题对于普通的 ANN 来说太难了。

人工神经网络不太适合具有大量空间变换的图像(即不同位置的人物)。他们实际上需要独立学习每个可能的位置,因为他们不能很好地概括平移、旋转和缩放等。即使你设法让它工作,你可能需要数十亿的训练图像和多年的训练时间。

您最好的选择可能是选择以下任何一种:

于 2011-01-20T19:03:14.283 回答
1

更好的特征胜过更好的学习算法。特征选择的基本原则是最好的特征最大化类间方差和最小化类内方差。在您的情况下,这些特征应该强调包含人物的图像和不包含人物的图像之间的差异,并不强调同一类图像之间的差异。

例如,您可以尝试找到人物的轮廓,并根据轮廓计算特征。OpenCV 已经有一些计算轮廓特征的函数:MomentsGetCentralMomentNormalizedCentralMoment等。那么问题是:如何从背景中分割人物,以便找到他们的轮廓?有几种方法可以解决这个问题,例如使用纹理分割。

一旦你可以解决分割问题并计算出合理的特征,学习算法的选择就不是那么重要了。但是为什么不尝试几个,看看什么效果最好呢?查看 OpenCV 文档中的机器学习部分。

于 2011-01-20T20:03:19.803 回答
0

我不清楚您要完成什么,但似乎您正在尝试使用错误的方法进行实时玩家跟踪(或类似的东西)。人体跟踪是人们期望通过对真人图片进行数字图像/视频处理来完成的事情。

根据您的目的,玩家跟踪不应该通过图像处理来完成,因为它对 CPU 的要求非常高。在游戏中跟踪玩家模型是一种通常用于作弊应用程序的做法,它需要在游戏进程中注入代码,或者成为游戏引擎和图形驱动程序之间的中间人。由于游戏客户端始终知道其他玩家在哪里(即使您看不到他们),因此可以在进程内存中搜索玩家的 X、Y、Z 坐标,或者拦截图形渲染调用以搜索玩家所在的位置模型将在屏幕上呈现(这可能有点棘手,因为它需要对 OpenGL/DirectX 和调试技能有基本的了解)。

我不确定是否可以在 StackOverflow 上详细介绍此类技术,但我会说这个话题已经在GameDeception等几个逆向工程师/作弊论坛上进行了广泛讨论。

于 2011-01-24T15:16:39.180 回答