fcn网络训练代码_FCN网络训练 菜鸟版
论文全名:Fully Convolutional Networks for Semantic Segmentation
全卷积神经网络 FCN代码运行详解:
运行平台:
Ubuntu 14.04 + cudnn7
1.代码准备:
下载新版caffe: https://github.com/BVLC/caffe
下载fcn代码: https://github.com/shelhamer/fcn.berkeleyvision.org
将下载后的压缩包解压 将解压后的代码丢进服务器
2.编辑caffe和python接口:
cd进入caffe所在路径
以个人路径示例:/home/my/caffe-master/caffe-master
在该目录下,执行
cp Makefile.config.example Makefile.config
vim Makefile.config(这句代码根据自己情况选择,如果需要修改相关设定,就使用这句,需要注意的是,将WITH_PYTHON_LAYER :=1前面的#去掉
如果使用cudnn,就把use cudann前面的#去掉
我这边安装的是openbla,所以我的设置为BLAS:=open)
make all -j8 //8代表线程数量,可以加快编译速度
make test -j8 //编译测试需要的文件
make runtest //开始运行测试例子,这一句貌似有没有都行以上结束后开始编译python接口
在下载的caffe源码包中,有个叫python的文件夹,cd进入这个文件夹
以我个人路径为例cd至 /home/wangkun/caffe-master/caffe-master/python
编译python:
make pycaffe
#测试是否成功
cd caffe-folder/python
python
import caffe
#如果上述命令未报错,说明成功
#添加caffe/python 到python path变量
vim ~/.bashrc
#set the caffe PYTHONPATH
export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH
!如果是采用的Anaconda python,切记编译python接口在最后执行。
!如果是系统自带的python在make pycaffe可能出现python/caffe/_caffe.hpp:8:31: fatal error: numpy/arrayobject.h: No such file or directory
这是因为64位的python 库的存放路径问题。
查找arrayobject.h所在的目录:
sudo find / -name arrayobject.h
然后修改Makefile.config:
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib64/python2.7/site-packages/numpy //这里修改成找到的路径 以上,编译结束,关于编译python,由于我这边服务器上使用的是Anaconda python,大家可以根据自己的实际情况进行python接口的编译
3.数据文件下载
下载siftflow数据集:http://www.cs.unc.edu/~jtighe/Papers/ECCV10/siftflow/SiftFlowDataset.zip
并解压至
/fcn.berkeleyvision.org/data/
下,并将文件夹名重命名为
sift-flow
4.预训练模型下载:
下载VGG16的预训练模型并放在FCN源码文件夹中的ilsvrc-nets文件夹下
https://pan.baidu.com/s/1qYJeFfQ
以个人路径为例:/home/my/fcn.berkeleyvision.org-master/fcn.berkeleyvision.org-master/ilsvrc-nets
5.为了避免运行程序时候出现no module named caffe
在代码中包含import caffe的py文件的第一行加入
import sys
sys.path.append('/home/my/caffe-master/caffe-master/python')
其中,
/home/my/caffe-master/caffe-master/python为你下载的caffe源码中python文件夹的路径
6.cd进入fcn源码路径
以个人路径为例:/home/my/fcn.berkeleyvision.org-master/fcn.berkeleyvision.org-master
将其中所有的py文件,例如surgery.py等等,全部复制到siftflow-fcn32s文件夹中
7.solver.prototxt文件修改
进入siftflow-fcn32s文件夹 打开solver.prototxt
其中snapshot:10000 表示训练10000次保存一次模型
snapshot_prefix:"/home/my/fcn.berkeleyvision.org-master/fcn.berkeleyvision.org-master/siftflow-fcn32s/train"
表示训练得到的模型,也就是model存放的路径
8.solve.py文件修改
在这里郑重声明一下:如果训练fcn32s的网络模型,
一定要修改solve.py
利用transplant的方式获取vgg16的网络权重;
具体操作为
import sys
sys.path.append('/home/my/caffe-master/caffe-master/python')
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
vgg_weights='../ilsvrc-nets/vgg16-fcn.caffemodel'
vgg_proto='../ilsvrc-nets/VGG_ILSVRC_16_layers_deploy.prototxt'
weights='../ilsvrc-nets/vgg16-fcn.caffemodel'
# init
caffe.set_mode_gpu()
# caffe.set_device(int(sys.argv[0]))
caffe.set_device(7)
#solver=caffe.SGDSolver('solver.prototxt')
#solver.net.copy_from(weights)
solver=caffe.SGDSolver('solver.prototxt')
vgg_net=caffe.Net(vgg_proto,vgg_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')
可以看到我注释了
#solver=caffe.SGDSolver('solver.prototxt')
#solver.net.copy_from(weights)
solver=caffe.SGDSolver('solver.prototxt')
vgg_net=caffe.Net(vgg_proto,vgg_weights,caffe.TRAIN)
surgery.transplant(solver.net,vgg_net)
del vgg_net
并且在import后添加了
vgg_weights='../ilsvrc-nets/vgg16-fcn.caffemodel'
vgg_proto='../ilsvrc-nets/VGG_ILSVRC_16_layers_deploy.prototxt'
weights='../ilsvrc-nets/vgg16-fcn.caffemodel'
关于
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 只有如此,才能避免loss高居不下的情况
9.进入siftflow-fcn32s文件夹
执行 python solve.py
10.测试单张图片
在fcn源码文件夹,找到infer.py
以个人路径示例:/home/my/fcn.berkeleyvision.org-master/fcn.berkeleyvision.org-master
打开infer.py 在第一行加上
import sys sys.path.append('/home/my/caffe-master/caffe-master/python')
其中,net = caffe.Net('deploy.prototxt', 'siftflow-fcn32s/train_iter_100000.caffemodel', caffe.TEST)
中,
train_iter_100000.caffemodel为训练得到的模型
其中,im = Image.open('test.jpg')为 测试的图片名,
plt.savefig('test_out.png')为将测试结果保存为test_output.png
如果没有deploy文件,可以参考如下方法:
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
此外,关于siftflow-fcn32s需要的deploy文件,我在这里附上一个下载地址,如果不愿意自己制作可以下载这个:
http://pan.baidu.com/s/1eSiRm7K
以上,FCN的训练和测试全部结束,这次有个朋友催我做这个,做得比较仓促,如果有问题,欢迎指摘
fcn网络训练代码_FCN网络训练 菜鸟版相关推荐
- 【Whole Word Mask】中文 bert wwm 预训练代码,预训练你自己的模型
基于 transformers 来进行 bert 的 wwm (全词掩码)预训练,让你的模型可以领域适配 提示:文章偏向于NLP进阶,大佬请绕路-- 文章目录 基于 transformers 来进行 ...
- 网络编程—代码—TCP网络传输
一.TCP:用字符流传输信息 ------------------------------------------------------------------------------ [用字符流的 ...
- U2Net、U2NetP分割模型训练---自定义dataset、训练代码训练自己的数据集
前言 博客很久没有更新了,今天就来更新一篇博客吧,哈哈: 最近在做图像分割相关的任务,因此,写这么一篇博客来简单实现一下分割是怎么做的,内容简单,枯燥,需要耐心看,哈哈: 博客的内容相对简单,比较适合 ...
- fcn网络训练代码_用FCN做分割
船长黑板报所有文章和代码的最新版本均在 Captain1986/CaptainBlackboardgithub.com 维护,知乎不做维护 您的Star是对我的鼓励 图像分割是计算机视觉中比较常见的 ...
- 经典网络vgg应用于 图像二分类的训练代码
1 目的:使用VGG16网络 进行对图片二分类 (不同插值方法的图片 纹理不同) vgg16 网络结构的连接 https://blog.csdn.net/weixin_44576543/articl ...
- 一块GPU就能训练语义分割网络,百度PaddlePaddle是如何优化的?
[引言]显存不足是训练语义分割网络常常遇见的问题,而显存是GPU计算中的稀缺资源.百度深度学习框架PaddlePaddle中的显存优化,不仅可以让研究人员在相同成本的计算设备上训练更大的模型,还可以在 ...
- py之textgenrnn:Python利用textgenrnn库实现训练文本生成网络
py之textgenrnn:Python利用textgenrnn库实现训练文本生成网络 目录 输出结果 实现代码 输出结果 实现代码 #textgenrnn:利用textgenrnn实现训练文本生成网 ...
- FSRNet:端到端深度可训练人脸超分辨网络
作者丨左育莘 学校丨西安电子科技大学 研究方向丨计算机视觉 这篇文章 FSRNet: End-to-End Learning Face Super-Resolution with Facial Pri ...
- 图卷积 节点分类_在节点分类任务上训练图卷积网络
图卷积 节点分类 This article goes through the implementation of Graph Convolution Networks (GCN) using Spek ...
最新文章
- 关于学习Python的一点学习总结(4->成员资格->list->列表操作)
- java编程50实例_java编程实例大全及详解谜底(50例).doc
- 经典C语言程序100例之九
- RabbitMQ消费消息方法basicConsume
- jQuery技术内幕:深入解析jQuery架构设计与实现原理1
- MATLAB语言初步学习(一)
- 【ElasticSearch】(七)浅析search_after 及 fromsize,scroll,search_after性能分析
- dotnet core项目升级到 .net core 2.0
- dll缺失怎么修复?有什么好的修复方法推荐?
- matlab中 dataset用法,dataset中shuffle()、repeat()、batch()用法
- android获取其他app布局,关于android:如何从App的(布局)XML变量中获取Manifest版本号?...
- AntV G6 自定义节点图形
- XZ压缩最新压缩率之王
- 暑假D16 T3 密道(数位DP? 打表找规律)
- Oracle针对EMP表的练习题(很有用,值得收藏)
- 人工智能时代:软件中的人工智能将如何改变程序员的角色
- dowhile实现求水仙花数
- Vi编辑器的使用方法及用vi编辑器编写一个C程序
- 关于腾讯云服务器使用FTP详细配置教程
- android标题栏添加按钮_如何从iPhone或Android设备访问PC
热门文章
- 杜甫的《望岳》在哪里作的?山脚下还是山头上?
- leetcode —— 数组(1. Two Sum)
- 动态规划 —— 最长递增子序列(LIS)
- linux关闭自动更新,Ubuntu开启系统自动升级与取消自动更新的方法,
- php url路由入门实例,ThinkPHP URL 路由实例
- android md5使用方法,android 使用DigestUtilsmd5加密的方法
- Android 开发常用ADB命令集合
- python爬虫什么意思-python爬虫什么意思
- python编程是啥-python中type()是什么意思
- python自动化办公模块有哪些-python如何实现自动化办公?