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=1∑lyiαiK(xi,x)+b)
如果想要了解公式的具体含义,可以参考这篇文章。
多么简单清晰的一个公式,唯一需要变换的就只是核函数而已,而文章中也已经给出了不同的核函数的写法。
另一方面,libsvm训练好后会保存为一个模型文件。而进行libsvm推理时,需要先加载这个文件。而嵌入式的裸机开发中,是没有文件系统的,即使可以加上,也很麻烦。所以,我索性就干了这么个事:自己解析libsvm生成的模型文件,并生成对应的model.h和model.c文件。把数据和方法全部都放在model.h和model.c中,这样,就可以非常简单地在外部调用svm的推理方法了。
我把这个工作放到了我的github中1。实现起来其实非常简单,但是却大量地缩小了嵌入式系统中存储的使用,免去了文件系统的搭建。如果你也有同样的需求,也可以试试看。
https://github.com/zhongcheng0519/libsvm_for_embeded ↩︎
libsvm嵌入式移植相关推荐
- 嵌入式linux使用opencv,OpenCV嵌入式移植后XML读取问题及解决
1.OpenCV在进行嵌入式移植后需要读取XML文件. 一开始利用最常用程序读取: cv::FileStorage fs(xml_filename, cv::FileStorage::READ); i ...
- 嵌入式移植NTP(Network Time Protocol)
为什么80%的码农都做不了架构师?>>> ST板子OTT盒子没法通过实时码流获取时间,只能通过网络实时获取时间,这篇文档记录下自己解决的整个过程,网上已经有很多NTP 服务器配 ...
- linux嵌入式移植培训,达内嵌入式培训大讲堂之Linux系统移植
移植一个基本的必要的linux系统(包含存储设备,输入输出设备驱动)移植到板子里,其他的一些驱动不能移植进去,对设备的要求不高,接下来,达内嵌入式培训大讲堂将和大家讨论"Linux系统移植& ...
- mjpg-streamer本机安装与嵌入式移植
mjpg-streamer简介 mjpg‐streamer是一个开源软件.MJPG streamer从Linux UVC兼容的网络摄像头.文件系统或其他输入插件获取JPG,并通过HTTP.RTSP.U ...
- [mqtt]mqtt嵌入式移植
目前在无线这块,很多4G模组的厂商已经将mqtt放入模块内,无需在项目代码中再实现mqtt移植 github eclipse paho source code: https://github.com/ ...
- opencv4.5.2嵌入式移植
近期分别在海思3559AV100平台和君正T40平台移植opencv4.5.2,遇到了不少问题,尤其是T40平台使用mips架构,交叉编译器为mips-linux-uclibc-gnu遇到了一些问题, ...
- 嵌入式移植使用pppoe
PPPoE官网:RP-PPPoE | Roaring Penguin 源码下载地址:Dianne Skoll's Personal Web Site - RP-PPPoE - Software Pro ...
- 嵌入式Linux工程师的成长经历
从嵌入式研发行业十年,认为学习就是要不断的吸纳知识,在研发过程中,经常会遇到一些问题,这种发现问题并解决问题的过程就是进步.下面是嵌入式Linux开发工程师的成长过程,希望对大家能有所启发. 1.Li ...
- 一文知晓嵌入式Linux
嵌入式Linux是什么 嵌入式Linux跟桌面Linux一样,是一个操作系统.从单片机走过来的童鞋往往习惯于直接控制寄存器,事必躬亲,从零开始实现想要的功能.而在嵌入式Linux的世界里,我们 ...
最新文章
- 苹果公司投资1000万美元用于无温室气体铝冶炼
- postman显示服务器错误是什么原因,Postman 500内部服务器错误api错误
- 用Unity3D的50个技巧:Unity3D最佳实践
- python- is和id
- LABLEME UPDATE DAMOD
- 如何看CentOS系统是32位还是64位的?
- tkinter使用cefpython库_Python3.7 tkinter中嵌入网页(WebView),需要引入cefpython3
- C 语言经典面试题 —— 宏
- C语言练习题,鸡兔同笼
- 财务系统服务器计入什么科目,系统服务费入什么科目
- iphone禁止 iOS 系统频繁提示更新tvos.mobileconfig下载
- 菜菜的sklearn-01决策树完整版
- 南海滩饮食法——不饿的情况下快速减肥的法宝
- GAN的后门攻击:The Devil is in the GAN: Defending Deep Generative Models Against Backdoor Attacks
- 台式计算机usb接口无反应6,Win7电脑USB接口没反应不能用的解决方法
- Java小程序 个人缴税
- 漳州可视化3d建模,智慧城市园区数字孪生可视化,数字孪生可视化工厂
- 外呼系统APP外呼软件手机电销软件拨号销售软件功能设计
- 两种批处理方式(操作系统)
- Cardboard -VR全景浏览