YOLOv2

在这里插入图片描述
YOLOv2的论文内容十分丰富,它涵盖了作者团队的大量想法和尝试,这其中有借鉴、也有新探索。本文对其内容进行简单的介绍。

1. 论文综述

论文中从 “Better”,到 “Faster”,再到 “Stronger”,介绍了从 YOLOv1YOLOv2/YOLO9000的演进过程。下面对文章大体内容做简略概括,后文会有更详细讨论。

  1. BetterAccuracy
    首先,针对YOLOv1定位能力差、召回率低等问题,作者提出了**“一篮子”改进方案**,并做了大量实验,这些在后面会一一介绍。
  2. FasterFLOPs
    YOLO是以速度著称的,作者不希望为了追求性能而舍弃速度,因此提出了一种新的网络结构——Darknet-19
  3. StrongerGeneralization
    作者希望YOLO能够检测相当丰富类别的目标,奈何检测数据集过于稀缺~ 因此作者提出了联合训练的概念,即同时使用“分类集”和“检测集”,试图提高模型的泛化检测能力

YOLO演进

2. Better → Accuracy
  • (1) 批归一化(Batch Normalization)
    批归一化是2015年出现的十分有效的一种正则化方法,作者在所有卷积层后面都加入BN层,并去除了之前的dropout层,这使得网络的mAP提升了2.4%。
  • (2) 过渡训练(High Resolution Classifier)
    YOLOv1中,网络的feature extractor在224×224的ImageNet上训练,然后直接拿到448*448的YOLO上训练,这使得网络需要同时学习检测和适应新分辨率;
    YOLOv2中先在ImaneNet上用448×448的分辨率 fine tune for 10 epochs,而后再进行检测训练,从而给了模型调整其filter适应新分辨率的时间。
  • (3) 卷积锚框(Convolutional With Anchor Boxes)
    YOLOv1中使用FC层,基于卷积特征,来直接预测bbox的坐标,这是比较复杂的,而且YOLOv1中有一个简单得“过分”的处理,即每一个grid cell中所有box仅预测同一类别。这都严重影响了YOLO的检测定位性能;作者借鉴Faster R-CNN的anchor box思想,其中的RPN仅用卷积层来预测box的偏移量(也就是只需要预测dx, dy);并且anchor box数量庞大,可以有望提高召回率。
    最终做法是,去掉FC层,改用anchor来预测;减少一层pooling,提高卷积输出的分辨率;输入分辨率改为416×416,在32步长的下采样下可以使输出特征层13×13位奇数;每个anchor都预测自己的类别与目标(而非YOLOv1中同一个grid只预测一组类别信息)。
  • (4) 尺寸聚类
    使用anchor会有一个问题,即引入了超参数:w,h;于是作者索性用K-means方法,对训练集中标注的边框进行聚类分析,从而力图选取更合适的先验值(better priors);
    另外,这里K-means的距离函数用IOU距离代替传统距离(欧氏距离下,larger boxes generate more error than smaller boxes)。
    在这里插入图片描述
  • (5) 偏移约束(Direct location prediction)
    作者发现使用anchor时,模型在训练过程中十分不稳定,究其原因,是anchor中的偏移量预测没有进行约束,导致训练过程中anchor跳来跳去;所以作者决定采用与YOLOv1中类似的基于grid的相对坐标预测,并用sigmoid函数对偏移量预测进行约束,具体如下图;通过这种做法,模型稳定性有所提高。
    在这里插入图片描述
  • (6) 细粒度特征 (Fine-Grained Features)
    作者希望提高YOLO检测小目标的能力,于是对网络结构进行调整来获得细粒度特征。然而,与Faster R-CNN和SSD中的FPN不同,作者提出了passthrough层来对相邻特征进行通道堆叠,采用类似ResNet的identity mapping的方法来进行细粒度特征传递。示意图如下图(第一张图显示了passthrough层干的事儿,就是将一张图拆成多个通道获得细粒度特征的过程;第二张图显示了粗粒度与细粒度特征融合的过程)
    在这里插入图片描述在这里插入图片描述
  • (7) 多尺度训练
    作者为了提高模型对不同尺寸输入图片的鲁棒性,在训练中随机调整input的尺寸:{320, 352,…,608}。需要注意的是,这得益于之前用卷积锚框代替了FC层,这使得允许特征提取层输出不同尺寸的特征图。
    这种处理可以允许模型在不同分辨率下使用;低分辨率速度快,高分辨率准确度高,从而允许使用者在速度和准确度上做一个权衡。
    在这里插入图片描述
    在这里插入图片描述
3. Faster → FLOPs

作者为了提高YOLO的检测性能,希望使用一个新的网络结构。VGG-16?计算量有点庞大!GoogleNet(YOLOv1)?准确度不够!那就设计一个又快又准的网络,并称之为Darknet-19吧!(19个卷积层+5个maxpool层)
使用Darknet-19后,224×224输入分辨率下,计算量5.58billion FLOPs(VGG-16 30.69,Googlenet 8.52),且ACC也有所提升~
从下图我们可以看到,Darknet中借鉴了其他网络的经验;借鉴VGG的3×3 filter,每次maxpooling后通道数翻倍;借鉴NIN的global avgpool和1×1 filter;使用BN层正则化。
在这里插入图片描述
不过这只是training for classification,当 for detection时,需要对网络结构进行微调:在这里插入图片描述
至此,YOLOv2的基本改进已经介绍完了,更多技术细节可以参见原文和源码;下面开始介绍最后一个部分:YOLOv2→YOLO9000

4. Stronger → Generalization

在这里插入图片描述
前面提到,作者希望YOLO能够检测更大范围的目标种类,奈何相比分类数据集(ImageNet),检测数据集的规模少得可怜(COCO、VOC),于是作者提出了一种联合训练的方法,即将分类集检测集进行混合,训练时随机抽取,遇到不同数据集时使用不同的损失函数即可。

不过,这里有一个问题:ImageNet和COCO的类别信息,并不都是简单的独立或重合问题,而是有“包含关系”。比如COCO中有“dog”类,到了ImageNet中成了“Norfolk terrier”、“Yorkshire terrier”、“Bedlington terrier”等一窝terrier。要知道,这不符合我们一般分类中的“互斥”假设(mutually exclusive)。

针对这个问题,作者提出了层次分类的方法,即使用树结构来对类别信息之间的关系进行建模,从而构建出一棵WordTree
在这里插入图片描述
在这个wordtree里面,每一个节点计算其代表一个类别的条件概率,父节点与子节点的类别信息之间则表现出包含与被包含关系。作者通过将类别信息进行这种二维建模,替代传统的一维模型,解决了上述问题。

比如作者建立起来的WordTree一共1369个类别,所以网络需要预测一个(1369, )维的向量,并每一组同义词集合(synset)单独使用softmax计算其条件概率。当树建立起来之后,便可以根据链式法则来求解每一个节点的绝对概率了。
在这里插入图片描述
最后,作者利用COCO和9000类ImageNet建立起一个庞大的混合数据集,并加入了过采样(oversample)方法来缓解两种数据集不均衡问题,最终在200类ImaneNet detection task上做了测试。
在这里插入图片描述
这个部分这里就简单介绍这么多,原文中这个部分讲的也算比较清楚,所以更多细节(技术细节、结果评价)可以参照论文。

我想说,YOLO9000给了我一种全新的视野,联合训练是一种美妙又很棘手的事情;其实从YOLOv1的end-to-end网络结构设计以来,YOLO的宗旨就是力图用简单的方法解决复杂的问题。YOLOv1是将“分类环节”与“检测环节”联合训练,YOLO9000则是将“分类数据集”与“检测数据集”联合训练,从而成就了一种更加统一(unified,取自YOLOv1)的网络!他利用有限的资源(dataset),带给网络更大的视野,力图使他能够泛化到更庞大的类别空间中。

5. 总结

从YOLOv1到YOLOv2,作者尝试了丰富的策略,大到网络结构(Darknet、advanced-anchorBox、passthrough、BN),小到训练策略(过度训练、多尺度训练、偏移约束),还带给我们一些有意思的想法(聚类选取超参)。

从YOLOv2到YOLO9000,则提出了联合训练和层级分类,给了我们一个全新的视野。

最后最精髓的论文总结,不如交给作者自己:
在这里插入图片描述
欢迎指正与交流~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值