赞
踩
最近在进行caffe的fine-tuning的实验,在此做个简单地介绍和总结,方便以后的查询。
pre-trainning 与 fine-tuning 简单介绍
在使用大型网络的时候,经常是自己的数据集有限,为此常常会使用现已成熟的网络结构,如:alexnet,Googlenet,vggnet等,可以使用之前在开源社区中已经有人训练好的参数文件(.caffemodel),进行网络的初始化,然后使用自己的数据集进行参数的fine-tuning的过程。pre-trainning 在此,可以看作是caffemodel的参数数据(别人已经训练好或者是自己训练的网络的参数)。只是将原始的随机初始化,变成了已经有一定的使用的成熟的网络参数而已。
fine-tuning 的过程
本文就以vggnet-19 为例 进行介绍
参数与网络的结构使用的是
https://gist.github.com/ksimonyan/3785162f95cd2d5fee77#file-readme-md
1. 获取已有网络的结构(prototxt)和网络参数(caffemodel)
2. 准备好所要替换的自己的数据集,可以仿照原有的网络打包成lmdb或者其他格式的数据,也可以是原始的图像数据,这里不再进行说明,可以参考以前的博文。
3. mean file的计算,这里的话,我是将此文件替换成了自己数据集的mean file(train的集的),但是实验室的另一个大神他说这个是可以不进行替换的,只是一个normal的文件影响不是很大。(此步可以跳过)
4. 根据的自己的需要将最后的全连接的层,以及自己所需要改的层进行名字的修改,不要和原有的层的名称相同即可,caffe网络结构的参数读取,是根据名字将相应的参数读入到网络中的,修改之后,就不会将参数读入到网络中,这些参数就是随机产生的。但是常使用的就是修改最后的全连接层,我这里主要是分类的类别需要修改,例如10分类,改成100分类等。
5.最后是使用caffe的工具将fine-tuning的网络跑起来进行训练。
可以参考caffe的官网:
http://caffe.berkeleyvision.org/gathered/examples/finetune_flickr_style.html
./build/tools/caffe train -solver models/finetune_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel -gpu 0
这里的可以使用GPU或者是不指定,默认使用的是CPU。
以上就是整个过程。其实不难,只是在使用上如何更好的使用到自己的网络中。
以上的方法也是可以只进行卷积的过程,提取深度卷积的特征图,可以将某一层的数据使用python脚本序列化到硬盘上,以备后面的将特征图进行统一格式的处理,放入到其他的分类其上进行分类。(在此有个有趣的东西,就是图像的卷积不需要对图像的尺寸进行限制的,我们可以但用来提取任意大小的图像的特征,在批量计算时需要对数据的维数进行考虑,感兴趣的可以看一下sppnet等,fastercnn等网络,蛮有意思的)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。