我正在尝试创建一个程序,能够在《使命召唤》游戏视频中识别出人形。我从这段视频中整理了大约2200张独立的图片,这些图片中有的包含人形,有的则没有。我随后尝试训练一个神经网络来区分这两组图片。
然后,我将每个视频帧分成几百个网格矩形,并用我的ANN检查每个矩形。这些矩形是重叠的,试图捕捉位于网格矩形之间的身影,但这种方法似乎效果不佳。因此,我有几个问题:
-
神经网络是合适的方法吗?我读到它们与其他机器学习算法相比速度非常快,最终我计划将其用于实时视频,速度非常重要。
-
在图像帧中搜索身影以在ANN上测试的最佳方法是什么?我觉得我的方法不是很好。它的速度和准确性肯定不高。处理一张960 x 540的图像需要大约一秒钟,并且准确性很差。
-
我遇到的另一个问题是构建作为ANN输入的特征向量的最佳方法。目前,我只是将所有输入图像缩小到25 x 50像素,并创建一个包含每个像素强度的特征向量。这是一个非常大的向量(1250个浮点数)。构建特征向量有哪些更好的方法?
有关我在这里所做的更详细的解释,请参见:CodAI: 计算机视觉
编辑:我希望能得到更多细节。计算特征的最佳方法是什么?我需要能够识别出许多不同姿势的人形。我是否需要为识别直立、蹲伏和俯卧的不同姿势创建单独的分类器?
回答:
- 使用原始强度作为特征向量是行不通的1。光照等因素会引起太多的变化。
- 作为第一步,一个好的特征可以考虑HOG。OpenCV 2.2有一个GPU(CUDA)版本的检测器,速度很快。
- 神经网络可能不是最佳选择。通常你会使用SVM或提升作为分类器2。并不是说神经网络不够强大,而是很难调整训练/参数。经常会陷入局部最小值等问题。
- 对于俯卧、蹲伏和站立的身影,你肯定需要不同的分类器,并在混合模型中使用它们。
- 你问的是“最佳方法” – 人类检测远非一个已解决的问题,所以没有人知道最佳方法。上面提到的方法已知效果相当好。
- 如果你想要一个好的结果,你绝对要利用你的目标是特定的 – 因此,利用你在《使命召唤》中试图检测人类这一事实。你需要检查的位置范围不是整个图像,身影将靠近地面。这允许你加速搜索并减少误检。如果可以,减少渲染的细节 – 细节越少,变化越少,这意味着学习问题更容易解决。
脚注:
1 对于挑剔的人:没有一个高度复杂的分类器。
2 你也可以使用一系列提升的分类器来提高速度,而不会在检测率上损失太多。