近些年,随着深度学习在计算机视觉领域中的蓬勃发展。利用卷积神经网络对图像进行分类,以及对图像中目标进行识别定位成为比较前沿的技术。本文比较详尽的介绍了在MATLAB2018b环境下,利用Faster-RCNN对图像进行迁移学习,从而使其能够在自己的数据集上识别目标。

本文主要分为两个部分:1.训练模型  2.结果展示与分析

1.训练模型

  • 构建数据集

在对图片进行标注前,先对图片进行处理,本文选用图片为MATLAB视觉工具箱中的stopsign数据:E:\MATLAB2018b\toolbox\vision\visiondata\stopSignImages。将这个文件夹中的图片复制出来,在根目录下建一个新的文件夹 E:\stopsignresize 并将图片放入文件夹中。

之后写一个更改图片尺寸的函数:

imagePath = 'E:\stopsignresize\';
imageFiles = dir(imagePath); %%读取目录文件下的所有图片文件
numFiles = length(imageFiles);%%获取图片的数量
parfor i=3:numFiles   %%matlab 并行 其实和for一个用法               j = i-2;  disp(j); %%disp() 函数直接将内容输出在Matlab命令窗口中  imageFile = strcat(imagePath,imageFiles(i).name); %%strcat()函数经常出现在批量处理的时候,这个时候我们需要用到for循环,然后这个函数能够让变量和路径产生一些关系,这个时候我们就可以对其进行批量处理。A = imread(imageFile); %%读入图片  B = imresize(A,[406 720]); %%修改图片尺寸  imwrite(B,imageFile); %%保存图片 。
end 

运行这段代码,将原来1630*920的图片改成720*406,否则训练检测器的时候回显示图片太大显存不足。

之后打开MATLAB自带的标注工具,在命令行输入:

或者点这里

打开图片标注工具,如下图所示:

之后,加载MATLAB视觉工具箱中自带的stopsign图片数据(图片路径:E:\stopsignresize)

得到如下界面:

之后定义一个标签,并起名为stopsign:

然后就可以进行“快乐”的标注过程了(开始的时候觉得标注很有趣,多做几组试试,数据量大点儿试试,目标复杂点儿试试,绝对是个考验强健体魄以及意志品质的浩大工程,微笑脸)

如图,41张图片都标注好了:

之后对session和file进行保存:

保存成table类型文件:

得到table类型文件:

至此,第一部分图片标注工作就完成了,也是看起来工作量最大的一个步骤。

  • 选择卷积网络并设置训练参数

本文采用迁移学习的方法对图片进行训练,从而可以做到用几十张图片来训练就能达到很好的检测效果。这是因为在构造Faster-RCNN检测器时,使用预训练过的卷积神经网络(如alexnet)作为主干,来提取图片的底层特征。

而这些特征是用大量数据集训练过的(例如CIFAR10、COCO、ImageNet等等)具有很好的图片底层特征表述能力和泛化能力。因此,可以将其直接放入Faster-RCNN模型中。

接下来设置训练参数。

 % Set training options
options = trainingOptions('sgdm', ...
'MiniBatchSize', 1, ... %Faster-RCNN中的minibatch只能设置成1
'InitialLearnRate', 1e-4, ... %学习率,设置大的话训练速度快但效果比较差,甚至会发散,设置小了训练速度会较慢
'LearnRateSchedule', 'piecewise', ...
'LearnRateDropFactor', 0.1, ...
'LearnRateDropPeriod', 100, ...
'MaxEpochs', 20, ...
'CheckpointPath', tempdir, ...
'Verbose', true);

至此,我们可以进行最后一步,训练检测器了:

detector = trainFasterRCNNObjectDetector(gTruth,alexnet,options);

其中gTruth是标注的数据,alexnet是预训练过的卷积网络,options是设置的训练参数。这里建议配置好GPU环境后调用GPU加速和并行处理器,否则训练速度会非常慢。

如果想使用效果更好地复杂网络:

detector = trainFasterRCNNObjectDetector(gTruth,'resnet101',options);

这里调用网络时要先将网络进行下载安装,比如在命令行输入:

这说明我的计算机没有安装resnet50这个网络,点击Add-On Explorer来下载安装这个网络后才能使用(Alexnet,resnet101同理):

  • 开始训练

如果一切顺利,MATLAB就会开始训练Faster-RCNN检测器了。

本文的实验验证是在如下配置中运行的:

CPU(20核,MATLAB训练可以调用10个核):

GPU:

之后就是漫长的等待:

可以看到,在700*400这样大小,具有复杂场景的图片,哪怕只有41张,在GPU环境下训练也是比较耗时的,因此强烈建议大家配置好GPU环境再来训练。如果条件实在不允许,我建议1.将图片尺寸调整为128*128或者256*256这种大小的图片;2.选用alexnet这种相对较小网络来训练(现在有种叫squeezenet的网络,能达到alexnet的效果,但是要训练的参数相对少了好多,因此速度也会更快)

2.结果展示与分析

  • 结果展示

至此,检测器训练完成。从网络上下载了7张图片放在桌面上来检测

for i=1:7    img=imread(['C:\Users\hp\Desktop\',...num2str(i),'.jpg']);
[bbox,score,label]=detect(detector,img);
img=insertObjectAnnotation(img,'Rectangle',bbox,score);
detectedImg=insertShape(img,'Rectangle',bbox);
figure;
imshow(detectedImg);
hold on
x=bbox(1)+60;
y=bbox(2)-14;
text(x,y,'stopsign','Color','k','FontSize',12);
end

结果如下:

第七张图片会报错,说明没有检测到stopsign。

  • 结果分析

定性地看,检测效果还是蛮不错的,这要归功于Faster-RCNN_Resnet101模型的强大能力,以及GPU的强大计算处理能力。从而能够在复杂多变的场景下把stopsign检测出来。而且完全不用像传统的目标检测算法一样针对某些特定的几何特征做一个描述子出来,费时费力,精度鲁和棒性还不好。

定量地分析的话,这个模型针对这八张图片的准确率Precision为85.7%(6/7),召回率Recall为87.5%(7/8)。准确率P和召回率R是衡量机器学习分类和回归问题的一个重要衡量指标,有兴趣的朋友可以查阅一下资料,这里简单介绍一下计算方法:

准确率是计算检测的准不准:8张图片中标对的框/8张图片所有标出来的框,本文中第四张图片标出两个框,因此算作其中一个评分低的标错了。

召回率是计算检测的全不全:8张图片中标对的框/8张图片中所有应该标注出的框,本文第八张图片没检测出来,算作该标但没标出来的。

第四张图出错的原因估计是检测器把下面那个红色的 小牌子也当成了stopsign,第八张图片出错估计是网络对形变较大,较为模糊的图片检测效果较差,而这两者都是可以通过增加训练集来解决的。

就先介绍到这里,如有问题欢迎批评指正。

同时若碰到问题可以评论告诉我。

MATLAB2018B下用Faster-RCNN做目标检测的训练和测试步骤相关推荐

  1. 准确度判断 语义分割_Mask R-CNN(目标检测语义分割)测试

    Mask R-CNN(目标检测语义分割)测试 Mask R-CNN(目标检测,语义分割)测试 Kaiming He的大作Mask R-CNN(https://arxiv.org/pdf/1703.06 ...

  2. 面试真题总结:Faster Rcnn,目标检测,卷积,梯度消失,Adam算法

    目标检测可以分为两大类,分别是什么,他们的优缺点是什么呢? 答案:目标检测算法分为单阶段和双阶段两大类.单阶段目标验测算法(one-stage),代表算法有 yolo 系列,SSD 系列:直接对图像进 ...

  3. 计算机视觉与深度学习 | 基于Faster R-CNN的目标检测(深度学习Matlab代码)

    ===================================================== github:https://github.com/MichaelBeechan CSDN: ...

  4. 【论文解读】Faster R-CNN 实时目标检测

    前言 Faster R-CNN 的亮点是使用RPN来提取候选框:RPN全称是Region Proposal Network,也可理解为区域生成网络,或区域候选网络:它是用来提取候选框的.RPN特点是耗 ...

  5. iCAN使用faster r-cnn得到目标检测结果文件为空

    问题在于图片文件夹后少了/,添加上/后解决 -/tf-faster-rcnn/tools/Object_Detector.py --img_dir /home/featurize/Data/exima ...

  6. Win10下用TensorFlow训练自己的数据集来做目标检测

    本文主要来源于YouTube博主 EdjeElectronics的视频https://www.youtube.com/watch?v=Rgpfk6eYxJA (对于视频看不了的朋友,我把视频录制下来放 ...

  7. Mask R-CNN用于目标检测和分割代码实现

    Mask R-CNN用于目标检测和分割代码实现 Mask R-CNN for object detection and instance segmentation on Keras and Tenso ...

  8. 【技术综述】一文道尽R-CNN系列目标检测

    文章首发于微信公众号<有三学AI> [技术综述]一文道尽R-CNN系列目标检测 目标检测任务关注的是图片中特定目标物体的位置.一个检测任务包含两个子任务,其一是输出这一目标的类别信息,属于 ...

  9. RCNN等目标检测框架

    原文链接:https://kuaibao.qq.com/s/20180723B05TXK00?refer=cp_1026 本文用于学习交流,如果侵犯作者权益,将立即删除. 一文读懂目标检测:R-CNN ...

最新文章

  1. Hibernate 异常 Unable to instantiate default tuplizer
  2. 三星第二财季净利69亿美元 同比增50%
  3. 前端学习(1350):用户的增删改查操作7增删改查
  4. The temporary upload location [/tmp/tomcat.xxx/work/Tomcat/localhost/etc] is not valid
  5. Redis windows学习(二)——Redis持久化的AOF模式和RDB模式
  6. java判断有没有修改,java字节码判断对象应用是否被修改
  7. pythopn 函数(内置函数)
  8. js中元素(图片)切换和隐藏显示问题
  9. 全国计算机二级基础知识ppt,有关全国计算机二级基础知识.ppt
  10. 安装win10和ubuntu16双系统
  11. edius隐藏快捷键_EDIUS素材隐藏快捷键是什么啊?
  12. Linux中rz和sz命令用法详解
  13. 生活记录:给枯燥的心灵浇浇水
  14. 这可能是最全最好的BLAST教程
  15. 华为U-SYS系统力助运营商实施转型
  16. 彩色图片变成黑白打印风格图片的一种方式
  17. Ubuntu 20.04安装使用Rime双拼输入法
  18. 离散数学 学习笔记-Day4
  19. nfc标签 方案 防伪_酒类NFC防伪解决方案
  20. HUAWEI被google禁完整版Android的背后——中美两国的博弈。

热门文章

  1. php服务器响应时间如何设置,php设置浏览器响应时间
  2. verilog语言中的@什么意思 verilog语言中的@什么意思
  3. JS逆向hook通用脚本合集
  4. 采访:应用软件定制化有什么优点?
  5. Android开发中App演示Gif效果动画的制作过程详讲
  6. JAVA版我的世界如何开第三方服务器
  7. Python运维开发入门到精通学习 Day3
  8. uniapp 小程序获取微信收货地址
  9. 【ROM定制】Android 12 制作『MIUI官改』那点事③工具
  10. QTDialog去掉右上角问号保留X