1. 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

只是作为笔记使用,较为零碎,没写完,不断完善中…

Two Stages:

1 RCNN:

1. 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD_第1张图片

  • 一张图像生成1K~2K个候选区域 (selective search)
  • 对每个候选区域,使用深度网络提取特征
  • 特征送入每一类的SVM分类器,判别是否属于该类
  • 使用回归器精细修正候选框位置

2 Fast RCNN(R-CNN + SPPNet):

  • 共享卷积
  • RoI pooling layer(max)

3 Faster RCNN:

RPN(自动产生候选框)(Anchor机制)

One Stage:

1 YOLO v1(直接回归)

1. 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD_第2张图片
1. 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD_第3张图片

  1. 置信度: P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object)*IOU^{truth}_{pred} Pr(Object)IOUpredtruth
  2. 输出: S ∗ S ∗ ( 5 ∗ B + C ) S*S*(5*B+C) SS(5B+C)的tensor
  3. 网络结构借鉴GoogLeNet
  4. NMS
  5. 均方误差
    赋予不同的权重:
    λ c o o r d = 5 , λ n o o b j = 0.5 , λ o b j = λ c l a s s = 1 \lambda_{coord} = 5, \lambda_{noobj} = 0.5, \lambda_{obj} = \lambda_{class} = 1 λcoord=5,λnoobj=0.5,λobj=λclass=1
  6. 每个cell最多只预测出一个物体

网络结构

1. 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD_第4张图片
网络结构参考GooLeNet模型,包含24个卷积层和2个全连接层
1X1卷积
NMS

问题

1.1 如何确定物体落在cell的中心?

一开始一直没弄明白,找了半天没有找到,后来知乎上看到一篇解释,
实际上,“物体落在哪个cell,哪个cell就负责预测这个物体” 要分两个阶段来看,包括训练和测试。
1 训练阶段。在训练阶段,如果物体中心落在这个cell,那么就给这个cell打上这个物体的label(包括xywh和类别)。也就是说我们是通过这种方式来设置训练的label的。换言之,我们在训练阶段,就教会cell要预测图像中的哪个物体
2 测试阶段。因为你在训练阶段已经教会了cell去预测中心落在该cell中的物体,那么cell自然也会这么做。
可以看这里

1.2 cell如何产生2个bounding box?

个人理解应该是初始化的时候给出来初始bounding box,然后不断迭代优化得到。

1.3 cell能否预测多个目标?

不能,如果一个cell要预测多个目标,那么B个predictor要如何分工预测多个目标?无法确定。而像faster rcnn这类算法,可以根据anchor与ground truth的IOU大小来安排anchor负责预测哪个物体,所以后来yolo v2也采用了anchor思想,同个cell才能预测多个目标。

1.4 为什么要预测两个bounding box?

既然我们一个cell只能预测一个目标,为什么还要预测两个bounding box(或者更多)?这个还是要从训练阶段怎么给两个predictor安排训练目标来说。在训练的时候会在线地计算每个predictor预测的bounding box和ground truth的IOU,计算出来的IOU大的那个predictor,就会负责预测这个物体,另外一个则不预测。这么做有什么好处?我的理解是,这样做的话,实际上有两个predictor来一起进行预测,然后网络会在线选择预测得好的那个predictor(也就是IOU大)来进行预测。通俗一点说,就是我找一堆人来并行地干一件事,然后我选干的最好的那个。 这点知乎stone说的容易理解。

1.5 测试阶段根本没有ground truth,那怎么计算IOU?

P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object)*IOU^{truth}_{pred} Pr(Object)IOUpredtruth
实际上,在测试阶段,网络只是输出了confidece这个值,但它已经包含了 P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object)*IOU^{truth}_{pred} Pr(Object)IOUpredtruth ,并不需要分别计算Pr(object)和IOU。为什么?因为你在训练阶段你给confidence打label的时候,给的是 P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object)*IOU^{truth}_{pred} Pr(Object)IOUpredtruth 这个值(这个值是一个总的值),你在测试的时候,模型预测的也是这个值。

1.6 类别预测

P r ( C l a s s i ∣ O b j e c t ) ∗ P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Class_i|Object)*Pr(Object)*IOU^{truth}_{pred} Pr(ClassiObject)Pr(Object)IOUpredtruth



2 YOLO v2(YOLO9000: Better, Faster, Stronger)

翻译 来自博主 @Vivia

网络结构

1. 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD_第5张图片

改进策略:

2.1 Batch Normalization (批量归一化)

所有卷积层上添加批量标准化,有助于模型正则化,从模型中删除dropout而不会过度拟合

2.2 High Resolution Classifier(大尺度预训练分类)

ImageNet预训练
YOLO 对应训练过程分为两步:
第一步是通过 ImageNet 训练集 进行高分辨率的预训练,这一步训练的是分类网络;
第二步是训练检测网络,是在分类网络的基础上进行 fine tune。
图像越大,检测效果越好, YOLOv2用448*448

2.3 Convolutional With Anchor Boxes

YOLOv2移除了YOLOv1中的全连接层而采用了卷积和anchor boxes来预测边界框
YOLOv2的卷积层将图像缩小了32倍,因此通过使用416 * 416的输入图像,我们得到13 * 13的输出特征图
使用anchor boxes我们的模型预测超过1000个boxes(因为YOLOv2模型下采样的总步长为32,对于416*416大小的图片,最终得到的特征图大小为13*13,维度是奇数,这样特征图恰好只有一个中心位置。对于一些大物体,它们中心点往往落入图片中心位置,此时使用特征图的一个中心点去预测这些物体的边界框相对容易些。所以在YOLOv2设计中要保证最终的特征图有奇数个位置。)
每个位置的各个anchor box都单独预测一套分类概率值


3 YOLO v3



4 YOLO v4



4 SSD

你可能感兴趣的:(七月在线CV面试题)