平台:matlab2016b

matlab自带一个cifar10Net工具可用于深度学习。

图片标注

这里使用的是matlab自带的工具trainingImageLabeler对图像进行roi的标注。

选择AddImages将要训练的图片放进去(可以放入多张图片),在ROI Label区域右键可以选择改变label 的color和name,如果要训练多个类,也可以点击Add ROI Label来添加label。

所有图像标注完成后点击Export ROIs后会得到一个table(或stuct)变量,使用

save(‘file’,‘variable’);

命令来保存

因为cifar10Net使用的是table,如果你的数据集使用的是stuct,

这里使用

 data=struct2table(file);

来将stuct转化为table

imageFilename代表了图片所存储的位置;

tire代表了图片中标注的轮胎,用矩阵存储,分别为roi左上的坐标(x,y)和roi的大小(width,height);

RCNN训练

我们来查看下网络结构

load('rcnnStopSigns.mat','cifar10Net');
cifar10Net.Layers

会得到以下输出

ans = 

15x1 Layer array with layers:

 1   'imageinput'    Image Input             32x32x3 images with 'zerocenter' normalization
2 'conv' Convolution 32 5x5x3 convolutions with stride [1 1] and padding [2 2]
3 'relu' ReLU ReLU
4 'maxpool' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0]
5 'conv_1' Convolution 32 5x5x32 convolutions with stride [1 1] and padding [2 2]
6 'relu_1' ReLU ReLU
7 'maxpool_1' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0]
8 'conv_2' Convolution 64 5x5x32 convolutions with stride [1 1] and padding [2 2]
9 'relu_2' ReLU ReLU
10 'maxpool_2' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0]
11 'fc' Fully Connected 64 fully connected layer
12 'relu_3' ReLU ReLU
13 'fc_1' Fully Connected 10 fully connected layer
14 'softmax' Softmax softmax
15 'classoutput' Classification Output cross-entropy with 'airplane', 'automobile', and 8 other classes

通过观察可以看出,一共只有三个卷积层

我们要对这个网络进行微调,因为我这里只训练了一个车轮,提供的数据中还包含有无标注的图片,所以全连接层的输出要改成2。后面再接上一个softmax层和一个classificationLayer,并且定义训练方式:

x=cifar10Net.Layers(1:end-3);

lastlayers = [
fullyConnectedLayer(2,'Name','fc8','WeightLearnRateFactor',1, 'BiasLearnRateFactor',1)
softmaxLayer('Name','softmax')
classificationLayer('Name','classification')
]; options = trainingOptions('sgdm', ...
'MiniBatchSize', 32, ...
'InitialLearnRate', 1e-6, ...
'MaxEpochs', 100);

RCNN的训练主要使用trainRCNNObjectDetector.m函数

 detector = trainRCNNObjectDetector(groundTruth,network,options)

groundTruth - 具有2个或更多列的表。 第一列必须包含图像文件名。 图像可以是灰度或真彩色,可以是IMREAD支持的任何格式。 其余列必须包含指定每个图像内对象位置的[x,y,width,height]边框的M×4矩阵。 每列表示单个对象类,例如。 人,车,狗。 其实就是之前使用trainingImageLabeler做标注得到的数据。

network - 即为CNN的网络结构

options - 即为网络训练的参数。包括初始化学习率、迭代次数、BatchSize等等。

除了以上三个参数外,还有

‘PositiveOverlapRange’ - 一个双元素向量,指定0和1之间的边界框重叠比例范围。与指定范围内(即之前做图片标注画出的框)的边界框重叠的区域提案被用作正训练样本。Default: [0.5 1]

‘NegativeOverlapRange’ - 一个双元素向量,指定0和1之间的边界框重叠比例范围。与指定范围内(即之前做图片标注画出的框)的边界框重叠的区域提案被用作负训练样本。Default: [0.1 0.5]

在训练之前,RCNN会从训练图片中得到很多候选框,其中满足正样本要求的会被当做训练正样本,而满足负样本要求的会被当做训练负样本。

‘NumStrongestRegions’ - 用于生成训练样本的最强区域建议的最大数量(即最后得到的候选框数量)。 降低该值以加快处理时间,以训练准确性为代价。 将此设置为inf以使用所有区域提案。Default: 2000

之后对训练完成的结果进行检测

clear;
tic;
load myRCNN.mat;
detectedImg = imread('cars_train_croped(227_227)\08031.jpg'); [bbox, score, label] = detect(myRCNN, detectedImg, 'MiniBatchSize', 20); imshow(detectedImg); idx=find(score>0.1);
bbox = bbox(idx, :);
n=size(idx,1);
for i=1:n
annotation = sprintf('%s: (Confidence = %f)', label(idx(i)), score(idx(i)));
de = insertObjectAnnotation(detectedImg, 'rectangle', bbox(i,:), annotation);
end figure
imshow(de);
toc;

参考博客:https://blog.csdn.net/qq_33801763/article/details/77185457

https://blog.csdn.net/mr_curry/article/details/53160914

https://blog.csdn.net/u014096352/article/details/72854077

使用matlab自带工具实现rcnn的更多相关文章

  1. 如何利用 Visual Studio 自带工具提高开发效率

    Visual Stuido 是一款强大的Windows 平台集成开发工具,你是否好好地利用了它呢? 显示行号 有些时候(比如错误定位)的时候,显示行号将有利于我们进行快速定位. 如何显示 1. 工具 ...

  2. JDK自带工具keytool生成ssl证书

    前言: 因为公司项目客户要求使用HTTPS的方式来保证数据的安全,所以木有办法研究了下怎么生成ssl证书来使用https以保证数据安全. 百度了不少资料,看到JAVA的JDK自带生成SSL证书的工具: ...

  3. 教你用Windows自带工具给优盘/移动硬盘添加密码

    教你用Windows自带工具给优盘/移动硬盘添加密码 本文中优盘,移动硬盘和分区操作方式一样,为方便描述,下文将只说优盘 优盘成了很多人每天都会用到的工具,有时候自己优盘会存着一些不希望别人看到的文件 ...

  4. Expo大作战(二十七)--expo sdk api之Util(expo自带工具类),tackSnapshotAsync,Svg,SQLite

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  5. 【计算机视觉】如何使用opencv自带工具训练人脸检测分类器

    前言 使用opencv自带的分类器效果并不是很好,由此想要训练自己的分类器,正好opencv有自带的工具进行训练.本文就对此进行展开. 步骤 1.查找工具文件: 2.准备样本数据: 3.训练分类器: ...

  6. (转)用mysql自带工具mysqlslap对数据库进行压力测试

    http://aolens.blog.51cto.com/7021142/1901557-------用mysql自带工具mysqlslap对数据库进行压力测试 mysqlslap是mysql自带的工 ...

  7. 利用JDK自带工具监控JVMCPU和内存指标

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  8. Windows 磁盘分区后如何再合并&如何用Windows自带工具扩大某个分区

    Windows 磁盘分区后如何再合并&用Windows自带工具扩大某个分区 注:此方法有一定的成功率,更加完善可行的方法请看http://www.diskgenius.cn/help/part ...

  9. 利用Matlab自带的深度学习工具进行车辆区域检测与车型识别【Github更新!!!】(三)

    前言 对前面的东西更新了一下.地方包括: 1.GUI的更新,更友好的用户界面 2.支持用手直接画车辆区域,并且识别出来 3.将proposal.detect.fine-grained classifi ...

随机推荐

  1. css给列表添加序号

    .middle ul{ counter-reset: show-list; } li{ padding-left: 30px; line-height: 1.3; position: relative ...

  2. Python--详解Python中re.sub

    给出定义: re.sub(pattern, repl, string, count=0, flags=0) Return the string obtained by replacing the le ...

  3. $Matrix-Tree$定理-理论

    $Matrix-Tree$ 矩阵的行列式 这个东西看了好久才明白 _ (:з」∠)_ 时间不够可以直接跳到第六段. 看到这种新定义,第一反应还是去翻百度百科: 但是这个讲解真的让人很迷惑...关键就是 ...

  4. Mysql中的锁机制

    原文:http://blog.csdn.net/soonfly/article/details/70238902 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的 计算资源(如 ...

  5. Android学习之多触点滑动

    知识点: 1.对矩阵:Matrix类熟悉,链接:https://blog.csdn.net/jdsjlzx/article/details/52741445 2.MotionEvent详解:https ...

  6. Javascript 对象复制

    如果对象只是一个数据集,可采用json化再反json化的方式克隆一个对象,这个过程会丢失对象的方法.效率比较低. 可以采用如下递归的方式复制一个对象. function clone(target) { ...

  7. 如何控制docker的CPU和内存份额

    1.内存:docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 500M 刚开始会报错: docker ...

  8. SQL查询今天、昨天、7天内、30天 - 转

    今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0 昨天的所有数据:select * from 表名 where ...

  9. Lean Data Innovation Sharing Salon(2018.09.15)

    时间:2018.09.15地点:北京国华投资大厦

  10. Linux 开启端口命令

    编者按 今天在配置Zookeeper集群的时候,碰到下面的问题: 这里说明是主机192.168.116.129:3888没有连通. 首先ping了一把,是通的,说明主机之间是连通的,然后再检查开放的端 ...