实时 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 性能差的主要内容,如果未能解决你的问题,请参考以下文章