1. 程式人生 > >Windows+VS2013 caffe使用LeNet模型訓練過程

Windows+VS2013 caffe使用LeNet模型訓練過程

前提:caffe 的原始碼已在Windows上成功編譯通過

1、準備自己的資料集。如資料夾0和檔案1,其中0和1是影象的類別標籤,我這裡用的是0_S,1_I,並將影象儲存在F:\caffe-master\data\image中;

2、製作影象標籤檔案。利用Python或其他程式碼將影象和標籤,寫入相應的訓練標籤、驗證標籤檔案中;

# -*- coding: utf-8 -*-
"""
Created on Fri Apr  6 00:40:04 2018

@author: Administrator
"""

import os


def dirlist(path, allfile):
    filelist = os.listdir(path)

    for filename in filelist:
        filepath = os.path.join(path, filename)
        if os.path.isdir(filepath):
            dirlist(filepath, allfile)
        else:
            allfile.append(filepath)
    return allfile


imgnames = dirlist('F:\\caffe-master\\data\\image', [])
#print(imgnames)
num_all = [0, 0]
dirs = ['0_S', '1_I']
for name in imgnames:
    if '.jpg' not in name:
        continue
    split_name = name.split('\\')#字串分割
    #print(split_name[-2])#倒數第二個字串
    if split_name[-2] in dirs:    
        id = dirs.index(split_name[-2])#獲取類別資料夾號
        #print(id)
        num_all[id] += 1#統計各資料夾張數
        #print(num_all[id])
print(num_all[0])
print(num_all[1])


#隨機打亂函式
import random

imgnames_s = imgnames
random.shuffle(imgnames)

dir = dirs
# dir = os.listdir('D:\\stomach_raw_data\\data')
# dir =['0','1','2','3','4']
f   = open('F:\\caffe-master\\data\\image\\train_8.txt', 'w')
f1  = open('F:\\caffe-master\\data\\image\\test_8.txt', 'w')
fal = open('F:\\caffe-master\\data\\image\\train_all_8.txt', 'w')
numframe = 0
numid6 = -1
for name in imgnames:
    if '.jpg' not in name:
        continue
    b = name.replace('\\', '/')
    print(b)
    c = b.replace('F:/caffe-master/data/image/', '')
    print(c)
    d = c.split("/")[1]
    print(d)
    
    #print(dir)
    if c.split('/')[0] in dir:
        id = str(dir.index(c.split('/')[0]))
        #id = str(id.split('/'))
        print(id)
        if id == '6':
            numid6 += 1
            if numid6 % 10 != 0:
                continue
        #line = d + ' ' + id + '\n'
        line = c + ' ' + id + '\n'
        
        print(line)
        #line = 'D:/stomach_raw_data/data/' + c + ' ' + id + '\n'
        fal.writelines(line)
        if numframe % 10 < 2:
            f1.writelines(line)
            
        else:
            f.writelines(line)
        numframe += 1#統計圖片總數
    
print(numframe)
f.close()
f1.close()
fal.close()

3、製作訓練LMDB和驗證LMDB。

//訓練LMDB指令碼,可儲存在create_train_lmdb.bat檔案中
E:/caffe-master/Build/x64/Debug convert_imageset.exe --shuffle --resize_heiht=128 --resize width =128 F:/caffe-master/data/image/  F:/caffe-master/data/image/train_8.txt  
F:/caffe-master/data/image/train_lmdb

//製作測試LMDB同上
//綜述:convert_imageset.exe執行檔案 影象寬高 影象路徑 標籤檔案 LMBD生成路徑

4、配置超引數檔案 lenet_slover.prototxt,檔案在example下的minist檔案下。

1)、修改網路描述檔案的路徑

2)、修改CPU/GPU模式

5、修改網路描述檔案lenet_train.prototxt, 檔案在example下的minist檔案下。 

1)、修改LMDB的訓練路徑和驗證路徑

2)、修改num_output為你自己想要的輸出標籤個數

注意:LMDB路徑千萬不能錯,仔細檢查

6、最後執行

E:/caffe-master/Build/x64/Debug caffe.exe --slove=F:/caffe-master/data/lenet_slover.prototxt(超引數配置檔案路徑)

7、OK,完成。