当前位置: 首页 > news >正文

(一)模式识别——基于SVM的道路分割实验(附资源)

写在前面:本报告所有代码公开在附带资源中,无法下载代码资源的伙伴私信留下邮箱,小编24小时内回复

一、实验目的

1、实验目标

        学习掌握SVM(Support Vector Machine)算法思想,利用MATLAB的特定工具箱和库函数,实现对特定图像的道路分割。同时通过本实验过程理解处理各种数据分析问题的一般思想,包括数据预处理、模型选择、模型评估和参数优化等。

2、实验涉及到的学习内容

        SVM的分类思想,超平面(Hyperplane)、边际(Margin)、支持向量(Support Vectors)、核技巧(Kernel Trick)、软间隔(Soft Margin)等相关概念及其在分类处理中的作用,二次规划在求解SVM超平面中的使用。

二、实验具体完成情况

1、总体实验方案

        首先对所需要图片素材进行读取,在MATLAB中将图片的RGB值作为样本,用鼠标左右键区分正负样本。完成样本采集后将样本和样本标签同时传入封装的求解函数,返回得到分割超平面的wb值,根据该值构建超平面方程wx+b,将后续的测试集数据带入该方程比较所得数值与1的大小关系,数值大于1则被打上正标签。最后遍历所有测试集数据,根据其标签类别,对图像进行二值化,从而得到道路与背景的分割图。

2、具体技术途径

(1)数据收集和准备

        选择包含道路和非道路区域的图像。标记图像,将道路区域与非道路区域进行标注。标注的数据根据是否为道路区分正负样本,并分别以1和-1作为标签标记。

(2)特征提取

        从图像中提取特征以用于SVM训练和预测,本实验采用的特征样本点的RGB数值。

(3)模型训练

        使用训练集中的样本点对应的RGB值组成的向量来训练SVM模型。SVM的目标是找到一个最优的决策边界,以将道路和非道路区域分开。求解最优决策超平面过程中,采用了原空间求解和对偶空间求解2种方式,均用到了MATLAB的quadprog函数。

a.原空间求解法:

        原空间下的目标函数和不等式约束为如下表达式。

        根据MATLAB中的quadprog函数进行求解,可将[1]式表示为公式[2]中的二次规划问题。

        对比[1]与[2]式,构建输入参数HfA、b如下:

由quadprog可解得u,根据结果构建可得到w,b0

b.对偶空间求解法

        在对空间中,原问题经过对偶转换成如下的二次规划问题:

        根据式[2]构造相关参数如下:

        调用quadprog可解得最优的w*,从而问题中对wb0的求解有:

核函数求解

        利用核函数求解非线性支持向量机时,其实也是针对在对偶空间中的目标函数进行二次规划求解,核函数法利用一些特定的核函数来代替求解内积,所以目标函数可以化成:

其中核函数常见形式如下:

        首先得到支持向量机求解的原始问题模型,接着通过构造拉格朗如函数构造出一个问题,我们利用拉格朗日对偶原理,求解这个问题的对偶问题,实现对问题的求解。

(4)预测道路区域

        当模型经过评估并认为性能足够好时,可以将其用于新的图像来预测道路区域。

        将图像的特征提取出来,然后使用SVM模型进行预测,以确定每个像素是否属于道路。

(5)可视化结果

        将道路分割结果叠加到原始图像上,以便可视化道路的位置。

3、实验结果与分析

        a.通过使用MATLAB的quadprog函数,分别在线性核函数下对原空间和对偶空间的求解进行分析。

        正负样本点随机取10对的情况下,可以看出,两种方式分割效果都不够理想。其不管是原空间还是对偶空间求解分割出的道路轮廓差异均较大,呈现出较多“噪点”,道路面积明显小于实际。

图1 原空间下10对样本点分割结果           图2 对偶空间下10对样本点分割结果

      再次选择10对正负样本点,在特征足够明显的区域选择样本,并且尝试同一类型样本点适当的涵盖该的不同特征,得到下图。可看出原空间求解和对偶空间求解得到的效果类似。其中原空间求解得到的结果道路区域分割得更准确,对偶空间求解分割得到的道路区域夹杂的“噪点”略多。

图3 原空间下10对样本点分割结果           图4对偶空间下10对样本点分割结果

        增加样本点数量,取30对随机样本点,发现分割效果不如第二次的实验结果。其中原空间求解的结果略有倒退,对偶空间的结果有一定改善。为了验证是否因为偶然因素导致的情况,持续进行多次30组随机样本的测试。

图5 原空间下30对样本点分割结果           图6 对偶空间下30对样本点分割结果

        经过多次尝试取30对样本,发现大部分情况可以取得较好的效果,少数情况下分割效果会倒退,其中取得较好分割效果时的情况如图所示。不管是原空间还是对偶空间,对道路中心区域的分割效果相比第一次实验结果有着明显改善,但是边缘区域的分割效果改善效果不明显。

图7 原空间下30对样本点分割结果           图8 对偶空间下30对样本点分割结果

        分析:线性核函数下,从使用二次规划对原空间和对偶空间求解得到的结果可以看出,样本点的数量多少会一定程度影响到分割结果,但不是决定性因素,最终影响分割效果的是样本质量,直接决定了支持向量的优劣。同时,线性和函数下,对偶空间求解对比原空间求解并不能取得明显的优势,有时甚至处于劣势。

        b.通过使用MATLAB的quadprog函数在原空间(线性核函数)下求解,使用svc库函数在对偶空间(尝试不同核函数)下求解。

图9 原空间linear核                         图10 对偶空间linear核

图11 对偶空间rbf核                         图12 对偶空间erbf核

        分析:本次测试的样本特征维度为3维,维度较低,使用线性核的结果优于非线性核。原因可能是使用非线性核时,核函数将特征映射到更高维空间后不一定会使超平面划分变得更容易,若参数不好,反而会使问题复杂化,得到不及线性核的结果。

        c.从a和b部分的实验可以看出,使用硬间隔支持向量机时,由于道路与背景无可避免的存在一些特征非常接近的样本点,导致输出的图像存在不同程度的“噪声”。下面,在实验b的基础上将svc库函数引入软间隔,得到如下结果。

图13 原空间linear核                         图14 对偶空间linear核

图15 对偶空间rbf核                         图16 对偶空间erbf核

        分析:引入软间隔后,可见非线性支持向量机的性能明显改善,道路内部的“噪声”明显减少,但未完全消除,道路边缘的分割准确度略有下降。可见引入软间隔带来提升的同时也会下降边缘检测性能。

        d.根据前面实验,发现无论是采用非线性核,还是引入软间隔,都只能提升分割性能,而不能确保分割结果100%准确。针对此情况,可以结合计算机图像处理技术,对图形进行一些形态学操作,消除噪点并对边缘进行平滑操作。下面使用MATLAB对图像进行形态学操作,大致逻辑如下,首先将原图像进行腐蚀+膨胀操作去除背景噪声,然后通过膨胀+腐蚀去除主体(路面)噪声,最后先后求取主体和背景的最大连通域,得到最终分割效果,如图所示。

图17 形态学处理流程

相关文章:

(一)模式识别——基于SVM的道路分割实验(附资源)

写在前面:本报告所有代码公开在附带资源中,无法下载代码资源的伙伴私信留下邮箱,小编24小时内回复 一、实验目的 1、实验目标 学习掌握SVM(Support Vector Machine)算法思想,利用MATLAB的特定工具箱和库函…...

Python | Leetcode Python题解之第391题完美矩形

题目: 题解: class Solution:def isRectangleCover(self, rectangles: List[List[int]]) -> bool:area, minX, minY, maxX, maxY 0, rectangles[0][0], rectangles[0][1], rectangles[0][2], rectangles[0][3]cnt defaultdict(int)for rect in rec…...

Rust模块std::thread

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust到底值不值得学,之一 -CSDN博客 Rust到底值不值得学,之二-CSDN博客 Rust多线程编程概述-CSDN博客 12.…...

Leetcode Day20 打家劫舍

198 最基础 class Solution:def rob(self, nums: List[int]) -> int:dp1 [0] * len(nums)dp2 [0] * len(nums)# dp1指第i天偷了, dp2指第i天没有偷dp1[0] nums[0]for i in range(1, len(nums)):dp1[i] dp2[i - 1] nums[i]dp2[i] max(dp1[i - 1], dp2[i - 1])return m…...

云计算之数据库

目录 一、RDS产品介绍及排障思路 1.1 云RDS数据库及其特点 1.2 云RDS数据库-规格 1.3 云RDS数据库-存储 ​1.4 云RDS数据库-安全 ​1.5 云RDS数据库-整体架构 1.6 RDS常见问题排查 ​1.6.1 如何解决无法链接RDS实例的问题 1.6.2 RDS实例存储空间使用率高,怎…...

开发软件,什么类型的重要信息的日志要存到数据库表里面

在开发软件时,选择将哪些类型的重要信息日志存储到数据库表里面,主要取决于这些日志的用途、查询需求、性能考虑以及系统架构。以下是一些通常会选择存储到数据库表中的重要信息日志类型: 1. 业务日志: 交易记录:记录…...

websocket和轮询的区别?

问: websocket和轮询的区别? 回答: WebSocket 和定时轮询(每隔几秒发送一次请求)是两种不同的实时通信方法,各有优缺点,适用于不同的场景。以下是它们的主要区别及适用场景: WebSo…...

2024 年全国大学生数学建模竞赛(国赛)浅析

需要完整资料,请关注WX:“小何数模”! (需要完整B、C和E题资料请关注WX:“小何数模”,获取资料链接!) 本次万众瞩目的全国大学生数学建模赛题已正式出炉,无论是赛题难度…...

持续集成与持续部署(CI/CD)的深入探讨

在现代软件开发中,持续集成(CI)和持续部署(CD)已成为不可或缺的实践。这些方法旨在加快软件交付的速度,同时提高软件的质量和稳定性。通过CI/CD,开发团队可以频繁地将代码更改集成到主分支&…...

hyperf json-rpc

安装 安装docker hyperf 安装 hyperf-rpc-server-v8 (服务端) docker run --name hyperf-rpc-server-v8 \ -v /www/docker/hyperf-rpc-server:/data/project \ -w /data/project \ -p 9508:9501 -it \ --privileged -u root \ --entrypoint /bin/sh \…...

基于SpringBoot的外卖点餐系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:SpringBootJSP 工具:IDEA/Eclipse、Navicat、Maven、Tomcat 系统展示 首页 用户管理界…...

网络编程day02(字节序、TCP编程)

目录 【1】字节序 1》大小端转换 2》端口转换 3》IP地址转换 主机字节序转换为网络字节序 (小端序->大端序) 网络字节序转换为主机字节序(大端序->小端序) 【2】TCP编程 1》流程 2》函数接口 1> socket 2> …...

萌新6:临场发挥(区间dp)

题目描述 小x和室友总共 nnn 人,组团去打一款游戏,总共有 nnn 台电脑供他们使用,一人一台,最开始,第 iii 个人使用第 iii 台电脑。 小x评估了每个人的能力值和临场发挥值。 第 iii 个人的能力值为 aia_iai​。 而他们…...

《数字信号处理》学习04-离散时间系统中的线性时不变系统

目录 一,系统及离散时间系统 二,离散时间系统中的线性时不变系统 1,线性系统 1) 可加性 2) 比例性(齐次性) 3)叠加原理(叠加性质) 2,时不变系统(移不变系统) 通过前几篇文章的学习,此时我对序列的相关概…...

ABAP 调试宏DEFINE

文章目录 调试过程完整程序 调试过程 完整程序 REPORT Z_TEST_DEFINE.TYPES: BEGIN OF GTY_DATA,NAME TYPE STRING,AGE TYPE I,END OF GTY_DATA. DATA: GS_DATA TYPE GTY_DATA,GT_DATA TYPE TABLE OF GTY_DATA. DEFINE D_TEST.GS_DATA-NAME &1.GS_DATA-AGE &2.APPE…...

Golang | Leetcode Golang题解之第393题UTF-8编码验证

题目&#xff1a; 题解&#xff1a; const mask1, mask2 1 << 7, 1<<7 | 1<<6func getBytes(num int) int {if num&mask1 0 {return 1}n : 0for mask : mask1; num&mask ! 0; mask >> 1 {nif n > 4 {return -1}}if n > 2 {return n}r…...

HarmonyOS开发实战( Beta5.0)DevEco Device Tool开发环境搭建实践

通常在嵌入式开发中&#xff0c;很多开发者习惯于使用Windows进行代码的编辑&#xff0c;比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段&#xff0c;大部分的开发板源码还不支持在Windows环境下进行编译&#xff0c;如Hi3516、Hi3518系列开发板。…...

WIFI贴项目到底是不是“骗局”呢?由我来揭秘!

各位亲爱的朋友们&#xff0c;大家好&#xff01;我是你们的老朋友鲸天科技千千&#xff0c;一直在这片互联网的热土上耕耘。相信你们对我都不会陌生&#xff0c;因为我常常分享一些互联网上的新奇项目和实用技巧。如果你对我的内容感兴趣&#xff0c;别忘了点个关注哦&#xf…...

C++ string类—string修饰符、操作、非成员函数

一、Modifiers&#xff08;修饰符&#xff09;&#xff1a; 1、operator 这个成员函数给一个string类类型的对象进行追加&#xff0c;在现有的string后面追加string类、字符串或者字符&#xff1b; 代码示例&#xff1a; void test1() {std::string s1("Hello ");…...

PVN3D(一)代码框架

在windows上配置pvn3d的环境一直配不成功&#xff0c;主要卡在了与C联合编译上&#xff0c;不知道如何处理了。索性先看看代码&#xff0c;竟然发现与论文中的代码对应上了。希望这一段时间把环境配置好。 1.论文中的网络结构 1.RGB图像特征&#xff0c;通过CNN提取特征。深度…...

PRD文档模板

xxxxxx 需求规格说明书 南京市xxx信息服务有限公司 修订记录 版本号 修订日期 修订人 修订描述 V1.0 20190203 xxxxx 初稿 一、概述 1.1需求背景 说明需求背景&#xff0c;为什么要做该需求&#xff0c;主要是为了解决什么问题等 背景举例&#xff1a;目前…...

golang如何理解值类型和引用类型_golang值类型与引用类型区别详解

<p>Go所有传参均为值传递&#xff0c;但“值”取决于类型底层&#xff1a;基础类型传数据副本&#xff0c;slice/map/chan传含指针的header副本&#xff0c;修改元素会影响原变量&#xff1b;需改变量本身&#xff08;如重置slice header&#xff09;时才必须传* T。<…...

嵌入式三角形求解库:面向关节机械的轻量实时运动学计算

1. TriangleSolverLib 项目概述TriangleSolverLib 是一款专为嵌入式平台&#xff08;尤其是资源受限的微控制器如 Arduino&#xff09;设计的轻量级三角形求解库。其核心目标并非通用数学计算&#xff0c;而是服务于** articulated machines&#xff08;关节式机械系统&#xf…...

用 Shield CLI 本地开发调试:从零到上线你的第一个 Skill

当 AI Agent 需要调用外部能力时&#xff0c;Skill 就是它的"技能包"。本文以一个文旅素材搜索 Skill 为例&#xff0c;带你走完本地开发 → 调试 → 发布 → 安装使用的完整流程。核心工具只有一个 —— Shield CLI。 背景&#xff1a;什么是 Skill&#xff1f; Sk…...

金融PHP支付代码审计清单(含OWASP ASVS 4.0对标项):27个必查风险点,附自动化检测脚本

第一章&#xff1a;金融PHP支付接口安全代码审计导论金融级PHP支付接口是资金流转的核心通道&#xff0c;其安全性直接关系到用户资产、商户信誉与平台合规性。不同于通用Web应用&#xff0c;支付接口需同时满足PCI DSS基础要求、中国《金融行业网络安全等级保护基本要求》&…...

大模型之Linux服务器部署大模型头

一、各自优势和对比 这是检索出来的数据&#xff0c;据说是根据第三方评测与企业数据&#xff0c;三款产品在代码生成质量上各有侧重&#xff1a; 产品 语言优势 场景亮点 核心差异 百度 Comate C核心代码质量第一&#xff1b;Python首生成率达92.3% SQL生成准确率提升35%&…...

Python 批量导出数据库数据至 Excel 文件每

简介 langchain专门用于构建LLM大语言模型&#xff0c;其中提供了大量的prompt模板&#xff0c;和组件&#xff0c;通过chain(链)的方式将流程连接起来&#xff0c;操作简单&#xff0c;开发便捷。 环境配置 安装langchain框架 pip install langchain langchain-community 其中…...

Harness Engineering:Agent工具生态扩展

Harness Engineering:Agent工具生态扩展 1. 引入与连接(唤起兴趣与建立关联) 1.1 引人入胜的开场:从「一次性Agent工具」到「永不落幕的Agent生产流水线」 想象一下这个场景:你是一家互联网金融公司的AI负责人,上周刚上线了一款「智能财报分析Agent」——它能调用行业…...

如何在 Go 中超时终止进程及其所有子进程

本文介绍在 Go 中安全、可靠地实现进程及其整个子进程树&#xff08;含孙子进程等&#xff09;的超时终止&#xff0c;核心是利用 Unix 进程组&#xff08;process group&#xff09;机制配合 syscall.Kill(-pgid, sig)&#xff0c;并规避常见陷阱&#xff08;如信号传播失效、…...

Python AI推理性能跃迁实录(Cuvil 2.4.1深度调优全链路)

第一章&#xff1a;Cuvil 2.4.1在Python AI推理中的定位与价值跃迁Cuvil 2.4.1 是一个轻量级、高兼容性的 Python 原生 AI 推理加速框架&#xff0c;专为边缘设备与资源受限场景设计。它不依赖 CUDA 或 OpenMP 运行时&#xff0c;却能通过自适应张量分片与 JIT 编译策略&#x…...