Data: Ins and Outs

Data flows through Caffe as Blobs.Data layers load input and save output by converting to and from Blob to other formats.Common transformations like mean-subtraction and feature-scaling are done by data layer configuration.New input types are supported by developing a new data layer – the rest of the Net follows by the modularity of the Caffe layer catalogue.

This data layer definition

  1. layer {
  2. name: "mnist"
  3. # Data layer loads leveldb or lmdb storage DBs for high-throughput.
  4. type: "Data"
  5. # the 1st top is the data itself: the name is only convention
  6. top: "data"
  7. # the 2nd top is the ground truth: the name is only convention
  8. top: "label"
  9. # the Data layer configuration
  10. data_param {
  11. # path to the DB
  12. source: "examples/mnist/mnist_train_lmdb"
  13. # type of DB: LEVELDB or LMDB (LMDB supports concurrent reads)
  14. backend: LMDB
  15. # batch processing improves efficiency.
  16. batch_size: 64
  17. }
  18. # common data transformations
  19. transform_param {
  20. # feature scaling coefficient: this maps the [0, 255] MNIST data to [0, 1]
  21. scale: 0.00390625
  22. }
  23. }

loads the MNIST digits.

Tops and Bottoms: A data layer makes top blobs to output data to the model.It does not have bottom blobs since it takes no input.

Data and Label: a data layer has at least one top canonically named data.For ground truth a second top can be defined that is canonically named label.Both tops simply produce blobs and there is nothing inherently special about these names.The (data, label) pairing is a convenience for classification models.

Transformations: data preprocessing is parametrized by transformation messages within the data layer definition.

  1. layer {
  2. name: "data"
  3. type: "Data"
  4. [...]
  5. transform_param {
  6. scale: 0.1
  7. mean_file_size: mean.binaryproto
  8. # for images in particular horizontal mirroring and random cropping
  9. # can be done as simple data augmentations.
  10. mirror: 1 # 1 = on, 0 = off
  11. # crop a `crop_size` x `crop_size` patch:
  12. # - at random during training
  13. # - from the center during testing
  14. crop_size: 227
  15. }
  16. }

Prefetching: for throughput data layers fetch the next batch of data and prepare it in the background while the Net computes the current batch.

Multiple Inputs: a Net can have multiple inputs of any number and type. Define as many data layers as needed giving each a unique name and top. Multiple inputs are useful for non-trivial ground truth: one data layer loads the actual data and the other data layer loads the ground truth in lock-step. In this arrangement both data and label can be any 4D array. Further applications of multiple inputs are found in multi-modal and sequence models. In these cases you may need to implement your own data preparation routines or a special data layer.

Improvements to data processing to add formats, generality, or helper utilities are welcome!

Formats

Refer to the layer catalogue of data layers for close-ups on each type of data Caffe understands.

Deployment Input

For on-the-fly computation deployment Nets define their inputs by input fields: these Nets then accept direct assignment of data for online or interactive computation.