#machine-learning #svm #libsvm #game

nightly ffsvm

libSVM兼容的支持向量机,但速度可高达10倍,适用于游戏或VR

14次发布

0.9.2 2024年6月22日
0.9.1 2023年3月10日
0.8.0 2019年6月7日
0.7.1 2019年3月16日
0.6.2 2018年10月6日

#52 in 机器学习

Download history 2/week @ 2024-06-10 124/week @ 2024-06-17 21/week @ 2024-06-24 16/week @ 2024-07-01 106/week @ 2024-07-29

每月119次下载
用于2个crate(通过visqol-rs

MIT许可协议

130KB
1.5K SLoC

Latest Version Rust deps.svg docs MIT

一句话总结

您已使用libSVM训练了SVM,现在您希望在(实时)分类期间获得最高性能,如游戏或VR。

亮点

  • 加载几乎所有libSVM类型(C-SVC、ν-SVC、ε-SVR、ν-SVR)和核(线性、多项式、RBF和sigmoid)
  • 生成的分类结果与libSVM几乎相同
  • 针对SIMD优化,并且可以与Rayon无缝混合
  • 完全用Rust编写
  • 在分类过程中对密集SVM无分配
  • 比libSVM密集SVM快2.5倍到14倍
  • 小型模型(例如,128个SV,16个密集属性,线性~500ns)的分类时间极低
  • 在Unity和VR项目中成功使用(Windows & Android)

注意:目前需要Rust nightly(2019年3月及以后),因为我们依赖于RFC 2366(可移植SIMD)。一旦该RFC稳定,我们也将进入稳定状态。

用法

使用libSVM(例如,使用工具svm-train)进行训练,然后使用ffsvm-rust进行分类。

Rust中使用

// Replace `SAMPLE_MODEL` with a `&str` to your model.
let svm = DenseSVM::try_from(SAMPLE_MODEL)?;

let mut problem = Problem::from(&svm);
let features = problem.features();

features[0] = 0.55838;
features[1] = -0.157895;
features[2] = 0.581292;
features[3] = -0.221184;

svm.predict_value(&mut problem)?;

assert_eq!(problem.solution(), Solution::Label(42));

状态

  • 2023年3月10日:为最新的Rust nightly重新激活。
  • 2019年6月7日:放弃使用'no unsafe',但获得了运行时SIMD选择。
  • 2019年3月10日:一旦我们可以从nightly版本中移除,我们将进入beta版本。
  • 2018年8月5日:仍然处于alpha版本,但最终在crates.io上。
  • 2018年5月27日:我们现在处于alpha版本。在Windows、Mac、Android和Linux上的各种机器和设备上成功内部使用。一旦SIMD稳定并且我们可以交叉编译到WASM,我们将移至beta版本。
  • 2017年12月16日:我们现在处于预alpha版本。它可能甚至无法在您的机器上运行。

性能

performance

所有关于 DenseSVM 的性能数据均已在此报告。我们同样支持 SparseSVM,对于“主要密集”的模型来说运行较慢,而对于“主要稀疏”的模型来说运行更快(通常与libSVM的性能水平相当)。

详细信息请参见此处。

提示

  • 为了实现 x 倍的性能提升,创建多个 Problem 结构,并使用 Rayon的 par_iter 进行处理。

常见问题解答

详细信息请参见此处。

依赖项