天天看点

OPENCV中CASCADE的生成

在网上找了很多有关于opencv生成cascade的文章,大多数都来自同一篇文章,但文章有些老而且不好用

我在一个cascade2xml程序中找到了其自述文档,写的相当细致,我将其翻译过来,希望后来人能够看到少走弯路

另外,现在的opencv是1.1pre版已经不存在生成的cascade转换为xml文件的问题了,这个问题可以忽略

致意

这个小文档告诉你怎样去建立自己的层级训练集。

假设你已经安装了opencv和你已经安装了windows。

在这个指导文档使用了额opencv beta 5。

准备工作:

要保证不出现用户命名的错误,你应该解开tools.rar文档并放在硬盘根目录下d:\。

*)    在..\temp\negetive文件夹你应该保存不包含"目标"的图片。

    在你有了一大堆背景图片后(比如2500个),你就可以用批处理文件create_list.bat

    这个文件自动建立一个bmp文件的清单并保存到infofile.txt中。

    在infofile.txt文件中应该包含这样的行: image2619.bmp

                    img2620.bmp

                    ...

    在这个地址你能找到大量的上千的图片可以下载。

    http://www.pascal-network.org/challenges/voc/databases.html#voc2005_1

*)    在..\temp\positive\rawdata你应该保存包含目标的bmp文件

    在使用..\temp\positive\objectmarker.exe后,readme.txt解释了这个工具如何使用。

    这个工具生成info.txt文件。每一行都这样写:rawdata/image0.bmp 1 146 109 47 46

    你应该经常保存info.txt文件,因为每次调用objectmarker.exe都会覆盖info.txt文件。

生成样本:

*)    到现在你应该有了:

    file : \temp\negative\infofile.txt 里面的文字应该类似于"image2619.bmp"

    file : \temp\positive\info.txt 里面的文字应该类似于"rawdata/image0.bmp 1 146 109 47 46"

*)    现在你可以使用createsamples.exe工具去把目标图像打包成vec向量文件

    比如createsamples.exe -info positive/info.txt -vec data/vector.vec -num 1800 -w 24 -h 24

    这句话的意思是你将生成vector.vec到\temp\data文件夹

    -num的意思是有多少个图片,你应该换成你想要的的个数

    你可以是用samples_creation.bat批处理

训练:

*)    在你有了vector.vec文件之后你就可以开始训练了

    命令是:

    haartraining.exe -data data/cascade -vec data/vector.vec -bg negative/infofile.txt -npos 1800 -nneg 2620 -nstages 20 -mem 1000 -mode all -w 24 -h 24 -nonsym    

    开始训练,

    其中,参数是:

    -data data/cascade    - 生成层级数据的文件夹,每级都会生成如\temp\data\cascade\0..n\adaboostcarthaarclassifier.txt的文件。

    -vec data/vector.vec    - 用createsamples.exe生成的vec文件

    -bg negative/infofile.txt    \temp\negative\文件夹中的bmp反例图片文件

    -npos 180            正例图片的个数            

    -nneg 2620        反例图片的个数            

    -nstages 30        层级数量的个数, 计算20层需要20小时左右(在p4 3,2ghz , 2gb ddr ram条件)            

    -mem 1000        运行程序需要的内存大小

    -mode all        查看帮助文档获得更多信息            

    -w 24 -h 24         训练集的大小

    -nonsym            如果图片是水平的就用不找此选项

    你可以使用批处理文件"haartraining.bat"来作此操作

    haartraining.exe在运行时会产生这样的输出:

_________________________________________________________________________________

parent node: 17

*** 1 cluster ***

pos: 1656 1799 0.920511

neg: 2410 1.97289e-005

background processing time: 1279.69

precalculation time: 63.20

+----+----+-+---------+---------+---------+---------+

|  n |%smp|f|  st.thr |    hr   |    fa   | exp. err|

|   1|100%|-|-0.312590| 1.000000| 1.000000| 0.256272|

|   2|100%|-|-0.537043| 1.000000| 1.000000| 0.294638|

|   3|100%|-|-0.776489| 1.000000| 1.000000| 0.238072|

|   4|100%|-|-1.415237| 1.000000| 1.000000| 0.264879|

|   5| 96%|-|-1.120346| 0.996981| 0.969710| 0.242253|

|   6| 84%|-|-1.471691| 0.996981| 0.956432| 0.218888|

|   7| 82%|-|-1.187260| 0.996981| 0.909959| 0.230939|

|   8| 83%|-|-1.209699| 0.995773| 0.897510| 0.216675|

|   9| 83%|-|-1.187195| 0.995169| 0.848548| 0.196754|

|  10| 81%|-|-1.332160| 0.995169| 0.880498| 0.178062|

|  11| 83%|-|-1.529588| 0.995773| 0.881328| 0.190113|

|  12| 81%|-|-1.529296| 0.995169| 0.859751| 0.178554|

|  13| 80%|-|-1.471163| 0.995169| 0.820332| 0.165765|

|  14| 80%|-|-1.439857| 0.995169| 0.797095| 0.157895|

|  15| 79%|-|-1.366838| 0.995169| 0.755602| 0.149287|

|  16| 77%|-|-1.357297| 0.995169| 0.729046| 0.148303|

|  17| 77%|-|-1.350920| 0.995169| 0.698755| 0.142892|

|  18| 77%|-|-1.286876| 0.995169| 0.657261| 0.140187|

|  19| 76%|-|-1.340796| 0.995169| 0.643983| 0.137236|

|  20| 75%|-|-1.258729| 0.995169| 0.607054| 0.135022|

|  21| 75%|-|-1.259443| 0.995169| 0.594606| 0.124447|

|  22| 75%|-|-1.247393| 0.995169| 0.578008| 0.121249|

|  23| 74%|-|-1.189301| 0.995169| 0.539419| 0.118790|

|  24| 74%|-|-1.278121| 0.995169| 0.547303| 0.116822|

|  25| 73%|-|-1.194187| 0.995169| 0.503734| 0.115347|

|  26| 73%|-|-1.216452| 0.995169| 0.484232| 0.110182|

stage training time: 7788.05

number of used features: 26

chosen number of splits: 0

total number of splits: 0

tree classifier

stage

+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

|  0|  1|  2|  3|  4|  5|  6|  7|  8|  9| 10| 11| 12| 13| 14| 15| 16| 17| 18|

   0---1---2---3---4---5---6---7---8---9--10--11--12--13--14--15--16--17--18

*)    在完成20层的计算之后我也们可以继续进行,这时候的错误率是 >=1*10e-5

    在haartraining在运行时你可以看到:

    例如:

    for egzaple :

        ^       

        |

    这就是错误率

________________________________________________   

    在\temp\data\cascade文件夹中应该包含从"0"到"n"标号(n是完成的层级的标号)的目录

    在每一个目录中都有一个adaboostcarthaarclassifier.txt file.

    我们现在将0-n这些文件夹拷贝到..\cascade2xml\data catalogue文件夹

*)    使用\cascade2xml\haarconv.exe并加上参数我们就可以创建xml文件

    命令:haarconv.exe data output.xml 24 24

    就能够创建在识别部分使用的xml文件了

    你也可以使用\cascade2xml\convert.bat批处理文件来开始

*)    将output.xml文件拷到\test_recognition文件夹

    使用命令:

    facedetect.exe --cascade="output.xml" 0

    你可以使用摄像头作为图像源进行识别

    如果不用摄像头你也可以使用图像文件作为输入比如pic0.jpg或者是电影film.avi

________________________________________________________________________________________

        结束。

继续阅读