1.Faster R-CNN详解和网络模型搭建
2.捋一捋pytorch官方FasterRCNN代码
3.目标检测二阶段目标检测器:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN
4.Faster-rcnn 代码详解
5.RPN-区域生成网络-Region Proposal Network(Faster-RCNN)
6.目标检测算法(R-CNN,fastR-CNN,fasterR-CNN,测试开发源码yolo,SSD,yoloV2,yoloV3)
Faster R-CNN详解和网络模型搭建
论文原文: arxiv.org/abs/....
个人代码仓库: GitHub - dailonggang/Faster-R-CNN
文章部分引自: zhuanlan.zhihu.com/p/...
我们知道Faster RCNN是由R-CNN、Fast R-CNN改进而来,是非常经典的两阶段网络,下面我们就原理和代码进行介绍。在此之前大家可以先了解一下R-CNN、Fast R-CNN的原理,这样对Faster RCNN也能有更好的理解,毛遂自荐一下:
Faster R-CNN其实可以分为5个主要内容:
Faster R-CNN整体结构图如下所示:
下面就Faster R-CNN上面的5个部分做一个比较详细的介绍:
二、Resize
首先对输入的图像进行resize操作,以适应模型要求,单独resize.py文件进行实验。
三、Backbone
接下来利用ResNet网络进行特征提取得到特征图(Feature Map)。有关ResNet的原理和代码部分可以参考: ResNet网络结构详解与Pytorch版本模型的搭建。还可以单独进行调试。
四、RPN网络
RPN网络实际分为2条线,上面一条通过 softmax 对前景(positive)和背景(negative)进行分类,下面一条用于对anchors进行bounding box regression偏移量,以获得精确的proposal。
Region Proposal Networks(RPN)和锚框(anchor)
RPN作为Faster RCNN的一大主要创新点,网络直接使用RPN生成候选区域,这也将生成区域提议的时间从2s缩减到了ms,大大提升了生成待检测区域的速度。从网络图也可以看出Faster R-CNN其实就是RPN和Fast-RCNN的结合。提到RPN网络,就不能不说锚框(anchor)。锚框是在原图上设置不同大小的假想框,来检测框中是否出现物体。简单地说,RPN依靠一个在共享特征图上滑动的窗口,为每个位置生成9种预先设置好长宽比与面积的框(anchor)。这9种初始anchor包含三种面积(×,×,×),每种面积又包含三种长宽比(1:1,1:2,2:1)。如下图所示:
anchor生成代码:
在原文中,经过特征提取后,共享特征图的大小约为×,RPN生成的初始anchor总数为(××9)。对于生成的anchor,RPN要做的事情有两个,第一个是判断anchor到底是前景还是背景,意思就是判断这个anchor到底有没有覆盖目标,在训练的时候排除掉了超越图像边界的anchor,剩下大约个,通过上面的分支,也就是先经过一个3×3卷积,得到一个相同大小shape的特征图,然后经过一个1×1的卷积层输出了个值,因为是每一个点对应9个anchor,每个anchor有一个前景分数和一个背景分数,所以9×2=;第二个是jacocoagent+源码解读为属于前景的anchor进行第一次坐标修正。经过另一个1×1的卷积层输出了个值,因为是每一个点对应9个anchor,每个anchor对应了4个修正坐标的值,所以9×4=。那么,要得到这些值,RPN网络需要训练。在训练的时候,就需要对应的标签。那么,如何判定一个anchor是前景还是背景呢?文中做出了如下定义:如果一个anchor与ground truth的IoU在0.7以上,那这个anchor就算前景(positive)。类似地,如果这个anchor与ground truth的IoU在0.3以下,那么这个anchor就算背景(negative)。这样最终得到约个候选框。但是作者在进行RPN网络训练的时候,只使用了上述两种情况的anchor,与ground truth的IoU介于0.3和0.7的anchor没有使用。在训练anchor属于前景与背景的时候,是在一张图中,随机抽取了个前景anchor与个背景anchor。其实还有另一种方案就是取IoU最大值。正样本是在不够,就用负样本进行补充。下面的propsal还会细说。代码如下:
这里补充一点,其实原论文中是对k个anchor进行的操作,使用二分类交叉熵损失函数,如果按照我们使用2k个,那么就应该使用多分类交叉熵损失函数。另外,如果我们使用VGG作为主干特征提取网络的话,那么对于提取得到的特征图的感受野应该是,显然小于和这两个面积,但是论文中也提到了,其实小于只看部分也能推测出结果,通过后续算法验证也确实如此。
对于感受野的计算大家可以参见下面文章:
五、Proposal Layer
由网络结构图可以看出,Proposal Layer负责综合所有计算出精准的proposal,送入后续RoI Pooling Layer。
首先解释im_info。对于一副任意大小PxQ图像,传入Faster RCNN前首先reshape到固定MxN,im_info=[M, N, scale_factor]则保存了此次缩放的所有信息。然后经过Conv Layers,经过4次pooling变为WxH=(M/)x(N/)大小,其中feature_stride=则保存了该信息,用于计算anchor偏移量。
Proposal Layer forward按照以下顺序依次处理:
之后输出proposal=[x1, y1, x2, y2],注意,由于在第2步中将anchors映射回原图判断是否超出边界,所以这里输出的proposal是对应MxN输入图像尺度的,这点在后续网络中有用。另外我认为,严格意义上的检测应该到此就结束了,后续部分应该属于识别了。
通俗点来讲就是Proposal Layer会对RPN输出的分类和回归结果进行后处理(如NMS等),得到网络认为包含物体的区域,称为感兴趣的候选区域——RoI。至此,其实已经完成了定位任务,刘亦菲源码因为已经得到了包含物体的区域(bbox),只不过没有对物体类别进行细分,仅区分了前、背景。另外,由于anchor的位置和大小是人工预设的,且用于训练的样本有限,因此此处得到的检测结果可能并不够精准。
代码如下:
到这里RPN就解析完毕了。
六、RoI Pooling和Classifier
RoI Pooling就不再赘述。Classifier部分利用已经获得的proposal feature maps,通过full connect层与softmax计算每个proposal具体属于那个类别(如人,车,电视等);同时再次利用bounding box regression获得每个proposal的位置偏移量bbox_pred,用于回归更加精确的目标检测框。Classification部分网络结构如下图。
从RoI Pooling获取proposal feature maps后,送入后续网络,可以看到做了如下2件事:
注意,这里回归的结果是预测框中心点相对于正样本RoIs中心点坐标的位移以及两者长宽的比例,并且是归一化(减去均值除以标准差)后的结果。
代码如下:
在训练分类器和RoI边框修正时,步骤如下所示:
1) 首先通过RPN生成约个anchor(××9)。
2) 对个anchor进行第一次边框修正,得到修订边框后的proposal。
3) 对超过图像边界的proposal的边进行clip,使得该proposal不超过图像范围。
4) 忽略掉长或者宽太小的proposal。
5) 将所有proposal按照前景分数从高到低排序,选取前个proposal。
6) 使用阈值为0.7的NMS算法排除掉重叠的proposal。
7) 针对上一步剩下的proposal,选取前个proposal进行分类和第二次边框修正。
总的来说,Faster R-CNN的loss分两大块,第一大块是训练RPN的loss(包含一个SoftmaxLoss和SmoothL1Loss),第二大块是训练Fast R-CNN中分类器的loss(包含一个SoftmaxLoss和SmoothL1Loss),其实原论文中训练方法特别复杂,但是现在大多直接采用RPN Loss + Fast R-CNN Loss的联合训练方法。
宝藏UP主: Bubbliiiing的个人空间_哔哩哔哩_Bilibili
捋一捋pytorch官方FasterRCNN代码
pytorch torchvision 模块集成了 FasterRCNN 和 MaskRCNN 代码,本文旨在帮助初学者理解 Two-Stage 检测的核心问题。首先,请确保您对 FasterRCNN 的原理有初步了解,否则推荐阅读上一篇文章。
△ 代码结构
作为 torchvision 中目标检测的基础类,GeneralizedRCNN 继承了 torch.nn.Module。FasterRCNN 和 MaskRCNN 都继承了 GeneralizedRCNN。
△ GeneralizedRCNN
GeneralizedRCNN 类继承自 nn.Module,具有四个关键接口:transform、backbone、rpn、roi_heads。
△ transform
transform 接口主要负责图像缩放,并记录原始图像尺寸。缩放图像是为了提高工程效率,防止内存溢出。理论上,FasterRCNN 可以处理任意大小的,但实际应用中,图像大小受限于内存。
△ backbone + rpn + roi_heads
完成图像缩放后,正式进入网络流程。这包括 backbone、彩票源码+下载rpn、roi_heads 等步骤。
△ FasterRCNN
FasterRCNN 继承自 GeneralizedRCNN,并实现其接口。transform、backbone、rpn、roi_heads 分别对应不同的功能。
△ rpn 接口实现
rpn 接口实现中,首先使用 AnchorGenerator 生成 anchor,然后通过 RPNHead 计算每个 anchor 的目标概率和偏移量。AnchorGenerator 生成的 anchor 分布在特征图上,其数量与输入图像的大小相关。
△ 计算 anchor
AnchorGenerator 通过计算每个特征图相对于输入图像的下采样倍数 stride,生成网格,并在网格上放置 anchor。每个位置的 anchor 数量为 个,包括 5 种 anchor size 和 3 种 aspect_ratios。
△ 区分 feature_map
FasterRCNN 使用 FPN 结构,因此需要区分多个 feature_map。在每个 feature_map 上设置 anchor 后,使用 RegionProposalNetwork 提取有目标的 proposals。
△ 提取 proposals
RegionProposalNetwork 通过计算有目标的 anchor 并进行框回归,生成 proposals。然后依照 objectness 置信度排序,并进行 NMS,生成最终的 boxes。
△ 训练损失函数
FasterRCNN 在训练阶段关注两个损失函数:loss_objectness 和 loss_rpn_box_reg。这两个损失函数分别针对 rpn 的目标概率和 bbox 回归进行优化。
△ roi_pooling 操作
在确定 proposals 所属的 feature_map 后,使用 MultiScaleRoIAlign 进行 roi_pooling 操作,提取特征并转为类别信息和进一步的框回归信息。
△ 两阶段分类与回归
TwoMLPHead 将特征转为 维,然后 FastRCNNPredictor 将每个 box 对应的特征转为类别概率和回归偏移量,实现最终的分类与回归。
△ 总结
带有 FPN 的 FasterRCNN 网络结构包含两大部分:特征提取与检测。FasterRCNN 在两处地方设置损失函数,分别针对 rpn 和 roi_heads。
△ 关于训练
在训练阶段,FasterRCNN 通过 RPN 和 RoIHeads 分别优化 anchor 和 proposals 的目标概率和 bbox 回归,实现目标检测任务。
△ 写在最后
本文简要介绍了 torchvision 中的 FasterRCNN 实现,并分析了关键知识点。鼓励入门新手多读代码,深入理解模型机制。尽管本文提供了代码理解的指引,真正的模型理解还需阅读和分析代码。
目标检测二阶段目标检测器:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN
所谓目标检测就是在一张图像中找到我们关注的目标,并确定它的类别和位置,这是 计算机视觉领域最核心的问题之一。由于各类目标不同的外观,颜色,大小以及在成像时光照,遮挡等具有挑战性的问题,目标检测一直处于不断的优化和研究中。
传统的目标检测算法有:SIFT(尺度不变特征变换)、HOG(方向梯度直方图)、DPM(一种基于组件的图像检测算法)等。
基于深度学习的目标检测算法可以分为两类:二阶算法(Two Stage)和一阶算法(One Stage)
二阶算法:先生成区域候选框,再通过卷积神经网络进行分类和回归修正。发票抬头提交源码常见算法有 RCNN、SPPNet、Fast RCNN,Faster RCNN 和 RFCN 等。二阶算法检测结果更精确。 一阶算法:不生成候选框,直接在网络中提取特征来预测物体的分类和位置。常见算法有 SSD、YOLO系列 和 RetinaNet 等。一阶算法检测速度与更快。
RCNN(Region with CNN feature)算法出现于年,是将深度学习应用到目标检测领域的开山之作,凭借卷积神经网络出色的特征提取能力,大幅度提升了目标检测的效果。
RCNN在PASCAL VOC数据集上将检测率从.1%提升至.7%,使得CNN在目标检测领域成为常态,也使得大家开始探索CNN在其他计算机视觉领域的巨大潜力。
RCNN继承了传统目标检测的思想,将目标检测当做分类问题进行处理,先提取一系列目标的候选区域,然后对候选区域进行分类和回归修正。
其具体算法流程包含以下4步:
(1)生成候选区域:采用一定区域候选算法(如 Selective Search)将图像分割成小区域,然后合并包含同一物体可能性高的区域作为候选区域输出,这里也需要采用一些合并策略。不同候选区域会有重合部分,如下图所示(黑色框是候选区域):要生成-个候选区域(以个为例),之后将每个区域进行归一化,即缩放到固定的大小(*)
(2)对每个候选区域用CNN进行特征提取:这里要事先选择一个预训练神经网络(如AlexNet、VGG),并重新训练全连接层,即 fintune 技术的应用。将候选区域输入训练好的AlexNet CNN网络,得到固定维度的特征输出(维),得到×的特征矩阵。
(3)用每一类的SVM分类器对CNN的输出特征进行分类:此处以PASCAL VOC数据集为例,该数据集中有个类别,因此设置个SVM分类器。将 × 的特征与个SVM组成的权值矩阵 × 相乘,获得 × 维的矩阵,表示个候选区域分别属于个分类的概率,因此矩阵的每一行之和为1。
(4)使用回归器精修候选区域的位置:通过 Selective Search算法得到的候选区域位置不一定准确,因此用个回归器对上述个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的目标区域。
SPP-Net是一种可以不用考虑图像大小,输出图像固定长度的网络结构,并且可以做到在图像变形情况下表现稳定。在SPP-Net之前,所有的神经网络都是需要输入固定尺寸的,比如*(ImageNet)、*(LenNet)、*等。这样对于我们希望检测各种大小的的时候,需要经过resize、crop,或者warp等一系列操作,这都在一定程度上导致信息的丢失和变形,限制了识别精确度。SPP-Net对这些网络中存在的缺点进行了改进,基本思想是:输入整张图像,提取出整张图像的特征图,然后利用空间关系从整张图像的特征图中,在spatial pyramid pooling layer提取各个region proposal的特征。
在介绍SPPNet核心算法之前,强化一下卷积层与特征图。卷积网络部分通过滑窗进行计算,并输出代表激活的空间排布的特征图。所以 特征图==>响应的强度+空间位置。空间金子塔的输出维度:kM维。M代表块的数量,k代表最后一层卷积层的过滤器的数量。这个固定维度的向量就是全连接层的输入。
Fast RCNN算法是年Ross Girshick提出的,在RCNN和SPPNet的基础上进行了改进。根据名字就知道,Fast RCNN更快更强。其训练步骤实现了端到端,基于VGG网络,其训练速度比RCNN快了9倍,测试速度快了倍,在PASCAL VOC数据集达到了.4%的准确率。
Faster RCNN 是作者 Ross Girshick 继 RCNN 和 Fast RCNN后的又一力作。同样使用 VGG作为网络的backbone,推理速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在年的ILSVRC以及cOco竞赛中获得多个项目的第一名。
Faster RCNN = RPN + Fast RCNN
RPN(Region Proposal Network)用来替代SS算法,RPN网络结构图中的 conv feature map 是图像输入网络得到相应的特征图,通过sliding window处理之后产生一个d的一维向量。该向量通过两个全连接层,分别输出分类概率scores和边界框回归参数coordinates,其中k是指 k个 anchor boxes,2k个scores是每个 anchor box 分别为前景和背景的概率(注意这里只区分前景和背景,所有的类别都归为前景),4k个coordinates是因为每个anchor box 有四个参数。
在Faster RCNN中,RPN生成的候选框与Fast RCNN中的候选框不同,RPN生成的候选框会直接在特征图上,而Fast RCNN中的候选框则是在原图上。在Faster RCNN中,候选框生成、特征提取、候选框分类、候选框边界回归这四大部分都结合在一个CNN网络中,避免了分步训练,实现了真正端到端的目标检测。
对比 RCNN、SPPNet、Fast R-CNN 和 Faster R-CNN,Faster R-CNN 是最先进的目标检测模型之一,因为它在速度和准确率之间取得了良好的平衡。如果需要更快的推理速度,Fast R-CNN 也是一个不错的选择。RCNN 和SPPNet 在准确率上可能较低,并且速度较慢,不太适合实时应用。选择模型取决于应用需求和可用计算资源。
Faster-rcnn 代码详解
在深入理解Faster-RCNN的实现过程中,关键部分是fasterRCNN.pytorch中的核心代码。首先,我们关注的是网络的输入数据,包括:coco数据集: 使用的预训练模型基于ResNet,锚框数量为3乘以4,即个。原始图像(P, Q)的尺寸不变,而输入网络(M, N)的图像是经过resize处理后的。
图像数据: im_data是一个4维数组,表示batch内的每张,尺寸为[batch, 3, M, N],所有都被统一调整到(M, N)大小。
图像信息: im_info包含每张的缩放比例等信息,形状为[batch, 3],如M, N和resize后的scale。
gt_boxes: 图像中真实目标的框信息,包括坐标和类别,最多个,实际数量由num_boxes记录。
num_boxes: 每张中真实框的数量,gt_boxes中不足的框用0填充。
整个Faster-RCNN的结构分为几个关键步骤:卷积特征提取: 通过RCNN_base网络,从输入图像中提取特征,输出为base_feat。
RPN网络: 用于计算RoI提议生成的loss,包括类别和边框回归,输出排序后的RoIs。
目标分配: 在训练阶段,通过RCNN_proposal_target确定每个RoI与gt_box的关联,用于计算类别和边框预测的loss。
RoI池化: 用roi_align方法将每个RoI转换为固定尺寸的特征图。
全连接层: 对特征图进行分类和边框预测,计算交叉熵和smooth_l1 loss。
在训练阶段,会根据上述步骤的损失进行反向传播更新网络参数。在测试阶段,通过bbox_transform_inv和nms进行后处理,得到最终的检测结果。 代码中的RPN网络涉及以下几个部分:RPN前置网络: 提供用于RoI提议的基础特征。
RPN提案生成: 通过RPN网络预测锚框的置信度和偏移。
目标锚框分配: 根据gt_boxes分配锚框的标签和目标偏移。
RPN损失: 计算RPN网络的loss。
而RCNN_proposal_target网络则负责gt_box和RoI的匹配,以及ROI Align的实现是后处理中的重要步骤,这里暂不详述。测试阶段的后处理包括修正RoIs并应用NMS来得到最终的检测结果。RPN-区域生成网络-Region Proposal Network(Faster-RCNN)
Faster R-CNN通过区域生成网络RPN(Region Proposal Network)实现了目标检测,其核心在于快速生成可能含有目标的候选区域。RPN是一个基于全卷积网络的模块,它能与检测网络共享特征,无需额外的类别检测,显著提升了检测框生成速度。
RPN网络由两部分构成:首先,一个全卷积层通过3x3卷积后,分支出一个用于分类,通过softmax判断anchor(预定义的矩形框)是目标还是背景,另一个计算偏移量,以精确定位候选区域。最终,这些positive anchors和对应的偏移量被合并为object proposals。
输入的任意大小图像,经过Conv layers的处理,conv和relu层保持尺寸不变,pooling层则使输出减半。这样,每个feature map都能与原图对应,为每个点生成多种anchor作为初始候选框。RPN通过softmax和bounding box regression,筛选出高质量的proposals,进一步提高定位准确性。
在RPN网络中,anchors的生成是关键,它们是预先定义的矩形框,有多种尺寸和长宽比,用于覆盖不同尺度的目标。通过1x1卷积与softmax分类,RPN网络能够初步确定哪些anchor包含目标。然后,bounding box regression进一步微调这些anchor的位置,使之更加精确。
RoI Pooling层在此过程中引入,解决了不同尺寸候选框的问题,它将所有proposals转换为固定大小的特征图,便于后续的识别和分类。Faster R-CNN训练过程分为多个阶段,首先训练RPN网络,然后使用其生成的proposals来训练完整的检测网络。
总结来说,Faster R-CNN的架构包括:输入图像→Conv layers提取特征→RPN生成并筛选proposals→RoI Pooling标准化→分类和位置微调。这个模型通过区域生成网络,显著提高了目标检测的效率和精度。
目标检测算法(R-CNN,fastR-CNN,fasterR-CNN,yolo,SSD,yoloV2,yoloV3)
深度学习已经广泛应用于各个领域,主要应用场景包括物体识别、目标检测和自然语言处理。目标检测是物体识别和物体定位的综合,不仅要识别物体的类别,还要获取物体在图像中的具体位置。目标检测算法的发展经历了多个阶段,从最初的R-CNN,到后来的Fast R-CNN、Faster R-CNN,再到yolo、SSD、yoloV2和yoloV3等。
1. R-CNN算法:年,R-CNN算法被提出,它奠定了two-stage方式在目标检测领域的应用。R-CNN的算法结构包括候选区域生成、区域特征提取和分类回归三个步骤。尽管R-CNN在准确率上取得了不错的成绩,但其速度慢,内存占用量大。
2. Fast R-CNN算法:为了解决R-CNN的速度问题,微软在年提出了Fast R-CNN算法。它优化了候选区域生成和特征提取两个步骤,通过RoI池化层将不同大小的候选区域映射到固定大小的特征图上,从而提高了运算速度。
3. Faster R-CNN算法:Faster R-CNN是R-CNN的升级版,它引入了RPN(区域生成网络)来生成候选区域,摆脱了选择性搜索算法,从而大大提高了候选区域的生成速度。此外,Faster R-CNN还采用了RoI池化层,将不同大小的候选区域映射到固定大小的特征图上,进一步提高了运算速度。
4. YOLO算法:YOLO(You Only Look Once)算法是一种one-stage目标检测算法,它直接在输出层回归bounding box的位置和类别,从而实现one-stage。YOLO算法的网络结构包括卷积层、目标检测层和NMS筛选层。YOLO算法的优点是速度快,但准确率和漏检率不尽人意。
5. SSD算法:SSD(Single Shot MultiBox Detector)算法结合了YOLO的速度和Faster R-CNN的准确率,它采用了多尺度特征图进行目标检测,从而提高了泛化能力。SSD算法的网络结构包括卷积层、目标检测层和NMS筛选层。
6. yoloV2算法:yoloV2在yolo的基础上进行了优化和改进,它采用了DarkNet-作为网络结构,并引入了多尺度特征图进行目标检测。此外,yoloV2还采用了数据增强和新的损失函数,进一步提高了准确率。
7. yoloV3算法:yoloV3是yoloV2的升级版,它采用了更深的网络结构,并引入了新的损失函数和数据增强策略。yoloV3在准确率和速度方面都有显著提升,是目前目标检测领域的主流算法之一。
总之,目标检测算法的发展经历了多个阶段,从最初的R-CNN,到后来的Fast R-CNN、Faster R-CNN,再到yolo、SSD、yoloV2和yoloV3等。这些算法各有优缺点,需要根据实际需求进行选择。当前目标检测领域的主要难点包括提高准确率、提高速度和处理多尺度目标等。
一文详解R-CNN、Fast R-CNN、Faster R-CNN
在计算机视觉领域,目标检测是一项关键任务,它要求对图像中的多个目标进行分类和定位。传统方法依赖人工设计特征,而深度学习的兴起,特别是AlexNet在ILSVRC挑战赛中的胜利,推动了以深度学习为基础的目标检测算法发展。R-CNN系列算法是这一转变的里程碑,包括R-CNN、Fast R-CNN和Faster R-CNN。
Faster R-CNN是R-CNN和Fast R-CNN的进化,它主要解决了前者的训练和测试时间长,占用存储空间大,以及多阶段操作的问题。它的核心改进在于引入了RPN(Region Proposal Network),直接从图像中生成候选区域,显著提升了速度。Faster R-CNN采用了VGG或MobileNet等深度网络作为特征提取器,通过RPN找到候选区域,并通过ROI Pooling进行特征统一,最后通过SoftMax分类器进行目标分类和位置微调。
举例来说,Faster R-CNN在多目标检测任务中,如Pascal VOC数据集,表现出极高的准确性,即使在光照条件不佳的情况下也能检测出大量目标。在医学领域,如血细胞检测,它也展现了良好的识别效果,有助于医疗诊断。在驾驶员驾驶检测中,通过制作数据集并使用Faster R-CNN进行驾驶员行为分析,有助于提高行车安全。
尽管Faster R-CNN取得了显著进步,但它在实时性方面仍有提升空间,One-Stage算法如SSD和YOLO系列在速度上更胜一筹。未来,目标检测可能会融合实例分割和人机交互,进一步提升对目标的理解和识别。随着技术的不断发展,目标检测将更加智能化,为自动驾驶、智能机器人等应用提供关键支持。
一文带你了解 Faster R-CNN
Fast R-CNN是一个深度学习模型,旨在解决计算机视觉中的目标检测问题。该模型包含两个关键组件:建议窗口网络(RPN)和Fast R-CNN主体。
RPN生成建议窗口,通过评估锚点对包含目标物体可能性的排名,挑选最有可能包含物体的框。在Fast R-CNN中,图像位置有9个锚点,锚点的尺度和高宽比影响其覆盖范围。选择性搜索与RPN相比,RPN生成建议窗口的时间成本更低。
锚在Fast R-CNN中扮演着重要角色,它们用于检测不同尺度和形状的对象。例如,图像(x)有9个锚点,包含不同尺寸的区域框。锚点的选择会影响检测结果的准确性与速度。你可以根据特定应用调整锚点类型,以提高网络性能。
RPN预测锚点是否为背景或前景,并细化锚点。训练RPN时,使用准确值框对锚点进行分类和回归。训练数据集由锚点和标签组成,通过调整和妥协分离前景与背景。深度为(9个锚点x 2个标签)的特征向量用于预测前景和背景概率。
边界框回归细化锚点,选择标记为背景的锚点不参与此过程。回归量的损失函数通常使用平滑L1损失。RPN的总体损失由分类损失和回归损失组成。
ROI池化在RPN后处理不同大小的建议窗口,通过固定大小的区域进行Max-Pooling简化问题,实现不同大小特征映射的统一处理。
训练Fast R-CNN模型通常采用先训练RPN,最后的分类器和回归器;或同时训练它们的两种方式。同时训练速度提高1.5倍,精度相似。梯度以两种方式反向传播到CNN。
关于Fast R-CNN的更多代码、链接和参考文献,请参考相关资源。