MATLAB2017a使用FasterRcnn目标检测训练及其测试流程 |
您所在的位置:网站首页 › fasterrcnn的缺点 › MATLAB2017a使用FasterRcnn目标检测训练及其测试流程 |
本文在matlab2017a已有的FasterRcnn算法基础上来检测人群。流程比较简单,对一些初学者来说比较容易理解和操作。 1.安装所需要的软硬件环境 1.1.硬件环境:· CPU:Intel i5 · GPU:GTX940m · 内存:4G · 硬盘:500G 1.2软件环境· 开发环境: Windows 10 · 编译环境:MATLAB2017a 2.目标模型的训练 2.1获得数据集打开MATLAB2017a,输入命令trainingImageLabeler使用matlab自带的trainingImageLabeler来对图片进行标注。简单起见,选43张图片标注,每张图片最后只选择一个框(方便对数据提取) 所有图片的label标注完后点击 Export ROIs 就会得到像这样的一个table文件。imageFilename代表了图片所存储的位置。 并将table文件保存到指定文件夹。(注:获得table文件不能通过保存获得必须Export ROIs) 使用命令save('D:\MATLAB\toolbox\vision\visiondata\people\tset_1\peopledata.mat','peopledata'); 就可以报存到这个位置:D:\MATLAB\toolbox\vision\visiondata\people\; 注意:peopledata.mat是要保存的类型以及文件格式,第二项peopledata是从Export ROIs 导出后命名的文件名。 使用函数extractpeople(matpath,savepath)批量修改table文件中图片大小为227X227(大小是固定的) 从上述产生的table可以看到,ROI框坐标数据保存类型是1*4 double。有时候导出时产生的是cell型,double型和cell型数据提取方式不一样,不注意可能会报错。一下仅以double型为例。 输入一下命令设置上述获得的数据集所在路径和保存路径。 matpath=('D:\MATLAB\toolbox\vision\visiondata\people\tset_1\peopledata.mat') savepath=('D:\MATLAB\toolbox\vision\visiondata\people\tset_1\people\'); %框选图片保存位置 输入命令 extractpeople(matpath,savepath)即可(该函数的作用是将框选目标提取出来将其图片大小改为227*227,并按顺序命名) (1)%double 型的方式 function extractpeople(matpath,savepath) %batch change image size load(matpath); %get image [length b]=size(peopledata); %get the number of image for i=1:length img=imread(peopledata.imageFilename{i}); str=zeros(1,4); str(1)=peopledata.people(i,1); str(2)=peopledata.people(i,2); str(3)=peopledata.people(i,3); str(4)=peopledata.people(i,4); rect=str; I=imcrop(img,rect); I=imresize(I,[227 227]); imwrite(I,[savepath,'\',num2str(i),'.jpg']); %resize image end (2)cell 型方式 function extractpeople(matpath,savepath) %batch change image size load(matpath); %get image [length b]=size(peopledata); %get the number of image for i=1:length img=imread(peopledata.imageFilename{i}); rect= peopledata.people{}i}; I=imcrop(img,rect); I=imresize(I,[227 227]); imwrite(I,[savepath,'\',num2str(i),'.jpg']); %resize image end (1)使用MATLAB2017a自带的神经网络Alexnet,选择训练深度为20。 依次输入命令net=alexnet; %doc alexnet 可以查看具体相关流程这里不做说明 %doc imageDatastore 可以查看具体相关流程这里不做说明 image = imageDatastore(fullfile('D:\MATLAB\toolbox\vision\visiondata\people\tset_1\'),... 'IncludeSubfolders',true,'LabelSource','foldernames');layersTransfer=net.Layers(1:end-3); numClasses = numel(categories(image.Labels)) %设置网络训练参数 输入命令netTransfer = trainNetwork(image,layers,options);%开始训练
(2)使用FasterRcnn训练,选择训练深度为20。训练结束后,保存训练模型 load('peopledata.mat'); %it is not necessary options = trainingOptions('sgdm', ... 'InitialLearnRate', 1e-8, ... 'MaxEpochs', 20, ... %twenty times 训练深度不是越多效果越好,有可能适得其反, 'CheckpointPath', tempdir); layer=netTransfer.Layers detector = trainFasterRCNNObjectDetector(peopledata, layer, options) %开始训练大概要10分钟左右,设备好相对快些 读取一张大小适合的图片进行检测,并输出检测结果,获得检测框的坐标,以及检测分数。 训练模型量要很大,这就产生了很大的数据,对于同一张图片,有着大小限制,大小小于227时,会无法检测,改变其大小比列可能检测不出目标。 每一次FasterRcnn模型训练都将产生很大缓存数据,选择训练深度30,训练图片数量280,产生了25G的缓存数据。要命的是它存在C盘容易导致电脑卡顿,所以每次训练结束都要清楚缓存数据。 当然,它的识别精度还是比较可靠的,主要在于训练模型的图片要选择恰当。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |