如果你要做一个计算机视觉应用,相比于从头训练权重,或者说从随机初始化权重开始,如果你下载别人已经训练好的网络结构的权重,那么你的进展会相当快。用这个预训练,然后转换到你感兴趣的任务上。
假如说你要建立一个猫的检测器,用来检测你自己的宠物猫,我们这里分类3个类别,Tigger、Misty和neither。
方法:
1)首先下载别人的网络及其权重,比如说ImageNet比赛的网络,其有1000类的输出。
2)去掉这个网络的最后一层softmax层,创建自己的softmax单元,比如这里输出Tigger、Misty和neither三个类别。
3)就网络而言,建议把所有的层都冻结住,即冻结住所有层的参数,只需要训练和刚才新创建的softmax层有关的参数
通过使用其他人预训练的权重,你很可能得到很好的性能,即使只有一个小的数据集。
如果有比较多的数据集,这种情况下,你应该冻结更少的层,比如冻结前面部分层,然后训练后面的层
如果你有越多的数据,你需要冻结的层数就越少,你能够训练的层数就越多。
如果你有大量的数据,你应该做的就是用开源的网络和它的权重,把整个的当做初始化,然后训练整个网络,当然,如果你的分类数量与原网络不同,那么你需要换成你自己的softmax输出层。
换句话说,如果你有越多的标定的数据,你就可以训练越多的层,极端情况下,你可以用下载的权重只作为初始化,用它们来代替随机初始化,接着你可以用梯度下降法训练,更新网络所有的层的权重。
数据扩充
大部分的计算机视觉任务使用很多的数据,所以数据增强(data augmentation)是经常使用的一种技巧来提高计算机视觉系统的表现能力
数据增强方法
1)垂直镜像对称
2)随机裁剪(Random Cropping)
可以看出,随机裁剪有时候裁剪的并不好,但是,在实践中还是很有用的。
3)色彩转换(Color shifting)、颜色扭曲(Color distortions)
一般RGB的更改是根据某种概率分布来决定的,这样做的理由是,比如说有时候可能阳光会有点偏黄,或者由于灯光照明,会导致改变图像的颜色。对RGB有不同的采样方式,其中一种算法是PCA(主成分分析),在AlexNet论文中有讲述。
另外,还可以旋转图片,shearing,Local wraping等
多次裁剪方法:对原始图像,1个中心区域裁剪 + 4个角度裁剪,然后将图像镜像,做相同的处理,总共10个crop
内容主要来自与:
Andrew Ng的卷积神经网络课程