FCN模型训练中遇到困难x
FCN 模型训练中遇到的困难
FCN 模型训练中遇到的困难 标签:
深度学习 FCN 神经网络 caffe 2017-02-24 10:54 2675 人阅读 评论(6) 收藏 举报
分类:
深度学习(18)
版权声明:本文为博主原创文章,未经博主允许不得转载。
前前后后大概忙了 3 个月了 中间穿插了导师给的项目和论文的任务
总算把 fcn 给run 起来了
之前也有参考一些博客作为指导 不过博客有的是有误导性的 导致我的 loss 居高不下 根本不收敛 还有一些奇奇怪怪的问题 我在下面逐一列举
个人有一篇从零开始运行 FCN 的博客 如果需要的话可以去看下:http://blog.csdn.net/wangkun1340378/article/details/70238290 问题 问题 1.使用 infer.py 时候遇到 no display name and no $DISPLAY environment variable
出现这个问题 是由于在远程服务器上运行 并且 服务器上没有显卡 直接导致 plt 无法运行 所以报错 2 个解决方法:
方法一:
在 infer.py 中加入 import cv2
type(out) print out, out.shape cv2.imwrite("output.png", out)
用 cv2 来保存图片,并且注释掉 plt 不过这样虽然能保存图片 但是图片效果不行 具体表现为颜色不对 结果可以看下图
正确的结果如下所示 大家可以对比一下
如果觉得方法一不行 就采用方法 2 方法 2:采用 python notebook
用本机访问自己在远程服务器上的账号
在本机上执行代码 题 问题 2:
:lisi out of range 这个是由于 solve.py 中 device(int(sys.argv[1])) caffe.set_mode_gpu()
可以把这两行代码注释掉 或者 利用 nvidia-smi 看看存在那个 gpu 就选那个 gpu 问题 问题 3:no module named caffe 方法 在 py 文件 import caffe 前加上 import sys
sys.path.append("/home/my/caffe-master/caffe-master/python")
具体路径根据自己实际情况而定 问题 问题 4:no module named XXX 解决方法 把 fcn.berkeleyvision.org-master 目录下所有的 py 文件统统复制到你的solve.py 所在的文件夹 例如 surgery 等等等等 题 问题 5,:
:利用得到的 model 怎么测试图片 方法:运行 fcn.berkeleyvision.org-master 目录下的 infer.py 文件,注意修改model 路径和 deploy 文件路径,还有测试图片路径 [html] view plain copy
1 import nupy as np
2 from PIL import Image
3 matplotlib.pyplot as plt
4 import sys
5 sys.path.append("/home/my/caffe-master/caffe-master/python")
6 affe
7 import cv2
8
9. # load image, switch to BGR, subtract mean, and make dims C x H x W for Caffe
10m = Image.open("test_3.jpg")
11. in_ = np.array(im, dtype=np.float32)
12in_ = in_[:,:,::-1]
1304.0069879316.6687676222.67891434 14#in_ -= np.array((111.67446899,109.91841125,105.24302673))
15-= np.array((105.24302673,109.91841125,111.67446899))
16in_ = in_.transpose((2,0,1))
17
18load net
19. #net = caffe.Net("deploy.prototxt", "siftflow-fcn32s-heavy.caffemodel", caffe.TEST)
20. net = caffe.Net("deploy.prototxt", "siftflow-fcn32s/train_iter_100000.caffemodel", caffe.TEST)
21net = caffe.Net("deploy.prototxt", "train_iter_96000.caffemodel", caffe.TEST)
22# shape for input (data blob is N x C x H x W), set data
23reshape(1, *in_.shape)
24net.blobs["data"].data[...] = in_
25# run net and take argmax for prediction
26net.forward()
27out = net.blobs["score_sem"].data[0].argmax(axis=0)
28out = net.blobs["score_geo"].data[0].argmax(axis=0)
29type(out)
30print out, out.shape
31#cv2.imwrite("output.png", out)
32,cmap="gray");
33imshow(out);
34axis("off")
35avefig("test_3_out.png")
36. plt.show()
如上面代码所示
[html] view plain copy
1. net = caffe.Net("deploy.prototxt", "siftflow-fcn32s/train_iter_100000.caffemodel", caffe.TEST)
其中 [html] view plain copy
1. siftflow-fcn32s/train_iter_100000.caffemodel
为模型所在路径,deploy 文件如果没有 可以参照一下方法 首先,根据你利用的模型,例如模型是 siftflow32s 的,那么你就去 siftflow32s 的文件夹,
里面有 train.prototxt 文件,将文件打开,全选,复制,新建一个名为deploy.prototxt 文件,粘贴进去, 然后 ctrl+F 寻找所有名为 loss 的 layer 只要有 loss 无论是 loss 还是 geo_loss 将这个 layer 统统删除 然后在文件顶部加上 layer {
name: "input"
type: "Input"
top: "data"
input_param {
These dimensions are purely for sake of example;
# see infer.py for how to reshape the net to the given input size.
shape { dim: 1 dim: 3 dim: 256 dim: 256 }
} }
其中 shape{dim:1 dim:3 dim:256 dim:256}这两个 256,是由于我的测试图片是256X256 如果你的是 500X500 那你就将最后两个 dim 改为 500 500 需要注意的是 如果你执行的是 siftflow32s,你没有 deploy,你需要加入 inputdata layer,你如果执行 sififlow16s 的 model 那么是不需要加 inputdata layer 的 因为他们的 train.prototxt 文件里已经有了 inputdata layer 题 问题 6:
:
利用得到的模型 测试单张图片 结果全黑 这个问题可能有多个原因 原因 1:在于 loss 太高 模型未收敛 或者 deploy 文件的参数设置有误。
原因 2:如果针对 sififlow 数据集 那么请保证 deploy 文件的准确性 原因 3:infer.py 的有误 没有将 out = net.blobs["score"].data[0].argmax(axis=0)
改成 out = net.blobs["score_sem"].data[0].argmax(axis=0)
题 问题 7:
:
在训练过程中,loss 高居不下,模型不收敛 原因:
这个问题的原因有很多,我只能说出个人的经历,我开始训练时候,模型也是不收敛,在这里我详细说明一下这个问题的处理方式 首先,我在根据 siftflow 数据集训练 fcn32s 的模型时候遇到了这种情况,模型的loss 高居不下,训练 10w 次,loss 依然高于 2w 这是由于我参照的博客的说明有误 在这里郑重声明一下:如果训练 fcn32s 的网络模型, 一定不要将 fc6,fc7 重新命名, 并且一定要修改 solve.py 利用 transplant 的方式获取 vgg16 的网络权重; 具体操作为 [html] view plain copy
1 import sys
2 sys.path.append("/home/my/caffe-master/caffe-master/python")
3 caffe
4 import surgery, score
5
6 numpy as np
7 os
8 import sys
9.
10try:
11import setproctitle
12
setproctitle.setproctitle(os.path.basename(os.getcwd()))
13except:
14pass
15
16weights = "../ilsvrc-nets/vgg16-fcn.caffemodel"
17vgg_proto = "../ilsvrc-nets/VGG_ILSVRC_16_layers_deploy.prototxt"
18weights = "../ilsvrc-nets/vgg16-fcn.caffemodel"
19
20# init
21. caffe.set_mode_gpu()
22# caffe.set_device(int(sys.argv[0]))
23caffe.set_device(7)
24
25= caffe.SGDSolver("solver.prototxt")
26#solver.net.copy_from(weights)
27solver = caffe.SGDSolver("solver.prototxt")
28vgg_net=caffe.Net(vgg_proto,vgg_weights,caffe.TRAIN)
29surgery.transplant(solver.net,vgg_net)
30del vgg_net
31
32# surgeries
33interp_layers = [k for k in solver.net.params.keys() if "up" in k]
34surgery.interp(solver.net, interp_layers)
35
36# scoring
37test = np.loadtxt("../data/sift-flow/test.txt", dtype=str)
38
39for _ in range(50):
40solver.step(2000)
41N.B. metrics on the semantic labels are off b.c. of missing classes;
42# score manually from the histogram instead for proper evaluation
43sem", gt="sem")
44.
score.seg_tests(solver, False, test, layer="score_geo", gt="geo")
可以看到我注释了 [html] view plain copy
1 = caffe.SGDSolver("solver.prototxt")
2. #solver.net.copy_from(weights)
[html] view plain copy
1. 添加了
[html] view plain copy
1 solver = caffe.SGDSolver("solver.prototxt")
2 vgg_net=caffe.Net(vgg_proto,vgg_weights,caffe.TRAIN)
3 surgery.transplant(solver.net,vgg_net)
4. del vgg_net
并且在 import 后添加了 [html] view plain copy
1 weights = "../ilsvrc-nets/vgg16-fcn.caffemodel"
2 vgg_proto = "../ilsvrc-nets/VGG_ILSVRC_16_layers_deploy.prototxt"
3. weights = "../ilsvrc-nets/vgg16-fcn.caffemodel"
关于 [html] view plain copy
1. VGG_ILSVRC_16_layers_deploy.prototxt
我附上我的百度网盘的链接 如果大家找不到 可以在这里下载 http://pan.baidu.com/s/1geLL6Sz
如果训练 fcn16s,则可以直接 copy 自己的 fcn32s 的 model 的权重,不需要transplant,也就是不需要修改 solve.py 如果训练 fcn8s,则可以直接 copy 自己的 fcn16s 的 model 的权重,不需要transplant,也就是不需要修改 solve.py
总的来说,算是在自己的 fcn 道路上成功踏出了第一步,上面的问题有的是请教自己的学长,有的是百度或者 google,有的是和网友交流得来的心得 下面附上几个之前参考的博客 [html] view plain copy
1.
http://www.cnblogs.com/xuanxufeng/p/6240659.html [html] view plain copy
1.
http://www.cnblogs.com/xuanxufeng/p/6243342.html
顺便感谢 踏雪霏鸿,一生不可自决,与人不争,大喷菇 等人的帮助 以上!
上一篇:扶贫领域巡察谈话提纲