YOLO9000读书笔记

  YOLOv2作为YOLO的第二个版本,在思想上仍然延续了YOLO的总体思路,还是单阶段检测。其实,作者主要是结合了当时其他人一些较好的方法或者techniques来改进YOLO。
  1、Batch Normalization
  在每一个卷积层之后增加一个BN层。
  2、高分辨率
  增加输入图片的分辨率,首先用448 * 448的分辨率在ImageNet上训练10个epoches。然后把这个网络经过fine-tuning用于检测。
  3、Convolutional with anchor boxes
  (1)借鉴faster r-cnn关于RPN的思想,在特征图的每一个格子中手动生成anchor。关于定位,预测的是坐标的偏移量而不是直接预测坐标,这样有助于网络学习。
  (2)去除了YOLO中的全连接层,去除了最后一个池化层。以416 * 416为输入的分辨率,最终的输出经过了32倍下采样,因此输出的结果是13 * 13。(因为YOLO是以格子来预测物体,所以奇数个格子可以确保物体的中心只落在一个格子中)
  (3)从格子中解耦关于物体概率的预测,而把这个工作交给bounding box来完成。因此,每一个bounding box输出的结果维度是:25(4个坐标+1个置信度+20个分类概率)
  4、Dimension cluster
  作者通过对gt_box聚类的方法,最终选取了5种不同形状的bounding box(对比faster r-cnn是采用了9种不同的anchor),这种方法选取的anchor更具有针对性。聚类的结果显示:这5种anchor的形状大多是瘦高形状的,矮胖型的很少。
  5、Direct location prediction
  关于坐标的预测问题,作者改变了faster r-cnn中关于中心点坐标偏移量的预测方法,而对宽度和高度的缩放量进行预测则是和faster r-cnn中一致。
  为什么要这么做呢?作者认为产生的bounding box有可能出现在任何位置,这样会导致收敛困难。
  ( ps:我觉得作者的想法有待商榷,因为在faster r-cnn中,会计算每个anchor和gt_box的IOU,如果IOU大于阈值0.7,那么对应的anchor才会被采用,如果0.3   从作者提供的公式来看(不支持公式,就不上公式了),处理方式还是延续了YOLO的思想,计算bounding box的中心点和所在格子左上角坐标的偏移量,来达到归一化的目的。这种做法,会把bounding box的中心点限制在每个格子距离为1的范围之内,确实可以加快收敛的速度。
  6、Fine-Grained Features
  YOLOv2在最后生成的13 * 13的特征图上进行检测,对于大目标的物体来说是足够 的。但是,对于小物体的检测能不能提高效果呢?所以,作者借鉴了SSD中在不同的feature map上进行检测的方法(在前面的特征图中检测小目标,在后面的特征图中检测大目标)。
  但是,实现的方法和SSD中不同,作何借鉴了ResNet中的思想,增加了一个passthrough层来实现。作者把倒数第2层,即 26 * 26 * 512这个feature map直接进行reshape,变成 13 * 13 * 2048,然后把它和最后一层13 * 13的feature map进行concat。

你可能感兴趣的:(YOLO9000读书笔记)