caffe实战,deep retinal image understanding 实现

来源:互联网 发布:php mvc demo 编辑:程序博客网 时间:2024/05/22 02:03

安装好caffe之后在官方网站下载model和script和image。分别代表模型,直接使用的脚本和测试图像。
放到/caffe/DRIU/中。
打开test.py

import numpy as npimport matplotlib.pyplot as pltimport matplotlib.cm as cmimport scipy.miscfrom PIL import Imageimport scipy.ioimport osimport scipyimport sys# Point to Caffe folder /path/to/caffecaffe_root = '../'# Choose between 'DRIVE', 'STARE', 'DRIONS', and 'RIMONE'database = 'DRIVE'# Use GPU?这里将use_gpu设置为1,将gpu_id设置为0,caffe.set_device的gpu_id从0开始计数。use_gpu = 1;gpu_id = 'gpu 0';#sys.path.insert(0, caffe_root+'python/') 这里注释掉了,因为ms的caffe的根目录不在python下,在build\x64\release\pycaffe\caffe下。由于我将caffe的根目录直接放在python的sitepackage下,所以不用这句话直接使用import caffe也没问题。import caffeos.chdir(caffe_root+'/DRIU/')def imshow_im(im):    plt.imshow(im,interpolation='none',cmap=cm.Grays_r)net_struct = 'deploy_'+database+'.prototxt'data_root = caffe_root+'/DRIU/Images/'+database+'/'save_root = caffe_root+'/DRIU/results/'+database+'/'if not os.path.exists(save_root):    os.makedirs(save_root)with open(data_root+'test_'+database+'.txt') as f:    imnames = f.readlines()test_lst = [data_root+x.strip() for x in imnames]if use_gpu:    caffe.set_mode_gpu()    caffe.set_device(gpu_id)# load netnet = caffe.Net('./'+net_struct, './DRIU_'+database+'.caffemodel', caffe.TEST)for idx in range(0,len(test_lst)):    print("Scoring DRIU for image " + imnames[idx][:-1])    #Read and preprocess data    im = Image.open(test_lst[idx])    in_ = np.array(im, dtype=np.float32)    in_ = in_[:,:,::-1] #BGR    in_ -= np.array((171.0773,98.4333,58.8811)) #Mean substraction    in_ = in_.transpose((2,0,1))    #Reshape data layer    net.blobs['data'].reshape(1, *in_.shape)    net.blobs['data'].data[...] = in_    #Score the model    net.forward()    fuse = net.blobs['sigmoid-fuse'].data[0][0,:,:]    #Save the results    scipy.misc.imsave(save_root+imnames[idx][:-1], fuse)

执行一下:
出现异常,可能是因为显存不够,所以只执行了两张图片:
这里写图片描述


分割线

再尝试一下使用digits的实验结果,还是失败,于是乎试试命令行可不可做到。

狗日的编辑器没有自动保存!!

一般来说,图像的分类简单,lmdb直接提供这样的服务,可以将图像和label揉到一个数据库里面,只需要先把图像和label照这样放在txt文件就好了:
这里写图片描述

caffe分割图像的具体操作一直没搞得定,网上也没有教程,只能自己摸索,不过好像玩出点花样来了。
而图像分割好像没这么简单,label同样也是一个图像,所以如何用caffe还要用lmdn进行快速进行分割的训练就成了一个问题。其实归根结底就是不知道怎么在caffe里面分割图像时,设计正确的label格式(大概是这个意思)

一般来说,分类的时候data层的设计如下:

layer {  name: "mnist"  type: "Data"  top: "data"  top: "label"  include {    phase: TRAIN  }  transform_param {    scale: 0.00390625  }  data_param {    source: "examples/mnist/mnist_train_lmdb"    batch_size: 64    backend: LMDB  }}

label和data 同时在这个层作为输出。而source只有一个路径。

所以是否可以尝试使用两个data层,一个输出data,一个输出label。打开给的那个啥视觉层文件,data层居然都没有:

name: "DRIU_STARE"input: "data"input_dim: 1input_dim: 3input_dim: 605input_dim: 700

将其删除并进行增添:
简而言之就是分为四个层分别用于训练和测试的特征与label的输入。这里使用的batch-size为2是因为内存不够了(lll¬ω¬)

layer {  name: "data"  type: "Data"  top: "data"  include {    phase: TRAIN  }  data_param {    source: "/home/lwm/caffe-master/examples/DRIU/train_db/features"    batch_size: 2    backend: LMDB  }}layer {  name: "label"  type: "Data"  top: "label"  include {    phase: TRAIN  }  data_param {    source: "/home/lwm/caffe-master/examples/DRIU/train_db/labels"    batch_size: 2    backend: LMDB  }}layer {  name: "data"  type: "Data"  top: "data"  include {    phase: TEST  }  data_param {    source: "/home/lwm/caffe-master/examples/DRIU/val_db/features"    batch_size: 2    backend: LMDB  }}layer {  name: "label"  type: "Data"  top: "label"  include {    phase: TEST  }  data_param {    source: "/home/lwm/caffe-master/examples/DRIU/val_db/labels"    batch_size: 2    backend: LMDB  }}

具体步骤

首先先预处理数据,在工程目录建立两个文件夹分别用于存放训练和测试数据:
这里写图片描述

然后在里面存入特征的图像和label的图像:
这里写图片描述

再编辑solver文件

test_iter: 1test_interval: 2base_lr: 0.01display: 1max_iter: 60lr_policy: "step"gamma: 0.1momentum: 0.9weight_decay: 0.0001stepsize: 20snapshot: 2snapshot_prefix: "snapshot"solver_mode: CPUnet: "/home/lwm/caffe-master/examples/DRIU/train_val.prototxt"solver_type: SGD

视觉层的设计还是按照之前说得做,网络的层次结构什么的直接套用原作者的(这个不是重点,用什么结构都ok)。
接下来执行命令:

caffe train -solver examples/DRIU/solver.prototxt -weights exampls/DRIU/DRIU_STARE.caffemodel

然后运行了一晚上总共迭代两次,成了这个样子
这里写图片描述

但是应该是对的。

0 0
原创粉丝点击