YoloV2

1. 动机

YOLOv2 和 YOLO9000重点解决YOLOv1召回率和定位精度方面的不足。YOLOv2 是一个先进的目标检测算法,比其它的检测器检测速度更快。除此之外,该网络可以适应多种尺寸的图片输入,并且能在检测精度和速度之间进行很好的权衡。相比于YOLOv1是利用全连接层直接预测Bounding Box的坐标,YOLOv2借鉴了Faster R-CNN的思想,引入Anchor机制。利用K-means聚类的方法在训练集中聚类计算出更好的Anchor模板,大大提高了算法的召回率。同时结合图像细粒度特征,将浅层特征与深层特征相连,有助于对小尺寸目标的检测。

YOLO9000 使用 WorldTree 来混合来自不同资源的训练数据,并使用联合优化技术同时在ImageNet和COCO数据集上进行训练,能够实时地检测超过9000种物体, YOLO9000 的主要检测网络还是YOLOv2。

2.方法概要

  • 加BN
  • 加Anchor
  • 最新两阶段目标检测算法_深度学习

  • 具体来说,c_x,c_y是一个0-1的量,是grid的yo lo格式的坐标,然后\sigma(t_x), \sigma(t_y)是目标的bbox在yo lo格式下的中心距离grid中心的偏移量预测, \exp^{t_w}h和\exp_{t_h}就是一种伸缩度吧,把anchor伸缩一下。这里加sigmoid和Exp函数说是想让收敛的更好一点。
  • 最新两阶段目标检测算法_pytorch_02

  • kmeans聚类得到anchor:这一步没啥意思,就是想让训练过程中使用的base- anchor更符合物体的需求,不要像传统的anchor随便给。这个base给的好,训练时就容易收敛,即便将来测试集和训练集差的比较大,也能够通过这个基于统计得来的base- anchor给出一个说得过去的结果。具体方法如下:
  • 拿到GT标注和随机初始化的anchor们,然后去把GT的所有bbox和随机初始化的anchor们计算distance(distance=1-IOU(anchor们,GT们)),然后把每个GT分配到distance最近的那个anchor下,这样就把数据集中所有的物体给划分成几簇了,这个划分过程是类别无关的,划分完后,在每个簇下面,再次计算这堆bbox的whd的均值,这就是GT们最终要用的base- anchor的形状。
  • Fine Grained Feature: 细粒度特征,可理解为不同层之间的特征融合。YOLOv2通过添加一个Passthrough Layer,把高分辨率的浅层特征连接到低分辨率的深层特征(把特征堆积在不同Channel中)而后进行融合和检测。具体操作是:先获取前层的26×26的特征图,将其同最后输出的13×13的特征图进行(采样)连接,而后输入检测器进行检测(而在YOLOv1中网络的FC层起到了全局特征融合的作用),以此来提高对小目标的检测能力。
  • 最新两阶段目标检测算法_神经网络_03

3.细节或注意事项

没啥了,另外将YOLOv1网络的FC层和最后一个Pooling层去掉,使得最后的卷积层的输出可以有更高的分辨率特征。用的是1x1的conv和global avg pooling做的后面这块。

4. 评价

  • 看起来都是优点了哈,感觉没啥算法上可以改的点了,看后面YOlov3怎么编。