YOLOv2阅读笔记

YOLO9000: Better,Faster,Stronger

论文下载:YOLOv2论文下载

论文翻译参考:YOLOv2中英文对照


YOLO虽然快,但是其准确率,召回率,以及可检测的类别比较少,因此作者提出一系列改进改进方法,先是在保持分类准确的同时,针对召回率与准确率的提升,得到YOLOv2,然后使用数据组合与联合训练的方法,得到YOLO9000,提高了可检测类别数目。

1.Introduction  引言

目标检测数据集相对于分类数据集是比较小的,为提高目标检测可以检测到的类别,作者提出一种利用已有的分类数据来扩大可检测范围的方法,使用分类的分层视图,从而允许将不同的数据集组合在一起。还提出一种联合训练算法,可以在分类数据集和检测数据集上训练目标检测器,主要是利用检测数据集来学习定位,用分类数据集增加词表和鲁棒性。


2.Better

进行各种优化,各优化效果如上表所示。作者并没有加深网络深度或者扩大宽度,而是简化网络,让网络更容易学习表示。

(1)Batch Normalization.

BN(Batch Normalization)层简单讲就是对网络的每一层的输入都做了归一化,这样网络就不需要每层都去学数据的分布,可以加快收敛。YOLOv1算法(采用的是GoogleNet网络提取特征)是没有BN层的,因此在YOLOv2中作者为每个卷积层都添加了BN层。另外由于BN可以规范模型,所以加入BN后就把dropout去掉了。实验证明添加了BN层可以提高2%的mAP。

(2)High Resolution Classifier   高分辨率分类器

原YOLO以224×224的分辨率训练网络,并将分辨率提高到448×448进行检测。这意味着模型必须适应图像分辨率的改变。

而YOLOv2则将预训练分成两步:先用224*224的输入从头开始训练网络,大概160个epoch(表示将所有训练数据循环跑160次),然后再将输入调整到448*448,再训练10个epoch进行微调。注意这两步都是在ImageNet数据集上操作。最后再在检测的数据集上fine-tuning,则detection的时候用448*448的图像作为输入就可以顺利过渡了。作者的实验表明这样可以提高几乎4%的MAP。

(3)Convolutional With Anchor Boxes.

YOLOv1直接使用全连接层来预测bounding box的坐标。Faster R-CNN使用手动选择的先验框(hand-picked priors)来预测边界框而不是直接预测坐标。Faster R-CNN中的区域提出网络(region proposal network,RPN)仅使用卷积层来预测anchor box的偏移和置信度。由于预测层是卷积的,所以RPN在特征映射的每个位置上预测这些偏移。预测偏移而不是坐标简化了问题,并且使网络更容易学习。

YOLOv2借鉴Faster R-CNN思想引入anchor box来预测边界框。删除YOLOv1中的全连接层和最后一个池化层,使网络卷积层输出具有更高的分辨率。我们还缩小了网络,操作416×416的输入图像而不是448×448。这样做是因为要在特征映射(feature map)中有奇数个位置,从而只有一个center cell。对于大目标,往往占据图像的中心,所以在中心有一个单独的cell来预测这些目标,而不是四个cell比较好。YOLOv1的卷积层将图像下采样32倍(因为一共有五个f=2,s=2的最大池化层),所以通过使用416的输入图像,得到了13×13的输出特征映射。

YOLOv1每张图像只预测7*7*2=98个边界框,但是使用anchor box后的YOLOv2模型预测超过一千(以13*13为例,若一个grid cell有9个anchor box,则一共有13*13*9=1521个)。作者的实验证明:虽然加入anchor使得MAP值下降了一点(69.5降到69.2),但是提高了recall(81%提高到88%)。

(4)Dimension Clusters 维度聚类

当引入anchor box后,若能够使用较好的初始anchor box,则模型学习更好更快,最终检测的就更好。因此作者在训练集的真实框坐标上使用了K-means聚类算法,作者没有使用标准的欧式距离的K-means聚类算法(因为大边界框会比小边界框产生更多的误差,而需要的是误差与box的尺寸之间没有太大关系),所以通过IOU定义了如下所示的距离函数:

实验不同的K值后,权衡模型复杂度与更好的检测效果后,选定了K=5,即一个grid cell有5个anchor box,此时AVG IOU=61,效果等同于不适用聚类算法的K=9。使用聚类算法的K=9可以达到更好的效果69.7.。

聚类的簇个数  与   最终检测结果与真实框的IOU   有关。聚类的结果中矮胖的box比较少,高瘦的box比较多。

(5)Direct location prediction  

引入anchor box后遇到的第二个问题是模型变得不稳定,尤其是在早期的epoch中,造成不稳定的因素主要来自预测边界框的x,y,

原来使用anchor box的RPN(region proposal network)预测是偏移量offset,任何一个anchor box都可以结束于图片中任意一点,所以随机初始化的模型需要很长时间才能变得稳定,预测到合适的偏移量。在基于region proposal的object detection算法中,是通过预测下图(感觉应该是+号)中的tx和ty来得到(x,y)值,也就是预测的是offset。

这里xa和ya是anchor的坐标,wa和ha是anchor的size,x和y是坐标的最终结果值,tx和ty是模型预测的偏移量。

而YOLOv2中不预测偏移量,与YOLOv1相似,预测相对于grid cell的相对坐标,从而限制了ground truth落于0-1,作者使用了一个逻辑激活函数(sigmoid)来限制预测值落于0-1.

YOLOv2为每一个grid cell预测5个bounding box(k=5),每一个bounding box预测5个值:tx, ty, tw, th, and to(类似YOLOv1中的confidence):

tx和ty经过sigmoid函数处理后范围在0到1之间,这样的归一化处理也使得模型训练更加稳定

cx与cy为当前网格相对于图片左上角的offset,pw与ph为预测的先验框(anchor box)的宽高

bw,bh为最终输出的宽高,为具体数值;bx,by为最终输出预测框的中点相对于图片左上角的坐标。

注意:区分模型预测结果与最终输出结果,最终输出结果是模型预测结果进行处理后输出。上图中黑色框是预测结果bounding box,蓝色框是最终输出的结果(把整个流程当作黑匣子,则也可视作预测结果)。

(6)Fine-Grained Features  细粒度特征

主要是添加了一个:passthrough layer  直通层

目的在于虽然13*13的的feature map 对于预测大的object已经足够,但对于预测小的object不一定有效。越小的object,经过层层卷积和池化,可能到最后都不见了,所以通过合并前一层的大一点的feature map,可能有效检测小的object。

其作用是将前一层的26*26的feature map和本层的13*13的feature map 进行连接,类似ResNet的identity mapping恒等映射,主要是通过堆叠来连接相邻层的不同大小的特征到不同的通道,而不是到不同的空间位置,通过这样的方式,将浅层的26*26*512特征图叠加为13*13*2048,然后与原来的深层的特征图连接,而检测器位于扩充后的特征图之后,从而使模型可以获得细粒度的特征。

(7)Multi-Scale Training   多尺度训练

YOLOv1中训练时图片的输入尺寸固定。

因为YOLOv2中只使用了卷积层和池化层,因此可以调整输入图片大小。

每隔10个epoch,随机从{320,352,384,416,448,480,512,544,576,608}中选择一个尺度大小(均为32的倍数),因为下采样缩小了32倍,因此模型输入最小是320*320,最大是608*608,这样不断调整网络尺寸来训练。

这样的做法使得模型可以预测不同分辨率下的图片的结果。小的分辨率上运行快,从而实现在速度与准确率上的一个权衡。

这种做法仅在检测数据集上进行fine tune时使用,前两步160epoches+10epoches上未使用。


3. Faster

大多数检测框架依赖于VGG-16作为的基本特征提取器,VGG-16是一个强大的,准确的分类网络,但它参数过多,计算复杂。

YOLOv1框架使用基于Googlenet架构的自定义网络。这个网络比VGG-16更快,然而,它的准确性比VGG-16略差。

Darknet-19。提出了一个新的分类模型作为YOLOv2的基础。与VGG模型类似,大多使用3×3滤波器,并在每个池化步骤之后使通道数量加倍。按照Network in Network(NIN)的工作原理,使用全局平均池化(global average pooling)替代全连接层做预测以及1×1滤波器来压缩3×3卷积之间的特征表示。我们使用batch normalization来稳定训练,加速收敛,并正则化模型。

Darknet-19,它有19个卷积层和5个最大池化层。ImageNet上达到了72.9%的top-1准确率和91.2%的top-5准确率。

Training for classification 分类训练 都是在ImageNet上进行训练

第一步:使用Darknet神经网络结构,使用随机梯度下降SGD(stochastic gradient descent ),初始学习率为0.1,学习率多项式衰减系数为4,weight decay=0.0005,momentum=0.9,在标准ImageNet 1000类分类数据集上训练网络160个迭代周期。在训练过程中,使用标准的数据增强(data augmentation)技巧,包括随机裁剪(random crops),旋转(rotation),色调(hue),饱和度(saturation)和曝光(exposure shifts)变换偏移。

第二步:在对224×224的图像进行初始训练之后,对网络在更大的尺寸448上进行了微调。对于这种微调fine-tune,使用上述参数进行训练,但是只有10个迭代周期,并且以0.001学习率开始,参数除了学习率与epoch外都没变。在这种更高的分辨率下,网络达到了76.5%的top-1准确率和93.3%的top-5准确率。

Training for detection 检测训练

前面已经两步了,现在是第三步训练

修改这个网络进行检测,删除了最后一个卷积层,加上了三个具有1024个3*3滤波器的卷积层,每个卷积层后跟着一个1×1卷积层,1*1卷积层的过滤器的数目根据需要检测的类的数量来定。对于VOC,每个grid cell需要预测5个边界框,每个边界框有5个坐标和20个类别,所以有125(B*(5+C)=5*(5+20)=125)个滤波器。与YOLOv1不同,在YOLOv1中每个grid cell有30个filter(B*5+C),还记得那个7*7*30的矩阵吗,而且在YOLOv1中,类别概率是由grid cell来预测的,也就是说一个grid cell对应的两个box的类别概率是一样的,但是在YOLOv2中,类别概率是属于box的,每个box对应一个类别概率,而不是由grid cell决定,因此这边每个box对应25个预测值(5个坐标加20个类别值),而在YOLOv1中一个grid cell的两个box的20个类别值是一样的)。作者还添加了从最后一个3×3×512层到倒数第二层卷积层的直通层passthrough layer,以便模型可以使用细粒度特征。

训练网络160个迭代周期,初始学习率为0.001,在第60个和第90个迭代周期时将学习率除以10。使用0.0005的权重衰减和0.9的动量。对YOLO和SSD进行类似的数据增强,随机裁剪,色彩偏移等。对COCO和VOC使用相同的训练策略。


4. Stronger

这一部分内容主要针对YOLO9000,故不做重点阅读。

YOLO9000的主网络基本和YOLOv2类似,只不过每个grid cell只采用3个box prior

提出一种联合训练机制来同时使用分类数据集和检测数据集,检测数据集来学习定位,分类数据集(仅具有类别标签)来扩展可检测的类别以及增加模型鲁棒性。

在训练期间,混合来自检测和分类数据集的图像。当网络看到标记为检测的图像时,可以基于完整的YOLOv2损失函数进行反向传播。当它看到一个分类图像时,只能从该架构的特定分类部分反向传播损失。


一般检测数据集仅含有通用标签,如狗,而分类数据集中狗的类别可能会有上百种。因此需要合并标签。

大多数分类方法使用的时softmax层来计算最终的概率分布,此时各种类别是互斥的,概率和为1.

作者使用了多标签模式来组合假定为不互斥的类别数据,

Hierarchical classification.

ImageNet标签是从WordNet中提取的,具有层次关系。WordNet的结构是有向图,而不是树,如狗是一种犬科动物,也是一种被驯化的动物,作者不适用完整的WorldNet图结构,而是构建分层树来简化问题。

。。。。。。

Dataset combination with WordTree.

。。。。。。

Joint classification and detection.

。。。。。。

。。。。。。这一部分大致看了看,日后需要再添加

猜你喜欢

转载自blog.csdn.net/m0_37857151/article/details/83869428