Пример уровня данных caffe шаг за шагом

Я хочу найти пример слоя данных caffe python для изучения. Я знаю, что в Fast-RCNN есть уровень данных Python, но он довольно сложен, так как я не знаком с обнаружением объектов.
Итак, мой вопрос: есть ли пример уровня данных Python, где я могу научиться определять свои собственные данные? процедура подготовки?
Например, как определить уровень данных python, сделать гораздо больше дополнений данных (таких как перевод, вращение и т. д.), чем caffe "ImageDataLayer".

Большое тебе спасибо


person kli_nlpr    schedule 25.01.2016    source источник


Ответы (2)


Вы можете использовать слой "Python": слой, реализованный в python, для передачи данных в вашу сеть. (См. пример добавления слоя type: "Python" здесь).

import sys, os
sys.path.insert(0, os.environ['CAFFE_ROOT']+'/python')
import caffe
class myInputLayer(caffe.Layer):
  def setup(self,bottom,top):
    # read parameters from `self.param_str`
    ...
  def reshape(self,bottom,top):
    # no "bottom"s for input layer
    if len(bottom)>0:
      raise Exception('cannot have bottoms for input layer')
    # make sure you have the right number of "top"s
    if len(top)!= ...
       raise ...
    top[0].reshape( ... ) # reshape the outputs to the proper sizes
    
  def forward(self,bottom,top): 
    # do your magic here... feed **one** batch to `top`
    top[0].data[...] = one_batch_of_data


  def backward(self, top, propagate_down, bottom):
    # no back-prop for input layers
    pass

Для получения дополнительной информации о param_str см. эту тему.
Вы можете найти эскиз слоя загрузки данных с предварительно выберите здесь.

person Shai    schedule 25.01.2016
comment
Большое спасибо за ваше объяснение, я попытаюсь реализовать его и опубликовать свой код здесь. о (^▽^) о - person kli_nlpr; 26.01.2016
comment
На самом деле я нашел один PR на веб-сайте кафе. github.com/BVLC/caffe/pull/3471/files - person kli_nlpr; 26.01.2016
comment
Можно ли здесь использовать многопоточность, чтобы быстрее загружать данные? - person curio17; 13.03.2017
comment
@kishensurajP вы можете использовать модуль потоковой обработки Python для предварительной выборки данных. - person Shai; 13.03.2017
comment
Спасибо. Таким образом, должен быть цикл для общего количества изображений в пакете в прямом методе, чтобы top[0].data[...] выводил полный пакет? - person Alex; 15.01.2018
comment
@Алекс да. каждый вызов переадресации должен давать новую партию - person Shai; 15.01.2018
comment
@Шай: это круто. Знаете ли вы какой-нибудь способ ускорить цикл по изображениям в пакете? Что-то вроде itertools? - person Alex; 16.01.2018
comment
@ Алекс, вы можете попробовать ускорить процесс, используя multiprocessing.Process для получения данных. См. этот ответ для эскиза. - person Shai; 16.01.2018

@Ответ Шая великолепен. В то же время я нахожу еще один подробный пример о слое данных python в одном PR caffe-master. https://github.com/BVLC/caffe/pull/3471/files Я надеюсь, что этот подробный пример будет полезен для всех остальных.

person kli_nlpr    schedule 26.01.2016
comment
Большое спасибо, вы случайно не знаете, как нам настроить файл prototxt? на самом деле я пытаюсь сделать именно то, что вы просили, но я запутался. даже после просмотра кода. моя проблема заключается в том, как мы определяем источник изображения в prototxt, а затем как мы читаем из него различные параметры. Буду признателен, если вы поделитесь с нами своей реализацией. это очень помогает нам. - person Rika; 08.02.2018
comment
Готово :) Большое спасибо за ссылку. Я последовал за парой ответов Шайса и смог, благодаря Богу, все запустить :) - person Rika; 09.02.2018