机器学习之用Hog+Svm人脸检测、交通标志和字符识别等(初学者)

首先声明,这里主要用svm进行一个简单的二分类,最后得到结果,我们把正样本设为1,负样本设为0。
这里只是一个简单的介绍,后面会有相关详细介绍的链接,个人认为比较好的,对我们比较有帮助的链接,有兴趣的可以去看看。当然,本文对初学者有点帮助,也特别欢迎大神来拍!
训练样本时候问题:
我在训练的时候,用了各种样本,总结了一点自己的经验。如果要是用Haar特征训练时,正负样本大概比至少为1:10时候才比较好。而svm训练,更讲究正负样本的选择。其实,机器学习也好,深入学习也好,样本比算法重要的多!(当然,你要是想仔细研究算法内部并且自己写的除外)。我们这里先只是用opencv里的自带的svm和hog库。
先说正负样本的选择。
对于正负样本来说,尽可能的接近比随便挑的效果要好太多。比如说,我们负样本的选择是从几张图片随机抠出几万张负样本出来(过程很简单,用opencv十几二十几行代码就可以,需要的可以评论,我发给你)。然后正样本是我们需要的图片。这时候,我们进行训练完毕后,在做检测,会发现结果相当不好,可以这么说,除非你的检测图片正好是你的正样本训练图片。否则基本检测不出来!!
后来改变了选择,正样本不要只要需求的那一部分,比如,我们检测交通标志时,把交通标志的旁边一圈也划进来,当然不要太多。然后,我们把负样本和正样本的选择尽可能相近,比如,我们训练交通标志时,选择限速50为正样本,那么,我们就把限速40作为负样本,这样,最后得到的效果就会非常好。
对于样本大小的选择上,根据不同的样本取不同大小吧,很多人在这点都没有提到,其实,对于初学者来说,往往不会选择样本大小,特别是还没怎么看svm和hog的,对于样本大小往往是朝网上copy。我们选择样本大小时,一般,人脸,交通检测这些,设置为64*64的就可以。而行人的,一般选择长方形,即64*128这种的。正负样本尽可能保持大小相同。
至于如何取得文件夹下所有的图片目录,和如何每隔一行加一个标志符号。这里,可以自己写一个代码,当然,也可以直接利用.bat直接写,具体方法是:
首先,拿正样本为例。
在你放置正样本的文件夹下,即与图片的是同一级的目录,新建一个.txt,名字可以自己取,例如为test.txt。然后,修改后缀名,为.bat。右键编辑(对于没有编辑的win10来说…可以下载一个文本编辑器,我用的是EditPlus)打开,然后,在里面输入
@echo off & setlocal EnableDelayedExpansion
for /f “delims=” %%i in (‘“dir /a/s/b/on .“’) do (
set file=%%~fi
set file=!file:/=/!
echo !file! >> 路径.txt
)
点击保存,然后,直接双击这个文件,就会得到一个名为路径.txt,这里面存放的就是文件夹下所有的路径。
PS:至于有的人说的用cmd写一个,dir /b/s/p/w *.jpg>train_list.txt,应该也可以,不过这个有个问题是如果路径太多,不会全部写进去,所以,还是用上一种方法比较好。
然后,打开路径,Ctrl+A,全部复制,然后放到word里,在word里,Ctrl+h,把jpg换为jpg^p1,其中^p是回车符号,1表示正样本。
同理对负样本这样处理,然后,把所有目录统一拷贝到一个.txt里,放到需要的目录下。
然后,我用的opencv是2.4.9版本。
说明:这是在别人的代码上(后面有链接),感觉不错,改了一下,自己拿来用下。

#include "stdafx.h"

#include "cv.h"    
#include "highgui.h"    
#include "stdafx.h"    
#include <ml.h>    
#include <iostream>    
#include <fstream>    
#include <string>    
#include <vector>    
using namespace cv;    
using namespace std;

/**************************************************************
说明:把所有的训练样本(包括正样本和负样本)信息,储存到
F:\\MLHogSvm\\TrainData.txt中,格式为:
上面是:图片路径,其下面为标志,1为正样本,0为负样本
每隔一行做一次,最后放到上面的txt中
最后的.xml放到F:\\MLHogSvm目录下
**************************************************************/
int _tmain(
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值