实时 SVM 性能差

Posted

技术标签:

【中文标题】实时 SVM 性能差【英文标题】:Poor real-time SVM performance 【发布时间】:2018-09-13 11:19:02 【问题描述】:

我正在开发一个手势识别程序。我的数据集由不同姿势的手组成。在我跳入神经网络之前,我试图使用 SVM 来获得基线。我的数据集有 6 个要分类的类,每个类大约有 1000 个示例。

我使用了 80-20 拆分。 80% 用于训练,20% 用于测试。在测试集上运行 SVM 模型后,我正在绘制一个混淆矩阵,它向我展示了它的精度约为 96%,召回率约为 96%,F1 分数约为 96%。

以下是我的训练集图像的一些示例:

https://imgur.com/gwRSx3C
https://imgur.com/UxUPj5t
https://imgur.com/wXcaUq6

网络摄像头图像

https://imgur.com/j97cTnp
https://imgur.com/6QDHMAD
https://imgur.com/C9DELsr

以下是我的网络摄像头拍摄的一些图像。

我很自然地感到兴奋。唯一的缺点是,当我将模型连接到网络摄像头进行实时推理时,模型是边缘对接。如果准确率、召回率、f1 如此之高,任何人都知道为什么它可能会做得如此糟糕?

【问题讨论】:

【参考方案1】:

有两种可能的答案

    您的模型过拟合。

    从中提取训练和测试数据集的分布与来自网络摄像头的数据不同。


我认为您的问题是您的网络摄像头数据与您的训练数据有很大不同。

要调试您的模型,您应该执行以下操作

将训练数据与您的网络摄像头图像进行比较。 使用验证集,并且只在可能的最后时刻使用测试集。 重新考虑您的功能。 使用您的一些网络摄像头数据进行训练,并将其混合到数据集中。

【讨论】:

感谢您的反馈。你是什​​么意思使用你的测试集作为最后可能的时刻?将网络摄像头数据合并到我的数据集中不会给我错误的结果吗? (模型学会认出我。) 请您从您的网络摄像头和您的数据集中发布一张示例照片。至于训练/测试拆分,最正确的方法是使用三折拆分,训练/验证/测试。这样你就可以小心不要过度拟合。您总是通过验证检查您的结果。当您对模型感到满意时,您就可以使用测试集获得其最终性能指标。 在我的帖子中添加了一些图片,感谢您花时间回复。我将尝试将网络摄像头图像混合到我的数据集中并发布结果。 手的角度和大小好像很相似。它应该工作。您可以通过放置黑色背景而不是灯光来使您的算法更容易吗?这可能会使您的皮肤与明亮的背景混淆。

以上是关于实时 SVM 性能差的主要内容,如果未能解决你的问题,请参考以下文章

性能测试五十:Jmeter+Influxdb+Grafana实时数据展示系统搭建

SVM 与 MLP(神经网络):通过性能和预测精度进行比较

opencv进阶-自定义对象检测

spark作业--实时分析springboot日志

spark作业--实时分析springboot日志

MySQL 的实时性能监控利器