当我们生成了数据后,我们来看看FCN是如何加载数据的。

FCN 代码预览

其中:
- data : 训练测试数据
- ilsvrc-nets:存放预训练的模型
- 剩下的框:不同数据集的训练测试prototxt
- voc_layers,siftflow_layers等:数据生成层
- snapshot:保存快照(若没有自建)

加载训练测试数据

我们从solve.py看起。
在这里郑重声明一下:如果训练fcn32s的网络模型,一定要修改solve.py利用transplant的方式获取vgg16的网络权重。
具体操作为:

import sys
sys.path.append('/home/hitoia/caffe/python')
import caffe
import surgery, scoreimport numpy as np
import os
import systry:import setproctitlesetproctitle.setproctitle(os.path.basename(os.getcwd()))
except:passvgg_weights = '../ilsvrc-nets/vgg16-fcn.caffemodel'
vgg_proto = '../ilsvrc-nets/VGG_ILSVRC_16_layers_deploy.prototxt'
weights = '../ilsvrc-nets/vgg16-fcn.caffemodel'
#weights = '../ilsvrc-nets/vgg16-fcn.caffemodel'# init
#caffe.set_device(int(sys.argv[1]))
caffe.set_mode_gpu()
caffe.set_device(0)#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
val = np.loadtxt('/home/hitoia/fcn.berkeleyvision.org/data/pascal/VOCdevkit/VOC2012/ImageSets/Segmentation/seg11valid.txt', dtype=str) #seg11valid就是测试数据for _ in range(25):solver.step(1000)score.seg_tests(solver, False, val, layer='score')

关于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高居不下的情况

【注意:】为什么这里要使用transplant?
参考:http://www.cnblogs.com/xuanxufeng/p/6243342.html

其实主要是因为vgg中包含了fc6,fc7等全连接层,而FCN中将之改成了全卷积层,二者性质不同,但仍然可以将全连接层的参数拷贝到全卷积层上,也就是这里的transplant所起的作用。

这里的:

for _ in range(25):solver.step(1000)score.seg_tests(solver, False, val, layer='score')

奇怪的现象:修改solver.prototxt中的max_iter: 100000没有改变最大迭代次数,只有改变这个step里的数字才有用,这里最大迭代次数等于25*1000 = 25000次。

而至于训练数据的加载,则在train.prototxt中

layer {name: "data"type: "Python"top: "data"top: "label"python_param {module: "voc_layers"layer: "SBDDSegDataLayer"param_str: "{\'sbdd_dir\': \'../data/sbdd/dataset\', \'seed\': 1337, \'split\': \'train\', \'mean\': (104.00699, 116.66877, 122.67892)}"}
}

param_str包含了训练数据加载的参数:sbdd_dir,split

label的加载

上一篇《FCN-数据篇》 讲述了如何生成label数据,
生成索引图后,本应该 制作mat文件,但是有点麻烦,参考了网上的资料,修改代码,使得这里也可以直接存放索引图。
修改fcn目录下的voc_layers.py
注释掉原本的load_label ,修改为新的

#    def load_label(self, idx):
#        """
#        Load label image as 1 x height x width integer array of label indices.
#        The leading singleton dimension is required by the loss.
#        """
#        import scipy.io
#        mat = scipy.io.loadmat('{}/cls/{}.mat'.format(self.sbdd_dir, idx))
#        label = mat['GTcls'][0]['Segmentation'][0].astype(np.uint8)
#        label = label[np.newaxis, ...]
#        return labeldef load_label(self, idx):"""Load label image as 1 x height x width integer array of label indices.The leading singleton dimension is required by the loss."""im = Image.open('{}/cls/{}.png'.format(self.sbdd_dir, idx))label = np.array(im, dtype=np.uint8)label = label[np.newaxis, ...]return label

这里的label载入都是0,1等的索引值,代表分割种类。

参考

  1. ubuntu下caffe的FCN8模型训练
  2. FCN网络的训练——以SIFT-Flow 数据集为例

FCN-加载训练与测试数据相关推荐

  1. tensorflow加载训练好的模型实例

    1. 首先了解下tensorflow的一些基础语法知识 这里不再详细说明其细节,只举例学习. 1.1 tensorflow的tf.transpose()简单使用: tf.reshape(tensor, ...

  2. python训练好的图片验证_利用keras加载训练好的.H5文件,并实现预测图片

    我就废话不多说了,直接上代码吧! import matplotlib matplotlib.use('Agg') import os from keras.models import load_mod ...

  3. pytorch 驱动不兼容_解决Pytorch 加载训练好的模型 遇到的error问题

    这是一个非常愚蠢的错误 debug的时候要好好看error信息 提醒自己切记好好对待error!切记!切记! -----------------------分割线---------------- py ...

  4. 关于PaddleNLP如何加载训练好的模型进行NER

    关于PaddleNLP如何加载训练好的模型进行NER 关于PaddleNLP如何加载训练好的模型进行NER 当时在如何加载已经训练好的模型的问题上花了很长时间,后来也是受另一篇文章启发,问题才得以解决 ...

  5. pytorch加载训练数据集dataloader操作耗费时间太久,该如何解决?

    笔者在使用pytorch加载训练数据进行模型训练的时候,发现数据加载需要耗费太多时间,该如何缩短数据加载的时间消耗呢?经过查询相关文档,总结实际操作过程如下: 1.尽量将jpg等格式的文件保存为bmp ...

  6. 轻轻松松使用StyleGAN2(六):StyleGAN2 Encoder是怎样加载训练数据的?源代码+中文注释,dataset_tool.py和dataset.py

    上一篇文章里,我们简单介绍了StyleGAN2 Encoder的一部分源代码,即:projector.py和project_images.py,内容请参考: 轻轻松松使用StyleGAN2(五):St ...

  7. pytorch 加载训练好的模型后测试得到的结果不一样

    1.训练模型,在模型train模式下,运行测试图片,得到结果正确:5200240905064,保存此模型, 2.加载训练好的pth模型,调用model.eval(),在eval模式下,去测试我下载的一 ...

  8. python如何保存训练好的模型_Python机器学习7:如何保存、加载训练好的机器学习模型...

    本文将介绍如何使用scikit-learn机器学习库保存Python机器学习模型.加载已经训练好的模型.学会了这个,你才能够用已有的模型做预测,而不需要每次都重新训练模型. 本文将使用两种方法来实现模 ...

  9. TensorFlow保存或加载训练的模型

    什么是Tensorflow的模型 模型部分主要参考了这篇文章和这篇博客:另外,官方文档也给出了很多指导. Tensorflow的模型主要包括神经网络的架构设计(或者称为计算图的设计)和已经训练好的网络 ...

最新文章

  1. 1.3 matlab常用的内部数学函数
  2. itextpdf添加表格元素_使用iText填充pdf表单
  3. 【MM模块】 Blanket Purchase Orders 框架订单
  4. python numpy np.finfo()函数 eps
  5. c语言中realloc()函数解析
  6. runtime-归档
  7. 2012自学CCNP路由与交换之四交换机初始化
  8. Python --- 卸载
  9. html加注算法源码,200种加密算法(源码)
  10. popwindow+动画
  11. 苹果Mac分享几个爱用音乐播放器
  12. mysql 主从库_MySQL数据库之mysql 主库有数据通过锁库做主从
  13. 利用openssl创建私有CA的步骤和过程
  14. newifimini出厂固件_newifi mini固件
  15. matlab logspace 虚数,Matlab入门教程
  16. USB转串口驱动(支持各平台)
  17. 天玑9200领跑背后,高端芯片掀起蝴蝶效应
  18. 企业自动运行系统——定价策略
  19. 密度图与等高线图——Note_5
  20. SWUSTOJ82编写一个函数,求从n 个不同的数中取r 个数的所有选择的个数。

热门文章

  1. bzoj [Usaco2009 Hol]Cattle Bruisers 杀手游戏
  2. 个人作业——福大微信公众号使用评测
  3. 013.Zabbix的Items(监控项)
  4. Devexpress xaf针对某个用户登录后在面板中设置导航无效的解决方法
  5. 数据说话,88000条数据绘制北京市地图
  6. 封装 oschina.net 表情选择
  7. C#磁盘遍历——递归
  8. echarts 多次通过setOption改变图形数据时 数据有时不进行变化
  9. Vue 项目上线优化
  10. MAC终端下常用Git命令 - 某个人 - 博客园