Caffe编写Python layer

在使用caffe做训练的时候,通常的做法是把数据转为lmdb格式,然后在train.prototxt中指定,最后在开始训练,转为lmdb格式的优点是读取数据更高效,但是缺点就是灵活性比较差。有时候我们的标是自定义的,这个时候就可以借助caffe提供的python接口来进行定义数据层。

1. 需要注意的点

  • 编译caffe的时候要指定 WITH_PYTHON_LAYER := 1
  • 要指定编译好的[xxx/build/tools/caffe]和路径对应的[xxx/python/]
  • Python的类中一定要有的函数是 setup forward reshape backward,做数据层的话后面两个函数可以不定义,但是一定要有这个两个函数存在
  • 写好的python文件要放在[xxx/python/]下
  • 变量"self.param_str_"是你要解析的参数变量,新版的caffe中改成了self.param_str

2. 编写Python layer的参考demo

import sys
sys.path.append("/export/docker/JXQ-23-46-49.h.chinabank.com.cn/surui/project_caffe/segmentation/ENet/caffe-enet/python")
import caffe
import numpy as np
from random import shuffle
from PIL import Imageheight = 224
width = 224
channel = 3class ImageData(caffe.Layer):def setup(self, bottom, top):params = eval(self.param_str_)source = params["source"]self.batch_size = params["batch_size"]self.scale = params["scale"]self.image_height = params["image_height"]self.image_width = params["image_width"]top[0].reshape(self.batch_size, 1, self.image_height, self.image_width)  # imagetop[1].reshape(self.batch_size)  # labelself.img_path_labels = self.read_txt(source)self.index = 0 def forward(self, bottom, top):for i in range(self.batch_size):image, label = self.next_image()top[0].data[i, ...] = imagetop[1].data[i, ...] = labeldef reshape(self, bottom, top):passdef backward(self, bottom, top):passdef read_txt(self, source):img_path_labels = []with open(source) as f:for line in f.readlines():img_path_label = line.strip("\n").split(" ")img_path_labels.append(img_path_label)return img_path_labelsdef next_image(self):if self.index == len(self.img_path_labels):self.index = 0shuffle(self.img_path_labels)imagePath, label = self.img_path_labels[self.index]image = np.array(Image.open(imagePath).resize(width, height))image = np.swapaxes(image, 0, 2)  # 交换轴,例如: [h,w,b,c] -> [b,w,h,c]  image = image * self.scaleself.index += 1return image, label

3. 使用Python layer导入训练数据的格式

layer {name: "input_data"type: "Python"top: "data"top: "label"include{phase: TRAIN}python_param {                                                                                             module: "data_layer"      # python脚本名data_layer.py                                                                           layer: "ImageData"        # python类名                                                                               param_str: "{'batch_size':32, 'scale':0.0078125, 'image_height':160, 'image_width':200, 'source':'xxx/trainval.txt'}"}
}

4.参考
https://blog.csdn.net/haima1998/article/details/79066084
https://www.jianshu.com/p/e05d1b210fcb

Caffe编写Python layer相关推荐

  1. 多线程 python layer_在Caffe中加Python Layer的方法

    Author: Zongwei Zhou | 周纵苇 Weibo: @MrGiovanni Email: zongweiz@asu.edu Acknowledgement: Md Rahman Sid ...

  2. win7+vs2015/13+caffe+matlab+python(CPU only)配置

    首先声明本教程可以适用于vs2015 和vs2013 .以vs2015为例. 安装必备软件 vs 2015 /vs2013 matlab 2016a(64bit) 推荐使用Anaconda 2.7 或 ...

  3. 利用caffe的python接口实现DeepImageSynthesis实例

    在之前实现faster rcnn的博客中,先是配置了caffe的python接口,但是在验证的时候用DeepTexture的实例没有成功.改用pycharm而不是jupyter notebook再试一 ...

  4. caffe与Python接口的配置(VC2013 Windows CUDA7.5 Python2.7.12)

    1.安装Python(建议安装Anaconda2-4.1.1-Windows-x86_64,包含大部分需要的Python库和Python代码编写运行平台),并将安装路径添加到系统环境变量 2.修改.. ...

  5. VS2015+caffe+matlab+python+CPU

    实验平台: Win7 64bit, VS 2015(Professional), matlab 2016b(64bit), python2.7.12, Eclipse IDE for Java Dev ...

  6. Windows10上使用Caffe的Python接口进行图像分类例程

    本文将会介绍Caffe的Python接口的使用方法.编辑Python可以使用很多种方法,我们采用的是IPython交互式编辑环境. 1 Python的安装 如果你的Windows电脑还没有安装Pyth ...

  7. Python培训教程分享:visual studio编写python怎么样?

    本期小编要为大家介绍的Python培训教程就是关于"visual studio编写python怎么样?"的问题,但答案当然是可以的,据了解,vs2017.vs2019都集成了pyt ...

  8. 在Rust代码中编写Python是种怎样的体验?

    作者 | Mara Bos,Rust资深工程师 译者 | Arvin,编辑 | 屠敏 来源 | CSDN(ID:CSDNnews) 大约一年前,我发布了一个名为inline-python(https: ...

  9. 编写python程序的步骤_编写python程序和运行.py文件的方法步骤

    前提:已安装好 Subliume Test 3 且已经添加好python编译系统,已安装好python3.7 一.新建一个文本文档,将后缀名改为.py 二.使用 Subliume Test 3 打开该 ...

最新文章

  1. 图书馆自动化系统 Evergreen 3.3 发布,迁移到 Angular
  2. 需求分析挑战之旅——疯狂的订餐系统
  3. [C++对象模型][9]虚继承与虚函数表
  4. [蓝桥杯][算法提高VIP]扫雷-枚举
  5. java制作加载界面_Java如何制作启动界面?
  6. .NET 项目开发总结
  7. 5 分钟商学院精细笔记 000~185
  8. Android进阶: 10分钟实现NDK-JNI 开发教程
  9. FTPClient删除linux文件夹,使用ftp读取文件夹中的多个文件,并删除
  10. Windows安装Linux, (WSL)Windows Subsystem for Linux
  11. C语言书中例题错误,C语言例题错误了吗?
  12. 线性混合模型及R实现
  13. Android 深色模式的项目应用
  14. 计算机的内存时序参数,装机用户须知:电脑内存时序基础知识
  15. java办公督办系统(企业事务管理系统)
  16. redis streams_如何构建Redis Streams应用程序
  17. 关于Olly Dbg的使用报告
  18. MySQL数据库的存储引擎
  19. 在IE浏览器中如何直接显示word文档
  20. 石墨文档编辑器用的是开源库吗?

热门文章

  1. linux怎么看文件是否orc格式,hive文件存储格式orc,parquet,avro对比
  2. webpack打包优化_如何提升 Webpack 打包速度
  3. python游戏制作软件_10 个最值得 Python 新人练手的有趣项目
  4. 服务器里的文件链接地址怎么写,服务器里的文件链接地址怎么写
  5. 内存颗粒和闪存颗粒的区别_国产闪存颗粒终于熬出头 紫光存储S100固态硬盘评测...
  6. oracle10gr2安装教程,Solaris10安装Oracle10gR2时的注意事项
  7. word计算机排版怎么选,Word选择题选项对齐排版方法 查找替换工具搞定
  8. 51汇编与c语言混合编程,C51与汇编混合编程详解
  9. jsf表单验证_JSF验证示例教程–验证器标签,定制验证器
  10. Python就业涨薪小技巧!