【问题标题】:Batch processing mode in CaffeCaffe 中的批处理模式
【发布时间】:2015-12-06 21:20:17
【问题描述】:

我想使用 Caffe 库来提取图像特征,但我遇到了性能问题。我只能使用CPU模式。有人告诉我,Caffe 支持批处理模式,其中处理一张图像所需的平均时间要慢得多。

我正在调用以下方法:

const vector<Blob<Dtype>*>& 
Net::Forward(const vector<Blob<Dtype>* > & bottom, Dtype* loss = NULL);

我放入一个大小为 1 的向量,其中包含以下尺寸的单个 blob -(数量:10,通道:3,宽度:227,高度:227)。它表示以与官方 python 包装器相同的方式过采样的单个图像。

这有效并给出了正确的结果。但是,它太慢了。

每当我尝试发送包含多个 blob(相同尺寸)的向量时,我都会收到以下错误:

F0910 16:10:14.848492 15615 blob.cpp:355] 试图复制不同大小的 blob。
检查失败堆栈跟踪:

如何让 Caffe 批量处理我的图片?

【问题讨论】:

  • 如果你输入一个带有num=10的blob,你得到的输出大小是多少? Net::Forward 是否会为您平均 10 个输入的特征??
  • 不,输出 blob 的大小为 10 x 4096。然后我自己平均这些值。

标签: c++ neural-network deep-learning caffe


【解决方案1】:

如果您想提供更大的批次,您需要bottom 中的第一个(也是唯一一个)blob 来拥有num&gt;10。使用 num=20 提供 blob 与使用 oversample=10 提供两个输入相同。当然,您必须根据您正在使用的oversampling 手动执行平均。

此外,您可能希望将 deploy.prototxt 文件中的第一个输入维度从 10 更改为更大的值(取决于您机器的内存容量)

【讨论】:

  • 所以,换句话说,没有办法在不改变网络定义的情况下处理一批图像,对吗?因为网络定义是这样开始的(输入 blob 尺寸在那里硬编码): name: "CaffeNet" input: "data" input_dim: 10 input_dim: 3 input_dim: 227 input_dim: 227 layers { ...
  • @DušanRychnovský 网络定义用于内存分配。您可以使用Reshape“即时”更改此设置
  • 知道了,谢谢! :) 不过,我感到困惑的是,Forward 方法的签名需要一个 vector 的 blob。如果您只能提供大小为 1 的向量,那么背后的原因是什么?
  • @DušanRychnovský 一些网络有多个"bottom",因此您需要每个"bottom" 的向量条目...
猜你喜欢
  • 2015-12-07
  • 2010-12-17
  • 2011-11-17
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 1970-01-01
  • 2021-08-31
相关资源
最近更新 更多