Win10环境下用Caffe训练CNN的一般步骤

首先确保已经用VS2013打开Caffe.sln并编译好了libcaffe、caffe和convert_imageset这三个项目。

一、数据准备

1.先准备一个文件夹存放所有训练用的图片文件,再准备一个trainlist.txt文件,包含图片名及其对应的标签,格式如下:

imagename1.jpg 0
imagename2.jpg 1
imagename3.jpg 1
...

这里提供一个简陋的Python脚本用于划分数据集和生成相应的list.txt文件,不保证样本数目均衡:

import os
import shutil
import random

def CreateFileList(images_path, txt_save_path):
    #创建list.txt文件
    with open(txt_save_path,"w") as fw:
        #查看图片目录下的文件
        image_names = os.listdir(images_path)
        #遍历所有文件名
        for image_name in image_names:
            label=image_name[:image_name.find('_')]
            fw.write(image_name + ' '+label+'\n')
        #打印成功信息
    print ("生成list.txt文件成功!")

def DivideDatasets(root_path):
    """
    通过指定图片集所在路径root_path,按比例(6:2:2)划分训练、验证和测试数据集,以及对应的trainlist.txt文件.
    要求:root_path路径下【只有图片】,且图片名以"label_"开头,例如1_猫咪.jpg,0_狗子.jpg
    """
    #获得数据集信息并初始化参数
    image_names = os.listdir(root_path)
    all_num=len(image_names)
    train_num=int(3*all_num/5) #6/10
    verify_num=int(all_num/5) #2/10
    end_of_verify=train_num+verify_num
    num=1
    # 随机打乱文件名顺序
    random.shuffle(image_names)
    #创建所需目录
    train_path=root_path+'train\\'
    verify_path=root_path+'verify\\'
    test_path=root_path+'test\\'
    if not os.path.exists(train_path):
        os.makedirs(train_path)
    if not os.path.exists(verify_path):
        os.makedirs(verify_path)
    if not os.path.exists(test_path):
        os.makedirs(test_path)
    # 移动文件到目标文件夹
    for image_name in image_names:
        if num<=train_num:
            shutil.move(root_path+image_name,train_path+image_name)
        elif num<=end_of_verify:
            shutil.move(root_path+image_name,verify_path+image_name)
        else:
            shutil.move(root_path+image_name,test_path+image_name)
        num+=1
    # 生成各数据集的list.txt文件
    CreateFileList(train_path,root_path+'trainlist.txt')
    CreateFileList(verify_path,root_path+'verifylist.txt')
    CreateFileList(test_path,root_path+'testlist.txt')
    print("数据划分成功!")

#定义图片集根目录
root_path='D:\\caffe-window\\caffe-master\\my_caffe_project\\data\\imageset\\'
#调用划分函数
DivideDatasets(root_path)

2.然后调用编译好的convert_imageset.exe将图片数据集转换为适合Caffe快速读取的lmdb格式,具体做法是在caffe-master文件夹里新建批处理文件my_data_convert.bat,以灰度图为例,内容如下:

Build\x64\Release\convert_imageset     --gray=true    --shuffle    --backend=lmdb    my_caffe_project\data\imageset\train\    my_caffe_project\data\imageset\trainlist.txt   my_caffe_project\data\LMDB\trainset

Build\x64\Release\convert_imageset     --gray=true    --shuffle    --backend=lmdb    my_caffe_project\data\imageset\verify\    my_caffe_project\data\imageset\verifylist.txt   my_caffe_project\data\LMDB\verifyset

Build\x64\Release\convert_imageset     --gray=true    --shuffle    --backend=lmdb    my_caffe_project\data\imageset\test\    my_caffe_project\data\imageset\testlist.txt   my_caffe_project\data\LMDB\testset

Pause
#注意上述Build和my_caffe_project都是caffe-master的子目录。

编辑好保存,双击.bat文件运行即可。

二、修改定义好网络配置文件train_test.prototxt和训练参数配置文件solver.prototxt

假设两个配置文件都在目录caffe-master\my_caffe_project\mynet\下,网络结构和训练参数都设置好之后,只需修改train_test.prototxt中数据层的训练集和测试集lmdb文件所在路径,修改为我们在上一步生成的lmdb文件所在路径:

  ...
  data_param {
    source: "my_caffe_project/data/LMDB/imageset_train_lmdb"
    batch_size: 64
    backend: LMDB
  ...
  data_param {
    source: "my_caffe_project/data/LMDB/imageset_test_lmdb"
    batch_size: 100
    backend: LMDB
#注意:路径中要用'/'分隔。

然后修改solver.prototxt中的net参数和snapshot_prefix参数,指定网络配置文件的路径和网络快照保存位置:

net: "my_caffe_project/mynet/train_test.prototxt"
...
snapshot_prefix: "my_caffe_project/mynet/mynet"
#最后一个'mynet'表示网络快照文件的前缀
#注意:路径中要用'/'分隔。
三、调用caffe.exe训练网络

在caffe-master文件夹下新建批处理文件mynet_train_run.bat文件,编辑如下命令:

Build\x64\Release\caffe.exe  train --solver=my_caffe_project\mynet\solver.prototxt  --gpu=0

pause

编辑好保存,双击.bat文件运行即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值