FCN模型训练中遇到的困难

2023-11-18

2017-02-24 10:54  2675人阅读  评论(6)  收藏  举报
  分类:

版权声明:本文为博主原创文章,未经博主允许不得转载。

前前后后大概忙了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

print type(out)
print out, out.shape
cv2.imwrite("output.png", out)

用cv2来保存图片,并且注释掉plt

不过这样虽然能保存图片 但是图片效果不行 具体表现为颜色不对 结果可以看下图


正确的结果如下所示 大家可以对比一下


如果觉得方法一不行 就采用方法2

方法2:采用python notebook 

用本机访问自己在远程服务器上的账号  在本机上执行代码

问题2:lisi out of range

这个是由于solve.py中

caffe.set_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 numpy as np  
  2. from PIL import Image  
  3. import matplotlib.pyplot as plt  
  4. import sys    
  5. sys.path.append('/home/my/caffe-master/caffe-master/python')  
  6. import caffe  
  7. import cv2  
  8.   
  9. # load image, switch to BGR, subtract mean, and make dims C x H x W for Caffe  
  10. im = Image.open('test_3.jpg')  
  11. in_ = np.array(im, dtype=np.float32)  
  12. in_ = in_[:,:,::-1]  
  13. #in_ -np.array((104.00698793,116.66876762,122.67891434))  
  14. #in_ -np.array((111.67446899,109.91841125,105.24302673))  
  15. in_ -np.array((105.24302673,109.91841125,111.67446899))  
  16. in_ = in_.transpose((2,0,1))  
  17.   
  18. # load 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)  
  21. #net = 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  
  23. net.blobs['data'].reshape(1, *in_.shape)  
  24. net.blobs['data'].data[...] = in_  
  25. # run net and take argmax for prediction  
  26. net.forward()  
  27. out = net.blobs['score_sem'].data[0].argmax(axis=0)   
  28. #out = net.blobs['score_geo'].data[0].argmax(axis=0)   
  29. #print type(out)  
  30. #print out, out.shape  
  31. #cv2.imwrite("output.png", out)  
  32. plt.imshow(out,cmap='gray');  
  33. plt.imshow(out);  
  34. plt.axis('off')  
  35. plt.savefig('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. import caffe  
  4. import surgery, score  
  5.   
  6. import numpy as np  
  7. import os  
  8. import sys  
  9.   
  10. try:  
  11.     import setproctitle  
  12.     setproctitle.setproctitle(os.path.basename(os.getcwd()))  
  13. except:  
  14.     pass  
  15.   
  16. vgg_weights = '../ilsvrc-nets/vgg16-fcn.caffemodel'  
  17. vgg_proto = '../ilsvrc-nets/VGG_ILSVRC_16_layers_deploy.prototxt'  
  18. weights = '../ilsvrc-nets/vgg16-fcn.caffemodel'  
  19.   
  20. # init  
  21. caffe.set_mode_gpu()  
  22. # caffe.set_device(int(sys.argv[0]))  
  23. caffe.set_device(7)  
  24.   
  25. #solver = caffe.SGDSolver('solver.prototxt')  
  26. #solver.net.copy_from(weights)  
  27. solver = caffe.SGDSolver('solver.prototxt')  
  28. vgg_net=caffe.Net(vgg_proto,vgg_weights,caffe.TRAIN)  
  29. surgery.transplant(solver.net,vgg_net)  
  30. del vgg_net  
  31.   
  32. # surgeries  
  33. interp_layers = [k for k in solver.net.params.keys() if 'up' in k]  
  34. surgery.interp(solver.net, interp_layers)  
  35.   
  36. # scoring  
  37. test = np.loadtxt('../data/sift-flow/test.txt', dtype=str)  
  38.   
  39. for _ in range(50):  
  40.     solver.step(2000)  
  41.     # N.B. metrics on the semantic labels are off b.c. of missing classes;  
  42.     # score manually from the histogram instead for proper evaluation  
  43.     score.seg_tests(solver, False, test, layer='score_sem'gt='sem')  
  44.     score.seg_tests(solver, False, test, layer='score_geo'gt='geo')  
可以看到我注释了

[html]  view plain  copy
  1. #solver = 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. vgg_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


顺便感谢 踏雪霏鸿,一生不可自决,与人不争,大喷菇 等人的帮助 以上!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FCN模型训练中遇到的困难 的相关文章

随机推荐

  • Your account has been blocked问题解决

    更新代码时报错 如下 branches to build service 1 get branch service to dir service only update code Your account has been blocked
  • 2020规划调整,以自研引擎和osg/osgearth源码分析为主

    随着公司转入webgl 我要求调整到osg osgearth工具 因为是c 方面的 特别是osg osgearth源码可以深入下 以前光把视频教程看过 说白了就是简单二次应用 并没有深入下去 所以 趁此机会多读读osg osgearth源码
  • 计算机系统(一)——冯诺依曼体系

    现代计算机的基本结构是由冯诺依曼提出的 冯诺依曼的体系结构体系如下图所示 计算机由运算器 控制器 存储器 也就是内存 输入设备 输出设备五大部件组成 其中运算器和控制器组成cpu 在冯诺依曼体系中 数据先从输入设备输入到内存中 运算时数据从
  • 解决使用SpringBoot上传文件大小受限问题

    今天在做项目学习的过程中 需要用到文件上传 启动项目正常 访问上传post请求突然报出了一个异常 特此记录一下 1 控制台异常 org springframework web multipart MaxUploadSizeExceededE
  • 一起赚美元①

    译者 一只椰子 知识星球链接 https t zsxq com iAiIyfm 本文的主人公叫迈克 他在采访里面提到 自动化工具这一法宝已经轻松帮他实现每个月 12 5万美元的利润 对他而言 年入100万美元 根本不是梦 1 主人公简介 我
  • 看完这篇,成为Grafana高手!

    背景 QQ直播前端团队接入腾讯云前端性能监控 RUM 后 对目前的监控能力以及上报数据进行了梳理 并着手进行了前端性能监控的专项建设 其中监控数据大盘建设是不可或缺的一环 可视化的监控大盘可以清晰明了的观察到各项目运行情况 宏观上能快速进行
  • 【ESP32S2】使用ESP32S2开发板制作U盘,支持无线访问

    文章目录 前言 一 开发环境 二 硬件介绍 三 下载esp idf 四 下载esp iot solution 五 配置idf 1 执行下载脚本 2 设置环境变量 3 声明外部组件 六 构建例程 七 烧写Flash 八 使用方法 九 感谢 前
  • 深度学习之Python,OpenCV中的卷积

    这篇博客将介绍图像内核和卷积 如果将图像视为一个大矩阵 那么图像内核只是一个位于图像顶部的微小矩阵 从左到右和从上到下滑动内核 计算输入图像和内核之间的元素乘法总和 称这个值为内核输出 内核输出存储在与输入图像相同 x y 坐标的输出图像中
  • 3D游戏第九次作业

    3D游戏第九次作业 1 血条 Health Bar 的预制设计 具体要求如下 分别使用 IMGUI 和 UGUI 实现 使用 UGUI 血条是游戏对象的一个子元素 任何时候需要面对主摄像机 分析两种实现的优缺点 给出预制的使用方法 IMGU
  • 2、为什么选择URP

    为什么选择URP 现在所在项目为SLG类项目 有同屏200 英雄的需求 Unity传统渲染管线的动态批处理有个限制是Skined Mesh Renderer不能进行动态批处理 英雄如果不采用Skined Mesh Renderer又不能满足
  • C++实现简单的固定大小内存分配器

    背景介绍 最近在了解性能优化相关的知识 了解到内存分配是一个可优化性能的方向 在相关书籍中看到一个固定大小的内存分配器实现 觉得挺有意思的 这里跟大家分享 据说比通用的内存分配malloc 性能有不少提升 源码实现 这里的代码是根据 c性能
  • Java会话技术

    会话技术 会话指的是客户端浏览器和服务端之间的度偶次请求和响应 当打开浏览器 访问网站地址后 会话开始 当关闭浏览器 或者到了过期时间 会话结束 就像打电话只要不挂电话就是一次会话 会话过程中产生的数据可以通过会话技术Cookie Sess
  • 抖音Scheme全网最全,startActivity地址

    例子 部分参数可省略 跳转主页并关注 snssdk1128 user profile 72673737181 refer web gd label click wap profile bottom type need follow need
  • oracle值相等时排序规则,Oracle中排序列中值相同引发的问题

    有个表 表名是Policy 有三个字段 a b c 这个表有两行 c列中的数据始终为0 我运行一下的sql语句 这个问题在Oracle的新闻中心被提出了一段时间 有个表 表名是Policy 有三个字段 a b c 这个表有两行 c列中的数据
  • vue element ui table 过滤功能实现

    Element UI代码
  • python中的list如何深度拷贝

    在 Python 中 可以使用 copy 模块中的 deepcopy 函数来进行深度拷贝 示例 import copy original list 1 2 3 4 5 6 7 8 9 copied list copy deepcopy or
  • c++全局变量的使用方式

    c 全局变量的使用方式 在cpp文件中定义 在头文件中定义 在cpp文件中定义 主函数中的使用 extern int aa extern int bb 在头文件中定义 在主函数中 在 h文件中声明 需要加extern关键字 在 cpp文件中
  • Linux环境下gcc编译链接库-lz -lrt -lm -lc都是什么库?

    编译链接库 lz lrt lm lc都是什么库 lz 压缩库 Z lrt 实时库 real time shm open系列 lm 数学库 math lc 标准C库 C lib dl 是显式加载动态库的动态函数库
  • Linux下ImageNet2012数据集下载及其配置

    简明扼要 一 训练集下载 137G http www image net org challenges LSVRC 2012 nnoupb ILSVRC2012 img train tar 验证集下载 http www image net
  • FCN模型训练中遇到的困难

    FCN模型训练中遇到的困难 标签 深度学习FCN神经网络caffe 2017 02 24 10 54 2675人阅读 评论 6 收藏 举报 分类 深度学习 18 版权声明 本文为博主原创文章 未经博主允许不得转载 前前后后大概忙了3个月了