Update docs for ND blobs (#1970) and layer type is a string (#1694)
[platform/upstream/caffeonacl.git] / docs / tutorial / data.md
1 ---
2 title: Data
3 ---
4 # Data: Ins and Outs
5
6 Data flows through Caffe as [Blobs](net_layer_blob.html#blob-storage-and-communication).
7 Data layers load input and save output by converting to and from Blob to other formats.
8 Common transformations like mean-subtraction and feature-scaling are done by data layer configuration.
9 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.
10
11 This data layer definition
12
13     layer {
14       name: "mnist"
15       # Data layer loads leveldb or lmdb storage DBs for high-throughput.
16       type: "Data"
17       # the 1st top is the data itself: the name is only convention
18       top: "data"
19       # the 2nd top is the ground truth: the name is only convention
20       top: "label"
21       # the Data layer configuration
22       data_param {
23         # path to the DB
24         source: "examples/mnist/mnist_train_lmdb"
25         # type of DB: LEVELDB or LMDB (LMDB supports concurrent reads)
26         backend: LMDB
27         # batch processing improves efficiency.
28         batch_size: 64
29       }
30       # common data transformations
31       transform_param {
32         # feature scaling coefficient: this maps the [0, 255] MNIST data to [0, 1]
33         scale: 0.00390625
34       }
35     }
36
37 loads the MNIST digits.
38
39 **Tops and Bottoms**: A data layer makes **top** blobs to output data to the model.
40 It does not have **bottom** blobs since it takes no input.
41
42 **Data and Label**: a data layer has at least one top canonically named **data**.
43 For ground truth a second top can be defined that is canonically named **label**.
44 Both tops simply produce blobs and there is nothing inherently special about these names.
45 The (data, label) pairing is a convenience for classification models.
46
47 **Transformations**: data preprocessing is parametrized by transformation messages within the data layer definition.
48
49     layer {
50       name: "data"
51       type: "Data"
52       [...]
53       transform_param {
54         scale: 0.1
55         mean_file_size: mean.binaryproto
56         # for images in particular horizontal mirroring and random cropping
57         # can be done as simple data augmentations.
58         mirror: 1  # 1 = on, 0 = off
59         # crop a `crop_size` x `crop_size` patch:
60         # - at random during training
61         # - from the center during testing
62         crop_size: 227
63       }
64     }
65
66 **Prefetching**: for throughput data layers fetch the next batch of data and prepare it in the background while the Net computes the current batch.
67
68 **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.
69
70 *Improvements to data processing to add formats, generality, or helper utilities are welcome!*
71
72 ## Formats
73
74 Refer to the layer catalogue of [data layers](layers.html#data-layers) for close-ups on each type of data Caffe understands.
75
76 ## Deployment Input
77
78 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.