关于物体检测的小结

物体检测算法的思想可以分为三种:
1.One-stage:以YOLO,SSD为例的算法。对输入的图像通过CNN提取特征,直接回归物体的类别概率和位置坐标值。
2.Two-stage:以R-CNN,Fast R-CNN, Faster R-CNN为例的算法,先生成候选框(Region Proposals),使用启发式方法(selective search)或者CNN网络(RPN)产生候选框,然后再对每个候选框进行分类。
3.End-to-end Object Detector:有些论文中把NMS-free的网络单独做为一类,例如CenterNet,DETR等网络。

其中,对于Detector中的很多组件,都有很多不同类型:

  • Anchor-based和Anchor-free

在《Bridging the Gap Between Anchor-based and Anchor-free Detection》中提到两者的区别为:how to define positive and negative training samples

在这里插入图片描述

YOLOv1

v1论文

  • 图像的输入大小为 448 × 448 448\times448 448×448(由于YOLOv1最后的输入是两个全连接层,所以限制了图像的输入大小),然后将图片分为 S × S S\times S S×S个网格,对于每个单元格生成 B B B个边界框(bounding box)以及边界框的置信度(confidence score),对于v1, S = 7 , B = 2 S=7,B=2 S=7B=2
  • 图像的输出是一个 7 × 7 × 30 7\times7\times30 7×7×30的大小(类别数量是 20 20 20类的时候),等同于每一个单元格的输出都是 30 30 30维。 20 20 20个对象的概率 + 2 2 2个bounding box * 4 4 4个坐标 + 2 2 2个bounding box的置信度。
  • 置信度包括两个方面: A A A:边界框含有目标可能性的大小,有0和1两个值; B B B:边界框的准确度,预测框和实际框(ground truth)的IOU(intersection over union,交并比),最后 A × B A\times B A×B就是置信度。
  • 边界框:保存四个值 ( x , y , w , h ) (x, y, w, h) x,y,w,h),都是相对于单元格的比例,所以大小都在0-1之间, ( x , y ) (x,y) x,y表示物体边界框的中心位置。
  • 分类任务,每一个单元格有 C C C个类别概率值,不管一个单元格预测多少个边界框,只预测一组类别概率值,这是Yolo算法的一个缺点。
  • 最后,每个单元格会预测 ( B × 5 + C ) (B \times 5 + C) (B×5+C)个值。
  • 网络结构参考GoogLeNet模型,包含24个卷积层和2个全连接层,对于卷积层,主要使用1x1卷积来做channle reduction,然后紧跟3x3卷积。对于卷积层和全连接层,采用Leaky ReLU激活函数: m a x ( x , 0.1 x ) max(x, 0.1x) max(x,0.1x)。但是最后一层却采用线性激活函数。
  • NMS(non maximum suppression,非极大值抑制),为了去掉模型预测后的多余框,其一般设有一个nms_threshold=0.5。(1)首先将所有的边界框按照置信度大小排序,取最大的那个;(2)计算与剩下边界框的IOU,将大于所设定阈值的边界框去掉(IOU大,说明重合度高,我们不需要重复的边界框);(3)接下来,重复上述过程。
  • YOLO使用了均方和误差作为loss函数,由三部分组成:坐标误差、IOU误差和分类误差。

YOLOv2

v2论文

  • Batch Normalization:YOLOv2中每个卷积层后面都加了Batch Normalization层,并且不再使用Dropout。
  • YOLOv1最后采用的是全连接层直接对边界框进行预测,边界框的宽与高是相对整张图片大小的,而由于各个图片中存在不同尺度的物体,在训练过程中学习适应不同物体的形状是比较困难的,这也导致YOLOv1在精确定位方面表现较差。YOLOv2借鉴了先验框的思想,最后移除了YOLOv1中的全连接层而采用了卷积和anchor boxes来预测边界框。
  • 使用卷积层代替全连接层,首先不会限制图像输入的尺寸,其次,全连接层对于空间信息的处理更差,全连接层在图像分类的使用很多,因为图像分类会更在意图像中是否存在检测目标。
  • 图片的输入大小为 416 × 416 416\times416 416×416,下采样的倍数为 32 32 32,最终得到的特征图大小为 13 × 13 13\times13 13×13,维度是奇数,这样特征图恰好只有一个中心位置,而大物体的中心点往往落在图片中心位置。
  • 不同于YOLOv1,YOLOv2使用了先验框之后,每个位置的各个anchor box都单独预测分类概率值。
  • YOLOv1只能预测 98 98 98个边界框 ( 7 × 7 × 2 ) (7\times7\times2) (7×7×2),YOLOv2可以预测上千个 ( 13 × 13 × a n c h o r s _ n u m ) (13\times13\times anchors\_num) (13×13×anchors_num)
  • YOLOv2采用K-Means聚类方法对训练集中的边界框做了聚类分析。设置先验框的主要目的是为了使得预测框与ground truth的IOU更好,所以聚类分析时选用box与聚类中心box之间的IOU值作为距离指标:1-IOU(box, centroid)。
  • YOLOv2使用Darknet-19来提取特征,包括19个卷积层和5个maxpooling层。

YOLOv3

v3论文

  • YOLOv3使用残差模型提取特征,因为包含 53 53 53个卷积层,所以称为Darknet-53,从网络结构上看,相比Darknet-19网络使用了残差单元,所以可以构建得更深。
  • 使用FPN架构(Feature Pyramid Networks for Object Detection)实现多尺度检测,每种尺度预测 3 3 3个box。小尺寸特征图用于检测大尺寸物体,而大尺寸特征图检测小尺寸物体。
  • 预测框内物体的置信度score,在v3之前,使用softmax函数,默认所有的分类都是互斥的,但是在v3使用的是sigmoid函数,即逻辑回归,这个可以处理重叠的多标签问题。

SSD

Single Shot MultiBox Detector中英文翻译

  • 采用多尺度特征图用于检测,由SSD的网络结构可以看出,SSD使用6个不同特征图检测不同尺度的目标。使用比较大的特征图来检测相对较小的目标,而小的特征图负责检测大目标。
  • 采用卷积进行检测,SSD直接采用卷积对不同的特征图来进行提取检测结果。
  • SSD采用VGG16作为基础模型,然后在VGG16的基础上新增了卷积层来获得更多的特征图以用于检测。

R-CNN

R-CNN
在这里插入图片描述

  • 采用Selective Search算法在图像中从上到下提取2000个左右的Region Proposal。
  • 将每个Region Proposal缩放成277x277的大小输入到CNN中,将CNN的fc7层的输出作为特征。
  • 使用SVM对提取的特征分类。
  • 对于SVM分类做NMS,然后Region Proposal做边框回归,用Bounding box回归值校正原来的Region Proposal,生成预测窗口坐标。

Fast R-CNN

Fast R-CNN论文
在这里插入图片描述

  • 采用Selective Search生成2000个左右的候选区域(Region Proposal)。
  • 使用CNN对整张图片提取特征,最后一个卷积层后加了一个ROI pooling layer,可以生成固定的尺寸。
  • 将Region Proposal应用在feature map上,实现了特征图共享,特征抽取仅需计算一次
  • 损失函数使用了multi-task loss(多任务损失)函数,将边框回归直接加到CNN网络中训练。分类Fast R-CNN直接用softmax替代R-CNN用的SVM进行分类,每个类别对应一个regressor。利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练。
  • Fast R-CNN将整张图像归一化后直接送入CNN,在最后的卷积层输出的feature map上,加入候选框信息,使得在此之前的CNN运算得以共享。

Faster R-CNN

Faster R-CNN论文
Faster R-CNN中英文翻译

  • 将整张图片输入CNN,进行特征提取。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。

  • 使用RPN生成候选区域(anchors),通过softmax判断anchors属于positive或者negative,同时另一分支再利用bounding box regression修正anchors获得较为精确的proposals(这里的较精确是相对于后面全连接层的再一次box regression而言)。RPN在(m,n)特征图上会产生m x n x 9个anchor,计算每个产生的anchor和标注框的交并比IoU,大于0.7为前景,小于0.3为背景,去除0.3-0.7之间的anchor。对剩下的anchor输入RoIPooling层。

  • Roi(Region of Interest) Pooling层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。Roi pooling层的过程就是为了将proposal抠出来的过程,然后resize到统一的大小(14 * 14),然后下采样到7 * 7 * 512最后输入全连接,最后进行边框精修和分类。

  • 利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。

参考博客:
YOLOv3

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值