FasterRCNN与RCNN概述

目录

1.RCNN概述

2.Faster RCNN概述

3. MATLAB核心程序


1.RCNN概述

R-CNN的缺点主要是:

1.训练的时候,pipeline是隔离的,先提proposal,然后CNN提取特征,之后用SVM分类器,最后再做bbox regression。

2.训练时间和空间开销大。RCNN中ROI-centric的运算开销大,所以FRCN用了image-centric的训练方式来通过卷积的share特性来降低运算开销;RCNN提取特征给SVM训练时候需要中间要大量的磁盘空间存放特征,FRCN去掉了SVM这一步,所有的特征都暂存在显存中,就不需要额外的磁盘空间了。

3.测试时间开销大。依然是因为ROI-centric的原因,这点SPP-Net已经改进,然后FRCN进一步通过single scale testing和SVD分解全连接来提速。

       针对这个问题,所以才有了Faster R-CNN。Faster R-CNN的整体结构如下图示所示:

        其细节结构如下图所示:

2.Faster RCNN概述

Faster R-CNN由四个部分组成:

1)卷积层(conv layers),用于提取图片的特征,输入为整张图片,输出为提取出的特征称为feature maps

2)RPN网络(Region Proposal Network),用于推荐候选区域,这个网络是用来代替之前的search selective的。输入为图片(因为这里RPN网络和Fast R-CNN共用同一个CNN,所以这里输入也可以认为是featrue maps),输出为多个候选区域,这里的细节会在后面详细介绍。

3)RoI pooling,和Fast R-CNN一样,将不同大小的输入转换为固定长度的输出,输入输出和Faste R-CNN中RoI pooling一样。

4)分类和回归,这一层的输出是最终目的,输出候选区域所属的类,和候选区域在图像中的精确位置。

        在Faster R-CNN中,R表示的是RPN(Region Proposal Networks)的网络,专门用来推荐候选区域的,RPN可以理解为一种全卷积网络,该网络可以进行end-to-end的训练,最终目的是为了推荐候选区域。

      RPN的核心思想是使用卷积神经网络直接产生region proposal,使用的方法本质上就是滑动窗口。RPN网络结构图如上所示(ZF模型:256维),假设给定600*1000的输入图像,经过卷积操作得到最后一层的卷积feature map(大小约为40*60),最后一层卷积层共有256个feature map。

      为了训练RPN,我们为每个锚点分配一个二值类别标签(是目标或不是目标)。我们给两种锚点分配一个正标签:(i)具有与实际边界框的重叠最高交并比(IoU)的锚点,或者(ii)具有与实际边界框的重叠超过0.7 IoU的锚点。注意,单个真实边界框可以为多个锚点分配正标签。通常第二个条件足以确定正样本;但我们仍然采用第一个条件,因为在一些极少数情况下,第二个条件可能找不到正样本。对于所有的真实边界框,如果一个锚点的IoU比率低于0.3,我们给非正面的锚点分配一个负标签。既不正面也不负面的锚点不会有助于训练目标函数。

       根据这些定义,我们对目标函数Fast R-CNN中的多任务损失进行最小化。我们对图像的损失函数定义为:

       其中,i是一个小批量数据中锚点的索引,pi是锚点i作为目标的预测概率。如果锚点为正,真实标签pi\*为1,如果锚点为负,则为0。ti是表示预测边界框4个参数化坐标的向量,而ti\*是与正锚点相关的真实边界框的向量。分类损失Lcls是两个类别上(目标或不是目标)的对数损失。对于回归损失,我们使用Lreg(ti,ti\*)= R(tit i\*)Lreg(ti,t i\*)=R(tit i\*),其中R是在鲁棒损失函数(平滑L1)。项pi\*Lreg表示回归损失仅对于正锚点激活,否则被禁用(pi\*=0)。clsreg层的输出分别由{pi}{ti}组成。

   

        在这个特征图上使用3*3的卷积核(滑动窗口)与特征图进行卷积,那么这个3*3的区域卷积后可以获得一个256维的特征向量。因为这个3*3的区域上,每一个特征图上得到一个1维向量,256个特性图即可得到256维特征向量。3*3滑窗中心点位置,对应预测输入图像3种尺度(128,256,512),3种长宽比(1:1,1:2,2:1)的regionproposal,这种映射的机制称为anchor,产生了k=9个anchor。即每个3*3区域可以产生9个region proposal。所以对于这个40*60的feature map,总共有约20000(40*60*9)个anchor,也就是预测20000个region proposal。后边接入到两个全连接层,即cls layer和reg layer分别用于分类和边框回归。Cls layer包含2个元素,用于判别目标和非目标的估计概率。reglayer包含4个坐标元素(x,y,w,h),用于确定目标位置。最后根据region proposal得分高低,选取前300个region proposal,作为Fast R-CNN的输入进行目标检测。优点:首次将整张图片作为输入,通过CNN来产生region proposal,几乎是cost-free,且RPN网络与CNN网络共享特征。FasterRCNN的网络结构如下图所示:

3. MATLAB核心程序

RCNN

% 导入深度学习工具箱
addpath(genpath('path_to_your_matlab_deep_learning_toolbox'));

% 加载预训练的 EfficientNet-B0 模型
net = efficientnetb0;

% 指定输入图像尺寸
inputSize = [224 224 3]; % 根据模型的输入尺寸进行设置

% 创建图像数据存储器
imds = imageDatastore('path_to_your_image_folder', ...
    'IncludeSubfolders', true, 'LabelSource', 'foldernames');

% 数据预处理
augmentedImds = augmentedImageDatastore(inputSize(1:2), imds);

% 迁移学习训练
options = trainingOptions('sgdm', ...
    'MiniBatchSize', 16, ...
    'MaxEpochs', 10, ...
    'InitialLearnRate', 1e-3, ...
    'Shuffle', 'every-epoch', ...
    'ValidationData', augmentedImds, ...
    'ValidationFrequency', 50, ...
    'Verbose', true, ...
    'Plots', 'training-progress');

% Fine-tune 模型
net = trainNetwork(augmentedImds, net, options);

Faster RCNN

% 导入深度学习工具箱
addpath(genpath('path_to_your_matlab_deep_learning_toolbox'));

% 加载预训练的 Faster R-CNN 模型
net = fasterRCNNResNet50;

% 读取测试图像
img = imread('test_image.jpg');

% 进行目标检测
[bboxes, scores, labels] = detect(net, img);

% 在图像上绘制检测结果
detectedImg = insertObjectAnnotation(img, 'rectangle', bboxes, labels);

% 显示图像
imshow(detectedImg);

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值