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的推理方法了。

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


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

libsvm嵌入式移植相关推荐

  1. 嵌入式linux使用opencv,OpenCV嵌入式移植后XML读取问题及解决

    1.OpenCV在进行嵌入式移植后需要读取XML文件. 一开始利用最常用程序读取: cv::FileStorage fs(xml_filename, cv::FileStorage::READ); i ...

  2. 嵌入式移植NTP(Network Time Protocol)

    为什么80%的码农都做不了架构师?>>>    ST板子OTT盒子没法通过实时码流获取时间,只能通过网络实时获取时间,这篇文档记录下自己解决的整个过程,网上已经有很多NTP 服务器配 ...

  3. linux嵌入式移植培训,达内嵌入式培训大讲堂之Linux系统移植

    移植一个基本的必要的linux系统(包含存储设备,输入输出设备驱动)移植到板子里,其他的一些驱动不能移植进去,对设备的要求不高,接下来,达内嵌入式培训大讲堂将和大家讨论"Linux系统移植& ...

  4. mjpg-streamer本机安装与嵌入式移植

    mjpg-streamer简介 mjpg‐streamer是一个开源软件.MJPG streamer从Linux UVC兼容的网络摄像头.文件系统或其他输入插件获取JPG,并通过HTTP.RTSP.U ...

  5. [mqtt]mqtt嵌入式移植

    目前在无线这块,很多4G模组的厂商已经将mqtt放入模块内,无需在项目代码中再实现mqtt移植 github eclipse paho source code: https://github.com/ ...

  6. opencv4.5.2嵌入式移植

    近期分别在海思3559AV100平台和君正T40平台移植opencv4.5.2,遇到了不少问题,尤其是T40平台使用mips架构,交叉编译器为mips-linux-uclibc-gnu遇到了一些问题, ...

  7. 嵌入式移植使用pppoe

    PPPoE官网:RP-PPPoE | Roaring Penguin 源码下载地址:Dianne Skoll's Personal Web Site - RP-PPPoE - Software Pro ...

  8. 嵌入式Linux工程师的成长经历

    从嵌入式研发行业十年,认为学习就是要不断的吸纳知识,在研发过程中,经常会遇到一些问题,这种发现问题并解决问题的过程就是进步.下面是嵌入式Linux开发工程师的成长过程,希望对大家能有所启发. 1.Li ...

  9. 一文知晓嵌入式Linux

    ​ ​ 嵌入式Linux是什么 嵌入式Linux跟桌面Linux一样,是一个操作系统.从单片机走过来的童鞋往往习惯于直接控制寄存器,事必躬亲,从零开始实现想要的功能.而在嵌入式Linux的世界里,我们 ...

最新文章

  1. 苹果公司投资1000万美元用于无温室气体铝冶炼
  2. postman显示服务器错误是什么原因,Postman 500内部服务器错误api错误
  3. 用Unity3D的50个技巧:Unity3D最佳实践
  4. python- is和id
  5. LABLEME UPDATE DAMOD
  6. 如何看CentOS系统是32位还是64位的?
  7. tkinter使用cefpython库_Python3.7 tkinter中嵌入网页(WebView),需要引入cefpython3
  8. C 语言经典面试题 —— 宏
  9. C语言练习题,鸡兔同笼
  10. 财务系统服务器计入什么科目,系统服务费入什么科目
  11. iphone禁止 iOS 系统频繁提示更新tvos.mobileconfig下载
  12. 菜菜的sklearn-01决策树完整版
  13. 南海滩饮食法——不饿的情况下快速减肥的法宝
  14. GAN的后门攻击:The Devil is in the GAN: Defending Deep Generative Models Against Backdoor Attacks
  15. 台式计算机usb接口无反应6,Win7电脑USB接口没反应不能用的解决方法
  16. Java小程序 个人缴税
  17. 漳州可视化3d建模,智慧城市园区数字孪生可视化,数字孪生可视化工厂
  18. 外呼系统APP外呼软件手机电销软件拨号销售软件功能设计
  19. 两种批处理方式(操作系统)
  20. Cardboard -VR全景浏览

热门文章

  1. 适配iOS 11和iPhone X——导航栏、UITableView
  2. IntelliJ IDEA 如何下载安装插件
  3. I2C总线时序以及ACK和NACK(NAK)
  4. python 制作网站教程_Python爬取网站博客教程并制作成PDF
  5. xmp是什么格式的文件
  6. 微信小程序---文本域输入带最大字数限制
  7. android lunch menu,android lunch函数浅析
  8. 信息技术应用现状的趋势
  9. 最小二乘法线性拟合和2次曲线拟合算法
  10. 阿里云远程桌面无法连接怎么办