zoukankan      html  css  js  c++  java
  • Caffe-windows上训练自己的数据

    1.数据获取

    在网上选择特定类别,下载相应的若干张图片。可以网页另存或者图片下载器。本例中保存了小狗、菊花、梅花三类各两百多张。

    2.重命名

     1 import os
     2 import os.path
     3 rootdir = "jh"
     4 i=1
     5 for parent,dirnames,filenames in os.walk(rootdir):
     6    for filename in filenames:
     7       newName=a+str(i)+".jpg"
     8       print  filename+" -> "+newName
     9       os.rename(os.path.join(parent,filename), os.path.join(parent, newName))
    10       i+=1

    3.更改分辨率

     1 from PIL import Image
     2 import glob, os
     3 w,h = 256,256
     4 def timage():
     5     for files in glob.glob('jh*.jpg'):
     6         filepath,filename = os.path.split(files)
     7         filterame,exts = os.path.splitext(filename)
     8         opfile = r'jhjhout\'
     9         if (os.path.isdir(opfile)==False):
    10             os.mkdir(opfile)
    11         im=Image.open(files)
    12         im_ss=im.resize((int(w), int(h)))
    13         try:
    14            im_ss.save(opfile+filterame+'.jpg')
    15         except:
    16            print filterame
    17            os.remove(opfile+filterame+'.jpg')
    18 
    19 if __name__=='__main__':
    20     timage()

    4.获取标签

     1 import glob, os, shutil
     2 def timage():
     3     names=["gg","jh"]
     4     t=open("train.txt",'a')
     5     v=open("val.txt",'a')
     6     for files in glob.glob('jhjhout*.jpg'):
     7         filepath,filename = os.path.split(files)
     8         filterame,exts = os.path.splitext(filename)
     9         oldfile = r'jhjhout\'
    10         opfile = r'val\'
    11         if (os.path.isdir(opfile)==False):
    12             os.mkdir(opfile)
    13         if 200< int(filterame[2:]):  # test data
    14             shutil.move(oldfile+filterame+'.jpg',opfile+filterame+'.jpg')
    15             v.write(filterame+'.jpg '+str(names.index("jh"))+'
    ')
    16         else:  # train data
    17             t.write('jhout/'+filterame+'.jpg '+str(names.index("jh"))+'
    ')
    18     t.close()
    19     v.close()
    20 
    21 
    22 if __name__=='__main__':
    23     timage()

    5.生成对应的leveldb格式数据

    SET GLOG_logtostderr=1
    Buildx64Releaseconvert_imageset.exe examples/t/train/ examples/t/train/train.txt examples/t/trainldb 1
    pause
    SET GLOG_logtostderr=1
    Buildx64Releaseconvert_imageset.exe examples/t/val/ examples/t/val/val.txt examples/t/valldb 1
    pause

    6.计算均值

    SET GLOG_logtostderr=1
    Buildx64Releasecompute_image_mean.exe examples/t/trainldb examples/t/tmean.binaryproto
    pause

    7.修改网络

    models/bvlc_alexnet/train_val.prototxt

    修改其中的num_output, batch_size和相应的路径

    solver.prototxt如下,其中gamma指的是在学习率为step模式化下,每400次迭代变为原来的0.9倍。

    net: "examples/t/train_val.prototxt"
    test_iter: 100
    test_interval: 200
    base_lr: 0.0001
    lr_policy: "step"
    gamma: 0.9
    stepsize: 400
    display: 100
    max_iter: 5000
    momentum: 0.9
    weight_decay: 0.001
    snapshot: 10000
    snapshot_prefix: "caffe_train"
    solver_mode: GPU

    8.训练网络

    cd ../../
    "Build/x64/Release/caffe.exe" train --solver=examples/t/solver.prototxt
    pause

    9.运行结果

    在仅使用小狗和菊花两类,训练200张测试50张,可以达到98%的正确率。

    使用小狗、菊花、梅花三类,可以达到89%的正确率。

    10.优化

    之前将train_val.prototxt中的crop_size: 227改成了128,速度相对快很多。

    在三类分类中改回227,正确率在92%左右波动,进一步修改base_lr: 0.00015,gamma: 0.93,正确率可以达到94.6%。

  • 相关阅读:
    HDOJ 2577 How To Type
    HDOJ 1171 Big Event in HDU
    HDOJ 2159 FATE
    HDOJ 1176 免费馅饼
    POJ 1014 Dividing
    HDOJ 2844 Coins
    可以设置DefaultButton的TextBox控件
    setTimeout和setInterval的使用
    C# 调用ExchangeWebservice的相关代码
    实现IConfigurationSectionHandler接口来编写自定义配置
  • 原文地址:https://www.cnblogs.com/qw12/p/6160572.html
Copyright © 2011-2022 走看看