使用matlab自带工具实现rcnn
平台: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的更多相关文章
- 如何利用 Visual Studio 自带工具提高开发效率
Visual Stuido 是一款强大的Windows 平台集成开发工具,你是否好好地利用了它呢? 显示行号 有些时候(比如错误定位)的时候,显示行号将有利于我们进行快速定位. 如何显示 1. 工具 ...
- JDK自带工具keytool生成ssl证书
前言: 因为公司项目客户要求使用HTTPS的方式来保证数据的安全,所以木有办法研究了下怎么生成ssl证书来使用https以保证数据安全. 百度了不少资料,看到JAVA的JDK自带生成SSL证书的工具: ...
- 教你用Windows自带工具给优盘/移动硬盘添加密码
教你用Windows自带工具给优盘/移动硬盘添加密码 本文中优盘,移动硬盘和分区操作方式一样,为方便描述,下文将只说优盘 优盘成了很多人每天都会用到的工具,有时候自己优盘会存着一些不希望别人看到的文件 ...
- Expo大作战(二十七)--expo sdk api之Util(expo自带工具类),tackSnapshotAsync,Svg,SQLite
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- 【计算机视觉】如何使用opencv自带工具训练人脸检测分类器
前言 使用opencv自带的分类器效果并不是很好,由此想要训练自己的分类器,正好opencv有自带的工具进行训练.本文就对此进行展开. 步骤 1.查找工具文件: 2.准备样本数据: 3.训练分类器: ...
- (转)用mysql自带工具mysqlslap对数据库进行压力测试
http://aolens.blog.51cto.com/7021142/1901557-------用mysql自带工具mysqlslap对数据库进行压力测试 mysqlslap是mysql自带的工 ...
- 利用JDK自带工具监控JVMCPU和内存指标
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- Windows 磁盘分区后如何再合并&如何用Windows自带工具扩大某个分区
Windows 磁盘分区后如何再合并&用Windows自带工具扩大某个分区 注:此方法有一定的成功率,更加完善可行的方法请看http://www.diskgenius.cn/help/part ...
- 利用Matlab自带的深度学习工具进行车辆区域检测与车型识别【Github更新!!!】(三)
前言 对前面的东西更新了一下.地方包括: 1.GUI的更新,更友好的用户界面 2.支持用手直接画车辆区域,并且识别出来 3.将proposal.detect.fine-grained classifi ...
随机推荐
- 【Ansible 文档】提示、推荐、注意事项
1. 查看 详细 信息 如果你想要查看成功模块和不成功的详细输出,使用 --verbose 标识 2. 检查 playbook 的语法 使用 ansible-playbook 的 --syntax-c ...
- Sketch webView方式插件开发技术总结
相信大家都对Sketch有一定的了解和认识.除了基础的矢量设计功能以外,插件更是让Sketch保持强大的独门秘籍.Sketch开放了第三方插件接口,设计师可以在几百种的插件中轻松找到适合自己工作方式的 ...
- oracle语句insert into select如何加后续插入条件
oracle语句insert into select如何加后续插入条件 2014-01-21 10:48匿名 分类:其他编程语言 | 浏览 2746 次 oracle中有批量插入语句insert i ...
- P1057 传球游戏
题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的: nnn 个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球 ...
- 深入理解mybatis原理, Mybatis初始化SqlSessionFactory机制详解(转)
文章转自http://blog.csdn.net/l454822901/article/details/51829785 对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章 ...
- leetcode 338. Counting Bits,剑指offer二进制中1的个数
leetcode是求当前所有数的二进制中1的个数,剑指offer上是求某一个数二进制中1的个数 https://www.cnblogs.com/grandyang/p/5294255.html 第三种 ...
- ARM汇编语言基础
ARM 与 Thumb 寄存器对应关系 PC寄存器: ARM状态为R15,Thumb状态为PC LR寄存器: ARM状态为R14,Thumb状态为LR SP寄存器: ARM状态为R13,Thumb状态 ...
- 吴恩达机器学习CS229课程笔记学习
监督学习(supervised learning) 假设我们有一个数据集(dataset),给出居住面积和房价的关系如下: 我们以居住面积为横坐标,房价为纵坐标,组成数据点,如(2104, 400), ...
- Java中try catch finally语句中含有return语句的执行情况(总结版)
在这里看到了try >但有一点是可以肯定的,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也 ...
- 火狐浏览器 system error code 1722 rpc服务器不可用和谷歌浏览器的插件application/x-print-ladop不支持
今天要实现打印的功能,但是火狐浏览器总是出现提示:火狐浏览器 system error code 1722 rpc服务器不可用 后来发现主要是系统服务中的一个windows服务没有打开导致的. 将wi ...