目标检测算法面试基础知识合集RCNN、Fast RCNN、FasterRCNN、YOLO系列、SSD、FPN、RetinaNet

这篇博客详细介绍了目标检测领域的经典算法,从RCNN开始,包括SPP-Net、Fast R-CNN、Faster R-CNN的改进和发展,接着探讨了YOLO系列(YOLOv1、YOLOv2、YOLOv3)和SSD的工作原理、优缺点。博主深入解析了每个算法的关键技术和损失函数,特别关注了如何处理目标框的预测和调整,以及训练策略。此外,还讨论了不同算法在处理小物体检测和速度效率上的差异,展示了目标检测技术的演进路径。
摘要由CSDN通过智能技术生成

R-CNN

  1. 利用selective search提出region proposal(RP),将这些RP warp到统一的大小。
  2. 将上一步的RP一个接一个串联送入卷积神经网络提取特征,并将这些特征保存到硬盘上。
  3. 读取硬盘上保存的特征送入SVM进行分类。
  4. 将SVM分类好的RP送入bbox regressor进行回归处理。

优点

  1. 使用了卷积神经网络进行特征提取
  2. 使用bounding box regression进行目标包围框的修正
  3. 精度显著提高,PASCAL VOC2010从35.1%到53.7%。
  4. 将CNN网络应用于目标检测领域并实现了图像特征自动提取。

缺点

  1. 耗时的selective search,对一帧图像,需要花费2s。
  2. 耗时的串行式CNN前向传播,对于每一个RoI,都需要经过一个AlexNet提特征,为所有的RoI提特征大约花费47s。
  3. 三个模块是分别训练的,并且在训练的时候,对于存储空间的消耗很大。

SPP-Net

pipeline

  1. 同样也用selective search等方法提取出候选区域(RP)。
  2. 对原图进行一次特征提取,计算出RP在feature map上的映射patch。
  3. 将patch送入spp layer统一池化到相同的大小。
  4. 在送到之后的层,完成分类和回归。

优点

  1. 引入了空间金字塔池化,适应各种不同尺寸的特征图。
  2. R-CNN要对每个RP算一次卷积,而SPP-Net只算一次卷积,再找出RP在feature map对应的patch,通过spp layer统一到同样大小,节约了大量时间。

缺点

  1. 同样该网络不是end-end的。

Fast R-CNN

pipeline

  1. 同样也是用selective search选择出2000个region proposal(RP)。
  2. (像SPP-Net一样)对原图进行一次特征提取,找到RP在feature map上映射的patch,将patch送入ROI pooling layer统一下采样到7 x 7。
  3. 之后跟全连接层,使用softmax替代SVM分类,同时利用多任务损失函数边框回归也加入到了网络中,这样整个的训练过程是端到端的(除去Region Proposal提取阶段)。

优点

  1. 引入spp pooling,只用对图像做一次特征提取然后在feature map上找到对应patch,pool到统一大小。
  2. 引入多任务学习,分类和回归共享卷积特征。
  3. 除去region proposal外整个网络是end to end的。
  4. 在VOC2012的mAP提升到了68.4%,而R-CNN为62.4%。

缺点

  1. 还是要预先提取region proposal,非常耗时。

Faster R-CNN

主要改变是取消了region proposal,提出一个新的网络region proposal network(RPN)来生成待检测区域。

pipeline

  1. 使用共享的卷积层提取图片特征,将提取到的特征送入RPN生成待检测框,并对待检测框进行修正。
  2. 根据RPN的输出在feature map上选取对应的patch,送入ROI pooling layer,输出统一大小(6 x 6)。
  3. 之后和Fast R-CNN一样,送入全连接层,然后进行回归和分类。

优点

  1. Faster R-CNN是真真正正的end to end的网络。
  2. 采用了先验框,网络学习的是对于先验框的偏移,比直接学习框的位置要容易些。
  3. 在GPU上达到了实时(5fpsbased VGG & 17fps based ZF)。
  4. 精度高了,COCO检测42.1%,而Fast R-CNN为39.3%。

缺点

  1. 对小物体的检测还是不太好。
  2. 速度还是不够快。

细节

因为faster r-cnn的细节较多,这里单列一个小节来着重讲解。

  • RPN

    RPN在feature map上先进行3 x 3的滑动窗口卷积且output_channels = 256,之后在分别进行两个1 x 1的卷积 ,第一个卷积是输出cls,输出channel为2 * k(2是二分类,判断anchor是前景还是背景,即判断这个anchor里有没有目标,k是anchaor数量,文中设置为9);第二个卷积是输出reg,输出channel为4 * k(4是anchor的4个坐标偏移量[x, y, w, h],k同上)。

    • k个anchor

    文中为每个位置预先设定好了k=9个长宽比与面积的先验框,这9个先验框包含三种面积(128 x128,256 x 256, 512 x 512),每种面积又包含三种长宽比(1:1,1:2, 2:1) 。

    • anchor的分类

    anchor的分类采用softmaxLoss进行训练,那么anchor的label是什么呢?文中做出了如下定义:如果一个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数量比较多(对于40 x 60的特征图,有40 x 60 x 9 = 21600个),因此随机抽取128个前景anchor与128个背景anchor进行训练。

    • anchor的回归

    anchor的回归主要是训练anchor的修正值[ t x , t y , t w , t h t_x, t_y, t_w, t_h tx,ty,tw,th],这四个值的意思是修正后的anchor在原来anchor基础上x和y方向上的偏移(由 t x , t y t_x, t_y tx,ty决定),并且长宽放大一定倍数(由 t w , t h t_w, t_h tw,th决定)。让我们看看[ t x , t y , t w , t h t_x, t_y, t_w, t_h tx,ty,tw,th]的公式定义:
    t x = ( x − x a ) / w a , t x ∗ = ( x ∗ − x a ) / w a t y = ( y − y a ) / h a , t y ∗ = ( y ∗ − y a ) / h a t w = l o g ( w / w a ) , t w ∗ = l o g ( w ∗ / w a ) t h = l o g ( h / h a ) , t h ∗ = l o g ( h ∗ / h a ) t_x = (x - x_a) / w_a, \quad t_x^* = (x^* - x_a) / w_a \\ t_y = (y - y_a) / h_a, \quad t_y^* = (y^* - y_a) / h_a \\ t_w = log(w/w_a), \quad t_w^* = log(w^*/w_a) \\ t_h = log(h/h_a), \quad t_h^* = log(h^*/h_a) tx=(xxa)/wa,tx=(xxa)/waty=(yya)/ha,ty=(yya)/hatw=log(w/wa),tw=log(w/wa)th=log(h/ha),th=log(h/ha)

    x, y, w, h分别代表anchor的中心点坐标和宽高。x代表预测的anchor, x a x_a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值