45

有谁知道是否有所有重要的 pycaffe 命令的备忘单?到目前为止,我仅通过 Matlab 界面和终端 + bash 脚本使用 caffe。

我想转向使用 ipython 并完成 ipython notebook 示例。但是,我发现很难对 python 的 caffe 模块中的所有函数进行概述。(我对python也很陌生)。

4

2 回答 2

98

pycaffe测试这个文件是 python 编码接口的主要入口。

首先,您要选择是否使用带有 CPU 或 GPU 的 Caffe。分别调用caffe.set_mode_cpu()或就足够了。caffe.set_mode_gpu()

pycaffe 接口暴露的主要类是Net. 它有两个构造函数:

net = caffe.Net('/path/prototxt/descriptor/file', caffe.TRAIN)

只需创建一个Net(在这种情况下使用为训练指定的数据层),或

net = caffe.Net('/path/prototxt/descriptor/file', '/path/caffemodel/weights/file', caffe.TEST)

它创建一个Net并自动加载保存在提供的caffemodel文件中的权重 - 在这种情况下,使用为测试指定的数据层。

一个Net对象有几个属性和方法。他们可以在这里找到。我只会引用我经常使用的那些。

您可以通过 访问网络 blob Net.blobs。例如

data = net.blobs['data'].data
net.blobs['data'].data[...] = my_image
fc7_activations = net.blobs['fc7'].data

您也可以以类似的方式访问参数(权重)。例如

nice_edge_detectors = net.params['conv1'].data
higher_level_filter = net.params['fc7'].data

好的,现在是时候向网络提供一些数据了。所以,你将使用backward()forward()方法。所以,如果你想对单个图像进行分类

net.blobs['data'].data[...] = my_image
net.forward() # equivalent to net.forward_all()
softmax_probabilities = net.blobs['prob'].data

如果对计算梯度感兴趣,该backward()方法是等效的。

您可以保存净重以便随后重复使用它们。这只是一个问题

 net.save('/path/to/new/caffemodel/file')

求解器

pycaffe 暴露的另一个核心组件是Solver. 有几种类型的求解器,但我只是SGDSolver为了清楚起见而使用。它是训练 caffe 模型所必需的。您可以使用实例化求解器

solver = caffe.SGDSolver('/path/to/solver/prototxt/file')

Solver封装您正在训练的网络,以及用于测试的网络(如果存在)。请注意,它们通常是同一个网络,只是具有不同的数据层。网络可通过以下方式访问

 training_net = solver.net
 test_net = solver.test_nets[0] # more than one test net is supported

然后,您可以执行求解器迭代,即带有权重更新的前向/后向传递,只需键入

 solver.step(1)

或运行求解器直到最后一次迭代,使用

 solver.solve()

其他特性

请注意,pycaffe 允许您做更多的事情,例如通过 Python 类指定网络架构创建新的Layer类型。这些功能很少使用,但通过阅读测试用例很容易理解。

于 2015-09-10T18:16:05.333 回答
10

请注意,Flavio Ferrara 的回答有一个小问题,可能会导致您浪费大量时间:

net.blobs['data'].data[...] = my_image
net.forward()

如果你的第一层是Data类型的层,上面的代码是无效的,因为net.forward()调用的时候会从第一层开始,然后你插入的数据my_image就会被覆盖。所以它不会显示任何错误,但会给你完全不相关的输出。正确的方法是分配起始层和结束层,例如:

net.forward(start='conv1', end='fc')

这是 LFW 数据集上的人脸验证实验的 Github 存储库,使用 pycaffe 和一些 matlab 代码。我想这会很有帮助,尤其是caffe_ftr.py文件。

https://github.com/AlfredXiangWu/face_verification_experiment

此外,这里还有一些使用 pycaffe 进行图像分类的简短示例代码:</p>

http://codrspace.com/Jaleyhd/caffe-python-tutorial/ http://prog3.com/sbdm/blog/u011762313/article/details/48342495

于 2016-07-18T02:59:08.387 回答