VGGNet 输入要求256(图像大小),均值是256的,减均值后再crop到224(输入图像大小)
Vgg-Net:笔记
CNN improvement:
有很多对其提出的CNN结构进行改进的方法。例如:
1. Use smaller receptive window size and smaller stride of the first convolutional layer.
2. Training and testing the networks densely over the whole image and over multiple scales.
CNN Configuration Principals:1. CNN的输入都是224×224×3的图片。
2. 输入前唯一的预处理是减去均值。
3. 1×1的核可以被看成是输入通道的线性变换。
4. 使用较多的卷积核大小为3×3。
5. Max-Pooling 一般在2×2的像素窗口上做,with stride 2。
6. 除了最后一层全连接的分类层外,其他层都需要使用rectification non-linearity(RELU)。
7. 不需要添加Local Response Normalization(LRN),因为它不提升效果反而会带来计算花费和内存花费,增加计算时间。(现在流行用BatchSize)
CNN Configuration卷积层的通道数目(宽度)从64,每过一个max-pooling层翻倍,到512为止。
Use filters with 3×3 size throughout the whole net, because a stack of two 3×3 conv layers (without spatial pooling in between)
has an effective receptive of 5×5, and three a stack of 3×3 conv layers has a receptive of 7×7, and so on.
为甚么使用三层3×3代替一层7×7?
第一,三层比一层更具有判别性;
第二,假设同样的通道数C,那么三层3×3的参数数目为3×(3×3)C×C=27C×C,一层7×7参数数目为7×7×C×C=49C×C。大大减少了参数数目。
使用1*1的卷积核可以在不影响视野域的情况下增加判别函数的非线性。该核可以用于“Network in Network”网络结构,可以参考论文。
Training
论文推测,本文的网络比原来的网络要更容易收敛,原因有二:1. Implicit regularization imposed by greater depth and smaller conv filter sizes(卷积尺寸变小,参数会减少)
2. Pre-initialisation of certain layers.(某些层的预初始化)
如图中的A网络,得到参数后,当训练更深的网如E时,使用A中得到的参数初始化对应的层,新层的参数则随机初始化。使用这样的方式进行初始化,不改变步长。
224×224输入的获得,将原始图片等比例缩放,保证短边大于224,然后随机选择224×224的窗口,还要考虑随机的水平仿射和RGB通道切换(.m或者用caffe自带的读)。
Multi-scale Training(多尺度训练)
多尺度的意义在于图片中的物体的尺度有变化,多尺度可以更好的识别物体。有两种方法进行多尺度训练。在不同的尺度下,训练多个分类器,参数为S,参数的意义就是在做原始图片上的缩放时的短边长度。
论文中训练了S=256和S=384两个分类器,其中S=384的分类器的参数使用S=256的参数进行初始化,且将步长调为10e-3。由0.01->0.001
另一种方法是直接训练一个分类器,每次数据输入时,每张图片被重新缩放,缩放的短边S随机从[min, max]中选择,
本文中使用区间[256,384],网络参数初始化时使用S=384时的参数。
Testing
测试使用如下步骤:首先进行等比例缩放,短边长度Q大于224,Q的意义与S相同,不过S是训练集中的,Q是测试集中的参数。Q不必等于S,相反的,对于一个S,使用多个Q值进行测试,然后去平均会使效果变好。
然后,对测试数据进行测试。(重要)
1.将全连接层转换为卷积层,第一个全连接转换为7×7的卷积,第二个转换为1×1的卷积。
2.Resulting net is applied to the whole image by convolving the filters in each layer with the full-size input. The resulting output feature map is a class score map with the number channels equal to the number of classes, and the variable spatial resolution, dependent on the input image size.
3.Finally, class score map is spatially averaged(sum-pooled) to obtain a fixed-size vector of class scores of the image.
Implementation
使用C++ Caffe toolbox实现支持单系统多GPU
多GPU把batch分为多个GPU-batch,在每个GPU上进行计算,得到子batch的梯度后,以平均值作为整个batch的梯度。
论文的参考文献中提出了很多加速训练的方法。论文实验表明,在4-GPU的系统上,可以加速3.75倍。
Convnet Fusion
模型融合,方法是取其后验概率估计的均值。train(top1,top5) = model1(24.8,7.5)融合 model2(24.8,7.5)-> test top5(24.0,7.1)融合两个最好的model可以达到更好的值