0
点赞
收藏
分享

微信扫一扫

VGG论文笔记--VGG训练技巧、测试技巧

在上一篇文章的基础之上,总结一下论文中提出的训练技巧和测试技巧。上一篇文章参考:VGG论文笔记--VGGNet网络架构演变[VGG16,VGG19]

一、训练技巧

技巧1:Scale jittering 尺度扰动

 数据增强

  • 方法一:针对位置

训练阶段: ① 按比例缩放图片至最小边为S

                   ② 随机位置裁剪出224*224区域

                   ③ 随机进行水平翻转

解释:例如一张图片尺寸为512*1024,设置S=256,那么该图片的最短边512就要变成256,1024边自动等比例进行缩放。代码实现时,注意是resize((256)),而不是resize(256,256) 。缩放完成后,随机位置裁剪出224*224的区域,最后进行随机水平翻转。

  • 方法二:针对颜色

修改RGB通道的像素值,实现颜色扰动

S设置方法:

  • 1. 固定值:固定为256,或384
  • 2. 随机值:每个batch的S在[256, 512],实现尺度

 技巧2:预训练模型初始化

1. 深度加深时,用浅层网络初始化     B,C,D,E用A模型初始化

 作者在文章中,写到这样一段话:It is worth noting that after the paper submission we found that it is possible to initialise the weights without pre-training by using the random initialisation procedure of Glorot & Bengio (2010)

 什么意思呢?就是说作者团队在提交实验结果以后,发现用Xavier初始化可以在不进行预训练的情况下初始化权重。当然,现在我们用到最多的应该是BN层初始化

2. Multi-scale训练时,用小尺度初始化

  • S=384时,用S=256模型初始化
  • S=[256, 512]时,用S=384模型初始化

 二、测试技巧

多尺度测试

Step 1 图片等比例缩放至最短边为Q

设置三个Q,对图片进行预测,取平均

  • 方法1 当S为固定值时: Q = [S-32, S, S+32]
  • 方法2 当S为随机值时: Q = (S_min, 0.5*(S_min + S_max), S_max)

解释:例如当我们的S设置为256时,Q=[224,256,288],如果我们的S为[256,512],那么Q=[256,384,512] 

Step 2

第一步进行完以后,我们得到了3个Q,然后作者实验了以下三种方法。最终方法三取得了较好的效果。

  • 方法1 Dense(稠密测试):将FC层转换为卷积操作,变为全卷积网络,sum pool,得到1*1000
  • 方法2 Multi-crop:对图片进行Multi-crop,裁剪大小为224*224,并水平翻转 1张图,缩放至3种尺寸,然后每种尺寸裁剪出50张图片;一共150张 =2*3* 5*5

原文:While we believe that in practice the increased computation time of multiple crops does not justify the potential gains in accuracy, for reference we also evaluate our networks using 50 crops per scale (5 × 5 regular grid with 2 flips), for a total of 150 crops over 3 scales.

  • 方法3 Multi-crop & Dense

  • 1 . mulit - crop 优 于 dense
  • 2 . mulit - crop 结 合 dense,可形成互补,达到最优结果。 

三、实验结果分析

Single scale evaluation

S为固定值时:Q = S, S为随机值时:Q = 0.5(S_min + S_max)

结论:

  • 1. 误差随深度加深而降低,当模型到达19层时,误差饱和,不再下降
  • 2. 增加1*1有助于性能提升
  • 3. 训练时加入尺度扰动,有助于性能提升
  • 4. B模型中,3*3替换为5*5卷积,top1 下降7%

 Multi scale evaluation

方法1 :   Q = [S-32, S, S+32]

方法2: Q = (S_min, 0.5*(S_min + S_max),S_max)

结 论 :测试时采用尺度扰动有助于性能提升

 

举报

相关推荐

0 条评论