首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批量大小不适用于deploy.prototxt中的caffe

批量大小不适用于deploy.prototxt中的caffe
EN

Stack Overflow用户
提问于 2016-05-03 12:00:34
回答 1查看 1.1K关注 0票数 3

我想让我的分类过程更快一点。我想在我的deploy.prototxt中增加第一个deploy.prototxt,但这似乎行不通。甚至比一幅一幅地分类还要慢一些。

deploy.prototxt

代码语言:javascript
复制
input: "data"  
input_dim: 128  
input_dim: 1  
input_dim: 120  
input_dim: 160  
... net description ...

python网初始化

代码语言:javascript
复制
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分类

代码语言:javascript
复制
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,但几乎都一样。所以我的问题是,如果有人知道我做错了什么,或者需要改变什么?谢谢你帮忙!

编辑:

一些定时结果,avg-次数只是被处理过的图像(1044)划分的总次数.

批次大小:1

2016-05-04 10:51:20,721 -探测器-信息-数据形状:(1,1,120,160) 2016-05-04 10:51:35,149 - main - INFO - GPU时间: 2016-05-04 10:51:35,149 - main -信息处理图像: 1044 2016-05-04 10:51:35,149 - main - INFO -总时间: 14.43s 2016-05-04 10:51:35,149 - main - INFO -avg-时间: 13.82ms 2016-05-04 10:51:35,149 - main - INFO - load-time: 8.31s 2016-05-04 10:51:35,149 -- INFO -avg-加载时间: 7.96ms 2016-05-04 10:51:35,149 --信息-分类-时间:5.99 2016-05-04 10:51:35,149 -- INFO -avg-分类-时间: 5.74ms

批次大小: 32

2016-05-04 10:52:30,773 -探测器-信息-数据形状:(32,1,120,160) 2016-05-04 10:52:45,135 - main - INFO - GPU时间: 2016-05-04 10:52:45,135 - main -信息处理图像: 1044 2016-05-04 10:52:45,135 - main - INFO -总时间:14.36 s 2016-05-04 10:52:45,136 - main - INFO -avg-时间: 13.76ms 2016-05-04 10:52:45,136 - main - INFO - load-time: 7.13s 2016-05-04 10:52:45,136 -- INFO -avg-加载时间: 6.83ms 2016-05-04 10:52:45,136 --信息-分类-时间: 7.13s 2016-05-04 10:52:45,136 -- INFO -avg-分类-时间: 6.83ms

批次大小: 128

2016-05-04 10:53:17,478 -探测器-信息-数据形状:(128,1,120,160) 2016-05-04 10:53:31,299 - main - INFO - GPU时间: 2016-05-04 10:53:31,299 - main -信息处理图像: 1044 2016-05-04 10:53:31,299 - main - INFO -总时间:13.82 s 2016-05-04 10:53:31,299 - main - INFO -avg-时间: 13.24ms 2016-05-04 10:53:31,299 - main - INFO - load-time: 7.06s 2016-05-04 10:53:31,299 -- INFO -avg-加载时间: 6.77ms 2016-05-04 10:53:31,299 - main - INFO -分类-时间:6.66 s 2016-05-04 10:53:31,299 -- INFO -avg-分类-时间: 6.38ms

批次大小: 1024

2016-05-04 10:54:11,546 -探测器-信息-数据形状:(1024,1,120,160) 2016-05-04 10:54:25,316 - main - INFO - GPU时间: 2016-05-04 10:54:25,316 - main -信息处理图像: 1044 2016-05-04 10:54:25,316 - main - INFO -总时间: 13.77s 2016-05-04 10:54:25,316 - main - INFO - avg-time: 13.19ms 2016-05-04 10:54:25,316 - main - INFO - load-time: 7.04s 2016-05-04 10:54:25,316 - main - INFO - avg-load-time: 6.75ms 2016-05-04 10:54:25,316 - main - INFO -分类-时间: 6.63s 2016-05-04 10:54:25,316 - main - INFO -avg-分类-时间: 6.35ms

EN

回答 1

Stack Overflow用户

发布于 2016-05-03 19:46:22

我很确定这个问题已经解决了

代码语言:javascript
复制
for j in range(len(images)):
net.blobs['data'].data[j,:,:,:] =   transformer.preprocess('data',images[j])
out = net.forward()['prob']

这样做只需将for循环最后一次迭代中的单个图像数据设置为网络的唯一输入。尝试预先堆叠N图像(如stackedimages),只调用一行一次。

代码语言:javascript
复制
for j in range(len(images)):
stackedimages <- transformer.preprocess('data',images[j])

然后打电话,

代码语言:javascript
复制
net.blobs['data'].data[...] =   stackedimages
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37003575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档