Пример слоя данных в каффе

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

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

Ответы

Ответ 1

Вы можете использовать слой "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 см. этот поток.
Вы можете найти эскиз слоя загрузки данных с предварительным извлечением здесь.

Ответ 2

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