run 同时 .net cpp loss per set brush 会同
环境搭建:
vs2013,编译caffe工程,cuda8.0,cudnn5.1,python2.7。
还需要安装python的一些包。Numpy+mkl scipy matplotlib scikit-image protobuf
Pip install scikit-image的时候,需要注意,下载该模块
Windows版python模块的下载地址:
https://www.lfd.uci.edu/~gohlke/pythonlibs/
跑实验:
下载fcn的caffe源代码:
https://github.com/shelhamer/fcn.berkeleyvision.org
下载siftflow数据集:
http://www.cs.unc.edu/~jtighe/Papers/ECCV10/siftflow/SiftFlowDataset.zip
将下载的数据放在fcn文件夹下的data目录下,将其重新命名为sift-flow并将原data文件夹下的sift-flow中的文件拷贝到其中,删除原来的。
官方预训练好的模型下载链接:
http://dl.caffe.berkeleyvision.org/
网络比较大,预加载模型,用sift-flow中的图片调整参数。
下载caffemodel,在siftflow-fcn32s目录下根据caffemodel-url 下载预训练好的模型。将下载好的模型放在fcn目录下的siftflow-fcn32s文件夹下。 将fcn目录下的score.py siftflow_layer.py和surgery.py 复制到siftflow-fcn32s的文件夹下。
修改solve.prototxt文件
- train_net: "trainval.prototxt"
- test_net: "test.prototxt"
- test_iter: 200
- # make test net, but don‘t invoke it from the solver itself
- test_interval: 999999999
- display: 20
- average_loss: 20
- lr_policy: "fixed"
- # lr for unnormalized softmax
- base_lr: 1e-12
- # high momentum
- momentum: 0.99
- # no gradient accumulation
- iter_size: 1
- max_iter: 100000
- weight_decay: 0.0005
- snapshot:10000 #训练10000次,保存一次模型
- snapshot_prefix:"G:/caffe171101/caffe-master/fcn-master/siftflow-fcn16s/train"
- test_initialization: false
书写启动文件solve.py
- import caffe
- import surgery, score
- import numpy as np
- import os
- import sys
- try:
- import setproctitle
- setproctitle.setproctitle(os.path.basename(os.getcwd()))
- except:
- pass
- weights = ‘siftflow-fcn8s-heavy.caffemodel‘
- deploy_proto = ‘deploy8.prototxt‘
- # init
- caffe.set_device(int(0))
- caffe.set_mode_gpu()
- solver = caffe.SGDSolver(‘solver.prototxt‘)
- #solver.net.copy_from(weights)
- vgg_net=caffe.Net(deploy_proto,weights,caffe.TRAIN)
- surgery.transplant(solver.net,vgg_net)
- del vgg_net
- # surgeries
- interp_layers = [k for k in solver.net.params.keys() if ‘up‘ in k]
- surgery.interp(solver.net, interp_layers)
- # scoring
- test = np.loadtxt(‘../data/sift-flow/test.txt‘, dtype=str)
- for _ in range(50):
- solver.step(2000)
- # N.B. metrics on the semantic labels are off b.c. of missing classes;
- # score manually from the histogram instead for proper evaluation
- score.seg_tests(solver, False, test, layer=‘score_sem‘, gt=‘sem‘)
- score.seg_tests(solver, False, test, layer=‘score_geo‘, gt=‘geo‘)
通过transplant的方式加载网络,会同时加载网络,和copy_from方式的区别在于拷贝参数的同时,改造原来的网络。
进入该目录,运行python solve.py,即可跑该网络。
如果,遇到错误,按照提示,修改路径或其他的一些东西。
对单张图片的预测:testSingleImg.py
- import numpy as np
- from PIL import Image
- import matplotlib.pyplot as plt
- import sys
- sys.path.append(‘G:/caffe171101/caffe-master/python‘)
- import caffe
- import cv2
- #matplotlib inline
- # load image, switch to BGR, subtract mean, and make dims C x H x W for Caffe
- im = Image.open(‘test_img/coast_arnat59.jpg‘)
- in_ = np.array(im, dtype=np.float32)
- in_ = in_[:,:,::-1]
- in_ -= np.array((104.00698793,116.66876762,122.67891434))
- in_ = in_.transpose((2,0,1))
- # load net
- net = caffe.Net(‘siftflow-fcn16s/deploy16.prototxt‘, ‘siftflow-fcn16s/train_iter_100000.caffemodel‘, caffe.TEST)
- # shape for input (data blob is N x C x H x W), set data
- net.blobs[‘data‘].reshape(1, *in_.shape)
- net.blobs[‘data‘].data[...] = in_
- # run net and take argmax for prediction
- net.forward()
- out = net.blobs[‘score_sem‘].data[0].argmax(axis=0)
- #print "hello,python!"
- #plt.imshow(out,cmap=‘gray‘);
- plt.imshow(out)
- plt.axis(‘off‘)
- plt.savefig(‘test_img/coast_arnat59_infer_16s_100000iters.png‘)
预测:这是用fcn32s的网络,迭代10万次的结果,并不理想
fcn16s,迭代10w次:
fcn8s,迭代10w次:
Sift-flow中的图片都为256*256*3的彩色图片
images保存的是数据,semanticlabels保存的是语义分割标签,一共33类。geolabels保存场景识别标签,一共4类,除去标签-1,就是3类。
所以是分别训练了两个网络,网络的前七层一样。
fcn+caffe+siftflow实验记录
run 同时 .net cpp loss per set brush 会同
原文:http://www.cnblogs.com/k7k8k91/p/7822668.html
来源: http://www.bubuko.com/infodetail-2392492.html