from __future__ import print_function import caffe from caffe import layers as L, params as P from caffe.proto import caffe_pb2 import math import os import stat import subprocess caffe_root = "/home/xn/caffe/" train_lmdb_file = caffe_root + "../train_lmdb" test_lmdb_file = caffe_root + "../test_lmdb" mean_file = caffe_root + "../mean.binaryproto" path = '/home/xn/caffe/examples/facetestquestions/' train_path = path + 'train_test.prototxt' solver_file = 'solver.prototxt' solver_path = path + solver_file batch_size = 8 model_name = 'mnin_plant' log_name = model_name + '.log' log_dir = path + 'log' log_file = '{}/{}'.format(log_dir, log_name) snapshot_dir = path + 'model' snapshot_prefix = '{}/{}'.format(snapshot_dir, model_name) num_class = 20 job_file = path + model_name + '.sh' pretrain_model = path + 'mnin_relu_xavier_iter_30000.caffemodel' #写网络架构,主要为train_test.prototxt def mnintest(test_lmdb, batch_sizes): nettest = caffe.NetSpec() nettest.data, nettest.label = caffe.layers.Data(source=test_lmdb, backend=caffe.params.Data.LMDB, batch_size=batch_sizes, ntop=2, transform_param=dict(crop_size=256, mean_file=mean_file, mirror=False), include=dict(phase=caffe.TEST)) kwargs = { 'param': [dict(lr_mult=1, decay_mult=1), dict(lr_mult=2, decay_mult=0)], 'weight_filler': dict(type='xavier'), 'bias_filler': dict(type='constant', value=0)} nettest.conv1 = caffe.layers.Convolution(nettest.data, num_output=192, kernel_size=5, pad=2, **kwargs) nettest.relu_conv1 = caffe.layers.ReLU(nettest.conv1, in_place=True) nettest.cccp1 = caffe.layers.Convolution(nettest.relu_conv1, num_output=160, kernel_size=1, **kwargs) nettest.relu_cccp1 = caffe.layers.ReLU(nettest.cccp1, in_place=True) nettest.cccp2 = caffe.layers.Convolution(nettest.relu_cccp1, num_output=96, kernel_size=1, **kwargs) nettest.relu_cccp2 = caffe.layers.ReLU(nettest.cccp2, in_place=True) nettest.pool1 = caffe.layers.Pooling(nettest.relu_cccp2,kernel_size=3, stride=2, pool=P.Pooling.MAX) nettest.dropout1 = caffe.layers.Dropout(nettest.pool1, dropout_ratio=0.5, in_place=True) nettest.conv2 = caffe.layers.Convolution(nettest.dropout1, num_output=192, kernel_size=5, pad=2, **kwargs) nettest.relu_conv2=caffe.layers.ReLU(nettest.conv2, in_place=True) nettest.cccp3 = caffe.layers.Convolution(nettest.relu_conv2, num_output=192, kernel_size=1, **kwargs) nettest.relu_cccp3 = caffe.layers.ReLU(nettest.cccp3, in_place=True) nettest.cccp4 = caffe.layers.Convolution(nettest.relu_cccp3, num_output=192, kernel_size=1, **kwargs) nettest.relu_cccp4 = caffe.layers.ReLU(nettest.cccp4, in_place=True) nettest.pool2 = caffe.layers.Pooling(nettest.relu_cccp4, kernel_size=3, stride=2, pool=P.Pooling.MAX) nettest.dropout2 = caffe.layers.Dropout(nettest.pool2, dropout_ratio=0.5, in_place=True) nettest.conv3 = caffe.layers.Convolution(nettest.dropout2, num_output=192, kernel_size=5, pad=1, **kwargs) nettest.relu_conv3 = caffe.layers.ReLU(nettest.conv3, in_place=True) nettest.cccp5 = caffe.layers.Convolution(nettest.relu_conv3, num_output=192, kernel_size=1, **kwargs) nettest.relu_cccp5 = caffe.layers.ReLU(nettest.cccp5, in_place=True) nettest.cccp6 = caffe.layers.Convolution(nettest.relu_cccp5, num_output=192, kernel_size=1, **kwargs) nettest.relu_cccp6 = caffe.layers.ReLU(nettest.cccp6, in_place=True) nettest.pool3 = caffe.layers.Pooling(nettest.relu_cccp6, kernel_size=3, stride=2, pool=P.Pooling.MAX) nettest.dropout3 = caffe.layers.Dropout(nettest.pool3, dropout_ratio=0.5, in_place=True) nettest.conv4 = caffe.layers.Convolution(nettest.dropout3, num_output=384, kernel_size=3, pad=1, **kwargs) nettest.relu_conv4 = caffe.layers.ReLU(nettest.conv4, in_place=True) nettest.cccp7 = caffe.layers.Convolution(nettest.relu_conv4, num_output=384, kernel_size=1, **kwargs) nettest.relu_cccp7 = caffe.layers.ReLU(nettest.cccp7, in_place=True) nettest.cccp8 = caffe.layers.Convolution(nettest.relu_cccp7, num_output=384, kernel_size=1, **kwargs) nettest.relu_cccp8 = caffe.layers.ReLU(nettest.cccp8, in_place=True) nettest.pool4 = caffe.layers.Pooling(nettest.relu_cccp8, kernel_size=3, stride=2, pool=P.Pooling.MAX) nettest.dropout4 = caffe.layers.Dropout(nettest.pool4, dropout_ratio=0.5, in_place=True) nettest.fc1 = caffe.layers.InnerProduct(nettest.dropout4, num_output = num_class, weight_filler=dict(type='gaussian', std=0.01), bias_filler=dict(type='constant', value=0), param=[dict(lr_mult=1, decay_mult=1), dict(lr_mult=2, decay_mult=0)]) nettest.accuarcy = caffe.layers.Accuarcy(nettest.fc1, nettest.label) nettest.loss = caffe.layers.SoftmaxWithLoss(nettest.fc1, nettest.label) return nettest.to_proto() def mnintrain(train_lmdb, batch_sizes): nettrain = caffe.NetSpec() nettrain.data, nettrain.label = caffe.layers.Data(source=train_lmdb, backend=caffe.params.Data.LMDB, batch_size=batch_sizes, ntop=2, transform_param=dict(crop_size=256, mean_file=mean_file, mirror=True), include=dict(phase=caffe.TRAIN)) return nettrain.to_proto() with open(train_path, 'w') as f: f.write('name: "mnin"\n') f.write(str(mnintrain(train_lmdb_file, batch_size))) f.write(str(mnintest(test_lmdb_file, batch_size))) base_lr = 0.001 num_test_image = 500 iter_size = 1 solver_mode = P.Solver.CPU test_iter = int(math.ceil(float(num_test_image) / batch_size)) gpus = "0" gpulist = gpus.split(",") num_gpus = len(gpulist) if num_gpus > 0: batch_size_per_device = int(math.ceil(float(batch_size) / num_gpus)) solver_mode = P.Solver.GPU device_id = int(gpulist[0]) #以下为solver.prototxt solver_param = { 'base_lr': base_lr, 'weight_decay': 0.0005, 'lr_policy': "multistep", 'stepvalue': [10000, 20000], 'gamma': 0.1, 'momentum': 0.9, 'iter_size': iter_size, 'max_iter': 30000, 'snapshot': 30000, 'display': 20, 'type': "SGD", 'solver_mode': solver_mode, 'test_iter': [test_iter], 'test_interval': 100, 'ap_version': "11point", 'test_initialization': False, } solver = caffe_pb2.SolverParameter( net = train_path, snapshot_prefix= snapshot_prefix, **solver_param) with open(solver_path, 'w') as f: print(solver, file=f) #运行脚本,即.sh文件 train_src_param = '--weights="{}" \\\n'.format(pretrain_model) with open(job_file, 'w') as f: f.write('cd {}\n'.format(caffe_root)) f.write('./build/tools/caffe train \\\n') f.write('--solver="{}" \\\n'.format(solver_path)) f.write(train_src_param) if solver_param['solver_mode'] == P.Solver.GPU: f.write('--gpu {} 2>&1 | tee {}\n'.format(gpus, log_file)) else: f.write('2>&1 | tee {}\n'.format(log_file)) #运行程序,跑网络 os.chmod(job_file, stat.S_IRWXU) subprocess.call(job_file, shell=True)
caffe框架下使用python写分类网络架构train_test.prototxt和solver.prototxt并直接运行程序
猜你喜欢
转载自blog.csdn.net/xunan003/article/details/80209803
今日推荐
周排行