论文地址:http://arxiv.org/abs/1312.5402
概述
比起Alex2012年时候的err=16.4%的结果,提升了到err=13.44%。
用的方法,概括起来是三个:
- 训练时候增加样本
- 测试时候增加用于投票的patch
- 训练了高分辨率的模型
下面展开叙述。
训练时增加样本
全图crop
Alex的crop方法是将缩放原图使得短边为256,然后截掉长边多余的内容直到图片分辨率为256*256,然后做224*224的随机crop出patch为训练样本。这样会丢失约30%的像素。
文中方法做了修改:
- 缩放原图使得短边为256
- 在256*N或者N*256的图片上直接随机crop出patch为224*224作为训练样本
效果差异如下图:
更多的颜色空间变换
Alex在PCA做扰动来增加样本。
文中在做PCA扰动之前,先用PIL对图片的contrast,brightness,color做一个[0.5, 1.5]的随机缩放。
测试时候增加投票的patch
Alex原来是10个patch((4corner+center)*2flip)来投票,这里用了3个尺度和3个视角,于是总共有90个patch。
多尺度
即将原图缩放到228*228和284*284,注意到上采样和下采样采用的都是bicubic的插值法。(OpenCV默认的插值法是bilinear的)
多视角
取256*N或者N*256中的做仲有或者上中下三个视角
用贪心算法来减少投票的patch
为了提高效率,用了贪心算法,结果表示10个patch能够达到不错的效果,15个patch效果更佳。
本段的方法产生的效果的见下图:
前两步对单个模型的提升的效果
下图说明了前两步(训练用更多样本,测试时用更多的patch),使top1提升了约3%。将全连接层的神经元数量倍增的效果不明显。
训练高分辨率模型
将原图缩放到448*N(N*448),然后也是截取224*224的区域,那么就相当于用到了高分辨率模型。注意到几点:
- 为了也能用到低分辨率时候的样本,可以将之前256*256的样本数据截取128*128的patch然后缩放到224*224
- 使用前一个模型来pretrain的话,能够加快收敛
- 训练的参数看论文
- 最后test时候的patch高达162,要使用上述的贪心算法
效果如下图:
从结果上看,单个高分辨率模型top1变好了,但是top5变差了。
最终效果
偷懒,直接贴原文。