论文笔记 《Some Improvements on Deep Convolutional Neural Network Based Image Classif ication》

论文地址:http://arxiv.org/abs/1312.5402

概述

比起Alex2012年时候的err=16.4%的结果,提升了到err=13.44%。
用的方法,概括起来是三个:

  1. 训练时候增加样本
  2. 测试时候增加用于投票的patch
  3. 训练了高分辨率的模型

下面展开叙述。

训练时增加样本

全图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变差了。

最终效果

偷懒,直接贴原文。

很久没有更新网站,发现多了不少评论和问题,无法一一回复,如果现在仍有问题请再次留言 :) 2016.03.29