3

Я пытаюсь сделать мой процесс классификации немного быстрее. Я думал об увеличении первого ввода_dim в моем файле deploy.prototxt, но это, похоже, не работает. Это даже немного медленнее, чем классификация каждого изображения по одному.размер партии не работает для caffe с deploy.prototxt

deploy.prototxt

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

питона чистой инициализации

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 

питон классификации

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, но все почти то же самое. Поэтому мой вопрос: если кто-то знает, что я делаю неправильно или что нужно изменить? Спасибо за помощь!

EDIT:
Некоторые временные результаты, avg-times - это всего лишь общее время обработки обработанных изображений (1044).

Пакетный размер: 1

2016-05-04 10: 51: 20721 - Детектор - ИНФО - форма данных: (1, 1, 120, 160)
2016-05-04 10: 51: 35,149 - основные - ИНФО - GPU тайминги:
2016-05-04 10: 51: 35,149 - основные - INFO - обработанные изображения: 10 2016-05-04 10: 51: 35149 - основная - INFO - всего: 14.43s
2016-05-04 10 : 51: 35149 - Главный - ИНФО - ср времени: 13.82ms
2016-05-04 10: 51: 35149 - Главный - ИНФО - время загрузки: 8.31s
2016-05-04 10 : 51: 35149 - Главный - ИНФО - ср-во время загрузки: 7.96ms
2016-05-04 10: 51: 35149 - Основной - ИНФО - классифицирует время: 5.99s
2016-05- 04 10: 51: 35149 - Главного - INFO - ср-классифицирует время: 5.74ms

444441462 Размер 0935846510408888 Пакетное: 32

2016-05-04 10: 52: 30773 - Детектор - ИНФО - форма данных: (32, 1, 120, 160)
2016-05-04 10: 52: 45135 - основные - ИНФО - GPU тайминги:
2016-05-04 10: 52: 45135 - основные - INFO - обработанные изображения: 10 2016-05-04 10: 52: 45,135 - Главный - INFO - общее время: 14,36s
2016-05-04 10: 52: 45,136 - основная - INFO - время автономной работы: 13.76m с
2016-05-04 10: 52: 45,136 - основная - INFO - время загрузки: 7.13s
2016-05-04 10: 52: 45136 - Главный - ИНФО - ср-во время загрузки: 6.83ms
2016-05-04 10: 52: 45136 - Основной - ИНФО - классифицирует время : 7.13s
2016-05-04 10: 52: 45,136 - основные - INFO - ср-классифицируют времени: 6.83ms

размер Пакетный: 128

2016-05- 04 10: 53: 17,478 - детектор - INFO - форма данных: (128, 1, 12 0, 160)
2016-05-04 10: 53: +31299 - основные - ИНФО - GPU тайминги:
2016-05-04 10: 53: 31,299 - основные - INFO - обработанные изображения: 10 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 - main - INFO - время загрузки: 7.06s
2016-05-04 10: 53: 31,299 - основные - INFO - ср нагрузки время: 6.77ms
2016-05-04 10: 53: 31299 - Основной - ИНФО - классифицирует-время: 6.66s
2016-05-04 10:53: 31299 - основные - INFO - ср-классифицируют времени: 6.38ms

размер Пакетное: 102

2016-05-04 10: 54: 11546 - детектор - ИНФО - форма данных: (1024, 1, 120, 160)
2016-05-04 10: 54: 25,316 - основные - ИНФО - GPU тайминги:
2016-05-04 10: 54: 25,316 - основные - INFO - обработанные изображения:
тысяча сорок четыре 2016-05-04 10: 54: 25316 - Главный - ИНФО - все время: 13.77s
2016-05-04 10: 54: 25316 - главного - ИНФО - ср время: 13.19ms
2016-05-04 10: 54: 25,316 - главного - INFO - время загрузки: 7.04s
2016-05-04 10: 54: 25,316 - основная - INFO - время загрузки: 6.75 мс
2016-05-04 10: 54: 25316 - Основная - ИНФО - классифицирует время: 6.63s
2016-05-04 10: 54: 25316 - Главного - ИНФО - ср-классифицирует-время: 6.35ms

+0

вы используете GPU или CPU? – Shai

+0

Я использую GPU: nvidia GTX980 Ti – Feuerteufel

+2

Что вы подразумеваете под «все почти то же самое»? время выполнения 'net.forward()' одинаково независимо от 'batch_size', или время выполнения * разделенное * на' batch_size' является «почти таким же»? можете ли вы поместить здесь несколько цифр? – Shai

ответ

0

Я уверен, что проблема в линии

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

Doing это будет просто установить данные одиночные изображения из последней итерации цикла для как только вход сети.Попробуйте укладки N изображения (например stackedimages) заранее и называть линию только один раз например

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

Тогда звоните,

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

Я не думаю, что это проблема. на каждой итерации устанавливается другой срез '['data']. data', а' forward() 'вызывается только после того, как были назначены все срезы. – Shai

+2

Я с @Shai. В '[data ']. Data' каждый индекс j должен иметь соответствующее преобразованное изображение в конце цикла for. Тем не менее у меня возникает вопрос: какова необходимая структура данных для 'stackedimages'? Atm все изображения находятся в списке, но изменение было бы возможно. Или будет 'net.blobs ['data']. Данные [...] = изображения возможны? – Feuerteufel

+0

Ах, да, я вижу. Ты прав. 'net.blobs ['data']. data [...] = images' будет работать нормально, если' images' все уже преобразованы. Просто убедитесь, что они надлежащим образом сложены, чтобы сформировать 4d-кадр одинаковых размеров – Prophecies