zoukankan      html  css  js  c++  java
  • caffe训练自己的图片(分类)

    https://blog.csdn.net/legalhighhigh/article/details/82284126

    这个基本上按照大神的笔记来的。

    学习参考
    大神不仅提供了训练图片,还有详细的训练过程,包括转换源码,非常感谢。

    总的来说用caffe来训练分类,可以分为几个步骤。

    • 下载图片,生成.txt,这个txt用于转换图片格式的参数用到了
    • 把训练图片转换成lmdb格式
    • 计算图片均值
    • 修改网络参数和网络的图片路径等
    • 训练网络

    大分为以上5个步骤。其实最开始三个环节都可以归类位准备数据环节。

    ###下载图片及生成清单###
    图片来源于大神提供:
    图片下载地址
    这里写图片描述
    分为训练和测试两个文件,训练大约400个,测试100个。
    每个里面都是五个分类,标签是3,4,5,6,7。
    下载后将图片放在caffe的data文件夹里。

    大神谢了一个脚本实现了txtx参数的生成,在评论里有大神说用python比较方便,这里提供了两种方法:
    首先,在examples下面创建一个myfile的文件夹,来用存放配置文件和脚本文件。然后编写一个脚本create_filelist.sh,用来生成train.txt和test.txt清单文件。

    # sudo mkdir examples/myfile
    # sudo vi examples/myfile/create_filelist.sh
    
    • 1
    • 2

    编辑此文件,写入以下代码:

    #!/usr/bin/env sh
    DATA=data/re/
    MY=examples/myfile
    
    echo "Create train.txt..."
    rm -rf $MY/train.txt
    for i in 3 4 5 6 7 
    do
    find $DATA/train -name $i*.jpg | cut -d '/' -f3-5 | sed "s/$/ $i/">>$MY/train.txt
    done
    echo "Create test.txt..."
    rm -rf $MY/test.txt
    for i in 3 4 5 6 7
    do
    find $DATA/test -name $i*.jpg | cut -d '/' -f3-5 | sed "s/$/ $i/">>$MY/test.txt
    done
    echo "All done"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    或者编写一个py文件create_filelist.py

    # sudo mkdir examples/myfile
    # sudo vi examples/myfile/create_filelist.py
    
    • 1
    • 2

    编辑内容如下:

    # -*- coding: utf-8 -*-
    
    import os
    data_path='data/re/'
    my='examples/myfile/'
    classes=[3,4,5,6,7]
    
    def gen_txt(phase):
        f=open(my+phase+'.txt','w')
        for c in classes:
            folder=str(c)
            images=os.listdir(data_path+phase+'/')
            for img in images:
                f.write(phase+'/'+img+' '+folder+'
    ')
    
    gen_txt('train')
    gen_txt('test')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    接着在caffe根目录下执行即可。

    # sudo sh examples/myfile/create_filelist.sh
    #或者
    # sudo python examples/myfile/create_filelist.py
    
    • 1
    • 2
    • 3

    成功的话,就会在examples/myfile/ 文件夹下生成train.txt和test.txt两个文本文件,里面就是图片的列表清单。
    这里写图片描述

    ###转换成lmdb格式###
    使用convert_imagese来转换格式,

    # sudo vi examples/myfile/create_lmdb.sh
    
    • 1

    编写脚本内容如下:

    #!/usr/bin/env sh
    MY=examples/myfile
    
    echo "Create train lmdb.."
    rm -rf $MY/img_train_lmdb
    build/tools/convert_imageset 
    --shuffle 
    --resize_height=256 
    --resize_width=256 
    /home/xxx/caffe/data/re/ 
    $MY/train.txt 
    $MY/img_train_lmdb
    
    echo "Create test lmdb.."
    rm -rf $MY/img_test_lmdb
    build/tools/convert_imageset 
    --shuffle 
    --resize_width=256 
    --resize_height=256 
    /home/xxx/caffe/data/re/ 
    $MY/test.txt 
    $MY/img_test_lmdb
    
    echo "All Done.."
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    因为图片大小不一,因此需要统一转换成256*256大小。运行成功后,会在 examples/myfile下面生成两个文件夹img_train_lmdb和img_test_lmdb,分别用于保存图片转换后的lmdb文件。

    这里写图片描述

    ###计算均值###
    图片减去均值再训练,会提高训练速度和精度。因此,一般都会有这个操作。
    caffe程序提供了一个计算均值的文件compute_image_mean.cpp,可以直接使用

    # sudo build/tools/compute_image_mean examples/myfile/img_train_lmdb examples/myfile/mean.binaryproto
    
    • 1

    compute_image_mean带两个参数,第一个参数是lmdb训练数据位置,第二个参数设定均值文件的名字及保存路径。
    运行成功后,会在 examples/myfile/ 下面生成一个mean.binaryproto的均值文件。

    ###修改训练参数及网络###
    模型就用程序自带的caffenet模型,位置在 models/bvlc_reference_caffenet/文件夹下, 将需要的两个配置文件,复制到myfile文件夹内

    # sudo cp models/bvlc_reference_caffenet/solver.prototxt examples/myfile/
    # sudo cp models/bvlc_reference_caffenet/train_val.prototxt examples/myfile/
    
    • 1
    • 2

    我们常用到的就是这两个文件,一个是训练参数,一个是网络参数
    修改其中的solver.prototxt

    # sudo vi examples/myfile/solver.prototxt
    
    • 1

    这里写图片描述
    主要是修改路径和训练参数,迭代两次,每次50,即可把测试用的100张照片完全覆盖

    然后修改网络参数,也是修改路径

    name: "CaffeNet"
    layer {
      name: "data"
      type: "Data"
      top: "data"
      top: "label"
      include {
        phase: TRAIN
      }
      transform_param {
        mirror: true
        crop_size: 227
        mean_file: "examples/myfile/mean.binaryproto"
      }
      data_param {
        source: "examples/myfile/img_train_lmdb"
        batch_size: 256
        backend: LMDB
      }
    }
    layer {
      name: "data"
      type: "Data"
      top: "data"
      top: "label"
      include {
        phase: TEST
      }
      transform_param {
        mirror: false
        crop_size: 227
        mean_file: "examples/myfile/mean.binaryproto"
      }
      data_param {
        source: "examples/myfile/img_test_lmdb"
        batch_size: 50
        backend: LMDB
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    训练和测试两个地方的参数。

    网友提到需要不需要把分类的1000个改成5,目前来看,我没改好像也可。
    ###训练和测试###
    一个命令行即可搞定

    # sudo build/tools/caffe train -solver examples/myfile/solver.prototxt
    
    • 1

    这里写图片描述
    使用GPU大概几分钟就 能出结果。

    欢迎关注我的公号,可以加好友详聊:

    _________________________________________________________________________________________________________________________________________________
    每一个不曾起舞的日子,都是对生命的辜负。
    But it is the same with man as with the tree. The more he seeks to rise into the height and light, the more vigorously do his roots struggle earthward, downward, into the dark, the deep - into evil.
    其实人跟树是一样的,越是向往高处的阳光,它的根就越要伸向黑暗的地底。----尼采
  • 相关阅读:
    安装mysql apache php smb
    解决IE8placeholder属性问题
    将博客搬至CSDN
    shell脚本获取配置文件中的内容
    shell sed指令全解
    salt一键部署hive
    salt一键部署habse
    salt一键部署kafka
    salt一键部署elasticsearch
    salt一键部署mysql
  • 原文地址:https://www.cnblogs.com/leoking01/p/14547409.html
Copyright © 2011-2022 走看看