只是作为笔记使用,较为零碎,没写完,不断完善中…
Two Stages:
1 RCNN:
- 一张图像生成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(直接回归)
- 置信度: 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
- 输出: S ∗ S ∗ ( 5 ∗ B + C ) S*S*(5*B+C) S∗S∗(5∗B+C)的tensor
- 网络结构借鉴GoogLeNet
- NMS
- 均方误差
赋予不同的权重:
λ 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 - 每个cell最多只预测出一个物体
网络结构
网络结构参考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(Classi∣Object)∗Pr(Object)∗IOUpredtruth
2 YOLO v2(YOLO9000: Better, Faster, Stronger)
翻译 来自博主 @Vivia
网络结构
改进策略:
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都单独预测一套分类概率值