您的位置:首页 > 编程语言 > MATLAB

【深度学习·笔记二】Matlab训练RCNN神经网络识别STOP路标

2019-03-22 10:53 1236 查看

本文主要是实现了Matlab Documentation中的一个例程
https://ww2.mathworks.cn/help/vision/ref/trainrcnnobjectdetector.html
看了很多篇有关于深度学习入门的教程,觉得一头雾水,但这个例程很容易跑通,可以让我们这些新手玩家大概知道如何训练一个神经网络,怎样准备一个数据集,整体代码大致是怎么样的,要包括哪些内容。因为我也是新手,下边的内容只是我个人的理解,若有差错,烦请大神们不吝赐教!

一、电脑环境

系统:macOS Mojave 10.14
Matlab版本:2018b(校园版license)
注意这里一定要是正版Matlab才可以安装各种数据包
CPU:Intel Core i5
显卡:Intel HD Graphics 5000

二、代码

Talk is cheap, show your the code.

load('rcnnStopSigns.mat','stopSigns','layers');imDir = fullfile(matlabroot, 'toolbox', 'vision', 'visiondata',...
'stopSignImages');
addpath(imDir);options = trainingOptions('sgdm', ...
'MiniBatchSize', 32, ...
'InitialLearnRate', 1e-6, ...
'MaxEpochs', 10);
rcnn = trainRCNNObjectDetector(stopSigns, layers, options,...
'NegativeOverlapRange', [0 0.3]);
img = imread('stopSignTest.jpg');
[bbox, score, label] = detect(rcnn, img, 'MiniBatchSize', 32);
[score, idx] = max(score);
bbox = bbox(idx, :);
annotation = sprintf('%s: (Confidence = %f)', label(idx), score);
detectedImg = insertObjectAnnotation(img, 'rectangle', bbox, annotation);
figure;
imshow(detectedImg);

这里由于是例程,所以在我们安装完Computer Vision Toolbox和Deep Learning Toolbox后,在matlab安装路径下,mac系统下应该是
/Applications/MATLAB_R2018b.app/toolbox/vision/visiondata/stopSignImages
在这个文件夹下,matlab已经帮我们把训练集给准备好了。下面逐行代码进行说明。

load('rcnnStopSigns.mat','stopSigns','layers');

这里是将我们要用到的数据加载到工作区之中,由于rcnnStopSigns.mat中有很多数据,我们只需要用到stopSigns和layers这两个。stopSigns之后会被我们用来当作traingData,也就是训练所使用的数据集,layers是RCNN神经网络的层级结构。
这时候,工作区会出现这两个 数据。

所有Matlab图片的训练集的变量都是一个N2的table,N是你训练集里照片的张数(这就是Matlab深度学习训练集的格式么?是不是都是这样?)*。然后第一列,imageFilename是你训练集中,每张图片的路径及名字;第二列stopSign是标记了在这张图中,你要进行训练和识别的位置在哪,我们管这个位置叫ROI(Region of interest),四个数值表示了ROI区域(是个矩形框)的四个顶点的位置。
如果我们要自己做一个训练集,可以使用Image Labeler这个工具,就在Matlab的App中,也非常方便,我们下篇笔记再详细说。

imDir = fullfile(matlabroot, 'toolbox', 'vision', 'visiondata',...
'stopSignImages');
addpath(imDir);

把/Applications/MATLAB_R2018b.app/toolbox/vision/visiondata/stopSignImages(就是那个训练集的图片的路径)赋给imDIr(image direction)这个变量,我们就可以看到工作区中多了一个名为imDir的char型变量。
addpath命令就是把后面的文件(夹)添加到matlab 的工作路径中,再次打开时,matlab就可自动打开文件夹中的文件,不再出提示。(打开一个不在matlab工作路径上的文件,matlab会弹出提示。而如果文件在它的工作路径上,matlab就直接打开那个文件,不会弹出提示。用addpath把文件加入它的工作路径后,就不会弹出提示。)

options = trainingOptions('sgdm', ...
'MiniBatchSize', 32, ...
'InitialLearnRate', 1e-6, ...
'MaxEpochs', 10);
rcnn = trainRCNNObjectDetector(stopSigns, layers, options,...
'NegativeOverlapRange', [0 0.3]);

这里的参数设置我现在也不怎么懂…需要了解一些机器学习的基本概念,可以参考一下下边这个网页:https://www.jianshu.com/p/e5076a56946c
然后开始训练RCNN神经网络,这个过程需要一些时间。训练过程如下。
训练结束后,我们会得到一个叫rcnn的变量,类型为rcnnObjectDetector,接下来,我们就可以用它来进行图像识别。

img = imread('stopSignTest.jpg');
[bbox, score, label] = detect(rcnn, img, 'MiniBatchSize', 32);
[score, idx] = max(score);
bbox = bbox(idx, :);
annotation = sprintf('%s: (Confidence = %f)', label(idx), score);
detectedImg = insertObjectAnnotation(img, 'rectangle', bbox, annotation);
figure;
imshow(detectedImg);

下图是训练结果,“stopSignTest.jpg”是Matlab自带的测试图片,也保存在上述的/vision/visiondata那个文件夹下。我们可以看到他很成功的把STOP路标识别了出来。

下边我们用自己在网上找的几张图片,测试一下我们训练的神经网络的性能。

这里不知道为什么,他的框画得很小。



由上边几张图我们可以看出,RCNN的训练结果还是不错的,基本都正确的将STOP路边识别了出来。
这篇笔记就到此结束了,我也还有很多不懂的地方。如果大家对这部分内容有什么疑问的话,希望可以一起讨论交流!欢迎留言评论!!下篇笔记将讲述如何自己创造一个训练集,训练神经网络识别自己想识别的东西。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐