fcn模型训练及测试
1.模型下载
1)下载新版caffe: https://github.com/BVLC/caffe
2)下载fcn代码: https://github.com/shelhamer/fcn.berkeleyvision.org
3)将下载得到的fcn模型代码解压到caffe-master目录下
4)下载vgg16预训练好的模型和参数:http://dl.caffe.berkeleyvision.org/siftflow-fcn32s-heavy.caffemodel
放置在fcn.berkeleyvision.org/ilsvrc-nets/目录下
2.选择模型
选择siftflow-fcn32s:
1)下载siftflow数据集:http://www.cs.unc.edu/~jtighe/Papers/ECCV10/siftflow/SiftFlowDataset.zip
并解压至/fcn.berkeleyvision.org/siftflow-fcn32s/data/下,并将文件夹名重命名为sift-flow
2)cd进入fcn源码路径
以个人路径为例:/home/zzq/caffe-master/fcn.berkeleyvision.org-master/
将其中所有的py文件,例如surgery.py等等,全部复制到siftflow-fcn32s文件夹中
- cd 进入siftflow-fcn32s文件夹,运行python solve.py进行训练,
注意修改solver.prototxt文件,保存快照。
个人solver.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-10
# high momentum
momentum: 0.99
# no gradient accumulation
iter_size: 1
max_iter: 100000
weight_decay: 0.0005
snapshot: 4000
snapshot_prefix: "/home/zzq/caffe-master/fcn.berkeleyvision.org/siftflow-fcn32s/snapshot/train" //快照保存路径
test_initialization: false
4)训练大概到40000次左右时,loss从十几万下降到1000左右,可以做测试啦
5)修改fcn文件夹下的infer文件
测试单张图片。
在fcn源码文件夹,找到infer.py
以个人路径示例:/home/zzq/caffe-master/fcn.berkeleyvision.org-master/
打开infer.py 在第一行加上
import sys
sys.path.append('/home/zzq/caffe-master//python')
其中/home/zzq/caffe-master/python为自己所下载的caffe源码包中的python所在路径
其中,net = caffe.Net('deploy.prototxt', 'siftflow-fcn32s/train_iter_36000.caffemodel', caffe.TEST)
中,train_iter_136000.caffemodel为训练得到的模型
其中,im = Image.open('test.jpg')为 测试的图片名,
plt.savefig('test_out.png')为将测试结果保存为test_output.png
此外
out = net.blobs['score'].data[0].argmax(axis=0)
改成
out = net.blobs['score_sem'].data[0].argmax(axis=0)
最终修改结果如下:
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import sys
sys.path.append('/home/zzq/caffe-master/python')
import caffe
import cv2
# load image, switch to BGR, subtract mean, and make dims C x H x W for Caffe
im = Image.open('/home/zzq/caffe-master/fcn.berkeleyvision.org/data/sift-flow/Images/spatial_envelope_256x256_static_8outdoorcategories/coast_n243003.jpg')
in_ = np.array(im, dtype=np.float32)
in_ = in_[:,:,::-1]
#in_ -= np.array((104.00698793,116.66876762,122.67891434))
#in_ -= np.array((111.67446899,109.91841125,105.24302673))
in_ -= np.array((105.24302673,109.91841125,111.67446899))
in_ = in_.transpose((2,0,1))
# load net
#net = caffe.Net('deploy.prototxt', 'siftflow-fcn32s-heavy.caffemodel', caffe.TEST)
net = caffe.Net('/home/zzq/caffe-master/fcn.berkeleyvision.org/siftflow-fcn32s/deploy.prototxt', '/home/zzq/caffe-master/fcn.berkeleyvision.org/siftflow-fcn32s/snapshot/train_iter_36000.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)
#out = net.blobs['score_geo'].data[0].argmax(axis=0)
#print type(out)
#print out, out.shape
#cv2.imwrite("output.png", out)
plt.imshow(out,cmap='gray');
plt.imshow(out);
plt.axis('off')
plt.savefig('test_3_out.png')
plt.show()
注意:
如果没有deploy文件,可以参考如下方法:
deploy文件如果没有 可以参照一下方法
首先,根据你利用的模型,例如模型是siftflow32s的,那么你就去siftflow32s的文件夹,
里面有train.prototxt文件,将文件打开,全选,复制,新建一个名为deploy.prototxt文件,粘贴进去,
然后ctrl+F 寻找所有名为loss的layer 只要有loss 无论是loss还是geo_loss 将这个layer统统删除,然后删除第一层data 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/1dFCHWf3
其中 deploy是fcn32的
deploy16是fcn16的
deploy8是fcn8的
6) 测试结果:
(原图)
9) 如果想下载官方的训练好的model 试试结果可以在这里下载到
http://dl.caffe.berkeleyvision.org/
fcn模型训练及测试的更多相关文章
- Windows下mnist数据集caffemodel分类模型训练及测试
1. MNIST数据集介绍 MNIST是一个手写数字数据库,样本收集的是美国中学生手写样本,比较符合实际情况,大体上样本是这样的: MNIST数据库有以下特性: 包含了60000个训练样本集和1000 ...
- Caffe系列4——基于Caffe的MNIST数据集训练与测试(手把手教你使用Lenet识别手写字体)
基于Caffe的MNIST数据集训练与测试 原创:转载请注明https://www.cnblogs.com/xiaoboge/p/10688926.html 摘要 在前面的博文中,我详细介绍了Caf ...
- windows+caffe(四)——创建模型并编写配置文件+训练和测试
1.模型就用程序自带的caffenet模型,位置在 models/bvlc_reference_caffenet/文件夹下, 将需要的两个配置文件,复制到myfile文件夹内 2. 修改solver. ...
- 使用caffemodel模型(由mnist训练)测试单张手写数字样本
caffe中训练和测试mnist数据集都是批处理,可以反馈识别率,但是看不到单张样本的识别效果,这里使用windows自带的画图工具手写制作0~9的测试数字,然后使用caffemodel模型识别. 1 ...
- Caffe初试(二)windows下的cafee训练和测试mnist数据集
一.mnist数据集 mnist是一个手写数字数据库,由Google实验室的Corinna Cortes和纽约大学柯朗研究院的Yann LeCun等人建立,它有60000个训练样本集和10000个测试 ...
- Caffe学习系列(12):训练和测试自己的图片
学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测试模型的整个流程. 一.准备数据 有条件的同学,可以去 ...
- 不要怂,就是GAN (生成式对抗网络) (四):训练和测试 GAN
在 /home/your_name/TensorFlow/DCGAN/ 下新建文件 train.py,同时新建文件夹 logs 和文件夹 samples,前者用来保存训练过程中的日志和模型,后者用来保 ...
- 转 Caffe学习系列(12):训练和测试自己的图片
学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测试模型的整个流程. 一.准备数据 有条件的同学,可以去 ...
- AI佳作解读系列(一)——深度学习模型训练痛点及解决方法
1 模型训练基本步骤 进入了AI领域,学习了手写字识别等几个demo后,就会发现深度学习模型训练是十分关键和有挑战性的.选定了网络结构后,深度学习训练过程基本大同小异,一般分为如下几个步骤 定义算法公 ...
随机推荐
- mac电脑iTerm2链接linux服务器断线解决方案
问题 用windows链接linux服务器,方式很多,我最经常用的是xshell.但是xshell没有mac版,那用mac电脑,比较好的命令行软件是什么呢?我用的是iTerm2 ,这个功能确实蛮强大, ...
- 2_C语言中的数据类型 (二)进制
1.1 二进制数.位.字节与字 我们习惯于十进制的数:10,12等 一个位只能表示0,或者1两种状态,简称bit,一个位是一个bit 一个字节为8个二进制,称为8位,简称BYTE,8个比特 ...
- iptables 生产环境下基础设置
iptables 生产环境下基础设置 生成环境需求:防火墙需要让内网的Ip全部通过,外网IP添加到白名单,其他一切拒绝.安装在linux系统中安装yum install iptables-servic ...
- futuba R70085SB 接收机 只有SBus端口有输出其他端口输出不变
接收机能收到遥控器信号,且Sbus端口有输出,其他端口输出没有变化,这时你要看一下接收机的模式了,肯定是遥控器的通道跟输出端口的通道不匹配.参考Futuba T14SG遥控器的说明书,如下图
- jmeter发送http请求(初学者)
1.jmeter安装配置(百度,这里就不赘述了) 2.添加线程组 测试计划-->添加-->Threads-->线程组 3.线程组配置 线程数:用户数或者并发数,设置为100则有100 ...
- Unity Shader 学习之旅之SurfaceShader
Unity Shader 学习之旅之SurfaceShader unity shader 图形图像 如果大地的每个角落都充满了光明 谁还需要星星,谁还会 在夜里凝望 寻找遥远的安慰——江河 官方文档 ...
- js数组知识点总结及经典笔试题
1.判断数组 这是笔试里经常会出现的知识考察点,总结一下 (1)Array.isArray()方法判断 var a=[]; Array.isArray(a) //返回true var b='hello ...
- 将jira添加至开机自启动
东北证券网金部jira项目管理系统,经常莫名挂掉,于是乎将jira服务加入开机自启动. jira.sh脚本代码如下: #!/bin/sh # chkconfig: # description:jira ...
- 高可用注册中心 ->Spring Cloud Eureka
在微服务架构这样的分布式环境中,我们需要充分考虑发生故障的情况, 所以在生产 环境中必须对各个组件进行高可用部署, 对于微服务如此, 对于服务注册中心也一样. 但 是到本节为止,我们一直都在使用单节点 ...
- Streamr助你掌控自己的数据(1)——教你5分钟上传数据至Streamr
博客说明 所有刊发内容均可转载但是需要注明出处. 教你5分钟上传数据至Streamr 本系列文档主要介绍怎么通过Streamr管理自己的DATA,整个系列包括三篇教程文档,分别是:教你5分钟上传数据至 ...