我正在尝试使我的分类过程更快。我想增加我的deploy.prototxt中的第一个input_dim,但这似乎不起作用。它甚至比一张一张一张地分类要慢一些。

deploy.prototxt

input: "data"
input_dim: 128
input_dim: 1
input_dim: 120
input_dim: 160
... net description ...


python net初始化

net=caffe.Net( 'deploy.prototxt', 'model.caffemodel', caffe.TEST)
net.blobs['data'].reshape(128, 1, 120, 160)
transformer = caffe.io.Transformer({'data':net.blobs['data'].data.shape})
#transformer settings


python分类

images=[None]*128
for i in range(len(images)):
  images[i]=caffe.io.load_image('image_path', False)
for j in range(len(images)):
  net.blobs['data'].data[j,:,:,:] = transformer.preprocess('data',images[j])
out = net.forward()['prob']


我略过了一些细节,但是重要的事情应该给出。我尝试了不同的批处理大小,例如32、64,...,1024,但几乎都相同。所以我的问题是,如果有人知道我做错了什么或需要更改什么?
感谢帮助!

编辑:
一些计时结果,平均时间仅仅是由处理的图像划分的总时间(1044)。

批次大小:1


2016-05-04 10:51:20,721-检测器-信息-数据形状:(1、1、120、160)
2016-05-04 10:51:35,149-主要-信息-GPU时序:
2016-05-04 10:51:35,149-主-信息-处理的图像:1044
2016-05-04 10:51:35,149-主要-信息-总时间:14.43秒
2016-05-04 10:51:35,149-主-信息-平均时间:13.82ms
2016-05-04 10:51:35,149-主-信息-加载时间:8.31秒
2016-05-04 10:51:35,149-主-信息-平均加载时间:7.96ms
2016-05-04 10:51:35,149-主要-信息-分类时间:5.99秒
2016-05-04 10:51:35,149-主-信息-平均分类时间:5.74ms


批次大小:32


2016-05-04 10:52:30,773-检测器-信息-数据形状:(32,1,120,160)
2016-05-04 10:52:45,135-主要-信息-GPU时序:
2016-05-04 10:52:45,135-主-信息-处理的图像:1044
2016-05-04 10:52:45,135-主要-信息-总时间:14.36秒
2016-05-04 10:52:45,136-主-信息-平均时间:13.76ms
2016-05-04 10:52:45,136-主要-信息-加载时间:7.13秒
2016-05-04 10:52:45,136-主-信息-平均加载时间:6.83ms
2016-05-04 10:52:45,136-主要-信息-分类时间:7.13秒
2016-05-04 10:52:45,136-主-信息-平均分类时间:6.83ms


批次大小:128


2016-05-04 10:53:17,478-检测器-信息-数据形状:(128,1,120,160)
2016-05-04 10:53:31,299-主要-信息-GPU时序:
2016-05-04 10:53:31,299-主-信息-处理的图像:1044
2016-05-04 10:53:31,299-主-信息-总时间:13.82s
2016-05-04 10:53:31,299-主-信息-平均时间:13.24ms
2016-05-04 10:53:31,299-主要-信息-加载时间:7.06s
2016-05-04 10:53:31,299-主-信息-平均加载时间:6.77ms
2016-05-04 10:53:31,299-主要-信息-分类时间:6.66秒
2016-05-04 10:53:31,299-主-信息-平均分类时间:6.38ms


批次大小:1024


2016-05-04 10:54:11,546-检测器-信息-数据形状:(1024,1,120,160)
2016-05-04 10:54:25,316-主-信息-GPU时序:
2016-05-04 10:54:25,316-主-信息-处理后的图像:1044
2016-05-04 10:54:25,316-主要-信息-总时间:13.77s
2016-05-04 10:54:25,316-主要-信息-平均时间:13.19ms
2016-05-04 10:54:25,316-主要-信息-加载时间:7.04s
2016-05-04 10:54:25,316-主-信息-平均加载时间:6.75ms
2016-05-04 10:54:25,316-主要-信息-分类时间:6.63秒
2016-05-04 10:54:25,316-主-信息-平均分类时间:6.35ms

最佳答案

我很确定问题是正确的

for j in range(len(images)):
net.blobs['data'].data[j,:,:,:] =   transformer.preprocess('data',images[j])
out = net.forward()['prob']


这样做只会将来自for循环最后一次迭代的单个图像数据设置为网络的唯一输入。尝试事先堆叠N图片(例如stackedimages),然后仅调用该行一次,例如

for j in range(len(images)):
stackedimages <- transformer.preprocess('data',images[j])


然后打电话

net.blobs['data'].data[...] =   stackedimages

关于neural-network - 批处理大小不适用于使用deploy.prototxt的caffe,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37003575/

10-12 19:27