本文主要是介绍在Matlab下训练级联目标检测器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在Matlab下,vision.CascadeObjectDetector可以用来进行目标检测,Matlab系统中自带了一些已经训练好的分类器用于目标检测,目前比较成熟的检测器有人脸检测,鼻子检测,人眼检测和上半身检测。但是仅仅是这些检测器是不能应用于其它领域的。还好,Matlab提供了trainCascadeObjectDetector函数,可根据自已的需求重新训练一个检测器,用于目标检测。基本的流程如下:
在训练满足自己需求的检测器之前,需要对自己的图像数据进行处理,也就是勾出图片中要检测的目标。这个过程貌似有点麻烦,还好,不用担心,Matlab自带有这样的工具,这个工具就是Training Image Labeler。怎样打开这个工具呢?如下图所示:
然后点击Add Images,便可把图片载入到当前界面,然后用框图勾出你要检测的目标,勾出的框可以多个可以重叠,完成后,直接点击Save Session或Export ROIs,保存即可。保存的结果是一个结构体,域名field names分别为imageFilename和objectBoundingBoxes,分别保存了图像的存储路径与图像待检测目标的ROI坐标[x y width height]。这一步处理完成后,相当于训练集处理完成,接下来便是用它来训练检测器。
怎样训练检测器呢?前边已经说啦,提到过一个函数,那就是trainCascadeObjectDetector函数,它是Matlab的built-in函数。这个函数有很多输入参数,但我们只需输入三个参数即可,其他的都有默认值。目前,该函数支持Haar,LBP,HOG特征检测器,默认为HOG目标检测器。
trainCascadeObjectDetector(outputXMLFileName, positiveInstances, negativeImages)
其中,outputXMLFileName为训练好的检测器保存文件,是XML文件,positiveInstances为正样本,也就是图片中含有待检测的目标,它也就是前边那一步处理后,Save Session或Export ROIs时保存的结构体,它是一个矩阵文件。negativeImages为负样本,也就是图片中不含有待检测的目标,通常为背景图片。同 正样本一样,negativeImages为负样本的存储路径。具体详情请参考
help trainCascadeObjectDetector
下面是Matlab自带的一个训练检测器到检测的示例:
%Example - Training a stop sign detector% Load the positive samples data from a mat file% The file names and bounding boxes are contained in an array% of structures named 'data'. The samples were created using% trainingImageLabeler app.load('stopSigns.mat');% Add the image directory to the MATLAB pathimDir = fullfile(matlabroot, 'toolbox', 'vision', 'visiondata',...'stopSignImages');addpath(imDir);% Specify folder with negative imagesnegativeFolder = fullfile(matlabroot, 'toolbox', 'vision', ...'visiondata', 'nonStopSigns');% Train a cascade object detector called 'stopSignDetector.xml'% using HOG features.% NOTE: The command below can take several minutes to runtrainCascadeObjectDetector('stopSignDetector.xml', data, ...negativeFolder, 'FalseAlarmRate', 0.1, 'NumCascadeStages', 5);% Use the newly trained classifier to detect a stop sign in an imagedetector = vision.CascadeObjectDetector('stopSignDetector.xml');img = imread('stopSignTest.jpg'); % read the test imagebbox = step(detector, img); % detect a stop sign% Insert bounding box rectangles and return marked imagedetectedImg = insertObjectAnnotation(img, 'rectangle', bbox, 'stop sign');figure; imshow(detectedImg); % display the detected stop signrmpath(imDir); % remove the image directory from the path
实验结果:
参考:
1. Train a Cascade Object Detector
这篇关于在Matlab下训练级联目标检测器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!