• [caffe笔记]:模型构成、数据转换和常用命令行接口


    一.caffe模型基本组成:

    预处理图像的leveldb/lmdb构建 

    输入:一批图像和label (2和3) 

    输出:leveldb/lmdb (4) 

    指令里包含如下信息:

    1. conver_imageset (构建leveldb的可运行程序)
    2. Images/ (此目录放处理的jpg或者其他格式的图像)
    3. label.txt (图像文件名及其label信息)
    4. 生成的leveldb文件夹的名字
    5. 例如:

    6. 一般分类问题数据转换可用caffe自带工具 ./build/tools/convert_imageset.bin, 因为我训练用的是Siamese网络,输入的是数据对,所以转换数据文件参考网上http://blog.csdn.net/sheng_ai/article/details/48174729 改写,代码请见http://github.com/CharleneZhao/convert_siamese_imageset

    CNN网络配置文件

    1.  train_test.prototxt   包含训练和测试网络配置的文件
    2.  solver.prototxt  包含全局参数配置,求解的配置的文件

    二、一些常用且基础的接口(cmdcaffe)

    注:在使用cmdcaffe时,需要默认切换到caffe_root文件夹下

    1.训练模型,以mnist为例子

    ./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt
    (或者可以写脚本注明更多的参数设置:比如load已经训练好的模型权重、规定gpu号等,这是命令行来训练的形式,也可以采用Python接口或matlab接口)

    2.观察各个阶段的运行时间可以使用

    ./build/tools/caffe time --model=models/bvlc_reference_caffenet/train_val.prototxt

    3.使用已有模型提取特征

    ./build/tools/extract_features.bin models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
    examples/_temp/imagenet_val.prototxt conv5 examples/_temp/features 10

    conv5表示提取第五个卷积层的特征,examples/_temp/features表示结果存放的目录(目录需提前构建好),10表示特征提取数据批量数目

    4.对已有模型进行find-tuning,比如我们现在有一个1000类的分类模型,但目前我们的需求仅是20类,此时我们不需要重新训练一个模型,只需要将最后一层换成20类的softmax层,然后使用已有数据对原模型进行fine-tuning即可。

      在很多时候,使用Caffe框架学习深度学习模型时,从ImageNet或者其他大型数据集从头开始训练获得一个fine-tuing合适的模型难度太大,这时候最好的情况,就是在已经训练好的模型上面来进行fine-tuning,通过这些过程可以加深自己对深度学习,以及对caffe使用的了解和熟悉,以方便自己在后续提出自己的模型,自己进行模型训练和fine-tuning的过程。

    已经训练好的caffe模型可以在git的caffe项目中下载,比较经典的模型有:AlexNet.caffemodel , LeNet.caffemodel , RCnn.caffemodel,其他的大家可以在caffe的git官网上面下载。

    使用自己的数据集对已经训练好的模型进行fine-tuning的操作(使用cmdcaffe接口来进行):

    ./build/tools/caffe train 
    -solver models/finetune_flickr_style/solver.prototxt
    -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
    -gpu 0 2>&1 | tee log.txt
    (此处相当于第一条训练的补充版,当然也可以写成脚本来实现,更为方便)

    5.用draw_net.py画网络模型的步骤

    $make pycaffe
    $pip install pydot
    $sudo apt-get install graphviz
    $cd caffe
    
    (e.g.)$ ./python/draw_net.py ./examples/siamese/mnist_siamese.prototxt 
    ./examples/siamese/mnist_siamese.png

    第一个参数为模型文件,第二个参数为所绘模型图的保存地址

  • 相关阅读:
    如何在Unity中播放影片
    C# typeof()实例详解
    unity3d用鼠标拖动物体的一段代码
    unity3d中Find的用法
    geometry_msgs/PoseStamped 类型的变量的构造
    c++ ros 计算两点距离
    C++ 利用指针和数组以及指针和结构体实现一个函数返回多个值
    C++ 结构体指针的定义
    Cannot initialize a variable of type 'Stu *' with an rvalue of type 'void *'
    C++中的平方、开方、绝对值怎么计算
  • 原文地址:https://www.cnblogs.com/Charlene-HRI/p/7245573.html
Copyright © 2020-2023  润新知