【深度学习·笔记二】Matlab训练RCNN神经网络识别STOP路标
本文主要是实现了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路边识别了出来。
这篇笔记就到此结束了,我也还有很多不懂的地方。如果大家对这部分内容有什么疑问的话,希望可以一起讨论交流!欢迎留言评论!!下篇笔记将讲述如何自己创造一个训练集,训练神经网络识别自己想识别的东西。
- 机器深度学习笔记(1)——神经网络从一张图片中识别狗的过程
- MATLAB神经网络学习笔记之:对线性神经网络进行自适应训练
- 王小草【深度学习】笔记第三弹--神经网络细节与训练注意点
- 神经网络与深度学习笔记——第1章 使用神经网络识别手写数字
- Coursera deeplearning.ai 深度学习笔记2-1-Practical aspects of deep learning-神经网络实际问题分析(初始化&正则化&训练效率)与代码实现
- 神经网络与深度学习笔记——第5章 深度神经网络为何很难训练
- 深度学习入门课程笔记 神经网络
- tensorflow学习笔记三:mnist实例--用简单的神经网络来训练和测试
- Coursera深度学习课程 DeepLearning.ai 提炼笔记(1-2)-- 神经网络基础
- 【神经网络与深度学习】深度学习实战——caffe windows 下训练自己的网络模型
- 深度学习笔记1:神经网络端到端学习笔记
- 深度学习笔记(二):简单神经网络,后向传播算法及实现
- 神经网络与深度学习学习笔记:正向传播与反向传播(未完)
- 吴恩达深度学习视频笔记1-2:《神经网络和深度学习》之《神经网络基础》
- 神经网络与深度学习 笔记1 感知机 S型神经元
- 【深度学习笔记002 神经网络与主流框架】
- 吴恩达神经网络和深度学习课程自学笔记(六)之优化算法
- 神经网络与深度学习笔记——第4章 神经网络可以计算任何函数的可视化证明
- AndrewNg神经网络和深度学习笔记-Week3-6激活函数
- [DeeplearningAI笔记]改善深层神经网络1.4_1.8深度学习实用层面_正则化Regularization与改善过拟合