libsvm嵌入式移植

SVM(Support Vector Machine, 支持向量机)这个算法也是相当经典的一个分类算法了。如果想要使用SVM算法,大家一般也不会自己造轮子,开源的库也就够用了。开源的SVM库中最香的,应该是台湾大学林智仁(Lin Chih-Jen)教授开发的libsvm库了。

我最近的项目中,恰巧用到了SVM算法,libsvm很快解决了问题。但我最终希望把算法部署到嵌入式的设备中(STM32)。我一开始兴致勃勃地把整个源码都移植过去了,后来越想越不对,嵌入式的资源这么小,libsvm的底层搞得那么复杂,代码量那么大,全部移植过去岂不是亏大了。事实上,libsvm大部分的精力都在解决训练的问题,而推理部分,说实话,只有一点点。

公式如下:
sgn ⁡ ( w T ϕ ( x ) + b ) = sgn ⁡ ( ∑ i = 1 l y i α i K ( x i , x ) + b ) \operatorname{sgn}\left(\boldsymbol{w}^{T} \phi(\boldsymbol{x})+b\right)=\operatorname{sgn}\left(\sum_{i=1}^{l} y_{i} \alpha_{i} K\left(\boldsymbol{x}_{i}, \boldsymbol{x}\right)+b\right) sgn(wTϕ(x)+b)=sgn(i=1lyiαiK(xi,x)+b)

如果想要了解公式的具体含义,可以参考这篇文章

多么简单清晰的一个公式,唯一需要变换的就只是核函数而已,而文章中也已经给出了不同的核函数的写法。

另一方面,libsvm训练好后会保存为一个模型文件。而进行libsvm推理时,需要先加载这个文件。而嵌入式的裸机开发中,是没有文件系统的,即使可以加上,也很麻烦。所以,我索性就干了这么个事:自己解析libsvm生成的模型文件,并生成对应的model.h和model.c文件。把数据和方法全部都放在model.h和model.c中,这样,就可以非常简单地在外部调用svm的推理方法了。

我把这个工作放到了我的github1。实现起来其实非常简单,但是却大量地缩小了嵌入式系统中存储的使用,免去了文件系统的搭建。如果你也有同样的需求,也可以试试看。


  1. https://github.com/zhongcheng0519/libsvm_for_embeded ↩︎

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
移植算法到嵌入式设备需要考虑一些优化和处理。首先,由于嵌入式设备的资源有限,需要选择合适的算法和数据结构,以确保在有限的资源下能够高效地运行。其次,可以使用尽量小的数据类型来减少内存占用。此外,还可以减少运算的强度,通过优化循环、提高CPU的并行性、循环不变计算等方式来提高算法的效率。还可以对函数进行优化,采用递归等技术来减少代码的复杂性。最后,可以使用嵌套的if结构来简化代码逻辑。总之,移植算法到嵌入式设备需要综合考虑算法的复杂度、资源限制和设备特性,进行相应的优化和处理。\[1\]\[3\] #### 引用[.reference_title] - *1* *3* [嵌入式移植代码优化](https://blog.csdn.net/audio_algorithm/article/details/124877890)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [libsvm嵌入式移植](https://blog.csdn.net/Jerry0131/article/details/129262532)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值