OpenCV - SVM算法

一、OpenCV 里的 SVM 在解决什么问题?

给定:

  • 一堆 特征向量(HOG、LBP、SURF、手工特征)

  • 每个向量有一个 类别标签

OpenCV 的 SVM要做的是:

学一个判别函数:这个特征,更像 A 还是 B?

https://www.bilibili.com/video/BV1r44y1q7be/?spm_id_from=333.788.recommend_more_video.-1&trackid=web_related_0.router-related-2206419-fjhdv.1769333083870.418&vd_source=52997da921a43b4ed3611981bbdf91a4

二、数学本质

1️⃣ 线性 SVM(OpenCV 用得最多)

判别函数:

2️⃣ 为什么 SVM 特别适合 HOG?

  • 高维

  • 稀疏

  • 梯度方向统计

  • 近似线性可分

线性 SVM 正好是 HOG 的"最优拍档"

三、OpenCV SVM

在 OpenCV 中:

复制代码
cv::Ptr<cv::ml::SVM> svm = cv::ml::SVM::create();

它是:

  • C++ 实现

  • CPU 为主

  • 适合:

    • 几千到几十万样本

    • 几百~几千维特征

❌ 不适合大规模深度特征

四、OpenCV 支持的 SVM 类型

类型 用途
C_SVC 分类(最常用)
NU_SVC 分类(nu 参数)
EPS_SVR 回归
NU_SVR 回归
ONE_CLASS 异常检测

五、OpenCV-SVM 的典型使用流程

cpp 复制代码
1️⃣ 准备训练数据
cv::Mat samples; // N × D
cv::Mat labels;  // N × 1

2️⃣ 创建 & 配置 SVM
auto svm = cv::ml::SVM::create();
svm->setType(cv::ml::SVM::C_SVC);
svm->setKernel(cv::ml::SVM::LINEAR);
svm->setC(1.0);

3️⃣ 训练
svm->train(samples, cv::ml::ROW_SAMPLE, labels);

4️⃣ 预测
float response = svm->predict(sample);

为什么 OpenCV-SVM "现在不火了"?

不是 SVM 不行,而是:

  1. CNN 把特征 + 分类一起学了

  2. SVM 不端到端

  3. 对复杂形变能力有限

但在这些场景它依然非常强:

✔ 小样本

✔ 强解释性

✔ 工业项目

✔ 算力受限

相关推荐
XGeFei几秒前
【AI大模型原理与API使用】
人工智能
weixin_422329314 分钟前
Agent 评测的基本概念与经典方法
人工智能
云浪4 分钟前
给 AI Agent 加上语音交互:ASR + 流式 TTS 实战
前端·人工智能·后端
一次旅行6 分钟前
fzf+ripgrep+fd终端三合一实战:一套检索工具链,大幅提升大型项目开发效率
人工智能·python·github
m4Rk_7 分钟前
【论文阅读】Agent 记忆机制(27):MemRefine——用 LLM 事实判断将长期记忆压缩到固定预算
论文阅读·人工智能·学习
冻柠檬飞冰走茶11 分钟前
PTA基础编程题目集 7-37 整数分解为若干项之和(C语言实现)
c语言·开发语言·数据结构·算法
蓦然回首却已人去楼空14 分钟前
Build a Large Language Model (From Scratch) 附录 E 使用 LoRA 进行参数高效微调
人工智能·语言模型·自然语言处理
IT小盘17 分钟前
05-PDF-Word-Excel接入RAG知识库
人工智能
zzzll111121 分钟前
RAG(检索增强生成)技术详解:从原理到实践
java·人工智能
运维大师26 分钟前
【K8S 运维实战】31-Helm包管理
运维·算法·kubernetes