我使用svm进行人类行为识别。我用" kth"数据库中有25个人在4种不同的场景中进行6种不同的动作(步行,慢跑,跑步,拳击,手握和手持)。所以我有600个数据样本(运动历史图像)(每个动作100个样本)。
我为6个动作训练了6个不同的1-vs-all svm,例如:
- 用于训练我使用的跑步课程:
- 来自运行样本的80个样本;
- 来自其他班级的500个样本;
所以我保存了20个样本来测试分类。 但是我的成绩非常好,这让我确信我在测试中犯了一个错误(90%的成功,而其他论文的最佳镜头有63.5%)。
我应该怎么做才能测试svm分类器?
其他信息:
每个视频: 30秒,20 fps,每帧大小160 * 120
算法:
1)从所有视频中提取MHI特征(25个人,4个场景,6个动作,每个30秒),以便收集360000个样本。
2)选择600个样本(每个视频1个)
3)重塑所有样本(1 * 19200)
培训 每个班级做4到6次
4)80个样本为+1级
5)500个样本为-1级
6)用每个类的libsvm计算“w”和“偏差”
测试: 现在我们每6个班级有1个“w”和“偏见”。
7)使用未经训练的MHI功能作为输入
8)计算每个班级的“W *输入+偏差”
9)获胜者类是签名(W *输入+偏见)> 0
的类答案 0 :(得分:0)
我看到很多问题。我还建议你参加机器学习课程,或者阅读一本书来更好地理解概念。
为什么使用600个功能,如果有不同的场景,则不能为不同的场景包含不同的功能。您的特征向量应该能够应对所有场景中的变化。
在对操作进行分类时,是否会连接不同人员的功能?如果是这样,那也是错误的。想象一下,我给你一个样本,其中有一个动作,一个场景由一个人完成。您将如何在测试时对此进行分类?
您说在分类“正在运行”操作时,您使用了运行类的80个功能。那么,你会在拳击比赛时使用80个拳击功能和500个其他功能吗?如果是这样,这也是错误的。对样本进行分类时,您不知道它的类。在进行特征提取时,应该以相同的方式处理所有类。
你说,“所以我保存了20个用于测试分类的功能”。如果你通过这样做获得了良好的表现,那么这既错又怪。如果您已经使用80个功能(或580)训练了分类器,那么您应该使用相同数量的功能进行测试。我不确定SVM如何不产生错误。权重向量为580-D,您测试的特征向量为20-D,显然w^T*x
应该给出尺寸不匹配误差。
你应该做什么?
导出一个解释所有场景变化的功能。例如,如果您想要检测人类,则不希望将“颜色”包含为特征,因为每个人的衣服都是不同的颜色。所以这是一个糟糕的功能。您也无法连接所有操作的功能。我的意思是:你不能设计一个不同的特征提取方法来运行,装箱等。你怎么知道测试样本的类?你不会,因此你不能应用特定于动作的特征提取方法。例如,您无法检测描述腿部运动的提取特征以进行分类运行,并提取描述拳击手部动作的特征。那是错的。
在SVM分类器的情况下,训练和测试时的功能数量应相同。
您不能训练6种不同的分类器(在不同的火车组上),然后在测试期间只使用其中一种。例如,你不能训练分类器运行与拳击,然后使用它来分类运行。关于如何进行多类分类,有特定的协议。其中两个是“一对一”和“一对一”。读它们。如果您不想实现它们,可以使用libsvm包。
经验法则:无论何时开发特征提取方法,请考虑,如果只提供一个样本,则可以应用此方法。请记住,您不能使用训练集。假设它在您的计算机上不存在。