一、联合训练算法
这种算法可以把这两种的数据集混合到一起。使用一种分层的观点对物体进行分类,用巨量的分类数据集数据来扩充检测数据集,从而把两种不同的数据集混合起来。
联合训练算法的基本思路:
同时在检测数据集和分类数据集上训练物体检测器(Object Detectors),用检测数据集的数据学习物体的准确位置,用分类数据集的数据来增加分类的类别量、提升鲁棒性。
二、YOLO V2的架构
1. backbone
- 网络抛弃了全连接,采用全卷积 FCN 的架构,因此可以输入任意大小的图片。
- 在每个卷积层之后都使用了 BN。BN 的作用是为了是网络更容易收敛,除此之外还有正则化的作用,可以防止过拟合。
- 使用了跨层连接,这个借鉴了 ResNet 的 identity mapping 思想。跨层连接的一个大好处是使梯度更容易前传,也就是说可以让网络训练变得更容易。但是,这个跨层连接有点别致,一般的跨层连接,会通过求和或者通道连接进行特征融合,但是 yolov2 在融合之前还添加了一个 reorganization 的操作。经过这样的操作,实际上已经把 feature map 的排布重整了,直觉上觉得这么做不太好,但事实证明它是可行的。不过这么做的一个好处就是将所有的信息都传递到后面的层,并没有因为下采样等操作导致损失信息,因此获得了更多细粒度的特征。
2. reorganization
就是将大分辨率的 feature map 进行重新排布得到分辨率更小的 feature map,相应的通道数增加。举例来说,如果网络的输入维度是 3x416x416,那么 conv13_512 的维度则是512x26x26,将其进行重新排布之后则变成 2048x13x13。这个重新排布如图:
实际上就是将一个 feature map 变成了更小的 feature map,但是通道数变多了。
三、YOLO V2的改进措施
1. Batch Normalization
使用 Batch Normalization 对网络进行优化,让网络提高了收敛性,同时还消除了对其他形式的正则化的依赖。通过对 YOLO 的每一个卷积层增加 Batch Normalization,最终使得 mAP 提高了 2%,同时还使模型正则化。使用 Batch Normalization 可以从模型中去掉 Dropout,而不会产生过拟合。
2. High resolution classifier
目前业界标准的检测方法,都要先把分类器(classifier)放在 ImageNet 上进行预训练。从 Alexnet 开始,大多数的分类器都运行在小于
256*256
的图片上。而现在 YOLO 从224*224
增加到了448*448
,这就意味着网络需要适应新的输入分辨率。为了适应新的分辨率,YOLO v2 的分类网络以448*448
的分辨率先在 ImageNet 上进行微调,微调 10 个 epochs,让网络有时间调整滤波器(filters),好让其能更好的运行在新分辨率上,还需要调优用于检测的 Resulting Network。最终通过使用高分辨率,mAP 提升了 4%。
3. Convolution with anchor boxes
- YOLO V1 包含有全连接层,从而能直接预测 Bounding Boxes 的坐标值。 Faster R-CNN 的方法只用卷积层与 Region Proposal Network 来预测 Anchor Box 偏移值与置信度,而不是直接预测坐标值。作者发现通过预测偏移量而不是坐标值能够简化问题,让神经网络学习起来更容易。
- 所以最终 YOLO 去掉了全连接层,使用 Anchor Boxes 来预测 Bounding Boxes。作者去掉了网络中一个池化层,这让卷积层的输出能有更高的分辨率。收缩网络让其运行在
416*416
而不是448*448
。由于图片中的物体都倾向于出现在图片的中心位置,特别是那种比较大的物体,所以有一个单独位于物体中心的位置用于预测这些物体。YOLO 的卷积层采用 32 这个值来下采样图片,所以通过选择416*416
用作输入尺寸最终能输出一个13*13
的特征图。 使用 Anchor Box 会让精确度稍微下降,但用了它能让 YOLO 能预测出大于一千个框,同时 recall 达到 88%,mAP 达到 69.2%。
4. Dimension clusters
- 之前 Anchor Box 的尺寸是手动选择的,所以尺寸还有优化的余地。 为了优化,在训练集的 Bounding Boxes 上跑一下 k-means 聚类,来找到一个比较好的值。
- 如果用标准的欧式距离的 k-means,尺寸大的框比小框产生更多的错误。目的是提高 IOU 分数,这依赖于 Box 的大小,所以距离度量的使用:
5. Direct location prediction
- 用 Anchor Box 的方法,会让 model 变得不稳定,尤其是在最开始的几次迭代的时候。大多数不稳定因素产生自预测 Box 的(x,y)位置的时候。按照之前 YOLO 的方法,网络不会预测偏移量,而是根据 YOLO 中的网格单元的位置来预测坐标,这就让 Ground Truth 的值介于 0 到 1 之间。而为了让网络的结果能落在这一范围内,网络使用一个 Logistic Activation 来对于网络预测结果进行限制,让结果介于 0 到 1 之间。
- 网络在每一个网格单元中预测出 5 个 Bounding Boxes,每个 Bounding Boxes 有五个坐标值 tx,ty,tw,th,t0,他们的关系见下图。假设一个网格单元对于图片左上角的偏移量是 cx、cy,Bounding Boxes Prior 的宽度和高度是 pw、ph,那么预测的结果见下图右面的公式:
因为使用了限制让数值变得参数化,也让网络更容易学习、更稳定。Dimension clusters和Direct location prediction,使 YOLO 比其他使用 Anchor Box 的版本提高了近5%。
6. Fine-Grained Features
YOLO 修改后的特征图大小为 13*13
,这个尺寸对检测图片中尺寸大物体来说足够了,同时使用这种细粒度的特征对定位小物体的位置可能也有好处。Faster-RCNN、SSD 都使用不同尺寸的特征图来取得不同范围的分辨率,而 YOLO 采取了不同的方法,YOLO 加上了一个 Passthrough Layer 来取得之前的某个 26*26
分辨率的层的特征。这个 Passthrough layer 能够把高分辨率特征与低分辨率特征联系在一起,联系起来的方法是把相邻的特征堆积在不同的 Channel 之中,这一方法类似与 Resnet 的 Identity Mapping,从而把 26*26*512
变成 13*13*2048
。YOLO 中的检测器位于扩展后(expanded )的特征图的上方,所以能取得细粒度的特征信息,这提升了 YOLO 1% 的性能。
7. Multi-Scale Training
区别于之前的补全图片的尺寸的方法,YOLOv2 每迭代几次都会改变网络参数。每 10 个 Batch,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是 32,所以不同的尺寸大小也选择为 32 的倍数 {320,352……608},最小 320*320
,最大 608*608
,网络会自动改变尺寸,并继续训练的过程。
这一策略让网络在不同的输入尺寸上都能达到一个很好的预测效果,同一网络能在不同分辨率上进行检测。当输入图片尺寸比较小的时候跑的比较快,输入图片尺寸比较大的时候精度高,所以可以在 YOLOv2 的速度和精度上进行权衡。