caffe中使用python的简单介绍

本文目录一览:

怎样用python调用已经训练好的caffe

定义CAFFE为caffe跟目录,caffe的核心代码都在$CAFFE/src/caffe 下,主要有以下部分:net, blob, layer, solver.

net.cpp:

net定义网络, 整个网络中含有很多layers, net.cpp负责计算整个网络在训练中的forward, backward过程, 即计算forward/backward 时各layer的gradient。

layers:

在$CAFFE/src/caffe/layers中的层,在protobuffer (.proto文件中定义message类型,.prototxt或.binaryproto文件中定义message的值) 中调用时包含属性name, type(data/conv/pool…), connection structure (input blobs and output blobs),layer-specific parameters(如conv层的kernel大小)。定义一个layer需要定义其setup, forward 和backward过程。

blob.cpp:

net中的数据和求导结果通过4维的blob传递。一个layer有很多blobs, e.g,

对data,weight blob大小为Number * Channels * Height * Width, 如256*3*224*224;

对conv层,weight blob大小为 Output 节点数 * Input 节点数 * Height * Width,如AlexNet第一个conv层的blob大小为96 x 3 x 11 x 11;

对inner product 层, weight blob大小为 1 * 1 * Output节点数 * Input节点数; bias blob大小为1 * 1 * 1 * Output节点数( conv层和inner product层一样,也有weight和bias,所以在网络结构定义中我们会看到两个blobs_lr,第一个是weights的,第二个是bias的。类似地,weight_decay也有两个,一个是weight的,一个是bias的);

blob中,mutable_cpu/gpu_data() 和cpu/gpu_data()用来管理memory,cpu/gpu_diff()和 mutable_cpu/gpu_diff()用来计算求导结果。

slover.cpp:

结合loss,用gradient更新weights。主要函数:

Init(),

Solve(),

ComputeUpdateValue(),

Snapshot(), Restore(),//快照(拷贝)与恢复 网络state

Test();

在solver.cpp中有3中solver,即3个类:AdaGradSolver, SGDSolver和NesterovSolver可供选择。

关于loss,可以同时有多个loss,可以加regularization(L1/L2);

Protocol buffer:

上面已经将过, protocol buffer在 .proto文件中定义message类型,.prototxt或.binaryproto文件中定义message的值;

Caffe

Caffe的所有message定义在$CAFFE/src/caffe/proto/caffe.proto中。

Experiment

在实验中,主要用到两个protocol buffer: solver的和model的,分别定义solver参数(学习率啥的)和model结构(网络结构)。

好吧,copy了一大段,不晓得有没有帮助,说点accuracy = 0.5的问题。简单说,就是分错了,好吧我知道这是废话。既然是分错了,那么就要检查下了,首先检查你的训练模型。

根据训练过程来看,训练应该是已经收敛了,(反正loss一直在减小)。

这句可能是我理解问题,如果模型收敛的话,loss应该趋于平稳,如这样。

哦这是对数图。如果没有完全收敛的话,考虑下调整参数吧。说到调参,又是个坑啊。。。这个我也是懵懵懂懂。不过可以参考某些大牛的做法,比如用浅层CNN参数初始化深层CNN,或者学hinton老爷子用DBN来搞个预训练。不过即使是随机初始参数,按道理不应该出现这种accuracy=0.5的情况。个人感觉要么就是训练没有完成,要么就是在做最后二分的那一层有什么问题。。。

其实应该先检查训练数据,训练数据搞混了,其他都是白搭。

如果检查模型,你可以先看下你参数更新的梯度是否已经趋于零了,然后再看看你二分那一层有木有问题。

当然,说了这么多,可能也没啥帮助,如果你哪天改用matlab或者theano了,可以交流下,caffe确实不甚了解。。。

在尝试用caffe分类一个自己的二分类图像数据库。根据训练过程来看,训练应该是已经收敛了,(反正loss一直在减小)。然而测试集上的accuracy一直都是=0.5.

所以现在想着把生成的模型文件调出来用数据测试下,观察下是什么问题,请问应当如何去实现呢。

或者各位如果能指点下,可能是什么原因导致的accuracy = 0.5 不变。那就更好啦。

谢谢!

新手试运行了一个 caffe 的 Python 代码,出现这个错误是怎么回事

一、问题

在成功编译caffe的源码之后,可以在Python环境中使用caffe。

在Ubuntu环境下,打开python解释程序,输入import caffe时:出现以下错误

import caffe

Traceback (most recent call last):

File “stdin”, line 1, in module

ImportError: No module named caffe

二、解决思路

基本思路是把caffe中的python导入到解释器中

三、解决方法

第一种方法:设置环境变量

在终中输入:

export PYTHONPATH=~/caffe/python #caffe的路径下面的python

则该终端起作用,关掉终端后或重新打开一终端,则失效。

放到配置文件中,可以永久有效果,命令操作如下:

A.把环境变量路径放到 ~/.bashrc文件中

sudo echo export PYTHONPATH=”~/caffe/python” ~/.bashrc

B.使环境变量生效

source ~/.bashrc

第二种方法:通过代码来实现

在每个python代码中使用以下代码: (这个方法在写python代码时有用)

caffe_root = ‘~/caffe/python ‘

import sys

sys.path.insert(0, caffe_root + ‘python’)

import caffe

caffe的python接口求助

一、前期环境以及准备1、安装python在caffe中,python2和python3的接口都有。但frcnn中只能支持python2.7,所以千万不要装成python3。为了方便,不用自己去pip一大堆库,我建议安装anaconda2,里面已经安装了很多第三方的库。另附python,Windows的第三方库,里面很全。或许有一些库你要去官网上下载。2、安装(更新)显卡驱动和cudaNVIDIA的显卡驱动安装应该不用我说了吧,到官网上下载吧。我要说明一点的是,我的1080ti在安装显卡驱动时,说和Windows不匹配。怎么解决呢?更新Windows,到官网上下驱动,再安装。成功!还有就是记得更新你的显卡驱动,以防老的驱动不支持cuda。CUDA安装的话,也是傻瓜试的安装。提醒一点的是,不要改变他的安装路径,默认路径。然后去NVIDIA的官网上下载cudnn库,这个库的话需要去NVIDIA注册一个账号,然后问你用这个来完成什么工作之类的巴拉巴拉。这个库长什么样呢?下载完解压缩,得到一个cuda的文件夹,里面有3个文件夹然后打开你的CUDA文件夹,默认路径是C:\ProgramFiles\NVIDIAGPUComputingToolkit\CUDA\v8.0把cudnn库里面的3个文件夹里面的文件,分别加到cuda里面对应的文件夹。然后打开cuda需要编译的部分,默认路径是C:\ProgramData\NVIDIACorporation\CUDASamples\v8.0因为我用的VS2015,那么我就用打开2015的那个,然后改成release运行。至此,显卡计算的环境就搭建完成了。3、cmake和gitcmake的话,我建议直接下载编译好的能运行的文件(到官网上下载),然后解压文件,把bin的路径添加到Path中。git:因为frcnn里面有很多linux的脚本,你可以不用,但用的话会很方便的。所以我建议安装git。同样,傻瓜式的安装,直接到官网上下载。二、py-faster-rcnn1、编译caffe的python接口GPU版本(如果你编译过了就不用了)因为frcnn的编译过程用需要用到python的caffe包,所以必须要先编译一次caffe。如果你已经编译过caffe的py接口就不用了。下载微软的Caffe,git的地址你可以用git直接下载,或者在git的地址里下载,随便你。[plain]viewplaincopygitclonecdcaffegitcheckoutwindows打开caffe\scripts,然后编辑build_win.cmd文件第7行的VERSION是你VS的版本,VS2015对应的是14,VS2013对应的应该是12;第8行改为0;第9行改为0(如果你不用GPU,那就还是1);13行的python_version是你的python版本,2.x就是2,3.x就是3;24,28行是你的python的安装目录,如果你是anaconda就改你的anaconda的目录,否则就不改。同样69-95行同样修改。以上2张图是我的cmake文件配置。进入caffe\scripts,打开cmd,直接执行build_win.cmd。注意他会自动下载需要的库,因为服务器呢都不在国内,所以我建议挂个VPN,不然你且等呢吧。这样cmake后呢,python的接口就已经编译好了,不用再编译一遍了。把caffe\python下的caffe的文件夹copy到python的第三方包的文件夹就ok。这样caffe的python接口就好了,你可以进cmd的python试一下importcaffe。如果说,他提示少了什么包,你直接pip这个包就好了,找不到的话,百度一下就有。但只要你跟着上面我的方法做应该不会出现什么问题。2、编译py-faster-rcnn依赖库首先呢,我们先去编译一下frcnn的依赖库。Windows下,不能使用自带的lib,把自带的lib删了,重新下载,这里给出git的地址。好了,现在你的库应该长成这样,有setup.py和setup_cuda.py。进cmd,install这2个文件。现在你肯定会遇到问题,提示你VC版本不对怎么呢,先set一下:输入SETVS90COMNTOOLS=%VS140COMNTOOLS%,VS后面的数字就是你的版本。还有不要忘了把你VS的c1.exe加到path下。编译好frcnn的依赖库后,应该是这个样子的。3、给caffe加frcnn的层现在,我们再下载一个caffe,跟前面一样,把build_win.cmd进行修改。然后我们就可以把frcnn的一些特有的层加到caffe里编译了。1)添加层和文件打开py-faster-rcnn\caffe-fast-rcnn\src\caffe\layers文件夹,找到4个文件分别为然后copy到你新的caffe的对应文件夹caffe\src\caffe\layers里。接着我们添加头文件,打开py-faster-rcnn\caffe-fast-rcnn\include\caffe,把fast_rcnn_layers.hpp这文件copy到caffe的对应文件夹下caffe\include\caffe。2)配置2个新层打开你的caffe\src\caffe\proto下的caffe.proto,进行编辑。在407行左右往原来的文件里添加新的层的配置信息[plain]viewplaincopyoptionalROIPoolingParameterroi_pooling_param=8266711;optionalSmoothL1LossParametersmooth_l1_loss_param=8266712;messageROIPoolingParameter{//Pad,kernelsize,andstrideareallgivenasasinglevalueforequal//dimensionsinheightandwidthorasY,Xpairs.optionaluint32pooled_h=1[default=0];//Thepooledoutputheightoptionaluint32pooled_w=2[default=0];//Thepooledoutputwidth//MultiplicativespatialscalefactortotranslateROIcoordsfromtheir//inputscaletothescaleusedwhenpoolingoptionalfloatspatial_scale=3[default=1];}messageSmoothL1LossParameter{//SmoothL1Loss(x)=//0.5*(sigma*x)**2–ifx1.0/sigma/sigma//|x|-0.5/sigma/sigma–otherwiseoptionalfloatsigma=1[default=1];}3)cmake新的caffe的python接口就是再执行一遍build_win.cmd就行。编译好之后,把caffe根目录下的python文件夹替换py-faster-rcnn\caffe-fast-rcnn的python文件夹。三、demo完成以上步骤你的py-faster-rcnn就已经编译成功了。如果你想用demo测试一下的话可以用.\data\scripts里的脚本去下载已经训练好的model,文件挺大的、速度挺慢的。所以给大家提供一个百度5,把caffemodel文件放在data\faster_rcnn_models,然后执行tools\demo.py就能看到结果了

caffe中怎么写python层

这两天一直在研究faster rcnn的源码,可是依旧感觉云里雾里,故下定决心把caffe调用Python

layer的流程仔细走一遍,好明白到底是什么在调用python layer。话说 linux

调试还真是蛋疼啊,木有ide那样直接下断点,gdb又不会用,只能傻比比的不断的LOG(INFO)输出。还好最终还是明白了,我就直接顺着

faster rcnn来说,并记录在此。

faster

rcnn最核心的代码就是在lib文件中,其他的都只是各种调用文件而已。不过lib里写了很多个模块,如何让caffe知道模块在哪里,并调用呢?这是

我搞一晚上的初衷。我先大概说一下caffe正常的流程,首先从文件中读入solver并生成一个solver,然后根据solver的net路径生成一

个net,net调用layer_factory循环生成每个层,最后根据读入model或是filler来初始化参数。实际上也怪自己马虎大意,没太细

看代码,导致所用的时间比较多。从上面的流程可以知道layer_factory是循环生成每个层,我看.cpp文件也的确写了#if

WITH_PYTHON_LAYER,然后有什么什么操作,比如储存python

layer的python_param,并调用setup,不过我没看出来这里实际上已经是利用boost进行C++

Python混编了。这些操作的定义就在python_layer.hpp文件中,我当初还以为在什么pythonXXX.cpp中,找了半天也没找到。

layer_factory中python

layer的setup相关具体操作是,先根据param找到module的位置,再加载module,再根据层名加载层,然后前向计算反向计算什么的。

这些就已经算是达到目的了。不过只是知道相对路径,怎么可能加载成功呢?然后又继续找啊找,终于在faster

rcnn的tools文件中找到。_init_paths里有写一些预操作,比如将lib路径写入PYTHONPATH中,当然如果写入的话,这样就可以

直接加载了。终于搞定。

这次也算是个小问题而已,不过只有再理清了整条脉络,看代码才会更加清晰,故也算是个重要的问题吧。不过这次也算是暴露了我不认真的问题,以后还是要耐心仔细找答案才行啊。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/159861.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-20 00:16
下一篇 2024-11-20 00:16

相关推荐

  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29

发表回复

登录后才能评论