使用opencv SVM训练火灾检测[关闭]
Posted
技术标签:
【中文标题】使用opencv SVM训练火灾检测[关闭]【英文标题】:Train fire detection using opencv SVM [closed] 【发布时间】:2016-05-13 22:29:54 【问题描述】:我正在使用 SVM,因为我需要 ML 来训练我的分类器,并且我在几篇关于火灾探测的论文中看到他们使用了 SVM 和逻辑回归,但由于 2.4.9 中没有逻辑回归,我计划使用支持向量机。我使用的是 opencv 2.4.9,因为人们说 opencv 3 有问题。
我是新手,所以如果我们从基础开始会很有帮助
我已经准备好几个火灾和非火灾视频,准备提取到帧中。我是 opencv 和有关分类器的所有内容的新手。我的问题是训练分类器特别是支持向量机的基础知识是什么,我需要我的图像是什么格式以及如何训练它们?有没有好的教程链接?我在 opencv 文档中找到了一个,但它没有教授使用图像进行培训。在确定参数时我需要什么以及这些参数是做什么用的?提前致谢
【问题讨论】:
您首先需要从图像中提取特征才能训练 SVM。特征提取算法很大程度上取决于应用程序。如果您使用的是 OpenCV,我建议您查看有关关键点检测器和特征提取的教程。 docs.opencv.org/master/db/d27/… 我的图片需要采用特定格式吗?还是jpg是可行的? 我应该把提取的特征放在哪里?我无法在 svm train 方法中找出哪个参数是那个 看一下发行版附带的 opencv 示例。有几个使用 SVM 的示例。 关于非线性支持向量机的例子没有展示如何使用图像进行训练,我很难将其转化为图像训练 【参考方案1】:这是一个概念性问题,需要大量论文和教程来解释。然而,正如在 cmets 中解释的那样,我试图详细说明特征提取。特征描述符应该对缩放、平移和旋转具有鲁棒性。这种鲁棒性在字面上被称为不变特征。例如,矩及其导数是最著名的不变量类型之一,可防止旋转、缩放和平移。您可以在paper 中找到 Hu 矩的用法。 火焰或火灾探测是不同的。火焰对应的特征可以从火的动态纹理中提取出来。例如,火有一种特殊的颜色纹理,可以将其与背景隔离开来。传统的火焰探测器利用红外传感器来探测火焰。在图像处理或 RGB 世界中,我们可以通过考虑火焰本身的性质来做同样的事情。火焰通过热量和红外线释放出很大一部分能量。因此,可以预期红色通道的主要部分将用于火焰。例如见下图。
在处理后的图像中,通过施加阈值将红色通道转换为 BW 图像。为了更清楚,我将 3 个频道分开如下。 R: G: B: 很明显,红色频道对火焰有更多的说法。因此,可以断定火焰是R通道有一部分信息的地方,然后是G通道,最后是B通道。见this。 那么,您的特征向量将是一个三维向量,例如,三个 RGB 通道中的火焰轮廓。 SVM 分类器现在可以使用了。有时,视频可能包含应避免的类似火焰的片段,否则会导致误报。 SVM,帮助您接受或拒绝火焰候选人。为了训练你的支持向量机,收集一些真实的火焰和一些可能被你的特征提取器误判的图像。然后,用正面和负面特征标记它们。最后,让 opencv 施展魔法并训练它。有关 SVM 的更多信息,请在youtube 上观看麻省理工学院 Patrick Winston 的视频。
更新---- 由于您对创建特征向量感到好奇,我为您带来了以下示例。假设 R、G、B 通道被精细隔离,以便可以称它们为统计独立的,如下所示;这在 R、G、B 平面不是统计独立的真实图像中是不正确的。 因此,RGB 图像中的一个点将在 RGB 通道中具有 3 种表示形式。例如,火焰会在所有 R、G、B 平面上产生 3 个点。例如,每个点的区域都在这里被追踪。将 RGB 图像中的火焰点标记为“A”。 区域 A 的表示在上面的 R、G、B 图像中进行了描述。 A_r , A_g , A_b 分别表示区域 A 在 R,G,B 平面上的对应区域。
因此,点 A 将由 xyz 平面中的三元组 (Ar,Ag,Ab) 表示。 SVM,现在接受这个向量作为输入,并决定它是否表示真正的火焰。 标准化格式的区域是您可以在决策过程中涉及的众多几何特征之一。这种类型的其他有用特征是纵横比、矩等。
简而言之,您必须执行以下操作:1 - 找到类似火焰的区域。 2 - 在所有 R、G、B 平面中追踪候选点。 3 - 提取每个平面的特征(我建议时刻)。 4 - 形成特征向量 5 - 用这个向量输入 SVM
我希望你觉得这很有用。
【讨论】:
感谢您的解释,我有一个问题。你的意思是我将使用三维向量提取特征?我很难使用它正如我在 docs.opencv.org/2.4.9/modules/nonfree/doc/… 的文档中看到的那样,我在 keypoints 参数中输入了它? @RedViper,我更新了我的帖子。 什么是对抗冲浪的时刻?作为特征,因为在特征提取方面我经常在互联网上冲浪 所以我对你的 5 个步骤的理解是 1. 以 img1.jpg 1 140 100 45 45 1 140 100 45 45 2. 使用 #1 循环图像并存储 rgb 平面每个 3. 提取每个平面的特征(仍在阅读如何执行此操作) 4. 使用 #3 形成特征向量,作为训练 svm 中的参数传递 关于 surf 和 sift 特征,它们检测图像中的斑点状点。它们有利于立体成像,有时也适用于字符识别。我认为几何特征优于筛选/冲浪特征。【参考方案2】:是的,所以您现在的工作是制作一个 .txt 文件,其中包含您要处理的每个图像的数据。 正确的将用 +1 表示,后跟特征集,并以 -1 结束 并且那些是火灾的错误图像将以 -1 开始,然后是特征集,并再次以 -1 结束,然后再开始下一张图像的特征集 这将是一项乏味的工作,但我相信你会做到的 最后以 .train 而不是 .txt 的扩展名保存该文件 所以你的训练文件名会是 filename.train
【讨论】:
以上是关于使用opencv SVM训练火灾检测[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用具有面部特征的 openCV 训练支持向量机(svm)分类器?
火灾检测基于matlab连通区域+SVM特征融合火灾检测含Matlab源码 1223期