Caffe学习笔记(OCR字符识别)

1.一些有用链接

     lr_policy的 通俗说明(solver.cpp GetLearningRate()函数有代码介绍)

         http://stackoverflow.com/questions/30033096/what-is-lr-policy-in-caffe

    深度学习框架上手教程

        http://www.csdn.net/article/2015-01-22/2823663

    caffe小试牛刀(Python编译数字识别)

        http://luoyetx.me/2015/04/little-caffe/

    caffe slides

        http://media.ee.ntu.edu.tw/static/member_webpage/johnjohnlin/slides/20150307-ml.html#/6/4

2.softmax及相关技巧

    最开始训练lenet5以及建超的handwriting网络,发现正确率比较高(97%,98%),但是做测试的时候(examples/cpp_classification/classification.cpp)

    出现分类的置信概率非0即1的奇怪情况

    经过大念的建议,把softmax之前的ip2层数据做了一个变换(/500),然后自己在classifiaction里面做softmax变换  (exp(x)/sum(exp(x)), 目前置信概率基本正常。

3.training 网络,feature extraction,fine-tune等

    数据预处理

            利用自带的convert_imageset函数和compute_image_mean,设置相应的参数即可

            注意一定要进行shuffle操作,否则的话训练会出现问题 -shuffle

    training技巧:

            base_lr这个参数是初始学习率,比较重要,如果不收敛,可以适当调大调小,然后进行尝试

            momentum动量一般设置为0.9,但是如果base_lr太小的情况下也可以适当调大这个参数。 

            lr_policy一般使用step或者inv,具体见1里面的相关说明,细节查看sover.cpp中GetLearningRate()相关说明

    feature extraction:

            根据文档进行即可,想要转换为mat格式需要额外使用python的函数进行leveldb to mat 的转换

    fine-tune:

           根据载入的模型权重进行微调网络,修改的层不载入参数,需要修改名字(例如将lenet-ip2改为28层时需要改变该层的名称)。caffe是根据层的名字进行权重载入的。

           需要进行微调的层的lr_mult(blobs_lr)可以设置的大一些例如10,20,其他层默认1,2,如果不想改变参数的层可直接设置为0即可。

           fine-tune的时候收敛较快,初始学习率可以对应调低。

           使用caffe train  --solver  solver.prototxt   --weight  weight_file  实现

   从训练的模型中恢复继续训练

           caffe train --solver  --snapshot    xxx.solverstate       载入solverstate文件即可再次进行恢复训练

你可能感兴趣的:(图像处理,Caffe)