论文: YOLO9000:Better,Faster,Stronger
本文用于总结YOLOv2的演进点,便于记忆:
第一类:网络设计层面
1. BN:每个卷积层都引入了batch norm技术;
2. High Resolution Classifier:检测输入图像由224->448,提高了分辨率;
3. Convolutional With Anchor Boxes:首先将原网络的全连接层和最后一个pooling层去掉,使得最后的卷积层可以有更高分辨率的特征;然后缩减网络,用416*416大小的输入代替原来448*448。当然由后面第4点可知,最终每个grid cell选择5个anchor box
4. Dimension Clusters:通过聚类,获得5类BBox;
5. location prediction: 通过预测相对于gridcell和anchor的offset,这一点借鉴了Fast-RNN.
6. passthrough: 将前面一层的26*26的feature map和本层的13*13的feature map进行连接,有点像ResNet。
7. Backbone:采用了darnet-19,包含19个卷积层和5个max pooling层;
第二类,训练方法:
1. Multi-scale training
不是固定输入图像的大小,我们改变网络每几次迭代。我们的网络每10批随机选择一个新的图像尺寸。由于我们的模型将样本向下压缩了32倍,我们从以下32的倍数中提取:{320,352,…608}。因此最小的选项为320×320,最大的选项为608×608。我们将网络调整到那个维度并继续培训。
2、Training for Classification
这里的training for classification都是在ImageNet上进行预训练,主要分两步:1、从头开始训练Darknet-19,数据集是ImageNet,训练160个epoch,输入图像的大小是224*224,初始学习率为0.1。另外在训练的时候采用了标准的数据增加方式比如随机裁剪,旋转以及色度,亮度的调整等。2、再fine-tuning 网络,这时候采用448*448的输入,参数的除了epoch和learning rate改变外,其他都没变,这里learning rate改为0.001,并训练10个epoch。结果表明fine-tuning后的top-1准确率为76.5%,top-5准确率为93.3%,而如果按照原来的训练方式,Darknet-19的top-1准确率是72.9%,top-5准确率为91.2%。因此可以看出第1,2两步分别从网络结构和训练方式两方面入手提高了主网络的分类准确率。
3、Training for Detection
在前面第2步之后,就开始把网络移植到detection,并开始基于检测的数据再进行fine-tuning。首先把最后一个卷积层去掉,然后添加3个3*3的卷积层,每个卷积层有1024个filter,而且每个后面都连接一个1*1的卷积层,1*1卷积的filter个数根据需要检测的类来定。比如对于VOC数据,由于每个grid cell我们需要预测5个box,每个box有5个坐标值和20个类别值,所以每个grid cell有125个filter(与YOLOv1不同,在YOLOv1中每个grid cell有30个filter,还记得那个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的卷积层和倒数第二个卷积层相连。最后作者在检测数据集上fine tune这个预训练模型160个epoch,学习率采用0.001,并且在第60和90epoch的时候将学习率除以10,weight decay采用0.0005。