From 6bc2cdb56451a824d225beeaffe05725216cb4a8 Mon Sep 17 00:00:00 2001
From: gineshidalgo99
Date: Mon, 24 Apr 2017 10:12:24 -0400
Subject: [PATCH] OpenPose - 1st commit
---
.gitignore | 107 +
3rdparty/Versions.txt | 4 +
3rdparty/caffe/CMakeLists.txt | 122 +
3rdparty/caffe/CONTRIBUTING.md | 30 +
3rdparty/caffe/CONTRIBUTORS.md | 19 +
3rdparty/caffe/INSTALL.md | 7 +
3rdparty/caffe/LICENSE | 44 +
3rdparty/caffe/Makefile | 699 +
.../caffe/Makefile.config.Ubuntu14.example | 128 +
.../Makefile.config.Ubuntu14_cuda_7.example | 125 +
.../caffe/Makefile.config.Ubuntu16.example | 128 +
.../Makefile.config.Ubuntu16_cuda_7.example | 125 +
3rdparty/caffe/README.md | 37 +
3rdparty/caffe/caffe.cloc | 53 +
3rdparty/caffe/cmake/ConfigGen.cmake | 56 +
3rdparty/caffe/cmake/Cuda.cmake | 292 +
3rdparty/caffe/cmake/Dependencies.cmake | 203 +
3rdparty/caffe/cmake/External/gflags.cmake | 56 +
3rdparty/caffe/cmake/External/glog.cmake | 57 +
3rdparty/caffe/cmake/Misc.cmake | 52 +
3rdparty/caffe/cmake/Modules/FindAtlas.cmake | 52 +
3rdparty/caffe/cmake/Modules/FindGFlags.cmake | 50 +
3rdparty/caffe/cmake/Modules/FindGlog.cmake | 48 +
3rdparty/caffe/cmake/Modules/FindLAPACK.cmake | 190 +
3rdparty/caffe/cmake/Modules/FindLMDB.cmake | 28 +
.../caffe/cmake/Modules/FindLevelDB.cmake | 44 +
3rdparty/caffe/cmake/Modules/FindMKL.cmake | 110 +
.../caffe/cmake/Modules/FindMatlabMex.cmake | 48 +
3rdparty/caffe/cmake/Modules/FindNCCL.cmake | 26 +
3rdparty/caffe/cmake/Modules/FindNumPy.cmake | 58 +
.../caffe/cmake/Modules/FindOpenBLAS.cmake | 64 +
3rdparty/caffe/cmake/Modules/FindSnappy.cmake | 28 +
3rdparty/caffe/cmake/Modules/FindvecLib.cmake | 35 +
3rdparty/caffe/cmake/ProtoBuf.cmake | 90 +
3rdparty/caffe/cmake/Summary.cmake | 178 +
3rdparty/caffe/cmake/Targets.cmake | 174 +
.../cmake/Templates/CaffeConfig.cmake.in | 55 +
.../Templates/CaffeConfigVersion.cmake.in | 11 +
.../caffe/cmake/Templates/caffe_config.h.in | 12 +
3rdparty/caffe/cmake/Uninstall.cmake.in | 26 +
3rdparty/caffe/cmake/Utils.cmake | 382 +
3rdparty/caffe/cmake/lint.cmake | 50 +
3rdparty/caffe/docker/README.md | 47 +
3rdparty/caffe/docker/cpu/Dockerfile | 46 +
3rdparty/caffe/docker/gpu/Dockerfile | 47 +
3rdparty/caffe/docs/CMakeLists.txt | 106 +
3rdparty/caffe/docs/CNAME | 1 +
3rdparty/caffe/docs/README.md | 5 +
3rdparty/caffe/docs/_config.yml | 7 +
3rdparty/caffe/docs/_layouts/default.html | 62 +
3rdparty/caffe/docs/development.md | 120 +
.../caffe/docs/images/GitHub-Mark-64px.png | Bin 0 -> 2625 bytes
3rdparty/caffe/docs/images/caffeine-icon.png | Bin 0 -> 954 bytes
3rdparty/caffe/docs/index.md | 101 +
3rdparty/caffe/docs/install_apt.md | 55 +
3rdparty/caffe/docs/install_apt_debian.md | 161 +
3rdparty/caffe/docs/install_osx.md | 128 +
3rdparty/caffe/docs/install_yum.md | 45 +
3rdparty/caffe/docs/installation.md | 146 +
3rdparty/caffe/docs/model_zoo.md | 72 +
3rdparty/caffe/docs/multigpu.md | 26 +
.../caffe/docs/stylesheets/pygment_trac.css | 69 +
3rdparty/caffe/docs/stylesheets/reset.css | 21 +
3rdparty/caffe/docs/stylesheets/styles.css | 348 +
3rdparty/caffe/docs/tutorial/convolution.md | 13 +
3rdparty/caffe/docs/tutorial/data.md | 78 +
3rdparty/caffe/docs/tutorial/fig/.gitignore | 0
3rdparty/caffe/docs/tutorial/fig/backward.jpg | Bin 0 -> 105017 bytes
3rdparty/caffe/docs/tutorial/fig/forward.jpg | Bin 0 -> 71957 bytes
.../docs/tutorial/fig/forward_backward.png | Bin 0 -> 57267 bytes
3rdparty/caffe/docs/tutorial/fig/layer.jpg | Bin 0 -> 54757 bytes
3rdparty/caffe/docs/tutorial/fig/logreg.jpg | Bin 0 -> 42966 bytes
.../caffe/docs/tutorial/forward_backward.md | 37 +
3rdparty/caffe/docs/tutorial/index.md | 51 +
3rdparty/caffe/docs/tutorial/interfaces.md | 286 +
3rdparty/caffe/docs/tutorial/layers.md | 135 +
3rdparty/caffe/docs/tutorial/layers/absval.md | 22 +
.../caffe/docs/tutorial/layers/accuracy.md | 20 +
3rdparty/caffe/docs/tutorial/layers/argmax.md | 18 +
.../caffe/docs/tutorial/layers/batchnorm.md | 20 +
.../docs/tutorial/layers/batchreindex.md | 16 +
3rdparty/caffe/docs/tutorial/layers/bias.md | 19 +
3rdparty/caffe/docs/tutorial/layers/bnll.md | 25 +
3rdparty/caffe/docs/tutorial/layers/concat.md | 40 +
.../docs/tutorial/layers/contrastiveloss.md | 20 +
.../caffe/docs/tutorial/layers/convolution.md | 63 +
3rdparty/caffe/docs/tutorial/layers/crop.md | 20 +
3rdparty/caffe/docs/tutorial/layers/data.md | 29 +
.../docs/tutorial/layers/deconvolution.md | 22 +
.../caffe/docs/tutorial/layers/dropout.md | 20 +
.../caffe/docs/tutorial/layers/dummydata.md | 20 +
.../caffe/docs/tutorial/layers/eltwise.md | 20 +
3rdparty/caffe/docs/tutorial/layers/elu.md | 25 +
3rdparty/caffe/docs/tutorial/layers/embed.md | 20 +
.../docs/tutorial/layers/euclideanloss.md | 16 +
3rdparty/caffe/docs/tutorial/layers/exp.md | 24 +
3rdparty/caffe/docs/tutorial/layers/filter.md | 15 +
.../caffe/docs/tutorial/layers/flatten.md | 21 +
.../caffe/docs/tutorial/layers/hdf5data.md | 20 +
.../caffe/docs/tutorial/layers/hdf5output.md | 25 +
.../caffe/docs/tutorial/layers/hingeloss.md | 19 +
3rdparty/caffe/docs/tutorial/layers/im2col.md | 16 +
.../caffe/docs/tutorial/layers/imagedata.md | 27 +
.../docs/tutorial/layers/infogainloss.md | 23 +
.../docs/tutorial/layers/innerproduct.md | 59 +
3rdparty/caffe/docs/tutorial/layers/input.md | 19 +
3rdparty/caffe/docs/tutorial/layers/log.md | 20 +
3rdparty/caffe/docs/tutorial/layers/lrn.md | 28 +
3rdparty/caffe/docs/tutorial/layers/lstm.md | 21 +
.../caffe/docs/tutorial/layers/memorydata.md | 25 +
.../layers/multinomiallogisticloss.md | 19 +
3rdparty/caffe/docs/tutorial/layers/mvn.md | 20 +
.../caffe/docs/tutorial/layers/parameter.md | 21 +
.../caffe/docs/tutorial/layers/pooling.md | 47 +
3rdparty/caffe/docs/tutorial/layers/power.md | 46 +
3rdparty/caffe/docs/tutorial/layers/prelu.md | 20 +
3rdparty/caffe/docs/tutorial/layers/python.md | 27 +
.../caffe/docs/tutorial/layers/recurrent.md | 20 +
.../caffe/docs/tutorial/layers/reduction.md | 20 +
3rdparty/caffe/docs/tutorial/layers/relu.md | 32 +
.../caffe/docs/tutorial/layers/reshape.md | 51 +
3rdparty/caffe/docs/tutorial/layers/rnn.md | 19 +
3rdparty/caffe/docs/tutorial/layers/scale.md | 20 +
.../caffe/docs/tutorial/layers/sigmoid.md | 30 +
.../layers/sigmoidcrossentropyloss.md | 13 +
.../caffe/docs/tutorial/layers/silence.md | 17 +
3rdparty/caffe/docs/tutorial/layers/slice.md | 42 +
.../caffe/docs/tutorial/layers/softmax.md | 24 +
.../docs/tutorial/layers/softmaxwithloss.md | 33 +
3rdparty/caffe/docs/tutorial/layers/split.md | 17 +
3rdparty/caffe/docs/tutorial/layers/spp.md | 20 +
3rdparty/caffe/docs/tutorial/layers/tanh.md | 18 +
.../caffe/docs/tutorial/layers/threshold.md | 18 +
3rdparty/caffe/docs/tutorial/layers/tile.md | 20 +
.../caffe/docs/tutorial/layers/windowdata.md | 19 +
3rdparty/caffe/docs/tutorial/loss.md | 51 +
.../caffe/docs/tutorial/net_layer_blob.md | 168 +
3rdparty/caffe/docs/tutorial/solver.md | 341 +
.../caffe/examples/00-classification.ipynb | 780 +
.../caffe/examples/01-learning-lenet.ipynb | 1288 +
3rdparty/caffe/examples/02-fine-tuning.ipynb | 1175 +
3rdparty/caffe/examples/CMakeLists.txt | 32 +
3rdparty/caffe/examples/brewing-logreg.ipynb | 1164 +
.../examples/cifar10/cifar10_full.prototxt | 155 +
.../cifar10_full_sigmoid_solver.prototxt | 28 +
.../cifar10_full_sigmoid_solver_bn.prototxt | 28 +
.../cifar10_full_sigmoid_train_test.prototxt | 212 +
...ifar10_full_sigmoid_train_test_bn.prototxt | 240 +
.../cifar10/cifar10_full_solver.prototxt | 27 +
.../cifar10/cifar10_full_solver_lr1.prototxt | 27 +
.../cifar10/cifar10_full_solver_lr2.prototxt | 27 +
.../cifar10/cifar10_full_train_test.prototxt | 220 +
.../examples/cifar10/cifar10_quick.prototxt | 148 +
.../cifar10/cifar10_quick_solver.prototxt | 25 +
.../cifar10/cifar10_quick_solver_lr1.prototxt | 26 +
.../cifar10/cifar10_quick_train_test.prototxt | 222 +
.../examples/cifar10/convert_cifar_data.cpp | 110 +
.../caffe/examples/cifar10/create_cifar10.sh | 20 +
3rdparty/caffe/examples/cifar10/readme.md | 97 +
3rdparty/caffe/examples/cifar10/train_full.sh | 17 +
.../examples/cifar10/train_full_sigmoid.sh | 8 +
.../examples/cifar10/train_full_sigmoid_bn.sh | 8 +
.../caffe/examples/cifar10/train_quick.sh | 12 +
.../cpp_classification/classification.cpp | 265 +
.../examples/cpp_classification/readme.md | 77 +
3rdparty/caffe/examples/detection.ipynb | 8392 +++
.../feature_extraction/imagenet_val.prototxt | 238 +
.../examples/feature_extraction/readme.md | 74 +
.../finetune_flickr_style/assemble_data.py | 98 +
.../finetune_flickr_style/flickr_style.csv.gz | Bin 0 -> 2178982 bytes
.../examples/finetune_flickr_style/readme.md | 169 +
.../finetune_flickr_style/style_names.txt | 20 +
.../pascal_finetune_solver.prototxt | 13 +
.../pascal_finetune_trainval_test.prototxt | 391 +
.../nonlinear_auto_test.prototxt | 54 +
.../nonlinear_auto_train.prototxt | 54 +
.../nonlinear_train_val.prototxt | 98 +
.../hdf5_classification/train_val.prototxt | 68 +
.../examples/imagenet/create_imagenet.sh | 58 +
.../examples/imagenet/make_imagenet_mean.sh | 12 +
3rdparty/caffe/examples/imagenet/readme.md | 105 +
.../examples/imagenet/resume_training.sh | 7 +
.../caffe/examples/imagenet/train_caffenet.sh | 5 +
3rdparty/caffe/examples/images/cat gray.jpg | Bin 0 -> 92726 bytes
3rdparty/caffe/examples/images/cat.jpg | Bin 0 -> 140391 bytes
3rdparty/caffe/examples/images/cat_gray.jpg | Bin 0 -> 92726 bytes
3rdparty/caffe/examples/images/fish-bike.jpg | Bin 0 -> 47638 bytes
.../examples/mnist/convert_mnist_data.cpp | 147 +
3rdparty/caffe/examples/mnist/create_mnist.sh | 22 +
3rdparty/caffe/examples/mnist/lenet.prototxt | 129 +
.../mnist/lenet_adadelta_solver.prototxt | 24 +
.../examples/mnist/lenet_auto_solver.prototxt | 24 +
.../mnist/lenet_consolidated_solver.prototxt | 263 +
.../mnist/lenet_multistep_solver.prototxt | 29 +
.../examples/mnist/lenet_solver.prototxt | 25 +
.../examples/mnist/lenet_solver_adam.prototxt | 26 +
.../mnist/lenet_solver_rmsprop.prototxt | 27 +
.../examples/mnist/lenet_train_test.prototxt | 168 +
.../examples/mnist/mnist_autoencoder.prototxt | 323 +
.../mnist/mnist_autoencoder_solver.prototxt | 19 +
...mnist_autoencoder_solver_adadelta.prototxt | 19 +
.../mnist_autoencoder_solver_adagrad.prototxt | 17 +
...mnist_autoencoder_solver_nesterov.prototxt | 20 +
3rdparty/caffe/examples/mnist/readme.md | 289 +
3rdparty/caffe/examples/mnist/train_lenet.sh | 4 +
.../caffe/examples/mnist/train_lenet_adam.sh | 4 +
.../mnist/train_lenet_consolidated.sh | 5 +
.../examples/mnist/train_lenet_docker.sh | 119 +
.../examples/mnist/train_lenet_rmsprop.sh | 5 +
.../examples/mnist/train_mnist_autoencoder.sh | 5 +
.../mnist/train_mnist_autoencoder_adadelta.sh | 5 +
.../mnist/train_mnist_autoencoder_adagrad.sh | 5 +
.../mnist/train_mnist_autoencoder_nesterov.sh | 5 +
3rdparty/caffe/examples/net_surgery.ipynb | 6901 +++
.../bvlc_caffenet_full_conv.prototxt | 221 +
.../caffe/examples/net_surgery/conv.prototxt | 27 +
.../pascal-multilabel-with-datalayer.ipynb | 479 +
3rdparty/caffe/examples/pycaffe/caffenet.py | 55 +
.../layers/pascal_multilabel_datalayers.py | 216 +
.../caffe/examples/pycaffe/layers/pyloss.py | 37 +
.../caffe/examples/pycaffe/linreg.prototxt | 60 +
3rdparty/caffe/examples/pycaffe/tools.py | 121 +
.../siamese/convert_mnist_siamese_data.cpp | 129 +
.../examples/siamese/create_mnist_siamese.sh | 22 +
.../examples/siamese/mnist_siamese.ipynb | 1909 +
.../examples/siamese/mnist_siamese.prototxt | 116 +
.../siamese/mnist_siamese_solver.prototxt | 25 +
.../siamese/mnist_siamese_train_test.prototxt | 349 +
3rdparty/caffe/examples/siamese/readme.md | 187 +
.../examples/siamese/train_mnist_siamese.sh | 6 +
3rdparty/caffe/examples/web_demo/app.py | 227 +
3rdparty/caffe/examples/web_demo/exifutil.py | 39 +
3rdparty/caffe/examples/web_demo/readme.md | 41 +
.../caffe/examples/web_demo/requirements.txt | 7 +
.../examples/web_demo/templates/index.html | 138 +
3rdparty/caffe/include/caffe/blob.hpp | 282 +
3rdparty/caffe/include/caffe/caffe.hpp | 21 +
3rdparty/caffe/include/caffe/common.hpp | 193 +
.../caffe/include/caffe/data_transformer.hpp | 154 +
3rdparty/caffe/include/caffe/filler.hpp | 295 +
.../caffe/include/caffe/internal_thread.hpp | 53 +
3rdparty/caffe/include/caffe/layer.hpp | 477 +
.../caffe/include/caffe/layer_factory.hpp | 141 +
.../include/caffe/layers/absval_layer.hpp | 68 +
.../include/caffe/layers/accuracy_layer.hpp | 95 +
.../include/caffe/layers/argmax_layer.hpp | 77 +
.../include/caffe/layers/base_conv_layer.hpp | 174 +
.../include/caffe/layers/base_data_layer.hpp | 82 +
.../include/caffe/layers/batch_norm_layer.hpp | 78 +
.../caffe/layers/batch_reindex_layer.hpp | 83 +
.../caffe/include/caffe/layers/bias_layer.hpp | 54 +
.../caffe/include/caffe/layers/bnll_layer.hpp | 70 +
.../include/caffe/layers/concat_layer.hpp | 87 +
.../caffe/layers/contrastive_loss_layer.hpp | 101 +
.../caffe/include/caffe/layers/conv_layer.hpp | 84 +
.../caffe/include/caffe/layers/crop_layer.hpp | 76 +
.../include/caffe/layers/cudnn_conv_layer.hpp | 72 +
.../include/caffe/layers/cudnn_lcn_layer.hpp | 49 +
.../include/caffe/layers/cudnn_lrn_layer.hpp | 44 +
.../caffe/layers/cudnn_pooling_layer.hpp | 49 +
.../include/caffe/layers/cudnn_relu_layer.hpp | 46 +
.../caffe/layers/cudnn_sigmoid_layer.hpp | 46 +
.../caffe/layers/cudnn_softmax_layer.hpp | 45 +
.../include/caffe/layers/cudnn_tanh_layer.hpp | 46 +
.../caffe/include/caffe/layers/data_layer.hpp | 40 +
.../include/caffe/layers/deconv_layer.hpp | 51 +
.../include/caffe/layers/dropout_layer.hpp | 80 +
.../include/caffe/layers/dummy_data_layer.hpp | 47 +
.../include/caffe/layers/eltwise_layer.hpp | 51 +
.../caffe/include/caffe/layers/elu_layer.hpp | 86 +
.../include/caffe/layers/embed_layer.hpp | 52 +
.../caffe/layers/euclidean_loss_layer.hpp | 107 +
.../caffe/include/caffe/layers/exp_layer.hpp | 80 +
.../include/caffe/layers/filter_layer.hpp | 77 +
.../include/caffe/layers/flatten_layer.hpp | 61 +
.../include/caffe/layers/hdf5_data_layer.hpp | 64 +
.../caffe/layers/hdf5_output_layer.hpp | 62 +
.../include/caffe/layers/hinge_loss_layer.hpp | 104 +
.../include/caffe/layers/im2col_layer.hpp | 65 +
.../include/caffe/layers/image_data_layer.hpp | 47 +
.../caffe/layers/infogain_loss_layer.hpp | 145 +
.../caffe/layers/inner_product_layer.hpp | 52 +
.../include/caffe/layers/input_layer.hpp | 42 +
.../caffe/include/caffe/layers/log_layer.hpp | 82 +
.../caffe/include/caffe/layers/loss_layer.hpp | 53 +
.../caffe/include/caffe/layers/lrn_layer.hpp | 94 +
.../caffe/include/caffe/layers/lstm_layer.hpp | 154 +
.../caffe/layers/memory_data_layer.hpp | 63 +
.../multinomial_logistic_loss_layer.hpp | 92 +
.../caffe/include/caffe/layers/mvn_layer.hpp | 48 +
.../include/caffe/layers/neuron_layer.hpp | 32 +
.../include/caffe/layers/parameter_layer.hpp | 45 +
.../include/caffe/layers/pooling_layer.hpp | 60 +
.../include/caffe/layers/power_layer.hpp | 89 +
.../include/caffe/layers/prelu_layer.hpp | 101 +
.../include/caffe/layers/python_layer.hpp | 55 +
.../include/caffe/layers/recurrent_layer.hpp | 187 +
.../include/caffe/layers/reduction_layer.hpp | 59 +
.../caffe/include/caffe/layers/relu_layer.hpp | 85 +
.../include/caffe/layers/reshape_layer.hpp | 52 +
.../caffe/include/caffe/layers/rnn_layer.hpp | 47 +
.../include/caffe/layers/scale_layer.hpp | 85 +
.../sigmoid_cross_entropy_loss_layer.hpp | 128 +
.../include/caffe/layers/sigmoid_layer.hpp | 71 +
.../include/caffe/layers/silence_layer.hpp | 43 +
.../include/caffe/layers/slice_layer.hpp | 51 +
.../include/caffe/layers/softmax_layer.hpp | 50 +
.../caffe/layers/softmax_loss_layer.hpp | 130 +
.../include/caffe/layers/split_layer.hpp | 45 +
.../caffe/include/caffe/layers/spp_layer.hpp | 76 +
.../caffe/include/caffe/layers/tanh_layer.hpp | 73 +
.../include/caffe/layers/threshold_layer.hpp | 64 +
.../caffe/include/caffe/layers/tile_layer.hpp | 43 +
.../caffe/layers/window_data_layer.hpp | 56 +
3rdparty/caffe/include/caffe/net.hpp | 345 +
3rdparty/caffe/include/caffe/parallel.hpp | 123 +
3rdparty/caffe/include/caffe/sgd_solvers.hpp | 148 +
3rdparty/caffe/include/caffe/solver.hpp | 137 +
.../caffe/include/caffe/solver_factory.hpp | 137 +
3rdparty/caffe/include/caffe/syncedmem.hpp | 95 +
.../include/caffe/test/test_caffe_main.hpp | 77 +
.../caffe/test/test_gradient_check_util.hpp | 266 +
.../caffe/include/caffe/util/benchmark.hpp | 52 +
.../include/caffe/util/blocking_queue.hpp | 45 +
3rdparty/caffe/include/caffe/util/cudnn.hpp | 163 +
3rdparty/caffe/include/caffe/util/db.hpp | 54 +
.../caffe/include/caffe/util/db_leveldb.hpp | 78 +
3rdparty/caffe/include/caffe/util/db_lmdb.hpp | 96 +
.../include/caffe/util/device_alternate.hpp | 96 +
3rdparty/caffe/include/caffe/util/format.hpp | 18 +
.../caffe/include/caffe/util/gpu_util.cuh | 35 +
3rdparty/caffe/include/caffe/util/hdf5.hpp | 39 +
3rdparty/caffe/include/caffe/util/im2col.hpp | 60 +
.../include/caffe/util/insert_splits.hpp | 26 +
3rdparty/caffe/include/caffe/util/io.hpp | 152 +
.../include/caffe/util/math_functions.hpp | 284 +
.../include/caffe/util/mkl_alternate.hpp | 103 +
3rdparty/caffe/include/caffe/util/nccl.hpp | 37 +
3rdparty/caffe/include/caffe/util/rng.hpp | 43 +
.../caffe/include/caffe/util/signal_handler.h | 24 +
.../include/caffe/util/upgrade_proto.hpp | 88 +
3rdparty/caffe/install_caffe.sh | 84 +
3rdparty/caffe/matlab/+caffe/+test/test_io.m | 18 +
3rdparty/caffe/matlab/+caffe/+test/test_net.m | 96 +
.../caffe/matlab/+caffe/+test/test_solver.m | 45 +
3rdparty/caffe/matlab/+caffe/Blob.m | 78 +
3rdparty/caffe/matlab/+caffe/Layer.m | 32 +
3rdparty/caffe/matlab/+caffe/Net.m | 136 +
3rdparty/caffe/matlab/+caffe/Solver.m | 59 +
3rdparty/caffe/matlab/+caffe/get_net.m | 37 +
3rdparty/caffe/matlab/+caffe/get_solver.m | 10 +
.../+caffe/imagenet/ilsvrc_2012_mean.mat | Bin 0 -> 606799 bytes
3rdparty/caffe/matlab/+caffe/io.m | 41 +
3rdparty/caffe/matlab/+caffe/private/CHECK.m | 7 +
.../matlab/+caffe/private/CHECK_FILE_EXIST.m | 7 +
.../caffe/matlab/+caffe/private/caffe_.cpp | 605 +
.../matlab/+caffe/private/is_valid_handle.m | 27 +
3rdparty/caffe/matlab/+caffe/reset_all.m | 8 +
3rdparty/caffe/matlab/+caffe/run_tests.m | 20 +
3rdparty/caffe/matlab/+caffe/set_device.m | 11 +
3rdparty/caffe/matlab/+caffe/set_mode_cpu.m | 7 +
3rdparty/caffe/matlab/+caffe/set_mode_gpu.m | 7 +
3rdparty/caffe/matlab/+caffe/version.m | 7 +
3rdparty/caffe/matlab/CMakeLists.txt | 72 +
.../caffe/matlab/demo/classification_demo.m | 148 +
3rdparty/caffe/matlab/hdf5creation/.gitignore | 2 +
3rdparty/caffe/matlab/hdf5creation/demo.m | 64 +
.../caffe/matlab/hdf5creation/store2hdf5.m | 59 +
3rdparty/caffe/python/CMakeLists.txt | 40 +
3rdparty/caffe/python/caffe/_caffe.cpp | 570 +
3rdparty/caffe/python/caffe/classifier.py | 98 +
3rdparty/caffe/python/caffe/coord_map.py | 185 +
3rdparty/caffe/python/caffe/detector.py | 216 +
3rdparty/caffe/python/caffe/draw.py | 244 +
.../caffe/imagenet/ilsvrc_2012_mean.npy | Bin 0 -> 1572944 bytes
3rdparty/caffe/python/caffe/io.py | 383 +
3rdparty/caffe/python/caffe/net_spec.py | 230 +
3rdparty/caffe/python/caffe/pycaffe.py | 345 +
.../caffe/python/caffe/test/test_coord_map.py | 192 +
3rdparty/caffe/python/caffe/test/test_draw.py | 37 +
3rdparty/caffe/python/caffe/test/test_io.py | 56 +
.../python/caffe/test/test_layer_type_list.py | 11 +
3rdparty/caffe/python/caffe/test/test_nccl.py | 19 +
3rdparty/caffe/python/caffe/test/test_net.py | 389 +
.../caffe/python/caffe/test/test_net_spec.py | 89 +
.../python/caffe/test/test_python_layer.py | 168 +
.../test/test_python_layer_with_param_str.py | 61 +
.../caffe/python/caffe/test/test_solver.py | 62 +
3rdparty/caffe/python/classify.py | 138 +
3rdparty/caffe/python/detect.py | 173 +
3rdparty/caffe/python/draw_net.py | 58 +
3rdparty/caffe/python/requirements.txt | 17 +
3rdparty/caffe/python/train.py | 100 +
3rdparty/caffe/scripts/build_docs.sh | 23 +
3rdparty/caffe/scripts/caffe | 73 +
3rdparty/caffe/scripts/copy_notebook.py | 32 +
3rdparty/caffe/scripts/cpp_lint.py | 4873 ++
3rdparty/caffe/scripts/deploy_docs.sh | 50 +
.../caffe/scripts/download_model_binary.py | 77 +
.../caffe/scripts/download_model_from_gist.sh | 24 +
3rdparty/caffe/scripts/gather_examples.sh | 29 +
3rdparty/caffe/scripts/split_caffe_proto.py | 35 +
3rdparty/caffe/scripts/travis/build.sh | 13 +
.../caffe/scripts/travis/configure-cmake.sh | 32 +
.../caffe/scripts/travis/configure-make.sh | 36 +
3rdparty/caffe/scripts/travis/configure.sh | 11 +
3rdparty/caffe/scripts/travis/defaults.sh | 10 +
3rdparty/caffe/scripts/travis/install-deps.sh | 112 +
.../scripts/travis/install-python-deps.sh | 15 +
3rdparty/caffe/scripts/travis/setup-venv.sh | 18 +
3rdparty/caffe/scripts/travis/test.sh | 19 +
.../caffe/scripts/upload_model_to_gist.sh | 38 +
3rdparty/caffe/src/caffe/CMakeLists.txt | 50 +
3rdparty/caffe/src/caffe/blob.cpp | 561 +
3rdparty/caffe/src/caffe/common.cpp | 325 +
3rdparty/caffe/src/caffe/data_transformer.cpp | 545 +
3rdparty/caffe/src/caffe/internal_thread.cpp | 68 +
3rdparty/caffe/src/caffe/layer.cpp | 7 +
3rdparty/caffe/src/caffe/layer_factory.cpp | 267 +
.../caffe/src/caffe/layers/absval_layer.cpp | 44 +
.../caffe/src/caffe/layers/absval_layer.cu | 32 +
.../caffe/src/caffe/layers/accuracy_layer.cpp | 108 +
.../caffe/src/caffe/layers/argmax_layer.cpp | 101 +
.../src/caffe/layers/base_conv_layer.cpp | 395 +
.../src/caffe/layers/base_data_layer.cpp | 136 +
.../caffe/src/caffe/layers/base_data_layer.cu | 26 +
.../src/caffe/layers/batch_norm_layer.cpp | 251 +
.../src/caffe/layers/batch_norm_layer.cu | 171 +
.../src/caffe/layers/batch_reindex_layer.cpp | 78 +
.../src/caffe/layers/batch_reindex_layer.cu | 106 +
.../caffe/src/caffe/layers/bias_layer.cpp | 121 +
3rdparty/caffe/src/caffe/layers/bias_layer.cu | 59 +
.../caffe/src/caffe/layers/bnll_layer.cpp | 47 +
3rdparty/caffe/src/caffe/layers/bnll_layer.cu | 59 +
.../caffe/src/caffe/layers/concat_layer.cpp | 104 +
.../caffe/src/caffe/layers/concat_layer.cu | 73 +
.../caffe/layers/contrastive_loss_layer.cpp | 120 +
.../caffe/layers/contrastive_loss_layer.cu | 109 +
.../caffe/src/caffe/layers/conv_layer.cpp | 81 +
3rdparty/caffe/src/caffe/layers/conv_layer.cu | 60 +
.../caffe/src/caffe/layers/crop_layer.cpp | 141 +
3rdparty/caffe/src/caffe/layers/crop_layer.cu | 109 +
.../src/caffe/layers/cudnn_conv_layer.cpp | 269 +
.../src/caffe/layers/cudnn_conv_layer.cu | 118 +
.../src/caffe/layers/cudnn_lcn_layer.cpp | 73 +
.../caffe/src/caffe/layers/cudnn_lcn_layer.cu | 46 +
.../src/caffe/layers/cudnn_lrn_layer.cpp | 53 +
.../caffe/src/caffe/layers/cudnn_lrn_layer.cu | 44 +
.../src/caffe/layers/cudnn_pooling_layer.cpp | 46 +
.../src/caffe/layers/cudnn_pooling_layer.cu | 41 +
.../src/caffe/layers/cudnn_relu_layer.cpp | 46 +
.../src/caffe/layers/cudnn_relu_layer.cu | 74 +
.../src/caffe/layers/cudnn_sigmoid_layer.cpp | 46 +
.../src/caffe/layers/cudnn_sigmoid_layer.cu | 64 +
.../src/caffe/layers/cudnn_softmax_layer.cpp | 46 +
.../src/caffe/layers/cudnn_softmax_layer.cu | 44 +
.../src/caffe/layers/cudnn_tanh_layer.cpp | 45 +
.../src/caffe/layers/cudnn_tanh_layer.cu | 65 +
.../caffe/src/caffe/layers/data_layer.cpp | 136 +
.../caffe/src/caffe/layers/deconv_layer.cpp | 84 +
.../caffe/src/caffe/layers/deconv_layer.cu | 61 +
.../caffe/src/caffe/layers/dropout_layer.cpp | 75 +
.../caffe/src/caffe/layers/dropout_layer.cu | 70 +
.../src/caffe/layers/dummy_data_layer.cpp | 114 +
.../caffe/src/caffe/layers/eltwise_layer.cpp | 162 +
.../caffe/src/caffe/layers/eltwise_layer.cu | 134 +
3rdparty/caffe/src/caffe/layers/elu_layer.cpp | 47 +
3rdparty/caffe/src/caffe/layers/elu_layer.cu | 62 +
.../caffe/src/caffe/layers/embed_layer.cpp | 119 +
.../caffe/src/caffe/layers/embed_layer.cu | 81 +
.../src/caffe/layers/euclidean_loss_layer.cpp | 55 +
.../src/caffe/layers/euclidean_loss_layer.cu | 42 +
3rdparty/caffe/src/caffe/layers/exp_layer.cpp | 68 +
3rdparty/caffe/src/caffe/layers/exp_layer.cu | 42 +
.../caffe/src/caffe/layers/filter_layer.cpp | 125 +
.../caffe/src/caffe/layers/filter_layer.cu | 69 +
.../caffe/src/caffe/layers/flatten_layer.cpp | 44 +
.../src/caffe/layers/hdf5_data_layer.cpp | 186 +
.../caffe/src/caffe/layers/hdf5_data_layer.cu | 36 +
.../src/caffe/layers/hdf5_output_layer.cpp | 74 +
.../src/caffe/layers/hdf5_output_layer.cu | 39 +
.../src/caffe/layers/hinge_loss_layer.cpp | 78 +
.../caffe/src/caffe/layers/im2col_layer.cpp | 193 +
.../caffe/src/caffe/layers/im2col_layer.cu | 62 +
.../src/caffe/layers/image_data_layer.cpp | 179 +
.../src/caffe/layers/infogain_loss_layer.cpp | 223 +
.../src/caffe/layers/inner_product_layer.cpp | 150 +
.../src/caffe/layers/inner_product_layer.cu | 79 +
.../caffe/src/caffe/layers/input_layer.cpp | 27 +
3rdparty/caffe/src/caffe/layers/log_layer.cpp | 85 +
3rdparty/caffe/src/caffe/layers/log_layer.cu | 55 +
.../caffe/src/caffe/layers/loss_layer.cpp | 27 +
3rdparty/caffe/src/caffe/layers/lrn_layer.cpp | 257 +
3rdparty/caffe/src/caffe/layers/lrn_layer.cu | 202 +
.../caffe/src/caffe/layers/lstm_layer.cpp | 244 +
.../src/caffe/layers/lstm_unit_layer.cpp | 130 +
.../caffe/src/caffe/layers/lstm_unit_layer.cu | 154 +
.../src/caffe/layers/memory_data_layer.cpp | 123 +
.../multinomial_logistic_loss_layer.cpp | 64 +
3rdparty/caffe/src/caffe/layers/mvn_layer.cpp | 134 +
3rdparty/caffe/src/caffe/layers/mvn_layer.cu | 110 +
.../caffe/src/caffe/layers/neuron_layer.cpp | 15 +
.../src/caffe/layers/parameter_layer.cpp | 8 +
.../caffe/src/caffe/layers/pooling_layer.cpp | 316 +
.../caffe/src/caffe/layers/pooling_layer.cu | 386 +
.../caffe/src/caffe/layers/power_layer.cpp | 102 +
.../caffe/src/caffe/layers/power_layer.cu | 85 +
.../caffe/src/caffe/layers/prelu_layer.cpp | 141 +
.../caffe/src/caffe/layers/prelu_layer.cu | 128 +
.../src/caffe/layers/recurrent_layer.cpp | 295 +
.../caffe/src/caffe/layers/recurrent_layer.cu | 44 +
.../src/caffe/layers/reduction_layer.cpp | 129 +
.../caffe/src/caffe/layers/reduction_layer.cu | 91 +
.../caffe/src/caffe/layers/relu_layer.cpp | 45 +
3rdparty/caffe/src/caffe/layers/relu_layer.cu | 64 +
.../caffe/src/caffe/layers/reshape_layer.cpp | 96 +
3rdparty/caffe/src/caffe/layers/rnn_layer.cpp | 236 +
.../caffe/src/caffe/layers/scale_layer.cpp | 227 +
.../caffe/src/caffe/layers/scale_layer.cu | 135 +
.../sigmoid_cross_entropy_loss_layer.cpp | 140 +
.../sigmoid_cross_entropy_loss_layer.cu | 104 +
.../caffe/src/caffe/layers/sigmoid_layer.cpp | 47 +
.../caffe/src/caffe/layers/sigmoid_layer.cu | 60 +
.../caffe/src/caffe/layers/silence_layer.cpp | 26 +
.../caffe/src/caffe/layers/silence_layer.cu | 27 +
.../caffe/src/caffe/layers/slice_layer.cpp | 124 +
.../caffe/src/caffe/layers/slice_layer.cu | 71 +
.../caffe/src/caffe/layers/softmax_layer.cpp | 95 +
.../caffe/src/caffe/layers/softmax_layer.cu | 148 +
.../src/caffe/layers/softmax_loss_layer.cpp | 158 +
.../src/caffe/layers/softmax_loss_layer.cu | 128 +
.../caffe/src/caffe/layers/split_layer.cpp | 59 +
.../caffe/src/caffe/layers/split_layer.cu | 37 +
3rdparty/caffe/src/caffe/layers/spp_layer.cpp | 228 +
.../caffe/src/caffe/layers/tanh_layer.cpp | 44 +
3rdparty/caffe/src/caffe/layers/tanh_layer.cu | 57 +
.../src/caffe/layers/threshold_layer.cpp | 32 +
.../caffe/src/caffe/layers/threshold_layer.cu | 31 +
.../caffe/src/caffe/layers/tile_layer.cpp | 61 +
3rdparty/caffe/src/caffe/layers/tile_layer.cu | 66 +
.../src/caffe/layers/window_data_layer.cpp | 476 +
3rdparty/caffe/src/caffe/net.cpp | 981 +
3rdparty/caffe/src/caffe/parallel.cpp | 371 +
3rdparty/caffe/src/caffe/proto/caffe.proto | 1412 +
3rdparty/caffe/src/caffe/solver.cpp | 489 +
.../src/caffe/solvers/adadelta_solver.cpp | 112 +
.../src/caffe/solvers/adadelta_solver.cu | 30 +
.../src/caffe/solvers/adagrad_solver.cpp | 69 +
.../caffe/src/caffe/solvers/adagrad_solver.cu | 26 +
.../caffe/src/caffe/solvers/adam_solver.cpp | 94 +
.../caffe/src/caffe/solvers/adam_solver.cu | 29 +
.../src/caffe/solvers/nesterov_solver.cpp | 61 +
.../src/caffe/solvers/nesterov_solver.cu | 27 +
.../src/caffe/solvers/rmsprop_solver.cpp | 70 +
.../caffe/src/caffe/solvers/rmsprop_solver.cu | 28 +
.../caffe/src/caffe/solvers/sgd_solver.cpp | 352 +
.../caffe/src/caffe/solvers/sgd_solver.cu | 24 +
3rdparty/caffe/src/caffe/syncedmem.cpp | 186 +
3rdparty/caffe/src/caffe/test/CMakeLists.txt | 36 +
.../src/caffe/test/test_accuracy_layer.cpp | 336 +
.../src/caffe/test/test_argmax_layer.cpp | 295 +
.../src/caffe/test/test_batch_norm_layer.cpp | 133 +
.../caffe/test/test_batch_reindex_layer.cpp | 118 +
.../caffe/src/caffe/test/test_benchmark.cpp | 90 +
.../caffe/src/caffe/test/test_bias_layer.cpp | 467 +
3rdparty/caffe/src/caffe/test/test_blob.cpp | 301 +
.../caffe/src/caffe/test/test_caffe_main.cpp | 38 +
3rdparty/caffe/src/caffe/test/test_common.cpp | 64 +
.../src/caffe/test/test_concat_layer.cpp | 207 +
.../test/test_contrastive_loss_layer.cpp | 144 +
.../src/caffe/test/test_convolution_layer.cpp | 1086 +
.../caffe/src/caffe/test/test_crop_layer.cpp | 283 +
.../test/test_data/generate_sample_data.py | 81 +
.../src/caffe/test/test_data/sample_data.h5 | Bin 0 -> 11824 bytes
.../test/test_data/sample_data_2_gzip.h5 | Bin 0 -> 15446 bytes
.../caffe/test/test_data/sample_data_list.txt | 2 +
.../src/caffe/test/test_data/solver_data.h5 | Bin 0 -> 11776 bytes
.../caffe/test/test_data/solver_data_list.txt | 1 +
.../caffe/src/caffe/test/test_data_layer.cpp | 469 +
.../src/caffe/test/test_data_transformer.cpp | 344 +
3rdparty/caffe/src/caffe/test/test_db.cpp | 136 +
.../caffe/test/test_deconvolution_layer.cpp | 304 +
.../src/caffe/test/test_dummy_data_layer.cpp | 193 +
.../src/caffe/test/test_eltwise_layer.cpp | 209 +
.../caffe/src/caffe/test/test_embed_layer.cpp | 178 +
.../caffe/test/test_euclidean_loss_layer.cpp | 89 +
3rdparty/caffe/src/caffe/test/test_filler.cpp | 241 +
.../src/caffe/test/test_filter_layer.cpp | 126 +
.../src/caffe/test/test_flatten_layer.cpp | 108 +
.../caffe/test/test_gradient_based_solver.cpp | 1289 +
.../src/caffe/test/test_hdf5_output_layer.cpp | 122 +
.../src/caffe/test/test_hdf5data_layer.cpp | 165 +
.../src/caffe/test/test_hinge_loss_layer.cpp | 74 +
.../src/caffe/test/test_im2col_kernel.cu | 213 +
.../src/caffe/test/test_im2col_layer.cpp | 178 +
.../src/caffe/test/test_image_data_layer.cpp | 219 +
.../caffe/test/test_infogain_loss_layer.cpp | 138 +
.../caffe/test/test_inner_product_layer.cpp | 391 +
.../src/caffe/test/test_internal_thread.cpp | 53 +
3rdparty/caffe/src/caffe/test/test_io.cpp | 424 +
.../src/caffe/test/test_layer_factory.cpp | 51 +
.../caffe/src/caffe/test/test_lrn_layer.cpp | 450 +
.../caffe/src/caffe/test/test_lstm_layer.cpp | 288 +
.../src/caffe/test/test_math_functions.cpp | 203 +
.../test/test_maxpool_dropout_layers.cpp | 127 +
.../src/caffe/test/test_memory_data_layer.cpp | 299 +
.../test_multinomial_logistic_loss_layer.cpp | 58 +
.../caffe/src/caffe/test/test_mvn_layer.cpp | 172 +
3rdparty/caffe/src/caffe/test/test_net.cpp | 2604 +
.../src/caffe/test/test_neuron_layer.cpp | 941 +
.../caffe/src/caffe/test/test_platform.cpp | 57 +
.../src/caffe/test/test_pooling_layer.cpp | 1185 +
.../caffe/src/caffe/test/test_power_layer.cpp | 170 +
.../caffe/src/caffe/test/test_protobuf.cpp | 29 +
.../test/test_random_number_generator.cpp | 520 +
.../src/caffe/test/test_reduction_layer.cpp | 296 +
.../src/caffe/test/test_reshape_layer.cpp | 279 +
.../caffe/src/caffe/test/test_rnn_layer.cpp | 217 +
.../caffe/src/caffe/test/test_scale_layer.cpp | 507 +
.../test_sigmoid_cross_entropy_loss_layer.cpp | 148 +
.../caffe/src/caffe/test/test_slice_layer.cpp | 215 +
.../src/caffe/test/test_softmax_layer.cpp | 152 +
.../test/test_softmax_with_loss_layer.cpp | 108 +
3rdparty/caffe/src/caffe/test/test_solver.cpp | 109 +
.../src/caffe/test/test_solver_factory.cpp | 50 +
.../caffe/src/caffe/test/test_split_layer.cpp | 983 +
.../caffe/src/caffe/test/test_spp_layer.cpp | 134 +
.../caffe/test/test_stochastic_pooling.cpp | 175 +
.../caffe/src/caffe/test/test_syncedmem.cpp | 125 +
.../caffe/src/caffe/test/test_tanh_layer.cpp | 101 +
.../src/caffe/test/test_threshold_layer.cpp | 98 +
.../caffe/src/caffe/test/test_tile_layer.cpp | 161 +
.../src/caffe/test/test_upgrade_proto.cpp | 2989 ++
.../caffe/src/caffe/test/test_util_blas.cpp | 132 +
3rdparty/caffe/src/caffe/util/benchmark.cpp | 169 +
.../caffe/src/caffe/util/blocking_queue.cpp | 91 +
3rdparty/caffe/src/caffe/util/cudnn.cpp | 23 +
3rdparty/caffe/src/caffe/util/db.cpp | 41 +
3rdparty/caffe/src/caffe/util/db_leveldb.cpp | 23 +
3rdparty/caffe/src/caffe/util/db_lmdb.cpp | 113 +
3rdparty/caffe/src/caffe/util/hdf5.cpp | 209 +
3rdparty/caffe/src/caffe/util/im2col.cpp | 234 +
3rdparty/caffe/src/caffe/util/im2col.cu | 512 +
.../caffe/src/caffe/util/insert_splits.cpp | 126 +
3rdparty/caffe/src/caffe/util/io.cpp | 238 +
.../caffe/src/caffe/util/math_functions.cpp | 385 +
.../caffe/src/caffe/util/math_functions.cu | 459 +
.../caffe/src/caffe/util/signal_handler.cpp | 115 +
.../caffe/src/caffe/util/upgrade_proto.cpp | 1106 +
3rdparty/caffe/src/gtest/CMakeLists.txt | 8 +
3rdparty/caffe/src/gtest/gtest-all.cpp | 9117 ++++
3rdparty/caffe/src/gtest/gtest.h | 19537 +++++++
3rdparty/caffe/src/gtest/gtest_main.cc | 39 +
3rdparty/caffe/tools/CMakeLists.txt | 30 +
3rdparty/caffe/tools/caffe.cpp | 458 +
3rdparty/caffe/tools/compute_image_mean.cpp | 125 +
3rdparty/caffe/tools/convert_imageset.cpp | 159 +
3rdparty/caffe/tools/device_query.cpp | 7 +
3rdparty/caffe/tools/extra/extract_seconds.py | 72 +
.../extra/launch_resize_and_crop_images.sh | 24 +
3rdparty/caffe/tools/extra/parse_log.py | 210 +
3rdparty/caffe/tools/extra/parse_log.sh | 51 +
.../tools/extra/plot_log.gnuplot.example | 69 +
.../tools/extra/plot_training_log.py.example | 184 +
.../tools/extra/resize_and_crop_images.py | 109 +
3rdparty/caffe/tools/extra/summarize.py | 140 +
3rdparty/caffe/tools/extract_features.cpp | 183 +
3rdparty/caffe/tools/finetune_net.cpp | 7 +
3rdparty/caffe/tools/net_speed_benchmark.cpp | 7 +
3rdparty/caffe/tools/test_net.cpp | 7 +
3rdparty/caffe/tools/train_net.cpp | 7 +
.../caffe/tools/upgrade_net_proto_binary.cpp | 50 +
.../caffe/tools/upgrade_net_proto_text.cpp | 51 +
.../caffe/tools/upgrade_solver_proto_text.cpp | 51 +
LICENSE | 108 +
Makefile | 508 +
Makefile.config.Ubuntu14.example | 101 +
Makefile.config.Ubuntu14_cuda_7.example | 95 +
Makefile.config.Ubuntu16.example | 101 +
Makefile.config.Ubuntu16_cuda_7.example | 95 +
README.md | 179 +
doc/GUI_help/GUI_help.odt | Bin 0 -> 16830 bytes
doc/GUI_help/GUI_help.png | Bin 0 -> 101615 bytes
doc/UML/1_0_0rc1/UML.mdj | 42282 ++++++++++++++++
doc/UML/1_0_0rc1/UML.pdf | Bin 0 -> 38863 bytes
doc/UML/1_0_0rc1/UML.png | Bin 0 -> 103002 bytes
doc/demo_overview.md | 68 +
doc/doc_autogeneration.doxygen | 2479 +
doc/installation.md | 57 +
doc/library_add_new_module.md | 48 +
doc/library_extend_functionality.md | 20 +
doc/library_overview.md | 233 +
doc/media/dance.gif | Bin 0 -> 2086052 bytes
doc/media/shake.gif | Bin 0 -> 2040076 bytes
examples/media/COCO_val2014_000000000192.jpg | Bin 0 -> 230425 bytes
examples/media/COCO_val2014_000000000241.jpg | Bin 0 -> 107714 bytes
examples/media/COCO_val2014_000000000257.jpg | Bin 0 -> 208764 bytes
examples/media/COCO_val2014_000000000294.jpg | Bin 0 -> 75635 bytes
examples/media/COCO_val2014_000000000328.jpg | Bin 0 -> 159712 bytes
examples/media/COCO_val2014_000000000338.jpg | Bin 0 -> 81713 bytes
examples/media/COCO_val2014_000000000357.jpg | Bin 0 -> 131457 bytes
examples/media/COCO_val2014_000000000360.jpg | Bin 0 -> 118630 bytes
examples/media/COCO_val2014_000000000395.jpg | Bin 0 -> 246526 bytes
examples/media/COCO_val2014_000000000415.jpg | Bin 0 -> 118150 bytes
examples/media/COCO_val2014_000000000428.jpg | Bin 0 -> 102365 bytes
examples/media/COCO_val2014_000000000459.jpg | Bin 0 -> 194898 bytes
examples/media/COCO_val2014_000000000474.jpg | Bin 0 -> 131485 bytes
examples/media/COCO_val2014_000000000488.jpg | Bin 0 -> 105570 bytes
examples/media/COCO_val2014_000000000536.jpg | Bin 0 -> 22611 bytes
examples/media/COCO_val2014_000000000544.jpg | Bin 0 -> 188065 bytes
examples/media/COCO_val2014_000000000564.jpg | Bin 0 -> 130509 bytes
examples/media/COCO_val2014_000000000569.jpg | Bin 0 -> 129689 bytes
examples/media/COCO_val2014_000000000589.jpg | Bin 0 -> 96802 bytes
examples/media/COCO_val2014_000000000623.jpg | Bin 0 -> 112452 bytes
examples/media/video.avi | Bin 0 -> 1395096 bytes
examples/openpose/rtpose.cpp | 308 +
.../tutorial_pose/1_extract_from_image.cpp | 147 +
.../2_extract_pose_or_heatmat_from_image.cpp | 152 +
.../1_openpose_read_and_display.cpp | 195 +
.../2_user_processing_function.cpp | 237 +
.../3_user_input_processing_and_output.cpp | 228 +
...user_input_processing_output_and_datum.cpp | 240 +
.../tutorial_wrapper/1_user_asynchronous.cpp | 345 +
.../tutorial_wrapper/2_user_synchronous.cpp | 403 +
...ile, try not to modify the CPM source code | 0
include/openpose/core/array.hpp | 366 +
include/openpose/core/arrayScaler.hpp | 24 +
include/openpose/core/cvMatToOpInput.hpp | 24 +
include/openpose/core/cvMatToOpOutput.hpp | 23 +
include/openpose/core/datum.hpp | 205 +
include/openpose/core/enumClasses.hpp | 24 +
include/openpose/core/headers.hpp | 25 +
include/openpose/core/net.hpp | 21 +
include/openpose/core/netCaffe.hpp | 49 +
include/openpose/core/nmsBase.hpp | 15 +
include/openpose/core/nmsCaffe.hpp | 43 +
include/openpose/core/opOutputToCvMat.hpp | 21 +
include/openpose/core/renderer.hpp | 39 +
include/openpose/core/resizeAndMergeBase.hpp | 15 +
include/openpose/core/resizeAndMergeCaffe.hpp | 45 +
include/openpose/core/scalePose.hpp | 15 +
include/openpose/core/wArrayScaler.hpp | 82 +
include/openpose/core/wCvMatToOpInput.hpp | 83 +
include/openpose/core/wCvMatToOpOutput.hpp | 85 +
include/openpose/core/wOpOutputToCvMat.hpp | 83 +
.../experimental/filestream/headers.hpp | 7 +
.../filestream/wPoseJsonCocoSaver.hpp | 108 +
.../experimental/hands/enumClasses.hpp | 14 +
.../experimental/hands/handsExtractor.hpp | 68 +
.../experimental/hands/handsParameters.hpp | 32 +
.../experimental/hands/handsRenderGpu.hpp | 12 +
.../experimental/hands/handsRenderer.hpp | 33 +
.../openpose/experimental/hands/headers.hpp | 13 +
.../experimental/hands/wHandsExtractor.hpp | 91 +
.../experimental/hands/wHandsRenderer.hpp | 88 +
include/openpose/experimental/headers.hpp | 13 +
.../experimental/producer/headers.hpp | 7 +
.../producer/wPeoplePoseLoader.hpp | 28 +
include/openpose/filestream/enumClasses.hpp | 15 +
include/openpose/filestream/fileSaver.hpp | 23 +
include/openpose/filestream/fileStream.hpp | 33 +
include/openpose/filestream/headers.hpp | 21 +
include/openpose/filestream/heatMapSaver.hpp | 23 +
include/openpose/filestream/imageSaver.hpp | 23 +
include/openpose/filestream/jsonOfstream.hpp | 50 +
.../openpose/filestream/poseJsonCocoSaver.hpp | 35 +
include/openpose/filestream/poseJsonSaver.hpp | 20 +
include/openpose/filestream/poseSaver.hpp | 22 +
include/openpose/filestream/videoSaver.hpp | 31 +
include/openpose/filestream/wHeatMapSaver.hpp | 88 +
include/openpose/filestream/wImageSaver.hpp | 88 +
.../openpose/filestream/wPoseJsonSaver.hpp | 86 +
include/openpose/filestream/wPoseSaver.hpp | 87 +
include/openpose/filestream/wVideoSaver.hpp | 87 +
include/openpose/gui/enumClasses.hpp | 17 +
include/openpose/gui/frameDisplayer.hpp | 50 +
include/openpose/gui/gui.hpp | 34 +
include/openpose/gui/guiInfoAdder.hpp | 31 +
include/openpose/gui/headers.hpp | 12 +
include/openpose/gui/wGui.hpp | 90 +
include/openpose/gui/wGuiInfoAdder.hpp | 80 +
include/openpose/headers.hpp | 31 +
.../openpose/pose/bodyPartConnectorBase.hpp | 18 +
.../openpose/pose/bodyPartConnectorCaffe.hpp | 63 +
include/openpose/pose/enumClasses.hpp | 28 +
include/openpose/pose/headers.hpp | 16 +
include/openpose/pose/poseExtractor.hpp | 64 +
include/openpose/pose/poseExtractorCaffe.hpp | 52 +
include/openpose/pose/poseParameters.hpp | 92 +
include/openpose/pose/poseRenderGpu.hpp | 22 +
include/openpose/pose/poseRenderer.hpp | 66 +
include/openpose/pose/wPoseExtractor.hpp | 87 +
include/openpose/pose/wPoseRenderer.hpp | 82 +
include/openpose/producer/datumProducer.hpp | 126 +
include/openpose/producer/enumClasses.hpp | 33 +
include/openpose/producer/headers.hpp | 14 +
.../producer/imageDirectoryReader.hpp | 63 +
include/openpose/producer/producer.hpp | 144 +
.../openpose/producer/videoCaptureReader.hpp | 72 +
include/openpose/producer/videoReader.hpp | 38 +
include/openpose/producer/wDatumProducer.hpp | 84 +
include/openpose/producer/webcamReader.hpp | 47 +
include/openpose/thread/enumClasses.hpp | 15 +
include/openpose/thread/headers.hpp | 22 +
include/openpose/thread/priorityQueue.hpp | 83 +
include/openpose/thread/queue.hpp | 84 +
include/openpose/thread/queueBase.hpp | 508 +
include/openpose/thread/subThread.hpp | 160 +
include/openpose/thread/subThreadNoQueue.hpp | 54 +
include/openpose/thread/subThreadQueueIn.hpp | 73 +
.../openpose/thread/subThreadQueueInOut.hpp | 97 +
include/openpose/thread/subThreadQueueOut.hpp | 81 +
include/openpose/thread/thread.hpp | 240 +
include/openpose/thread/threadManager.hpp | 504 +
include/openpose/thread/wIdGenerator.hpp | 72 +
include/openpose/thread/wQueueOrderer.hpp | 144 +
include/openpose/thread/worker.hpp | 76 +
include/openpose/thread/workerConsumer.hpp | 40 +
include/openpose/thread/workerProducer.hpp | 40 +
include/openpose/utilities/check.hpp | 60 +
include/openpose/utilities/cuda.hpp | 16 +
include/openpose/utilities/cuda.hu | 146 +
include/openpose/utilities/enumClasses.hpp | 32 +
include/openpose/utilities/errorAndLog.hpp | 83 +
include/openpose/utilities/fastMath.hpp | 86 +
include/openpose/utilities/fileSystem.hpp | 62 +
include/openpose/utilities/headers.hpp | 17 +
include/openpose/utilities/macros.hpp | 35 +
include/openpose/utilities/openCv.hpp | 23 +
.../openpose/utilities/pointerContainer.hpp | 43 +
include/openpose/utilities/profiler.hpp | 35 +
include/openpose/utilities/string.hpp | 19 +
include/openpose/wrapper/enumClasses.hpp | 13 +
include/openpose/wrapper/headers.hpp | 8 +
include/openpose/wrapper/wrapper.hpp | 887 +
install_caffe_and_openpose.sh | 49 +
install_openpose.sh | 87 +
models/getModels.sh | 23 +
models/pose/coco/pose_deploy_linevec.prototxt | 2976 ++
models/pose/mpi/pose_deploy_linevec.prototxt | 2975 ++
...se_deploy_linevec_faster_4_stages.prototxt | 2081 +
src/openpose/core/array.cpp | 428 +
src/openpose/core/arrayScaler.cpp | 68 +
src/openpose/core/cvMatToOpInput.cpp | 50 +
src/openpose/core/cvMatToOpOutput.cpp | 40 +
src/openpose/core/datum.cpp | 158 +
src/openpose/core/defineTemplates.cpp | 9 +
src/openpose/core/netCaffe.cpp | 103 +
src/openpose/core/nmsBase.cpp | 67 +
src/openpose/core/nmsBase.cu | 182 +
src/openpose/core/nmsCaffe.cpp | 133 +
src/openpose/core/opOutputToCvMat.cpp | 31 +
src/openpose/core/renderer.cpp | 103 +
src/openpose/core/resizeAndMergeBase.cpp | 66 +
src/openpose/core/resizeAndMergeBase.cu | 103 +
src/openpose/core/resizeAndMergeCaffe.cpp | 130 +
src/openpose/core/scalePose.cpp | 81 +
.../filestream/defineTemplates.cpp | 6 +
.../experimental/hands/defineTemplates.cpp | 7 +
.../experimental/hands/handsExtractor.cpp | 117 +
.../experimental/hands/handsRenderGpu.cu | 18 +
.../experimental/hands/handsRenderer.cpp | 48 +
src/openpose/filestream/defineTemplates.cpp | 10 +
src/openpose/filestream/fileSaver.cpp | 46 +
src/openpose/filestream/fileStream.cpp | 222 +
src/openpose/filestream/heatMapSaver.cpp | 53 +
src/openpose/filestream/imageSaver.cpp | 47 +
src/openpose/filestream/jsonOfstream.cpp | 143 +
src/openpose/filestream/poseJsonCocoSaver.cpp | 91 +
src/openpose/filestream/poseJsonSaver.cpp | 35 +
src/openpose/filestream/poseSaver.cpp | 42 +
src/openpose/filestream/videoSaver.cpp | 91 +
src/openpose/gui/defineTemplates.cpp | 7 +
src/openpose/gui/frameDisplayer.cpp | 80 +
src/openpose/gui/gui.cpp | 182 +
src/openpose/gui/guiInfoAdder.cpp | 94 +
src/openpose/pose/bodyPartConnectorBase.cpp | 332 +
src/openpose/pose/bodyPartConnectorBase.cu | 40 +
src/openpose/pose/bodyPartConnectorCaffe.cpp | 204 +
src/openpose/pose/defineTemplates.cpp | 7 +
src/openpose/pose/poseExtractor.cpp | 243 +
src/openpose/pose/poseExtractorCaffe.cpp | 163 +
src/openpose/pose/poseRenderGpu.cu | 681 +
src/openpose/pose/poseRenderer.cpp | 289 +
src/openpose/producer/defineTemplates.cpp | 7 +
.../producer/imageDirectoryReader.cpp | 119 +
src/openpose/producer/producer.cpp | 287 +
src/openpose/producer/videoCaptureReader.cpp | 121 +
src/openpose/producer/videoReader.cpp | 38 +
src/openpose/producer/webcamReader.cpp | 133 +
src/openpose/thread/defineTemplates.cpp | 21 +
src/openpose/utilities/cuda.cpp | 14 +
src/openpose/utilities/errorAndLog.cpp | 210 +
src/openpose/utilities/fileSystem.cpp | 203 +
src/openpose/utilities/openCv.cpp | 178 +
src/openpose/utilities/profiler.cpp | 156 +
src/openpose/utilities/string.cpp | 50 +
src/openpose/wrapper/defineTemplates.cpp | 6 +
src/openpose/wrapper/wrapper.cpp | 66 +
899 files changed, 206885 insertions(+)
create mode 100644 .gitignore
create mode 100644 3rdparty/Versions.txt
create mode 100644 3rdparty/caffe/CMakeLists.txt
create mode 100644 3rdparty/caffe/CONTRIBUTING.md
create mode 100644 3rdparty/caffe/CONTRIBUTORS.md
create mode 100644 3rdparty/caffe/INSTALL.md
create mode 100644 3rdparty/caffe/LICENSE
create mode 100644 3rdparty/caffe/Makefile
create mode 100644 3rdparty/caffe/Makefile.config.Ubuntu14.example
create mode 100644 3rdparty/caffe/Makefile.config.Ubuntu14_cuda_7.example
create mode 100644 3rdparty/caffe/Makefile.config.Ubuntu16.example
create mode 100644 3rdparty/caffe/Makefile.config.Ubuntu16_cuda_7.example
create mode 100644 3rdparty/caffe/README.md
create mode 100644 3rdparty/caffe/caffe.cloc
create mode 100644 3rdparty/caffe/cmake/ConfigGen.cmake
create mode 100644 3rdparty/caffe/cmake/Cuda.cmake
create mode 100644 3rdparty/caffe/cmake/Dependencies.cmake
create mode 100644 3rdparty/caffe/cmake/External/gflags.cmake
create mode 100644 3rdparty/caffe/cmake/External/glog.cmake
create mode 100644 3rdparty/caffe/cmake/Misc.cmake
create mode 100644 3rdparty/caffe/cmake/Modules/FindAtlas.cmake
create mode 100644 3rdparty/caffe/cmake/Modules/FindGFlags.cmake
create mode 100644 3rdparty/caffe/cmake/Modules/FindGlog.cmake
create mode 100644 3rdparty/caffe/cmake/Modules/FindLAPACK.cmake
create mode 100644 3rdparty/caffe/cmake/Modules/FindLMDB.cmake
create mode 100644 3rdparty/caffe/cmake/Modules/FindLevelDB.cmake
create mode 100644 3rdparty/caffe/cmake/Modules/FindMKL.cmake
create mode 100644 3rdparty/caffe/cmake/Modules/FindMatlabMex.cmake
create mode 100644 3rdparty/caffe/cmake/Modules/FindNCCL.cmake
create mode 100644 3rdparty/caffe/cmake/Modules/FindNumPy.cmake
create mode 100644 3rdparty/caffe/cmake/Modules/FindOpenBLAS.cmake
create mode 100644 3rdparty/caffe/cmake/Modules/FindSnappy.cmake
create mode 100644 3rdparty/caffe/cmake/Modules/FindvecLib.cmake
create mode 100644 3rdparty/caffe/cmake/ProtoBuf.cmake
create mode 100644 3rdparty/caffe/cmake/Summary.cmake
create mode 100644 3rdparty/caffe/cmake/Targets.cmake
create mode 100644 3rdparty/caffe/cmake/Templates/CaffeConfig.cmake.in
create mode 100644 3rdparty/caffe/cmake/Templates/CaffeConfigVersion.cmake.in
create mode 100644 3rdparty/caffe/cmake/Templates/caffe_config.h.in
create mode 100644 3rdparty/caffe/cmake/Uninstall.cmake.in
create mode 100644 3rdparty/caffe/cmake/Utils.cmake
create mode 100644 3rdparty/caffe/cmake/lint.cmake
create mode 100644 3rdparty/caffe/docker/README.md
create mode 100644 3rdparty/caffe/docker/cpu/Dockerfile
create mode 100644 3rdparty/caffe/docker/gpu/Dockerfile
create mode 100644 3rdparty/caffe/docs/CMakeLists.txt
create mode 100644 3rdparty/caffe/docs/CNAME
create mode 100644 3rdparty/caffe/docs/README.md
create mode 100644 3rdparty/caffe/docs/_config.yml
create mode 100644 3rdparty/caffe/docs/_layouts/default.html
create mode 100644 3rdparty/caffe/docs/development.md
create mode 100644 3rdparty/caffe/docs/images/GitHub-Mark-64px.png
create mode 100644 3rdparty/caffe/docs/images/caffeine-icon.png
create mode 100644 3rdparty/caffe/docs/index.md
create mode 100644 3rdparty/caffe/docs/install_apt.md
create mode 100644 3rdparty/caffe/docs/install_apt_debian.md
create mode 100644 3rdparty/caffe/docs/install_osx.md
create mode 100644 3rdparty/caffe/docs/install_yum.md
create mode 100644 3rdparty/caffe/docs/installation.md
create mode 100644 3rdparty/caffe/docs/model_zoo.md
create mode 100644 3rdparty/caffe/docs/multigpu.md
create mode 100644 3rdparty/caffe/docs/stylesheets/pygment_trac.css
create mode 100644 3rdparty/caffe/docs/stylesheets/reset.css
create mode 100644 3rdparty/caffe/docs/stylesheets/styles.css
create mode 100644 3rdparty/caffe/docs/tutorial/convolution.md
create mode 100644 3rdparty/caffe/docs/tutorial/data.md
create mode 100644 3rdparty/caffe/docs/tutorial/fig/.gitignore
create mode 100644 3rdparty/caffe/docs/tutorial/fig/backward.jpg
create mode 100644 3rdparty/caffe/docs/tutorial/fig/forward.jpg
create mode 100644 3rdparty/caffe/docs/tutorial/fig/forward_backward.png
create mode 100644 3rdparty/caffe/docs/tutorial/fig/layer.jpg
create mode 100644 3rdparty/caffe/docs/tutorial/fig/logreg.jpg
create mode 100644 3rdparty/caffe/docs/tutorial/forward_backward.md
create mode 100644 3rdparty/caffe/docs/tutorial/index.md
create mode 100644 3rdparty/caffe/docs/tutorial/interfaces.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/absval.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/accuracy.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/argmax.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/batchnorm.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/batchreindex.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/bias.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/bnll.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/concat.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/contrastiveloss.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/convolution.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/crop.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/data.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/deconvolution.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/dropout.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/dummydata.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/eltwise.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/elu.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/embed.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/euclideanloss.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/exp.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/filter.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/flatten.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/hdf5data.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/hdf5output.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/hingeloss.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/im2col.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/imagedata.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/infogainloss.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/innerproduct.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/input.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/log.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/lrn.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/lstm.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/memorydata.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/multinomiallogisticloss.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/mvn.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/parameter.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/pooling.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/power.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/prelu.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/python.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/recurrent.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/reduction.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/relu.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/reshape.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/rnn.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/scale.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/sigmoid.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/sigmoidcrossentropyloss.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/silence.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/slice.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/softmax.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/softmaxwithloss.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/split.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/spp.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/tanh.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/threshold.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/tile.md
create mode 100644 3rdparty/caffe/docs/tutorial/layers/windowdata.md
create mode 100644 3rdparty/caffe/docs/tutorial/loss.md
create mode 100644 3rdparty/caffe/docs/tutorial/net_layer_blob.md
create mode 100644 3rdparty/caffe/docs/tutorial/solver.md
create mode 100644 3rdparty/caffe/examples/00-classification.ipynb
create mode 100644 3rdparty/caffe/examples/01-learning-lenet.ipynb
create mode 100644 3rdparty/caffe/examples/02-fine-tuning.ipynb
create mode 100644 3rdparty/caffe/examples/CMakeLists.txt
create mode 100644 3rdparty/caffe/examples/brewing-logreg.ipynb
create mode 100644 3rdparty/caffe/examples/cifar10/cifar10_full.prototxt
create mode 100644 3rdparty/caffe/examples/cifar10/cifar10_full_sigmoid_solver.prototxt
create mode 100644 3rdparty/caffe/examples/cifar10/cifar10_full_sigmoid_solver_bn.prototxt
create mode 100644 3rdparty/caffe/examples/cifar10/cifar10_full_sigmoid_train_test.prototxt
create mode 100644 3rdparty/caffe/examples/cifar10/cifar10_full_sigmoid_train_test_bn.prototxt
create mode 100644 3rdparty/caffe/examples/cifar10/cifar10_full_solver.prototxt
create mode 100644 3rdparty/caffe/examples/cifar10/cifar10_full_solver_lr1.prototxt
create mode 100644 3rdparty/caffe/examples/cifar10/cifar10_full_solver_lr2.prototxt
create mode 100644 3rdparty/caffe/examples/cifar10/cifar10_full_train_test.prototxt
create mode 100644 3rdparty/caffe/examples/cifar10/cifar10_quick.prototxt
create mode 100644 3rdparty/caffe/examples/cifar10/cifar10_quick_solver.prototxt
create mode 100644 3rdparty/caffe/examples/cifar10/cifar10_quick_solver_lr1.prototxt
create mode 100644 3rdparty/caffe/examples/cifar10/cifar10_quick_train_test.prototxt
create mode 100644 3rdparty/caffe/examples/cifar10/convert_cifar_data.cpp
create mode 100755 3rdparty/caffe/examples/cifar10/create_cifar10.sh
create mode 100644 3rdparty/caffe/examples/cifar10/readme.md
create mode 100755 3rdparty/caffe/examples/cifar10/train_full.sh
create mode 100755 3rdparty/caffe/examples/cifar10/train_full_sigmoid.sh
create mode 100755 3rdparty/caffe/examples/cifar10/train_full_sigmoid_bn.sh
create mode 100755 3rdparty/caffe/examples/cifar10/train_quick.sh
create mode 100644 3rdparty/caffe/examples/cpp_classification/classification.cpp
create mode 100644 3rdparty/caffe/examples/cpp_classification/readme.md
create mode 100644 3rdparty/caffe/examples/detection.ipynb
create mode 100644 3rdparty/caffe/examples/feature_extraction/imagenet_val.prototxt
create mode 100644 3rdparty/caffe/examples/feature_extraction/readme.md
create mode 100755 3rdparty/caffe/examples/finetune_flickr_style/assemble_data.py
create mode 100644 3rdparty/caffe/examples/finetune_flickr_style/flickr_style.csv.gz
create mode 100644 3rdparty/caffe/examples/finetune_flickr_style/readme.md
create mode 100644 3rdparty/caffe/examples/finetune_flickr_style/style_names.txt
create mode 100644 3rdparty/caffe/examples/finetune_pascal_detection/pascal_finetune_solver.prototxt
create mode 100644 3rdparty/caffe/examples/finetune_pascal_detection/pascal_finetune_trainval_test.prototxt
create mode 100644 3rdparty/caffe/examples/hdf5_classification/nonlinear_auto_test.prototxt
create mode 100644 3rdparty/caffe/examples/hdf5_classification/nonlinear_auto_train.prototxt
create mode 100644 3rdparty/caffe/examples/hdf5_classification/nonlinear_train_val.prototxt
create mode 100644 3rdparty/caffe/examples/hdf5_classification/train_val.prototxt
create mode 100755 3rdparty/caffe/examples/imagenet/create_imagenet.sh
create mode 100755 3rdparty/caffe/examples/imagenet/make_imagenet_mean.sh
create mode 100644 3rdparty/caffe/examples/imagenet/readme.md
create mode 100755 3rdparty/caffe/examples/imagenet/resume_training.sh
create mode 100755 3rdparty/caffe/examples/imagenet/train_caffenet.sh
create mode 100644 3rdparty/caffe/examples/images/cat gray.jpg
create mode 100644 3rdparty/caffe/examples/images/cat.jpg
create mode 100644 3rdparty/caffe/examples/images/cat_gray.jpg
create mode 100644 3rdparty/caffe/examples/images/fish-bike.jpg
create mode 100644 3rdparty/caffe/examples/mnist/convert_mnist_data.cpp
create mode 100755 3rdparty/caffe/examples/mnist/create_mnist.sh
create mode 100644 3rdparty/caffe/examples/mnist/lenet.prototxt
create mode 100644 3rdparty/caffe/examples/mnist/lenet_adadelta_solver.prototxt
create mode 100644 3rdparty/caffe/examples/mnist/lenet_auto_solver.prototxt
create mode 100644 3rdparty/caffe/examples/mnist/lenet_consolidated_solver.prototxt
create mode 100644 3rdparty/caffe/examples/mnist/lenet_multistep_solver.prototxt
create mode 100644 3rdparty/caffe/examples/mnist/lenet_solver.prototxt
create mode 100644 3rdparty/caffe/examples/mnist/lenet_solver_adam.prototxt
create mode 100644 3rdparty/caffe/examples/mnist/lenet_solver_rmsprop.prototxt
create mode 100644 3rdparty/caffe/examples/mnist/lenet_train_test.prototxt
create mode 100644 3rdparty/caffe/examples/mnist/mnist_autoencoder.prototxt
create mode 100644 3rdparty/caffe/examples/mnist/mnist_autoencoder_solver.prototxt
create mode 100644 3rdparty/caffe/examples/mnist/mnist_autoencoder_solver_adadelta.prototxt
create mode 100644 3rdparty/caffe/examples/mnist/mnist_autoencoder_solver_adagrad.prototxt
create mode 100644 3rdparty/caffe/examples/mnist/mnist_autoencoder_solver_nesterov.prototxt
create mode 100644 3rdparty/caffe/examples/mnist/readme.md
create mode 100755 3rdparty/caffe/examples/mnist/train_lenet.sh
create mode 100755 3rdparty/caffe/examples/mnist/train_lenet_adam.sh
create mode 100755 3rdparty/caffe/examples/mnist/train_lenet_consolidated.sh
create mode 100755 3rdparty/caffe/examples/mnist/train_lenet_docker.sh
create mode 100755 3rdparty/caffe/examples/mnist/train_lenet_rmsprop.sh
create mode 100755 3rdparty/caffe/examples/mnist/train_mnist_autoencoder.sh
create mode 100755 3rdparty/caffe/examples/mnist/train_mnist_autoencoder_adadelta.sh
create mode 100755 3rdparty/caffe/examples/mnist/train_mnist_autoencoder_adagrad.sh
create mode 100755 3rdparty/caffe/examples/mnist/train_mnist_autoencoder_nesterov.sh
create mode 100644 3rdparty/caffe/examples/net_surgery.ipynb
create mode 100644 3rdparty/caffe/examples/net_surgery/bvlc_caffenet_full_conv.prototxt
create mode 100644 3rdparty/caffe/examples/net_surgery/conv.prototxt
create mode 100644 3rdparty/caffe/examples/pascal-multilabel-with-datalayer.ipynb
create mode 100644 3rdparty/caffe/examples/pycaffe/caffenet.py
create mode 100644 3rdparty/caffe/examples/pycaffe/layers/pascal_multilabel_datalayers.py
create mode 100644 3rdparty/caffe/examples/pycaffe/layers/pyloss.py
create mode 100644 3rdparty/caffe/examples/pycaffe/linreg.prototxt
create mode 100644 3rdparty/caffe/examples/pycaffe/tools.py
create mode 100644 3rdparty/caffe/examples/siamese/convert_mnist_siamese_data.cpp
create mode 100755 3rdparty/caffe/examples/siamese/create_mnist_siamese.sh
create mode 100644 3rdparty/caffe/examples/siamese/mnist_siamese.ipynb
create mode 100644 3rdparty/caffe/examples/siamese/mnist_siamese.prototxt
create mode 100644 3rdparty/caffe/examples/siamese/mnist_siamese_solver.prototxt
create mode 100644 3rdparty/caffe/examples/siamese/mnist_siamese_train_test.prototxt
create mode 100644 3rdparty/caffe/examples/siamese/readme.md
create mode 100755 3rdparty/caffe/examples/siamese/train_mnist_siamese.sh
create mode 100644 3rdparty/caffe/examples/web_demo/app.py
create mode 100644 3rdparty/caffe/examples/web_demo/exifutil.py
create mode 100644 3rdparty/caffe/examples/web_demo/readme.md
create mode 100644 3rdparty/caffe/examples/web_demo/requirements.txt
create mode 100644 3rdparty/caffe/examples/web_demo/templates/index.html
create mode 100644 3rdparty/caffe/include/caffe/blob.hpp
create mode 100644 3rdparty/caffe/include/caffe/caffe.hpp
create mode 100644 3rdparty/caffe/include/caffe/common.hpp
create mode 100644 3rdparty/caffe/include/caffe/data_transformer.hpp
create mode 100644 3rdparty/caffe/include/caffe/filler.hpp
create mode 100644 3rdparty/caffe/include/caffe/internal_thread.hpp
create mode 100644 3rdparty/caffe/include/caffe/layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layer_factory.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/absval_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/accuracy_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/argmax_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/base_conv_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/base_data_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/batch_norm_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/batch_reindex_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/bias_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/bnll_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/concat_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/contrastive_loss_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/conv_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/crop_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/cudnn_conv_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/cudnn_lcn_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/cudnn_lrn_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/cudnn_pooling_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/cudnn_relu_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/cudnn_sigmoid_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/cudnn_softmax_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/cudnn_tanh_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/data_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/deconv_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/dropout_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/dummy_data_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/eltwise_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/elu_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/embed_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/euclidean_loss_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/exp_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/filter_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/flatten_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/hdf5_data_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/hdf5_output_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/hinge_loss_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/im2col_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/image_data_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/infogain_loss_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/inner_product_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/input_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/log_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/loss_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/lrn_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/lstm_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/memory_data_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/multinomial_logistic_loss_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/mvn_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/neuron_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/parameter_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/pooling_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/power_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/prelu_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/python_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/recurrent_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/reduction_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/relu_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/reshape_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/rnn_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/scale_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/sigmoid_cross_entropy_loss_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/sigmoid_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/silence_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/slice_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/softmax_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/softmax_loss_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/split_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/spp_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/tanh_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/threshold_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/tile_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/layers/window_data_layer.hpp
create mode 100644 3rdparty/caffe/include/caffe/net.hpp
create mode 100644 3rdparty/caffe/include/caffe/parallel.hpp
create mode 100644 3rdparty/caffe/include/caffe/sgd_solvers.hpp
create mode 100644 3rdparty/caffe/include/caffe/solver.hpp
create mode 100644 3rdparty/caffe/include/caffe/solver_factory.hpp
create mode 100644 3rdparty/caffe/include/caffe/syncedmem.hpp
create mode 100644 3rdparty/caffe/include/caffe/test/test_caffe_main.hpp
create mode 100644 3rdparty/caffe/include/caffe/test/test_gradient_check_util.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/benchmark.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/blocking_queue.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/cudnn.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/db.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/db_leveldb.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/db_lmdb.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/device_alternate.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/format.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/gpu_util.cuh
create mode 100644 3rdparty/caffe/include/caffe/util/hdf5.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/im2col.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/insert_splits.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/io.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/math_functions.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/mkl_alternate.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/nccl.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/rng.hpp
create mode 100644 3rdparty/caffe/include/caffe/util/signal_handler.h
create mode 100644 3rdparty/caffe/include/caffe/util/upgrade_proto.hpp
create mode 100755 3rdparty/caffe/install_caffe.sh
create mode 100644 3rdparty/caffe/matlab/+caffe/+test/test_io.m
create mode 100644 3rdparty/caffe/matlab/+caffe/+test/test_net.m
create mode 100644 3rdparty/caffe/matlab/+caffe/+test/test_solver.m
create mode 100644 3rdparty/caffe/matlab/+caffe/Blob.m
create mode 100644 3rdparty/caffe/matlab/+caffe/Layer.m
create mode 100644 3rdparty/caffe/matlab/+caffe/Net.m
create mode 100644 3rdparty/caffe/matlab/+caffe/Solver.m
create mode 100644 3rdparty/caffe/matlab/+caffe/get_net.m
create mode 100644 3rdparty/caffe/matlab/+caffe/get_solver.m
create mode 100644 3rdparty/caffe/matlab/+caffe/imagenet/ilsvrc_2012_mean.mat
create mode 100644 3rdparty/caffe/matlab/+caffe/io.m
create mode 100644 3rdparty/caffe/matlab/+caffe/private/CHECK.m
create mode 100644 3rdparty/caffe/matlab/+caffe/private/CHECK_FILE_EXIST.m
create mode 100644 3rdparty/caffe/matlab/+caffe/private/caffe_.cpp
create mode 100644 3rdparty/caffe/matlab/+caffe/private/is_valid_handle.m
create mode 100644 3rdparty/caffe/matlab/+caffe/reset_all.m
create mode 100644 3rdparty/caffe/matlab/+caffe/run_tests.m
create mode 100644 3rdparty/caffe/matlab/+caffe/set_device.m
create mode 100644 3rdparty/caffe/matlab/+caffe/set_mode_cpu.m
create mode 100644 3rdparty/caffe/matlab/+caffe/set_mode_gpu.m
create mode 100644 3rdparty/caffe/matlab/+caffe/version.m
create mode 100644 3rdparty/caffe/matlab/CMakeLists.txt
create mode 100644 3rdparty/caffe/matlab/demo/classification_demo.m
create mode 100644 3rdparty/caffe/matlab/hdf5creation/.gitignore
create mode 100644 3rdparty/caffe/matlab/hdf5creation/demo.m
create mode 100644 3rdparty/caffe/matlab/hdf5creation/store2hdf5.m
create mode 100644 3rdparty/caffe/python/CMakeLists.txt
create mode 100644 3rdparty/caffe/python/caffe/_caffe.cpp
create mode 100644 3rdparty/caffe/python/caffe/classifier.py
create mode 100644 3rdparty/caffe/python/caffe/coord_map.py
create mode 100644 3rdparty/caffe/python/caffe/detector.py
create mode 100644 3rdparty/caffe/python/caffe/draw.py
create mode 100644 3rdparty/caffe/python/caffe/imagenet/ilsvrc_2012_mean.npy
create mode 100644 3rdparty/caffe/python/caffe/io.py
create mode 100644 3rdparty/caffe/python/caffe/net_spec.py
create mode 100644 3rdparty/caffe/python/caffe/pycaffe.py
create mode 100644 3rdparty/caffe/python/caffe/test/test_coord_map.py
create mode 100644 3rdparty/caffe/python/caffe/test/test_draw.py
create mode 100644 3rdparty/caffe/python/caffe/test/test_io.py
create mode 100644 3rdparty/caffe/python/caffe/test/test_layer_type_list.py
create mode 100644 3rdparty/caffe/python/caffe/test/test_nccl.py
create mode 100644 3rdparty/caffe/python/caffe/test/test_net.py
create mode 100644 3rdparty/caffe/python/caffe/test/test_net_spec.py
create mode 100644 3rdparty/caffe/python/caffe/test/test_python_layer.py
create mode 100644 3rdparty/caffe/python/caffe/test/test_python_layer_with_param_str.py
create mode 100644 3rdparty/caffe/python/caffe/test/test_solver.py
create mode 100755 3rdparty/caffe/python/classify.py
create mode 100755 3rdparty/caffe/python/detect.py
create mode 100755 3rdparty/caffe/python/draw_net.py
create mode 100644 3rdparty/caffe/python/requirements.txt
create mode 100644 3rdparty/caffe/python/train.py
create mode 100755 3rdparty/caffe/scripts/build_docs.sh
create mode 100644 3rdparty/caffe/scripts/caffe
create mode 100755 3rdparty/caffe/scripts/copy_notebook.py
create mode 100755 3rdparty/caffe/scripts/cpp_lint.py
create mode 100755 3rdparty/caffe/scripts/deploy_docs.sh
create mode 100755 3rdparty/caffe/scripts/download_model_binary.py
create mode 100755 3rdparty/caffe/scripts/download_model_from_gist.sh
create mode 100755 3rdparty/caffe/scripts/gather_examples.sh
create mode 100755 3rdparty/caffe/scripts/split_caffe_proto.py
create mode 100755 3rdparty/caffe/scripts/travis/build.sh
create mode 100644 3rdparty/caffe/scripts/travis/configure-cmake.sh
create mode 100644 3rdparty/caffe/scripts/travis/configure-make.sh
create mode 100755 3rdparty/caffe/scripts/travis/configure.sh
create mode 100755 3rdparty/caffe/scripts/travis/defaults.sh
create mode 100755 3rdparty/caffe/scripts/travis/install-deps.sh
create mode 100755 3rdparty/caffe/scripts/travis/install-python-deps.sh
create mode 100755 3rdparty/caffe/scripts/travis/setup-venv.sh
create mode 100755 3rdparty/caffe/scripts/travis/test.sh
create mode 100755 3rdparty/caffe/scripts/upload_model_to_gist.sh
create mode 100644 3rdparty/caffe/src/caffe/CMakeLists.txt
create mode 100644 3rdparty/caffe/src/caffe/blob.cpp
create mode 100644 3rdparty/caffe/src/caffe/common.cpp
create mode 100644 3rdparty/caffe/src/caffe/data_transformer.cpp
create mode 100644 3rdparty/caffe/src/caffe/internal_thread.cpp
create mode 100644 3rdparty/caffe/src/caffe/layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layer_factory.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/absval_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/absval_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/accuracy_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/argmax_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/base_conv_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/base_data_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/base_data_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/batch_norm_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/batch_norm_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/batch_reindex_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/batch_reindex_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/bias_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/bias_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/bnll_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/bnll_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/concat_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/concat_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/contrastive_loss_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/contrastive_loss_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/conv_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/conv_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/crop_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/crop_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/cudnn_conv_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/cudnn_conv_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/cudnn_lcn_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/cudnn_lcn_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/cudnn_lrn_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/cudnn_lrn_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/cudnn_pooling_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/cudnn_pooling_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/cudnn_relu_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/cudnn_relu_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/cudnn_sigmoid_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/cudnn_sigmoid_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/cudnn_softmax_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/cudnn_softmax_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/cudnn_tanh_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/cudnn_tanh_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/data_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/deconv_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/deconv_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/dropout_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/dropout_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/dummy_data_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/eltwise_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/eltwise_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/elu_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/elu_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/embed_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/embed_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/euclidean_loss_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/euclidean_loss_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/exp_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/exp_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/filter_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/filter_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/flatten_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/hdf5_data_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/hdf5_data_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/hdf5_output_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/hdf5_output_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/hinge_loss_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/im2col_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/im2col_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/image_data_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/infogain_loss_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/inner_product_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/inner_product_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/input_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/log_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/log_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/loss_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/lrn_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/lrn_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/lstm_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/lstm_unit_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/lstm_unit_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/memory_data_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/multinomial_logistic_loss_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/mvn_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/mvn_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/neuron_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/parameter_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/pooling_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/pooling_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/power_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/power_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/prelu_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/prelu_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/recurrent_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/recurrent_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/reduction_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/reduction_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/relu_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/relu_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/reshape_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/rnn_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/scale_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/scale_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/sigmoid_cross_entropy_loss_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/sigmoid_cross_entropy_loss_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/sigmoid_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/sigmoid_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/silence_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/silence_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/slice_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/slice_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/softmax_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/softmax_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/softmax_loss_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/softmax_loss_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/split_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/split_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/spp_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/tanh_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/tanh_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/threshold_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/threshold_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/tile_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/layers/tile_layer.cu
create mode 100644 3rdparty/caffe/src/caffe/layers/window_data_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/net.cpp
create mode 100644 3rdparty/caffe/src/caffe/parallel.cpp
create mode 100644 3rdparty/caffe/src/caffe/proto/caffe.proto
create mode 100644 3rdparty/caffe/src/caffe/solver.cpp
create mode 100644 3rdparty/caffe/src/caffe/solvers/adadelta_solver.cpp
create mode 100644 3rdparty/caffe/src/caffe/solvers/adadelta_solver.cu
create mode 100644 3rdparty/caffe/src/caffe/solvers/adagrad_solver.cpp
create mode 100644 3rdparty/caffe/src/caffe/solvers/adagrad_solver.cu
create mode 100644 3rdparty/caffe/src/caffe/solvers/adam_solver.cpp
create mode 100644 3rdparty/caffe/src/caffe/solvers/adam_solver.cu
create mode 100644 3rdparty/caffe/src/caffe/solvers/nesterov_solver.cpp
create mode 100644 3rdparty/caffe/src/caffe/solvers/nesterov_solver.cu
create mode 100644 3rdparty/caffe/src/caffe/solvers/rmsprop_solver.cpp
create mode 100644 3rdparty/caffe/src/caffe/solvers/rmsprop_solver.cu
create mode 100644 3rdparty/caffe/src/caffe/solvers/sgd_solver.cpp
create mode 100644 3rdparty/caffe/src/caffe/solvers/sgd_solver.cu
create mode 100644 3rdparty/caffe/src/caffe/syncedmem.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/CMakeLists.txt
create mode 100644 3rdparty/caffe/src/caffe/test/test_accuracy_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_argmax_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_batch_norm_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_batch_reindex_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_benchmark.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_bias_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_blob.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_caffe_main.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_common.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_concat_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_contrastive_loss_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_convolution_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_crop_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_data/generate_sample_data.py
create mode 100644 3rdparty/caffe/src/caffe/test/test_data/sample_data.h5
create mode 100644 3rdparty/caffe/src/caffe/test/test_data/sample_data_2_gzip.h5
create mode 100644 3rdparty/caffe/src/caffe/test/test_data/sample_data_list.txt
create mode 100644 3rdparty/caffe/src/caffe/test/test_data/solver_data.h5
create mode 100644 3rdparty/caffe/src/caffe/test/test_data/solver_data_list.txt
create mode 100644 3rdparty/caffe/src/caffe/test/test_data_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_data_transformer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_db.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_deconvolution_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_dummy_data_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_eltwise_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_embed_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_euclidean_loss_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_filler.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_filter_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_flatten_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_gradient_based_solver.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_hdf5_output_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_hdf5data_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_hinge_loss_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_im2col_kernel.cu
create mode 100644 3rdparty/caffe/src/caffe/test/test_im2col_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_image_data_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_infogain_loss_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_inner_product_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_internal_thread.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_io.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_layer_factory.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_lrn_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_lstm_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_math_functions.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_maxpool_dropout_layers.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_memory_data_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_multinomial_logistic_loss_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_mvn_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_net.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_neuron_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_platform.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_pooling_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_power_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_protobuf.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_random_number_generator.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_reduction_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_reshape_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_rnn_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_scale_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_sigmoid_cross_entropy_loss_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_slice_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_softmax_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_softmax_with_loss_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_solver.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_solver_factory.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_split_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_spp_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_stochastic_pooling.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_syncedmem.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_tanh_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_threshold_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_tile_layer.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_upgrade_proto.cpp
create mode 100644 3rdparty/caffe/src/caffe/test/test_util_blas.cpp
create mode 100644 3rdparty/caffe/src/caffe/util/benchmark.cpp
create mode 100644 3rdparty/caffe/src/caffe/util/blocking_queue.cpp
create mode 100644 3rdparty/caffe/src/caffe/util/cudnn.cpp
create mode 100644 3rdparty/caffe/src/caffe/util/db.cpp
create mode 100644 3rdparty/caffe/src/caffe/util/db_leveldb.cpp
create mode 100644 3rdparty/caffe/src/caffe/util/db_lmdb.cpp
create mode 100644 3rdparty/caffe/src/caffe/util/hdf5.cpp
create mode 100644 3rdparty/caffe/src/caffe/util/im2col.cpp
create mode 100644 3rdparty/caffe/src/caffe/util/im2col.cu
create mode 100644 3rdparty/caffe/src/caffe/util/insert_splits.cpp
create mode 100644 3rdparty/caffe/src/caffe/util/io.cpp
create mode 100644 3rdparty/caffe/src/caffe/util/math_functions.cpp
create mode 100644 3rdparty/caffe/src/caffe/util/math_functions.cu
create mode 100644 3rdparty/caffe/src/caffe/util/signal_handler.cpp
create mode 100644 3rdparty/caffe/src/caffe/util/upgrade_proto.cpp
create mode 100644 3rdparty/caffe/src/gtest/CMakeLists.txt
create mode 100644 3rdparty/caffe/src/gtest/gtest-all.cpp
create mode 100644 3rdparty/caffe/src/gtest/gtest.h
create mode 100644 3rdparty/caffe/src/gtest/gtest_main.cc
create mode 100644 3rdparty/caffe/tools/CMakeLists.txt
create mode 100644 3rdparty/caffe/tools/caffe.cpp
create mode 100644 3rdparty/caffe/tools/compute_image_mean.cpp
create mode 100644 3rdparty/caffe/tools/convert_imageset.cpp
create mode 100644 3rdparty/caffe/tools/device_query.cpp
create mode 100755 3rdparty/caffe/tools/extra/extract_seconds.py
create mode 100755 3rdparty/caffe/tools/extra/launch_resize_and_crop_images.sh
create mode 100755 3rdparty/caffe/tools/extra/parse_log.py
create mode 100755 3rdparty/caffe/tools/extra/parse_log.sh
create mode 100644 3rdparty/caffe/tools/extra/plot_log.gnuplot.example
create mode 100755 3rdparty/caffe/tools/extra/plot_training_log.py.example
create mode 100755 3rdparty/caffe/tools/extra/resize_and_crop_images.py
create mode 100755 3rdparty/caffe/tools/extra/summarize.py
create mode 100644 3rdparty/caffe/tools/extract_features.cpp
create mode 100644 3rdparty/caffe/tools/finetune_net.cpp
create mode 100644 3rdparty/caffe/tools/net_speed_benchmark.cpp
create mode 100644 3rdparty/caffe/tools/test_net.cpp
create mode 100644 3rdparty/caffe/tools/train_net.cpp
create mode 100644 3rdparty/caffe/tools/upgrade_net_proto_binary.cpp
create mode 100644 3rdparty/caffe/tools/upgrade_net_proto_text.cpp
create mode 100644 3rdparty/caffe/tools/upgrade_solver_proto_text.cpp
create mode 100644 LICENSE
create mode 100644 Makefile
create mode 100644 Makefile.config.Ubuntu14.example
create mode 100644 Makefile.config.Ubuntu14_cuda_7.example
create mode 100644 Makefile.config.Ubuntu16.example
create mode 100644 Makefile.config.Ubuntu16_cuda_7.example
create mode 100644 README.md
create mode 100644 doc/GUI_help/GUI_help.odt
create mode 100644 doc/GUI_help/GUI_help.png
create mode 100755 doc/UML/1_0_0rc1/UML.mdj
create mode 100644 doc/UML/1_0_0rc1/UML.pdf
create mode 100644 doc/UML/1_0_0rc1/UML.png
create mode 100644 doc/demo_overview.md
create mode 100644 doc/doc_autogeneration.doxygen
create mode 100644 doc/installation.md
create mode 100644 doc/library_add_new_module.md
create mode 100644 doc/library_extend_functionality.md
create mode 100644 doc/library_overview.md
create mode 100644 doc/media/dance.gif
create mode 100644 doc/media/shake.gif
create mode 100755 examples/media/COCO_val2014_000000000192.jpg
create mode 100755 examples/media/COCO_val2014_000000000241.jpg
create mode 100755 examples/media/COCO_val2014_000000000257.jpg
create mode 100755 examples/media/COCO_val2014_000000000294.jpg
create mode 100755 examples/media/COCO_val2014_000000000328.jpg
create mode 100755 examples/media/COCO_val2014_000000000338.jpg
create mode 100755 examples/media/COCO_val2014_000000000357.jpg
create mode 100755 examples/media/COCO_val2014_000000000360.jpg
create mode 100755 examples/media/COCO_val2014_000000000395.jpg
create mode 100755 examples/media/COCO_val2014_000000000415.jpg
create mode 100755 examples/media/COCO_val2014_000000000428.jpg
create mode 100755 examples/media/COCO_val2014_000000000459.jpg
create mode 100755 examples/media/COCO_val2014_000000000474.jpg
create mode 100755 examples/media/COCO_val2014_000000000488.jpg
create mode 100755 examples/media/COCO_val2014_000000000536.jpg
create mode 100755 examples/media/COCO_val2014_000000000544.jpg
create mode 100755 examples/media/COCO_val2014_000000000564.jpg
create mode 100755 examples/media/COCO_val2014_000000000569.jpg
create mode 100755 examples/media/COCO_val2014_000000000589.jpg
create mode 100755 examples/media/COCO_val2014_000000000623.jpg
create mode 100644 examples/media/video.avi
create mode 100755 examples/openpose/rtpose.cpp
create mode 100644 examples/tutorial_pose/1_extract_from_image.cpp
create mode 100644 examples/tutorial_pose/2_extract_pose_or_heatmat_from_image.cpp
create mode 100644 examples/tutorial_thread/1_openpose_read_and_display.cpp
create mode 100644 examples/tutorial_thread/2_user_processing_function.cpp
create mode 100644 examples/tutorial_thread/3_user_input_processing_and_output.cpp
create mode 100644 examples/tutorial_thread/4_user_input_processing_output_and_datum.cpp
create mode 100644 examples/tutorial_wrapper/1_user_asynchronous.cpp
create mode 100644 examples/tutorial_wrapper/2_user_synchronous.cpp
create mode 100644 examples/user_code/User custom files here will compile, try not to modify the CPM source code
create mode 100644 include/openpose/core/array.hpp
create mode 100644 include/openpose/core/arrayScaler.hpp
create mode 100644 include/openpose/core/cvMatToOpInput.hpp
create mode 100644 include/openpose/core/cvMatToOpOutput.hpp
create mode 100644 include/openpose/core/datum.hpp
create mode 100644 include/openpose/core/enumClasses.hpp
create mode 100644 include/openpose/core/headers.hpp
create mode 100644 include/openpose/core/net.hpp
create mode 100644 include/openpose/core/netCaffe.hpp
create mode 100644 include/openpose/core/nmsBase.hpp
create mode 100644 include/openpose/core/nmsCaffe.hpp
create mode 100644 include/openpose/core/opOutputToCvMat.hpp
create mode 100644 include/openpose/core/renderer.hpp
create mode 100644 include/openpose/core/resizeAndMergeBase.hpp
create mode 100644 include/openpose/core/resizeAndMergeCaffe.hpp
create mode 100644 include/openpose/core/scalePose.hpp
create mode 100644 include/openpose/core/wArrayScaler.hpp
create mode 100644 include/openpose/core/wCvMatToOpInput.hpp
create mode 100644 include/openpose/core/wCvMatToOpOutput.hpp
create mode 100644 include/openpose/core/wOpOutputToCvMat.hpp
create mode 100644 include/openpose/experimental/filestream/headers.hpp
create mode 100644 include/openpose/experimental/filestream/wPoseJsonCocoSaver.hpp
create mode 100644 include/openpose/experimental/hands/enumClasses.hpp
create mode 100644 include/openpose/experimental/hands/handsExtractor.hpp
create mode 100644 include/openpose/experimental/hands/handsParameters.hpp
create mode 100644 include/openpose/experimental/hands/handsRenderGpu.hpp
create mode 100644 include/openpose/experimental/hands/handsRenderer.hpp
create mode 100644 include/openpose/experimental/hands/headers.hpp
create mode 100644 include/openpose/experimental/hands/wHandsExtractor.hpp
create mode 100644 include/openpose/experimental/hands/wHandsRenderer.hpp
create mode 100644 include/openpose/experimental/headers.hpp
create mode 100644 include/openpose/experimental/producer/headers.hpp
create mode 100644 include/openpose/experimental/producer/wPeoplePoseLoader.hpp
create mode 100644 include/openpose/filestream/enumClasses.hpp
create mode 100644 include/openpose/filestream/fileSaver.hpp
create mode 100644 include/openpose/filestream/fileStream.hpp
create mode 100644 include/openpose/filestream/headers.hpp
create mode 100644 include/openpose/filestream/heatMapSaver.hpp
create mode 100644 include/openpose/filestream/imageSaver.hpp
create mode 100644 include/openpose/filestream/jsonOfstream.hpp
create mode 100644 include/openpose/filestream/poseJsonCocoSaver.hpp
create mode 100644 include/openpose/filestream/poseJsonSaver.hpp
create mode 100644 include/openpose/filestream/poseSaver.hpp
create mode 100644 include/openpose/filestream/videoSaver.hpp
create mode 100644 include/openpose/filestream/wHeatMapSaver.hpp
create mode 100644 include/openpose/filestream/wImageSaver.hpp
create mode 100644 include/openpose/filestream/wPoseJsonSaver.hpp
create mode 100644 include/openpose/filestream/wPoseSaver.hpp
create mode 100644 include/openpose/filestream/wVideoSaver.hpp
create mode 100644 include/openpose/gui/enumClasses.hpp
create mode 100644 include/openpose/gui/frameDisplayer.hpp
create mode 100644 include/openpose/gui/gui.hpp
create mode 100644 include/openpose/gui/guiInfoAdder.hpp
create mode 100644 include/openpose/gui/headers.hpp
create mode 100644 include/openpose/gui/wGui.hpp
create mode 100644 include/openpose/gui/wGuiInfoAdder.hpp
create mode 100644 include/openpose/headers.hpp
create mode 100644 include/openpose/pose/bodyPartConnectorBase.hpp
create mode 100644 include/openpose/pose/bodyPartConnectorCaffe.hpp
create mode 100644 include/openpose/pose/enumClasses.hpp
create mode 100644 include/openpose/pose/headers.hpp
create mode 100644 include/openpose/pose/poseExtractor.hpp
create mode 100644 include/openpose/pose/poseExtractorCaffe.hpp
create mode 100644 include/openpose/pose/poseParameters.hpp
create mode 100644 include/openpose/pose/poseRenderGpu.hpp
create mode 100644 include/openpose/pose/poseRenderer.hpp
create mode 100644 include/openpose/pose/wPoseExtractor.hpp
create mode 100644 include/openpose/pose/wPoseRenderer.hpp
create mode 100644 include/openpose/producer/datumProducer.hpp
create mode 100644 include/openpose/producer/enumClasses.hpp
create mode 100644 include/openpose/producer/headers.hpp
create mode 100644 include/openpose/producer/imageDirectoryReader.hpp
create mode 100644 include/openpose/producer/producer.hpp
create mode 100644 include/openpose/producer/videoCaptureReader.hpp
create mode 100644 include/openpose/producer/videoReader.hpp
create mode 100644 include/openpose/producer/wDatumProducer.hpp
create mode 100644 include/openpose/producer/webcamReader.hpp
create mode 100644 include/openpose/thread/enumClasses.hpp
create mode 100644 include/openpose/thread/headers.hpp
create mode 100644 include/openpose/thread/priorityQueue.hpp
create mode 100644 include/openpose/thread/queue.hpp
create mode 100644 include/openpose/thread/queueBase.hpp
create mode 100644 include/openpose/thread/subThread.hpp
create mode 100644 include/openpose/thread/subThreadNoQueue.hpp
create mode 100644 include/openpose/thread/subThreadQueueIn.hpp
create mode 100644 include/openpose/thread/subThreadQueueInOut.hpp
create mode 100644 include/openpose/thread/subThreadQueueOut.hpp
create mode 100644 include/openpose/thread/thread.hpp
create mode 100644 include/openpose/thread/threadManager.hpp
create mode 100644 include/openpose/thread/wIdGenerator.hpp
create mode 100644 include/openpose/thread/wQueueOrderer.hpp
create mode 100644 include/openpose/thread/worker.hpp
create mode 100644 include/openpose/thread/workerConsumer.hpp
create mode 100644 include/openpose/thread/workerProducer.hpp
create mode 100644 include/openpose/utilities/check.hpp
create mode 100644 include/openpose/utilities/cuda.hpp
create mode 100644 include/openpose/utilities/cuda.hu
create mode 100644 include/openpose/utilities/enumClasses.hpp
create mode 100644 include/openpose/utilities/errorAndLog.hpp
create mode 100644 include/openpose/utilities/fastMath.hpp
create mode 100644 include/openpose/utilities/fileSystem.hpp
create mode 100644 include/openpose/utilities/headers.hpp
create mode 100644 include/openpose/utilities/macros.hpp
create mode 100644 include/openpose/utilities/openCv.hpp
create mode 100644 include/openpose/utilities/pointerContainer.hpp
create mode 100644 include/openpose/utilities/profiler.hpp
create mode 100644 include/openpose/utilities/string.hpp
create mode 100644 include/openpose/wrapper/enumClasses.hpp
create mode 100644 include/openpose/wrapper/headers.hpp
create mode 100644 include/openpose/wrapper/wrapper.hpp
create mode 100755 install_caffe_and_openpose.sh
create mode 100755 install_openpose.sh
create mode 100755 models/getModels.sh
create mode 100755 models/pose/coco/pose_deploy_linevec.prototxt
create mode 100755 models/pose/mpi/pose_deploy_linevec.prototxt
create mode 100644 models/pose/mpi/pose_deploy_linevec_faster_4_stages.prototxt
create mode 100644 src/openpose/core/array.cpp
create mode 100644 src/openpose/core/arrayScaler.cpp
create mode 100644 src/openpose/core/cvMatToOpInput.cpp
create mode 100644 src/openpose/core/cvMatToOpOutput.cpp
create mode 100644 src/openpose/core/datum.cpp
create mode 100644 src/openpose/core/defineTemplates.cpp
create mode 100644 src/openpose/core/netCaffe.cpp
create mode 100644 src/openpose/core/nmsBase.cpp
create mode 100644 src/openpose/core/nmsBase.cu
create mode 100644 src/openpose/core/nmsCaffe.cpp
create mode 100644 src/openpose/core/opOutputToCvMat.cpp
create mode 100644 src/openpose/core/renderer.cpp
create mode 100644 src/openpose/core/resizeAndMergeBase.cpp
create mode 100644 src/openpose/core/resizeAndMergeBase.cu
create mode 100644 src/openpose/core/resizeAndMergeCaffe.cpp
create mode 100644 src/openpose/core/scalePose.cpp
create mode 100644 src/openpose/experimental/filestream/defineTemplates.cpp
create mode 100644 src/openpose/experimental/hands/defineTemplates.cpp
create mode 100644 src/openpose/experimental/hands/handsExtractor.cpp
create mode 100644 src/openpose/experimental/hands/handsRenderGpu.cu
create mode 100644 src/openpose/experimental/hands/handsRenderer.cpp
create mode 100644 src/openpose/filestream/defineTemplates.cpp
create mode 100644 src/openpose/filestream/fileSaver.cpp
create mode 100644 src/openpose/filestream/fileStream.cpp
create mode 100644 src/openpose/filestream/heatMapSaver.cpp
create mode 100644 src/openpose/filestream/imageSaver.cpp
create mode 100644 src/openpose/filestream/jsonOfstream.cpp
create mode 100644 src/openpose/filestream/poseJsonCocoSaver.cpp
create mode 100644 src/openpose/filestream/poseJsonSaver.cpp
create mode 100644 src/openpose/filestream/poseSaver.cpp
create mode 100644 src/openpose/filestream/videoSaver.cpp
create mode 100644 src/openpose/gui/defineTemplates.cpp
create mode 100644 src/openpose/gui/frameDisplayer.cpp
create mode 100644 src/openpose/gui/gui.cpp
create mode 100644 src/openpose/gui/guiInfoAdder.cpp
create mode 100644 src/openpose/pose/bodyPartConnectorBase.cpp
create mode 100644 src/openpose/pose/bodyPartConnectorBase.cu
create mode 100644 src/openpose/pose/bodyPartConnectorCaffe.cpp
create mode 100644 src/openpose/pose/defineTemplates.cpp
create mode 100644 src/openpose/pose/poseExtractor.cpp
create mode 100644 src/openpose/pose/poseExtractorCaffe.cpp
create mode 100644 src/openpose/pose/poseRenderGpu.cu
create mode 100644 src/openpose/pose/poseRenderer.cpp
create mode 100644 src/openpose/producer/defineTemplates.cpp
create mode 100644 src/openpose/producer/imageDirectoryReader.cpp
create mode 100644 src/openpose/producer/producer.cpp
create mode 100644 src/openpose/producer/videoCaptureReader.cpp
create mode 100644 src/openpose/producer/videoReader.cpp
create mode 100644 src/openpose/producer/webcamReader.cpp
create mode 100644 src/openpose/thread/defineTemplates.cpp
create mode 100644 src/openpose/utilities/cuda.cpp
create mode 100644 src/openpose/utilities/errorAndLog.cpp
create mode 100644 src/openpose/utilities/fileSystem.cpp
create mode 100644 src/openpose/utilities/openCv.cpp
create mode 100644 src/openpose/utilities/profiler.cpp
create mode 100644 src/openpose/utilities/string.cpp
create mode 100644 src/openpose/wrapper/defineTemplates.cpp
create mode 100644 src/openpose/wrapper/wrapper.cpp
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..7303227a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,107 @@
+######################### Binary Files #########################
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.cuo
+
+# Compiled Dynamic libraries
+*.so*
+*.dylib
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+
+# Compiled protocol buffers
+*.pb.h
+*.pb.cc
+*_pb2.py
+
+# Compiled python
+*__init__.py
+*.pyc
+
+# Compiled MATLAB
+*.mex*
+
+# IPython notebook checkpoints
+.ipynb_checkpoints
+
+# LevelDB files
+*.sst
+*.ldb
+LOCK
+LOG*
+CURRENT
+MANIFEST-*
+
+######################### IDEs Files #########################
+# Editor temporaries
+*.swp
+*~
+
+# Sublime Text settings
+*.sublime-workspace
+*.sublime-project
+
+# Eclipse Project settings
+*.*project
+.settings
+
+# QtCreator files
+*.user
+
+# PyCharm files
+.idea
+
+# OSX dir files
+.DS_Store
+
+######################### Caffe Files / Folders #########################
+# User's build configuration
+Makefile.config
+
+# Data and models are either
+ # 1. reference, and not casually committed
+ # 2. custom, and live on their own unless they're deliberated contributed
+3rdparty/caffe/.*
+distribute/
+.build_release/
+.build_debug/
+*.caffemodel
+*.caffemodel.h5
+*.solverstate
+*.solverstate.h5
+*.binaryproto
+*leveldb
+*lmdb
+
+######################### Compilation (build, distribute & bins) Files / Folders #########################
+*.bin
+*.testbin
+build
+*build_debug/
+*build_release/
+*cmake_build
+distribute/*
+python/caffe/proto/
+
+######################### Generated Documentation #########################
+_site
+docs/_site
+docs/dev
+docs/gathered
+doxygen
+html/
+
+######################### Video Files #########################
+# Testing videos
+*.mp4
+*.mov
+
+######################### Validation Scripts & Testing #########################
+*validation.sh
+validation*.sh
+output*/
diff --git a/3rdparty/Versions.txt b/3rdparty/Versions.txt
new file mode 100644
index 00000000..4083f0cf
--- /dev/null
+++ b/3rdparty/Versions.txt
@@ -0,0 +1,4 @@
+Caffe:
+ - Version 1.0.0, extracted from GitHub on 04/16/2017 from the current master branch.
+ - Link: https://github.com/BVLC/caffe
+
diff --git a/3rdparty/caffe/CMakeLists.txt b/3rdparty/caffe/CMakeLists.txt
new file mode 100644
index 00000000..08f56a33
--- /dev/null
+++ b/3rdparty/caffe/CMakeLists.txt
@@ -0,0 +1,122 @@
+cmake_minimum_required(VERSION 2.8.7)
+if(POLICY CMP0046)
+ cmake_policy(SET CMP0046 NEW)
+endif()
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+# ---[ Caffe project
+project(Caffe C CXX)
+
+# ---[ Caffe version
+set(CAFFE_TARGET_VERSION "1.0.0" CACHE STRING "Caffe logical version")
+set(CAFFE_TARGET_SOVERSION "1.0.0" CACHE STRING "Caffe soname version")
+add_definitions(-DCAFFE_VERSION=${CAFFE_TARGET_VERSION})
+
+# ---[ Using cmake scripts and modules
+list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules)
+
+include(ExternalProject)
+include(GNUInstallDirs)
+
+include(cmake/Utils.cmake)
+include(cmake/Targets.cmake)
+include(cmake/Misc.cmake)
+include(cmake/Summary.cmake)
+include(cmake/ConfigGen.cmake)
+
+# ---[ Options
+caffe_option(CPU_ONLY "Build Caffe without CUDA support" OFF) # TODO: rename to USE_CUDA
+caffe_option(USE_CUDNN "Build Caffe with cuDNN library support" ON IF NOT CPU_ONLY)
+caffe_option(USE_NCCL "Build Caffe with NCCL library support" OFF)
+caffe_option(BUILD_SHARED_LIBS "Build shared libraries" ON)
+caffe_option(BUILD_python "Build Python wrapper" ON)
+set(python_version "2" CACHE STRING "Specify which Python version to use")
+caffe_option(BUILD_matlab "Build Matlab wrapper" OFF IF UNIX OR APPLE)
+caffe_option(BUILD_docs "Build documentation" ON IF UNIX OR APPLE)
+caffe_option(BUILD_python_layer "Build the Caffe Python layer" ON)
+caffe_option(USE_OPENCV "Build with OpenCV support" ON)
+caffe_option(USE_LEVELDB "Build with levelDB" ON)
+caffe_option(USE_LMDB "Build with lmdb" ON)
+caffe_option(ALLOW_LMDB_NOLOCK "Allow MDB_NOLOCK when reading LMDB files (only if necessary)" OFF)
+caffe_option(USE_OPENMP "Link with OpenMP (when your BLAS wants OpenMP and you get linker errors)" OFF)
+
+# ---[ Dependencies
+include(cmake/Dependencies.cmake)
+
+# ---[ Flags
+if(UNIX OR APPLE)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall")
+endif()
+
+caffe_set_caffe_link()
+
+if(USE_libstdcpp)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++")
+ message("-- Warning: forcing libstdc++ (controlled by USE_libstdcpp option in cmake)")
+endif()
+
+# ---[ Warnings
+caffe_warnings_disable(CMAKE_CXX_FLAGS -Wno-sign-compare -Wno-uninitialized)
+
+# ---[ Config generation
+configure_file(cmake/Templates/caffe_config.h.in "${PROJECT_BINARY_DIR}/caffe_config.h")
+
+# ---[ Includes
+set(Caffe_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
+set(Caffe_SRC_DIR ${PROJECT_SOURCE_DIR}/src)
+include_directories(${PROJECT_BINARY_DIR})
+
+# ---[ Includes & defines for CUDA
+
+# cuda_compile() does not have per-call dependencies or include pathes
+# (cuda_compile() has per-call flags, but we set them here too for clarity)
+#
+# list(REMOVE_ITEM ...) invocations remove PRIVATE and PUBLIC keywords from collected definitions and include pathes
+if(HAVE_CUDA)
+ # pass include pathes to cuda_include_directories()
+ set(Caffe_ALL_INCLUDE_DIRS ${Caffe_INCLUDE_DIRS})
+ list(REMOVE_ITEM Caffe_ALL_INCLUDE_DIRS PRIVATE PUBLIC)
+ cuda_include_directories(${Caffe_INCLUDE_DIR} ${Caffe_SRC_DIR} ${Caffe_ALL_INCLUDE_DIRS})
+
+ # add definitions to nvcc flags directly
+ set(Caffe_ALL_DEFINITIONS ${Caffe_DEFINITIONS})
+ list(REMOVE_ITEM Caffe_ALL_DEFINITIONS PRIVATE PUBLIC)
+ list(APPEND CUDA_NVCC_FLAGS ${Caffe_ALL_DEFINITIONS})
+endif()
+
+# ---[ Subdirectories
+add_subdirectory(src/gtest)
+add_subdirectory(src/caffe)
+add_subdirectory(tools)
+add_subdirectory(examples)
+add_subdirectory(python)
+add_subdirectory(matlab)
+add_subdirectory(docs)
+
+# ---[ Linter target
+add_custom_target(lint COMMAND ${CMAKE_COMMAND} -P ${PROJECT_SOURCE_DIR}/cmake/lint.cmake)
+
+# ---[ pytest target
+if(BUILD_python)
+ add_custom_target(pytest COMMAND python${python_version} -m unittest discover -s caffe/test WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/python )
+ add_dependencies(pytest pycaffe)
+endif()
+
+# ---[ uninstall target
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Uninstall.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/cmake/Uninstall.cmake
+ IMMEDIATE @ONLY)
+
+add_custom_target(uninstall
+ COMMAND ${CMAKE_COMMAND} -P
+ ${CMAKE_CURRENT_BINARY_DIR}/cmake/Uninstall.cmake)
+
+# ---[ Configuration summary
+caffe_print_configuration_summary()
+
+# ---[ Export configs generation
+caffe_generate_export_configs()
+
diff --git a/3rdparty/caffe/CONTRIBUTING.md b/3rdparty/caffe/CONTRIBUTING.md
new file mode 100644
index 00000000..8cd5e56c
--- /dev/null
+++ b/3rdparty/caffe/CONTRIBUTING.md
@@ -0,0 +1,30 @@
+# Contributing
+
+## Issues
+
+Specific Caffe design and development issues, bugs, and feature requests are maintained by GitHub Issues.
+
+_Please do not post usage, installation, or modeling questions, or other requests for help to Issues._
+Use the [caffe-users list](https://groups.google.com/forum/#!forum/caffe-users) instead. This helps developers maintain a clear, uncluttered, and efficient view of the state of Caffe.
+
+When reporting a bug, it's most helpful to provide the following information, where applicable:
+
+* What steps reproduce the bug?
+* Can you reproduce the bug using the latest [master](https://github.com/BVLC/caffe/tree/master), compiled with the `DEBUG` make option?
+* What hardware and operating system/distribution are you running?
+* If the bug is a crash, provide the backtrace (usually printed by Caffe; always obtainable with `gdb`).
+
+Try to give your issue a title that is succinct and specific. The devs will rename issues as needed to keep track of them.
+
+## Pull Requests
+
+Caffe welcomes all contributions.
+
+See the [contributing guide](http://caffe.berkeleyvision.org/development.html) for details.
+
+Briefly: read commit by commit, a PR should tell a clean, compelling story of _one_ improvement to Caffe. In particular:
+
+* A PR should do one clear thing that obviously improves Caffe, and nothing more. Making many smaller PRs is better than making one large PR; review effort is superlinear in the amount of code involved.
+* Similarly, each commit should be a small, atomic change representing one step in development. PRs should be made of many commits where appropriate.
+* Please do rewrite PR history to be clean rather than chronological. Within-PR bugfixes, style cleanups, reversions, etc. should be squashed and should not appear in merged PR history.
+* Anything nonobvious from the code should be explained in comments, commit messages, or the PR description, as appropriate.
diff --git a/3rdparty/caffe/CONTRIBUTORS.md b/3rdparty/caffe/CONTRIBUTORS.md
new file mode 100644
index 00000000..3fd76781
--- /dev/null
+++ b/3rdparty/caffe/CONTRIBUTORS.md
@@ -0,0 +1,19 @@
+# Contributors
+
+Caffe is developed by a core set of BAIR members and the open-source community.
+
+We thank all of our [contributors](https://github.com/BVLC/caffe/graphs/contributors)!
+
+**For the detailed history of contributions** of a given file, try
+
+ git blame file
+
+to see line-by-line credits and
+
+ git log --follow file
+
+to see the change log even across renames and rewrites.
+
+Please refer to the [acknowledgements](http://caffe.berkeleyvision.org/#acknowledgements) on the Caffe site for further details.
+
+**Copyright** is held by the original contributor according to the versioning history; see LICENSE.
diff --git a/3rdparty/caffe/INSTALL.md b/3rdparty/caffe/INSTALL.md
new file mode 100644
index 00000000..05c714db
--- /dev/null
+++ b/3rdparty/caffe/INSTALL.md
@@ -0,0 +1,7 @@
+# Installation
+
+See http://caffe.berkeleyvision.org/installation.html for the latest
+installation instructions.
+
+Check the users group in case you need help:
+https://groups.google.com/forum/#!forum/caffe-users
diff --git a/3rdparty/caffe/LICENSE b/3rdparty/caffe/LICENSE
new file mode 100644
index 00000000..0c99adc1
--- /dev/null
+++ b/3rdparty/caffe/LICENSE
@@ -0,0 +1,44 @@
+COPYRIGHT
+
+All contributions by the University of California:
+Copyright (c) 2014-2017 The Regents of the University of California (Regents)
+All rights reserved.
+
+All other contributions:
+Copyright (c) 2014-2017, the respective contributors
+All rights reserved.
+
+Caffe uses a shared copyright model: each contributor holds copyright over
+their contributions to Caffe. The project versioning records all such
+contribution and copyright details. If a contributor wants to further mark
+their specific copyright on a particular contribution, they should indicate
+their copyright solely in the commit message of the change when it is
+committed.
+
+LICENSE
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+CONTRIBUTION AGREEMENT
+
+By contributing to the BVLC/caffe repository through pull-request, comment,
+or otherwise, the contributor releases their content to the
+license and copyright terms herein.
diff --git a/3rdparty/caffe/Makefile b/3rdparty/caffe/Makefile
new file mode 100644
index 00000000..4d324160
--- /dev/null
+++ b/3rdparty/caffe/Makefile
@@ -0,0 +1,699 @@
+PROJECT := caffe
+
+CONFIG_FILE := Makefile.config
+# Explicitly check for the config file, otherwise make -k will proceed anyway.
+ifeq ($(wildcard $(CONFIG_FILE)),)
+$(error $(CONFIG_FILE) not found. See $(CONFIG_FILE).example.)
+endif
+include $(CONFIG_FILE)
+
+BUILD_DIR_LINK := $(BUILD_DIR)
+ifeq ($(RELEASE_BUILD_DIR),)
+ RELEASE_BUILD_DIR := .$(BUILD_DIR)_release
+endif
+ifeq ($(DEBUG_BUILD_DIR),)
+ DEBUG_BUILD_DIR := .$(BUILD_DIR)_debug
+endif
+
+DEBUG ?= 0
+ifeq ($(DEBUG), 1)
+ BUILD_DIR := $(DEBUG_BUILD_DIR)
+ OTHER_BUILD_DIR := $(RELEASE_BUILD_DIR)
+else
+ BUILD_DIR := $(RELEASE_BUILD_DIR)
+ OTHER_BUILD_DIR := $(DEBUG_BUILD_DIR)
+endif
+
+# All of the directories containing code.
+SRC_DIRS := $(shell find * -type d -exec bash -c "find {} -maxdepth 1 \
+ \( -name '*.cpp' -o -name '*.proto' \) | grep -q ." \; -print)
+
+# The target shared library name
+LIBRARY_NAME := $(PROJECT)
+LIB_BUILD_DIR := $(BUILD_DIR)/lib
+STATIC_NAME := $(LIB_BUILD_DIR)/lib$(LIBRARY_NAME).a
+DYNAMIC_VERSION_MAJOR := 1
+DYNAMIC_VERSION_MINOR := 0
+DYNAMIC_VERSION_REVISION := 0
+DYNAMIC_NAME_SHORT := lib$(LIBRARY_NAME).so
+#DYNAMIC_SONAME_SHORT := $(DYNAMIC_NAME_SHORT).$(DYNAMIC_VERSION_MAJOR)
+DYNAMIC_VERSIONED_NAME_SHORT := $(DYNAMIC_NAME_SHORT).$(DYNAMIC_VERSION_MAJOR).$(DYNAMIC_VERSION_MINOR).$(DYNAMIC_VERSION_REVISION)
+DYNAMIC_NAME := $(LIB_BUILD_DIR)/$(DYNAMIC_VERSIONED_NAME_SHORT)
+COMMON_FLAGS += -DCAFFE_VERSION=$(DYNAMIC_VERSION_MAJOR).$(DYNAMIC_VERSION_MINOR).$(DYNAMIC_VERSION_REVISION)
+
+##############################
+# Get all source files
+##############################
+# CXX_SRCS are the source files excluding the test ones.
+CXX_SRCS := $(shell find src/$(PROJECT) ! -name "test_*.cpp" -name "*.cpp")
+# CU_SRCS are the cuda source files
+CU_SRCS := $(shell find src/$(PROJECT) ! -name "test_*.cu" -name "*.cu")
+# TEST_SRCS are the test source files
+TEST_MAIN_SRC := src/$(PROJECT)/test/test_caffe_main.cpp
+TEST_SRCS := $(shell find src/$(PROJECT) -name "test_*.cpp")
+TEST_SRCS := $(filter-out $(TEST_MAIN_SRC), $(TEST_SRCS))
+TEST_CU_SRCS := $(shell find src/$(PROJECT) -name "test_*.cu")
+GTEST_SRC := src/gtest/gtest-all.cpp
+# TOOL_SRCS are the source files for the tool binaries
+TOOL_SRCS := $(shell find tools -name "*.cpp")
+# EXAMPLE_SRCS are the source files for the example binaries
+EXAMPLE_SRCS := $(shell find examples -name "*.cpp")
+# BUILD_INCLUDE_DIR contains any generated header files we want to include.
+BUILD_INCLUDE_DIR := $(BUILD_DIR)/src
+# PROTO_SRCS are the protocol buffer definitions
+PROTO_SRC_DIR := src/$(PROJECT)/proto
+PROTO_SRCS := $(wildcard $(PROTO_SRC_DIR)/*.proto)
+# PROTO_BUILD_DIR will contain the .cc and obj files generated from
+# PROTO_SRCS; PROTO_BUILD_INCLUDE_DIR will contain the .h header files
+PROTO_BUILD_DIR := $(BUILD_DIR)/$(PROTO_SRC_DIR)
+PROTO_BUILD_INCLUDE_DIR := $(BUILD_INCLUDE_DIR)/$(PROJECT)/proto
+# NONGEN_CXX_SRCS includes all source/header files except those generated
+# automatically (e.g., by proto).
+NONGEN_CXX_SRCS := $(shell find \
+ src/$(PROJECT) \
+ include/$(PROJECT) \
+ python/$(PROJECT) \
+ matlab/+$(PROJECT)/private \
+ examples \
+ tools \
+ -name "*.cpp" -or -name "*.hpp" -or -name "*.cu" -or -name "*.cuh")
+LINT_SCRIPT := scripts/cpp_lint.py
+LINT_OUTPUT_DIR := $(BUILD_DIR)/.lint
+LINT_EXT := lint.txt
+LINT_OUTPUTS := $(addsuffix .$(LINT_EXT), $(addprefix $(LINT_OUTPUT_DIR)/, $(NONGEN_CXX_SRCS)))
+EMPTY_LINT_REPORT := $(BUILD_DIR)/.$(LINT_EXT)
+NONEMPTY_LINT_REPORT := $(BUILD_DIR)/$(LINT_EXT)
+# PY$(PROJECT)_SRC is the python wrapper for $(PROJECT)
+PY$(PROJECT)_SRC := python/$(PROJECT)/_$(PROJECT).cpp
+PY$(PROJECT)_SO := python/$(PROJECT)/_$(PROJECT).so
+PY$(PROJECT)_HXX := include/$(PROJECT)/layers/python_layer.hpp
+# MAT$(PROJECT)_SRC is the mex entrance point of matlab package for $(PROJECT)
+MAT$(PROJECT)_SRC := matlab/+$(PROJECT)/private/$(PROJECT)_.cpp
+ifneq ($(MATLAB_DIR),)
+ MAT_SO_EXT := $(shell $(MATLAB_DIR)/bin/mexext)
+endif
+MAT$(PROJECT)_SO := matlab/+$(PROJECT)/private/$(PROJECT)_.$(MAT_SO_EXT)
+
+##############################
+# Derive generated files
+##############################
+# The generated files for protocol buffers
+PROTO_GEN_HEADER_SRCS := $(addprefix $(PROTO_BUILD_DIR)/, \
+ $(notdir ${PROTO_SRCS:.proto=.pb.h}))
+PROTO_GEN_HEADER := $(addprefix $(PROTO_BUILD_INCLUDE_DIR)/, \
+ $(notdir ${PROTO_SRCS:.proto=.pb.h}))
+PROTO_GEN_CC := $(addprefix $(BUILD_DIR)/, ${PROTO_SRCS:.proto=.pb.cc})
+PY_PROTO_BUILD_DIR := python/$(PROJECT)/proto
+PY_PROTO_INIT := python/$(PROJECT)/proto/__init__.py
+PROTO_GEN_PY := $(foreach file,${PROTO_SRCS:.proto=_pb2.py}, \
+ $(PY_PROTO_BUILD_DIR)/$(notdir $(file)))
+# The objects corresponding to the source files
+# These objects will be linked into the final shared library, so we
+# exclude the tool, example, and test objects.
+CXX_OBJS := $(addprefix $(BUILD_DIR)/, ${CXX_SRCS:.cpp=.o})
+CU_OBJS := $(addprefix $(BUILD_DIR)/cuda/, ${CU_SRCS:.cu=.o})
+PROTO_OBJS := ${PROTO_GEN_CC:.cc=.o}
+OBJS := $(PROTO_OBJS) $(CXX_OBJS) $(CU_OBJS)
+# tool, example, and test objects
+TOOL_OBJS := $(addprefix $(BUILD_DIR)/, ${TOOL_SRCS:.cpp=.o})
+TOOL_BUILD_DIR := $(BUILD_DIR)/tools
+TEST_CXX_BUILD_DIR := $(BUILD_DIR)/src/$(PROJECT)/test
+TEST_CU_BUILD_DIR := $(BUILD_DIR)/cuda/src/$(PROJECT)/test
+TEST_CXX_OBJS := $(addprefix $(BUILD_DIR)/, ${TEST_SRCS:.cpp=.o})
+TEST_CU_OBJS := $(addprefix $(BUILD_DIR)/cuda/, ${TEST_CU_SRCS:.cu=.o})
+TEST_OBJS := $(TEST_CXX_OBJS) $(TEST_CU_OBJS)
+GTEST_OBJ := $(addprefix $(BUILD_DIR)/, ${GTEST_SRC:.cpp=.o})
+EXAMPLE_OBJS := $(addprefix $(BUILD_DIR)/, ${EXAMPLE_SRCS:.cpp=.o})
+# Output files for automatic dependency generation
+DEPS := ${CXX_OBJS:.o=.d} ${CU_OBJS:.o=.d} ${TEST_CXX_OBJS:.o=.d} \
+ ${TEST_CU_OBJS:.o=.d} $(BUILD_DIR)/${MAT$(PROJECT)_SO:.$(MAT_SO_EXT)=.d}
+# tool, example, and test bins
+TOOL_BINS := ${TOOL_OBJS:.o=.bin}
+EXAMPLE_BINS := ${EXAMPLE_OBJS:.o=.bin}
+# symlinks to tool bins without the ".bin" extension
+TOOL_BIN_LINKS := ${TOOL_BINS:.bin=}
+# Put the test binaries in build/test for convenience.
+TEST_BIN_DIR := $(BUILD_DIR)/test
+TEST_CU_BINS := $(addsuffix .testbin,$(addprefix $(TEST_BIN_DIR)/, \
+ $(foreach obj,$(TEST_CU_OBJS),$(basename $(notdir $(obj))))))
+TEST_CXX_BINS := $(addsuffix .testbin,$(addprefix $(TEST_BIN_DIR)/, \
+ $(foreach obj,$(TEST_CXX_OBJS),$(basename $(notdir $(obj))))))
+TEST_BINS := $(TEST_CXX_BINS) $(TEST_CU_BINS)
+# TEST_ALL_BIN is the test binary that links caffe dynamically.
+TEST_ALL_BIN := $(TEST_BIN_DIR)/test_all.testbin
+
+##############################
+# Derive compiler warning dump locations
+##############################
+WARNS_EXT := warnings.txt
+CXX_WARNS := $(addprefix $(BUILD_DIR)/, ${CXX_SRCS:.cpp=.o.$(WARNS_EXT)})
+CU_WARNS := $(addprefix $(BUILD_DIR)/cuda/, ${CU_SRCS:.cu=.o.$(WARNS_EXT)})
+TOOL_WARNS := $(addprefix $(BUILD_DIR)/, ${TOOL_SRCS:.cpp=.o.$(WARNS_EXT)})
+EXAMPLE_WARNS := $(addprefix $(BUILD_DIR)/, ${EXAMPLE_SRCS:.cpp=.o.$(WARNS_EXT)})
+TEST_WARNS := $(addprefix $(BUILD_DIR)/, ${TEST_SRCS:.cpp=.o.$(WARNS_EXT)})
+TEST_CU_WARNS := $(addprefix $(BUILD_DIR)/cuda/, ${TEST_CU_SRCS:.cu=.o.$(WARNS_EXT)})
+ALL_CXX_WARNS := $(CXX_WARNS) $(TOOL_WARNS) $(EXAMPLE_WARNS) $(TEST_WARNS)
+ALL_CU_WARNS := $(CU_WARNS) $(TEST_CU_WARNS)
+ALL_WARNS := $(ALL_CXX_WARNS) $(ALL_CU_WARNS)
+
+EMPTY_WARN_REPORT := $(BUILD_DIR)/.$(WARNS_EXT)
+NONEMPTY_WARN_REPORT := $(BUILD_DIR)/$(WARNS_EXT)
+
+##############################
+# Derive include and lib directories
+##############################
+CUDA_INCLUDE_DIR := $(CUDA_DIR)/include
+
+CUDA_LIB_DIR :=
+# add /lib64 only if it exists
+ifneq ("$(wildcard $(CUDA_DIR)/lib64)","")
+ CUDA_LIB_DIR += $(CUDA_DIR)/lib64
+endif
+CUDA_LIB_DIR += $(CUDA_DIR)/lib
+
+INCLUDE_DIRS += $(BUILD_INCLUDE_DIR) ./src ./include
+ifneq ($(CPU_ONLY), 1)
+ INCLUDE_DIRS += $(CUDA_INCLUDE_DIR)
+ LIBRARY_DIRS += $(CUDA_LIB_DIR)
+ LIBRARIES := cudart cublas curand
+endif
+
+LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
+
+# handle IO dependencies
+USE_LEVELDB ?= 1
+USE_LMDB ?= 1
+USE_OPENCV ?= 1
+
+ifeq ($(USE_LEVELDB), 1)
+ LIBRARIES += leveldb snappy
+endif
+ifeq ($(USE_LMDB), 1)
+ LIBRARIES += lmdb
+endif
+ifeq ($(USE_OPENCV), 1)
+ LIBRARIES += opencv_core opencv_highgui opencv_imgproc
+
+ ifeq ($(OPENCV_VERSION), 3)
+ LIBRARIES += opencv_imgcodecs
+ endif
+
+endif
+PYTHON_LIBRARIES ?= boost_python python2.7
+WARNINGS := -Wall -Wno-sign-compare
+
+##############################
+# Set build directories
+##############################
+
+DISTRIBUTE_DIR ?= distribute
+DISTRIBUTE_SUBDIRS := $(DISTRIBUTE_DIR)/bin $(DISTRIBUTE_DIR)/lib
+DIST_ALIASES := dist
+ifneq ($(strip $(DISTRIBUTE_DIR)),distribute)
+ DIST_ALIASES += distribute
+endif
+
+ALL_BUILD_DIRS := $(sort $(BUILD_DIR) $(addprefix $(BUILD_DIR)/, $(SRC_DIRS)) \
+ $(addprefix $(BUILD_DIR)/cuda/, $(SRC_DIRS)) \
+ $(LIB_BUILD_DIR) $(TEST_BIN_DIR) $(PY_PROTO_BUILD_DIR) $(LINT_OUTPUT_DIR) \
+ $(DISTRIBUTE_SUBDIRS) $(PROTO_BUILD_INCLUDE_DIR))
+
+##############################
+# Set directory for Doxygen-generated documentation
+##############################
+DOXYGEN_CONFIG_FILE ?= ./.Doxyfile
+# should be the same as OUTPUT_DIRECTORY in the .Doxyfile
+DOXYGEN_OUTPUT_DIR ?= ./doxygen
+DOXYGEN_COMMAND ?= doxygen
+# All the files that might have Doxygen documentation.
+DOXYGEN_SOURCES := $(shell find \
+ src/$(PROJECT) \
+ include/$(PROJECT) \
+ python/ \
+ matlab/ \
+ examples \
+ tools \
+ -name "*.cpp" -or -name "*.hpp" -or -name "*.cu" -or -name "*.cuh" -or \
+ -name "*.py" -or -name "*.m")
+DOXYGEN_SOURCES += $(DOXYGEN_CONFIG_FILE)
+
+
+##############################
+# Configure build
+##############################
+
+# Determine platform
+UNAME := $(shell uname -s)
+ifeq ($(UNAME), Linux)
+ LINUX := 1
+else ifeq ($(UNAME), Darwin)
+ OSX := 1
+ OSX_MAJOR_VERSION := $(shell sw_vers -productVersion | cut -f 1 -d .)
+ OSX_MINOR_VERSION := $(shell sw_vers -productVersion | cut -f 2 -d .)
+endif
+
+# Linux
+ifeq ($(LINUX), 1)
+ CXX ?= /usr/bin/g++
+ GCCVERSION := $(shell $(CXX) -dumpversion | cut -f1,2 -d.)
+ # older versions of gcc are too dumb to build boost with -Wuninitalized
+ ifeq ($(shell echo | awk '{exit $(GCCVERSION) < 4.6;}'), 1)
+ WARNINGS += -Wno-uninitialized
+ endif
+ # boost::thread is reasonably called boost_thread (compare OS X)
+ # We will also explicitly add stdc++ to the link target.
+ LIBRARIES += boost_thread stdc++
+ VERSIONFLAGS += -Wl,-soname,$(DYNAMIC_VERSIONED_NAME_SHORT) -Wl,-rpath,$(ORIGIN)/../lib
+endif
+
+# OS X:
+# clang++ instead of g++
+# libstdc++ for NVCC compatibility on OS X >= 10.9 with CUDA < 7.0
+ifeq ($(OSX), 1)
+ CXX := /usr/bin/clang++
+ ifneq ($(CPU_ONLY), 1)
+ CUDA_VERSION := $(shell $(CUDA_DIR)/bin/nvcc -V | grep -o 'release [0-9.]*' | tr -d '[a-z ]')
+ ifeq ($(shell echo | awk '{exit $(CUDA_VERSION) < 7.0;}'), 1)
+ CXXFLAGS += -stdlib=libstdc++
+ LINKFLAGS += -stdlib=libstdc++
+ endif
+ # clang throws this warning for cuda headers
+ WARNINGS += -Wno-unneeded-internal-declaration
+ # 10.11 strips DYLD_* env vars so link CUDA (rpath is available on 10.5+)
+ OSX_10_OR_LATER := $(shell [ $(OSX_MAJOR_VERSION) -ge 10 ] && echo true)
+ OSX_10_5_OR_LATER := $(shell [ $(OSX_MINOR_VERSION) -ge 5 ] && echo true)
+ ifeq ($(OSX_10_OR_LATER),true)
+ ifeq ($(OSX_10_5_OR_LATER),true)
+ LDFLAGS += -Wl,-rpath,$(CUDA_LIB_DIR)
+ endif
+ endif
+ endif
+ # gtest needs to use its own tuple to not conflict with clang
+ COMMON_FLAGS += -DGTEST_USE_OWN_TR1_TUPLE=1
+ # boost::thread is called boost_thread-mt to mark multithreading on OS X
+ LIBRARIES += boost_thread-mt
+ # we need to explicitly ask for the rpath to be obeyed
+ ORIGIN := @loader_path
+ VERSIONFLAGS += -Wl,-install_name,@rpath/$(DYNAMIC_VERSIONED_NAME_SHORT) -Wl,-rpath,$(ORIGIN)/../../build/lib
+else
+ ORIGIN := \$$ORIGIN
+endif
+
+# Custom compiler
+ifdef CUSTOM_CXX
+ CXX := $(CUSTOM_CXX)
+endif
+
+# Static linking
+ifneq (,$(findstring clang++,$(CXX)))
+ STATIC_LINK_COMMAND := -Wl,-force_load $(STATIC_NAME)
+else ifneq (,$(findstring g++,$(CXX)))
+ STATIC_LINK_COMMAND := -Wl,--whole-archive $(STATIC_NAME) -Wl,--no-whole-archive
+else
+ # The following line must not be indented with a tab, since we are not inside a target
+ $(error Cannot static link with the $(CXX) compiler)
+endif
+
+# Debugging
+ifeq ($(DEBUG), 1)
+ COMMON_FLAGS += -DDEBUG -g -O0
+ NVCCFLAGS += -G
+else
+ COMMON_FLAGS += -DNDEBUG -O2
+endif
+
+# cuDNN acceleration configuration.
+ifeq ($(USE_CUDNN), 1)
+ LIBRARIES += cudnn
+ COMMON_FLAGS += -DUSE_CUDNN
+endif
+
+# NCCL acceleration configuration
+ifeq ($(USE_NCCL), 1)
+ LIBRARIES += nccl
+ COMMON_FLAGS += -DUSE_NCCL
+endif
+
+# configure IO libraries
+ifeq ($(USE_OPENCV), 1)
+ COMMON_FLAGS += -DUSE_OPENCV
+endif
+ifeq ($(USE_LEVELDB), 1)
+ COMMON_FLAGS += -DUSE_LEVELDB
+endif
+ifeq ($(USE_LMDB), 1)
+ COMMON_FLAGS += -DUSE_LMDB
+ifeq ($(ALLOW_LMDB_NOLOCK), 1)
+ COMMON_FLAGS += -DALLOW_LMDB_NOLOCK
+endif
+endif
+
+# CPU-only configuration
+ifeq ($(CPU_ONLY), 1)
+ OBJS := $(PROTO_OBJS) $(CXX_OBJS)
+ TEST_OBJS := $(TEST_CXX_OBJS)
+ TEST_BINS := $(TEST_CXX_BINS)
+ ALL_WARNS := $(ALL_CXX_WARNS)
+ TEST_FILTER := --gtest_filter="-*GPU*"
+ COMMON_FLAGS += -DCPU_ONLY
+endif
+
+# Python layer support
+ifeq ($(WITH_PYTHON_LAYER), 1)
+ COMMON_FLAGS += -DWITH_PYTHON_LAYER
+ LIBRARIES += $(PYTHON_LIBRARIES)
+endif
+
+# BLAS configuration (default = ATLAS)
+BLAS ?= atlas
+ifeq ($(BLAS), mkl)
+ # MKL
+ LIBRARIES += mkl_rt
+ COMMON_FLAGS += -DUSE_MKL
+ MKLROOT ?= /opt/intel/mkl
+ BLAS_INCLUDE ?= $(MKLROOT)/include
+ BLAS_LIB ?= $(MKLROOT)/lib $(MKLROOT)/lib/intel64
+else ifeq ($(BLAS), open)
+ # OpenBLAS
+ LIBRARIES += openblas
+else
+ # ATLAS
+ ifeq ($(LINUX), 1)
+ ifeq ($(BLAS), atlas)
+ # Linux simply has cblas and atlas
+ LIBRARIES += cblas atlas
+ endif
+ else ifeq ($(OSX), 1)
+ # OS X packages atlas as the vecLib framework
+ LIBRARIES += cblas
+ # 10.10 has accelerate while 10.9 has veclib
+ XCODE_CLT_VER := $(shell pkgutil --pkg-info=com.apple.pkg.CLTools_Executables | grep 'version' | sed 's/[^0-9]*\([0-9]\).*/\1/')
+ XCODE_CLT_GEQ_7 := $(shell [ $(XCODE_CLT_VER) -gt 6 ] && echo 1)
+ XCODE_CLT_GEQ_6 := $(shell [ $(XCODE_CLT_VER) -gt 5 ] && echo 1)
+ ifeq ($(XCODE_CLT_GEQ_7), 1)
+ BLAS_INCLUDE ?= /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/$(shell ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ | sort | tail -1)/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/Headers
+ else ifeq ($(XCODE_CLT_GEQ_6), 1)
+ BLAS_INCLUDE ?= /System/Library/Frameworks/Accelerate.framework/Versions/Current/Frameworks/vecLib.framework/Headers/
+ LDFLAGS += -framework Accelerate
+ else
+ BLAS_INCLUDE ?= /System/Library/Frameworks/vecLib.framework/Versions/Current/Headers/
+ LDFLAGS += -framework vecLib
+ endif
+ endif
+endif
+INCLUDE_DIRS += $(BLAS_INCLUDE)
+LIBRARY_DIRS += $(BLAS_LIB)
+
+LIBRARY_DIRS += $(LIB_BUILD_DIR)
+
+# Automatic dependency generation (nvcc is handled separately)
+CXXFLAGS += -MMD -MP
+
+# Complete build flags.
+COMMON_FLAGS += $(foreach includedir,$(INCLUDE_DIRS),-I$(includedir))
+CXXFLAGS += -pthread -fPIC $(COMMON_FLAGS) $(WARNINGS)
+NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
+# mex may invoke an older gcc that is too liberal with -Wuninitalized
+MATLAB_CXXFLAGS := $(CXXFLAGS) -Wno-uninitialized
+LINKFLAGS += -pthread -fPIC $(COMMON_FLAGS) $(WARNINGS)
+
+USE_PKG_CONFIG ?= 0
+ifeq ($(USE_PKG_CONFIG), 1)
+ PKG_CONFIG := $(shell pkg-config opencv --libs)
+else
+ PKG_CONFIG :=
+endif
+LDFLAGS += $(foreach librarydir,$(LIBRARY_DIRS),-L$(librarydir)) $(PKG_CONFIG) \
+ $(foreach library,$(LIBRARIES),-l$(library))
+PYTHON_LDFLAGS := $(LDFLAGS) $(foreach library,$(PYTHON_LIBRARIES),-l$(library))
+
+# 'superclean' target recursively* deletes all files ending with an extension
+# in $(SUPERCLEAN_EXTS) below. This may be useful if you've built older
+# versions of Caffe that do not place all generated files in a location known
+# to the 'clean' target.
+#
+# 'supercleanlist' will list the files to be deleted by make superclean.
+#
+# * Recursive with the exception that symbolic links are never followed, per the
+# default behavior of 'find'.
+SUPERCLEAN_EXTS := .so .a .o .bin .testbin .pb.cc .pb.h _pb2.py .cuo
+
+# Set the sub-targets of the 'everything' target.
+EVERYTHING_TARGETS := all py$(PROJECT) test warn lint
+# Only build matcaffe as part of "everything" if MATLAB_DIR is specified.
+ifneq ($(MATLAB_DIR),)
+ EVERYTHING_TARGETS += mat$(PROJECT)
+endif
+
+##############################
+# Define build targets
+##############################
+.PHONY: all lib test clean docs linecount lint lintclean tools examples $(DIST_ALIASES) \
+ py mat py$(PROJECT) mat$(PROJECT) proto runtest \
+ superclean supercleanlist supercleanfiles warn everything
+
+all: lib tools examples
+
+lib: $(STATIC_NAME) $(DYNAMIC_NAME)
+
+everything: $(EVERYTHING_TARGETS)
+
+linecount:
+ cloc --read-lang-def=$(PROJECT).cloc \
+ src/$(PROJECT) include/$(PROJECT) tools examples \
+ python matlab
+
+lint: $(EMPTY_LINT_REPORT)
+
+lintclean:
+ @ $(RM) -r $(LINT_OUTPUT_DIR) $(EMPTY_LINT_REPORT) $(NONEMPTY_LINT_REPORT)
+
+docs: $(DOXYGEN_OUTPUT_DIR)
+ @ cd ./docs ; ln -sfn ../$(DOXYGEN_OUTPUT_DIR)/html doxygen
+
+$(DOXYGEN_OUTPUT_DIR): $(DOXYGEN_CONFIG_FILE) $(DOXYGEN_SOURCES)
+ $(DOXYGEN_COMMAND) $(DOXYGEN_CONFIG_FILE)
+
+$(EMPTY_LINT_REPORT): $(LINT_OUTPUTS) | $(BUILD_DIR)
+ @ cat $(LINT_OUTPUTS) > $@
+ @ if [ -s "$@" ]; then \
+ cat $@; \
+ mv $@ $(NONEMPTY_LINT_REPORT); \
+ echo "Found one or more lint errors."; \
+ exit 1; \
+ fi; \
+ $(RM) $(NONEMPTY_LINT_REPORT); \
+ echo "No lint errors!";
+
+$(LINT_OUTPUTS): $(LINT_OUTPUT_DIR)/%.lint.txt : % $(LINT_SCRIPT) | $(LINT_OUTPUT_DIR)
+ @ mkdir -p $(dir $@)
+ @ python $(LINT_SCRIPT) $< 2>&1 \
+ | grep -v "^Done processing " \
+ | grep -v "^Total errors found: 0" \
+ > $@ \
+ || true
+
+test: $(TEST_ALL_BIN) $(TEST_ALL_DYNLINK_BIN) $(TEST_BINS)
+
+tools: $(TOOL_BINS) $(TOOL_BIN_LINKS)
+
+examples: $(EXAMPLE_BINS)
+
+py$(PROJECT): py
+
+py: $(PY$(PROJECT)_SO) $(PROTO_GEN_PY)
+
+$(PY$(PROJECT)_SO): $(PY$(PROJECT)_SRC) $(PY$(PROJECT)_HXX) | $(DYNAMIC_NAME)
+ @ echo CXX/LD -o $@ $<
+ $(Q)$(CXX) -shared -o $@ $(PY$(PROJECT)_SRC) \
+ -o $@ $(LINKFLAGS) -l$(LIBRARY_NAME) $(PYTHON_LDFLAGS) \
+ -Wl,-rpath,$(ORIGIN)/../../build/lib
+
+mat$(PROJECT): mat
+
+mat: $(MAT$(PROJECT)_SO)
+
+$(MAT$(PROJECT)_SO): $(MAT$(PROJECT)_SRC) $(STATIC_NAME)
+ @ if [ -z "$(MATLAB_DIR)" ]; then \
+ echo "MATLAB_DIR must be specified in $(CONFIG_FILE)" \
+ "to build mat$(PROJECT)."; \
+ exit 1; \
+ fi
+ @ echo MEX $<
+ $(Q)$(MATLAB_DIR)/bin/mex $(MAT$(PROJECT)_SRC) \
+ CXX="$(CXX)" \
+ CXXFLAGS="\$$CXXFLAGS $(MATLAB_CXXFLAGS)" \
+ CXXLIBS="\$$CXXLIBS $(STATIC_LINK_COMMAND) $(LDFLAGS)" -output $@
+ @ if [ -f "$(PROJECT)_.d" ]; then \
+ mv -f $(PROJECT)_.d $(BUILD_DIR)/${MAT$(PROJECT)_SO:.$(MAT_SO_EXT)=.d}; \
+ fi
+
+runtest: $(TEST_ALL_BIN)
+ $(TOOL_BUILD_DIR)/caffe
+ $(TEST_ALL_BIN) $(TEST_GPUID) --gtest_shuffle $(TEST_FILTER)
+
+pytest: py
+ cd python; python -m unittest discover -s caffe/test
+
+mattest: mat
+ cd matlab; $(MATLAB_DIR)/bin/matlab -nodisplay -r 'caffe.run_tests(), exit()'
+
+warn: $(EMPTY_WARN_REPORT)
+
+$(EMPTY_WARN_REPORT): $(ALL_WARNS) | $(BUILD_DIR)
+ @ cat $(ALL_WARNS) > $@
+ @ if [ -s "$@" ]; then \
+ cat $@; \
+ mv $@ $(NONEMPTY_WARN_REPORT); \
+ echo "Compiler produced one or more warnings."; \
+ exit 1; \
+ fi; \
+ $(RM) $(NONEMPTY_WARN_REPORT); \
+ echo "No compiler warnings!";
+
+$(ALL_WARNS): %.o.$(WARNS_EXT) : %.o
+
+$(BUILD_DIR_LINK): $(BUILD_DIR)/.linked
+
+# Create a target ".linked" in this BUILD_DIR to tell Make that the "build" link
+# is currently correct, then delete the one in the OTHER_BUILD_DIR in case it
+# exists and $(DEBUG) is toggled later.
+$(BUILD_DIR)/.linked:
+ @ mkdir -p $(BUILD_DIR)
+ @ $(RM) $(OTHER_BUILD_DIR)/.linked
+ @ $(RM) -r $(BUILD_DIR_LINK)
+ @ ln -s $(BUILD_DIR) $(BUILD_DIR_LINK)
+ @ touch $@
+
+$(ALL_BUILD_DIRS): | $(BUILD_DIR_LINK)
+ @ mkdir -p $@
+
+$(DYNAMIC_NAME): $(OBJS) | $(LIB_BUILD_DIR)
+ @ echo LD -o $@
+ $(Q)$(CXX) -shared -o $@ $(OBJS) $(VERSIONFLAGS) $(LINKFLAGS) $(LDFLAGS)
+ @ cd $(BUILD_DIR)/lib; rm -f $(DYNAMIC_NAME_SHORT); ln -s $(DYNAMIC_VERSIONED_NAME_SHORT) $(DYNAMIC_NAME_SHORT)
+
+$(STATIC_NAME): $(OBJS) | $(LIB_BUILD_DIR)
+ @ echo AR -o $@
+ $(Q)ar rcs $@ $(OBJS)
+
+$(BUILD_DIR)/%.o: %.cpp | $(ALL_BUILD_DIRS)
+ @ echo CXX $<
+ $(Q)$(CXX) $< $(CXXFLAGS) -c -o $@ 2> $@.$(WARNS_EXT) \
+ || (cat $@.$(WARNS_EXT); exit 1)
+ @ cat $@.$(WARNS_EXT)
+
+$(PROTO_BUILD_DIR)/%.pb.o: $(PROTO_BUILD_DIR)/%.pb.cc $(PROTO_GEN_HEADER) \
+ | $(PROTO_BUILD_DIR)
+ @ echo CXX $<
+ $(Q)$(CXX) $< $(CXXFLAGS) -c -o $@ 2> $@.$(WARNS_EXT) \
+ || (cat $@.$(WARNS_EXT); exit 1)
+ @ cat $@.$(WARNS_EXT)
+
+$(BUILD_DIR)/cuda/%.o: %.cu | $(ALL_BUILD_DIRS)
+ @ echo NVCC $<
+ $(Q)$(CUDA_DIR)/bin/nvcc $(NVCCFLAGS) $(CUDA_ARCH) -M $< -o ${@:.o=.d} \
+ -odir $(@D)
+ $(Q)$(CUDA_DIR)/bin/nvcc $(NVCCFLAGS) $(CUDA_ARCH) -c $< -o $@ 2> $@.$(WARNS_EXT) \
+ || (cat $@.$(WARNS_EXT); exit 1)
+ @ cat $@.$(WARNS_EXT)
+
+$(TEST_ALL_BIN): $(TEST_MAIN_SRC) $(TEST_OBJS) $(GTEST_OBJ) \
+ | $(DYNAMIC_NAME) $(TEST_BIN_DIR)
+ @ echo CXX/LD -o $@ $<
+ $(Q)$(CXX) $(TEST_MAIN_SRC) $(TEST_OBJS) $(GTEST_OBJ) \
+ -o $@ $(LINKFLAGS) $(LDFLAGS) -l$(LIBRARY_NAME) -Wl,-rpath,$(ORIGIN)/../lib
+
+$(TEST_CU_BINS): $(TEST_BIN_DIR)/%.testbin: $(TEST_CU_BUILD_DIR)/%.o \
+ $(GTEST_OBJ) | $(DYNAMIC_NAME) $(TEST_BIN_DIR)
+ @ echo LD $<
+ $(Q)$(CXX) $(TEST_MAIN_SRC) $< $(GTEST_OBJ) \
+ -o $@ $(LINKFLAGS) $(LDFLAGS) -l$(LIBRARY_NAME) -Wl,-rpath,$(ORIGIN)/../lib
+
+$(TEST_CXX_BINS): $(TEST_BIN_DIR)/%.testbin: $(TEST_CXX_BUILD_DIR)/%.o \
+ $(GTEST_OBJ) | $(DYNAMIC_NAME) $(TEST_BIN_DIR)
+ @ echo LD $<
+ $(Q)$(CXX) $(TEST_MAIN_SRC) $< $(GTEST_OBJ) \
+ -o $@ $(LINKFLAGS) $(LDFLAGS) -l$(LIBRARY_NAME) -Wl,-rpath,$(ORIGIN)/../lib
+
+# Target for extension-less symlinks to tool binaries with extension '*.bin'.
+$(TOOL_BUILD_DIR)/%: $(TOOL_BUILD_DIR)/%.bin | $(TOOL_BUILD_DIR)
+ @ $(RM) $@
+ @ ln -s $(notdir $<) $@
+
+$(TOOL_BINS): %.bin : %.o | $(DYNAMIC_NAME)
+ @ echo CXX/LD -o $@
+ $(Q)$(CXX) $< -o $@ $(LINKFLAGS) -l$(LIBRARY_NAME) $(LDFLAGS) \
+ -Wl,-rpath,$(ORIGIN)/../lib
+
+$(EXAMPLE_BINS): %.bin : %.o | $(DYNAMIC_NAME)
+ @ echo CXX/LD -o $@
+ $(Q)$(CXX) $< -o $@ $(LINKFLAGS) -l$(LIBRARY_NAME) $(LDFLAGS) \
+ -Wl,-rpath,$(ORIGIN)/../../lib
+
+proto: $(PROTO_GEN_CC) $(PROTO_GEN_HEADER)
+
+$(PROTO_BUILD_DIR)/%.pb.cc $(PROTO_BUILD_DIR)/%.pb.h : \
+ $(PROTO_SRC_DIR)/%.proto | $(PROTO_BUILD_DIR)
+ @ echo PROTOC $<
+ $(Q)protoc --proto_path=$(PROTO_SRC_DIR) --cpp_out=$(PROTO_BUILD_DIR) $<
+
+$(PY_PROTO_BUILD_DIR)/%_pb2.py : $(PROTO_SRC_DIR)/%.proto \
+ $(PY_PROTO_INIT) | $(PY_PROTO_BUILD_DIR)
+ @ echo PROTOC \(python\) $<
+ $(Q)protoc --proto_path=$(PROTO_SRC_DIR) --python_out=$(PY_PROTO_BUILD_DIR) $<
+
+$(PY_PROTO_INIT): | $(PY_PROTO_BUILD_DIR)
+ touch $(PY_PROTO_INIT)
+
+clean:
+ @- $(RM) -rf $(ALL_BUILD_DIRS)
+ @- $(RM) -rf $(OTHER_BUILD_DIR)
+ @- $(RM) -rf $(BUILD_DIR_LINK)
+ @- $(RM) -rf $(DISTRIBUTE_DIR)
+ @- $(RM) $(PY$(PROJECT)_SO)
+ @- $(RM) $(MAT$(PROJECT)_SO)
+
+supercleanfiles:
+ $(eval SUPERCLEAN_FILES := $(strip \
+ $(foreach ext,$(SUPERCLEAN_EXTS), $(shell find . -name '*$(ext)' \
+ -not -path './data/*'))))
+
+supercleanlist: supercleanfiles
+ @ \
+ if [ -z "$(SUPERCLEAN_FILES)" ]; then \
+ echo "No generated files found."; \
+ else \
+ echo $(SUPERCLEAN_FILES) | tr ' ' '\n'; \
+ fi
+
+superclean: clean supercleanfiles
+ @ \
+ if [ -z "$(SUPERCLEAN_FILES)" ]; then \
+ echo "No generated files found."; \
+ else \
+ echo "Deleting the following generated files:"; \
+ echo $(SUPERCLEAN_FILES) | tr ' ' '\n'; \
+ $(RM) $(SUPERCLEAN_FILES); \
+ fi
+
+$(DIST_ALIASES): $(DISTRIBUTE_DIR)
+
+$(DISTRIBUTE_DIR): all py | $(DISTRIBUTE_SUBDIRS)
+ # add proto
+ cp -r src/caffe/proto $(DISTRIBUTE_DIR)/
+ # add include
+ cp -r include $(DISTRIBUTE_DIR)/
+ mkdir -p $(DISTRIBUTE_DIR)/include/caffe/proto
+ cp $(PROTO_GEN_HEADER_SRCS) $(DISTRIBUTE_DIR)/include/caffe/proto
+ # add tool and example binaries
+ cp $(TOOL_BINS) $(DISTRIBUTE_DIR)/bin
+ cp $(EXAMPLE_BINS) $(DISTRIBUTE_DIR)/bin
+ # add libraries
+ cp $(STATIC_NAME) $(DISTRIBUTE_DIR)/lib
+ install -m 644 $(DYNAMIC_NAME) $(DISTRIBUTE_DIR)/lib
+ cd $(DISTRIBUTE_DIR)/lib; rm -f $(DYNAMIC_NAME_SHORT); ln -s $(DYNAMIC_VERSIONED_NAME_SHORT) $(DYNAMIC_NAME_SHORT)
+ # add python - it's not the standard way, indeed...
+ cp -r python $(DISTRIBUTE_DIR)/python
+
+-include $(DEPS)
diff --git a/3rdparty/caffe/Makefile.config.Ubuntu14.example b/3rdparty/caffe/Makefile.config.Ubuntu14.example
new file mode 100644
index 00000000..3ef35aad
--- /dev/null
+++ b/3rdparty/caffe/Makefile.config.Ubuntu14.example
@@ -0,0 +1,128 @@
+## Refer to http://caffe.berkeleyvision.org/installation.html
+# Contributions simplifying and improving our build system are welcome!
+
+# cuDNN acceleration switch (uncomment to build with cuDNN).
+USE_CUDNN := 1
+
+# CPU-only switch (uncomment to build without GPU support).
+# CPU_ONLY := 1
+
+# uncomment to disable IO dependencies and corresponding data layers
+# USE_OPENCV := 0
+# USE_LEVELDB := 0
+# USE_LMDB := 0
+
+# uncomment to allow MDB_NOLOCK when reading LMDB files (only if necessary)
+# You should not set this flag if you will be reading LMDBs with any
+# possibility of simultaneous read and write
+# ALLOW_LMDB_NOLOCK := 1
+
+# Uncomment if you're using OpenCV 3
+# OPENCV_VERSION := 3
+
+# To customize your choice of compiler, uncomment and set the following.
+# N.B. the default for Linux is g++ and the default for OSX is clang++
+# CUSTOM_CXX := g++
+
+# CUDA directory contains bin/ and lib/ directories that we need.
+CUDA_DIR := /usr/local/cuda
+# On Ubuntu 14.04, if cuda tools are installed via
+# "sudo apt-get install nvidia-cuda-toolkit" then use this instead:
+# CUDA_DIR := /usr
+
+# CUDA architecture setting: going with all of them.
+# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
+# For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.
+CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
+ -gencode arch=compute_35,code=sm_35 \
+ -gencode arch=compute_50,code=sm_50 \
+ -gencode arch=compute_52,code=sm_52 \
+ -gencode arch=compute_60,code=sm_60 \
+ -gencode arch=compute_61,code=sm_61 \
+ -gencode arch=compute_61,code=compute_61
+# Deprecated
+# CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
+# -gencode arch=compute_20,code=sm_21 \
+# -gencode arch=compute_30,code=sm_30 \
+# -gencode arch=compute_35,code=sm_35 \
+# -gencode arch=compute_50,code=sm_50 \
+# -gencode arch=compute_52,code=sm_52 \
+# -gencode arch=compute_60,code=sm_60 \
+# -gencode arch=compute_61,code=sm_61 \
+# -gencode arch=compute_61,code=compute_61
+
+# BLAS choice:
+# atlas for ATLAS (default)
+# mkl for MKL
+# open for OpenBlas
+BLAS := atlas
+# Custom (MKL/ATLAS/OpenBLAS) include and lib directories.
+# Leave commented to accept the defaults for your choice of BLAS
+# (which should work)!
+# BLAS_INCLUDE := /path/to/your/blas
+# BLAS_LIB := /path/to/your/blas
+
+# Homebrew puts openblas in a directory that is not on the standard search path
+# BLAS_INCLUDE := $(shell brew --prefix openblas)/include
+# BLAS_LIB := $(shell brew --prefix openblas)/lib
+
+# This is required only if you will compile the matlab interface.
+# MATLAB directory should contain the mex binary in /bin.
+# MATLAB_DIR := /usr/local
+# MATLAB_DIR := /Applications/MATLAB_R2012b.app
+
+# NOTE: this is required only if you will compile the python interface.
+# We need to be able to find Python.h and numpy/arrayobject.h.
+PYTHON_INCLUDE := /usr/include/python2.7 \
+ /usr/lib/python2.7/dist-packages/numpy/core/include
+# Anaconda Python distribution is quite popular. Include path:
+# Verify anaconda location, sometimes it's in root.
+# ANACONDA_HOME := $(HOME)/anaconda
+# PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
+ # $(ANACONDA_HOME)/include/python2.7 \
+ # $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include
+
+# Uncomment to use Python 3 (default is Python 2)
+# PYTHON_LIBRARIES := boost_python3 python3.5m
+# PYTHON_INCLUDE := /usr/include/python3.5m \
+# /usr/lib/python3.5/dist-packages/numpy/core/include
+
+# We need to be able to find libpythonX.X.so or .dylib.
+PYTHON_LIB := /usr/lib /usr/local/lib
+# PYTHON_LIB := $(ANACONDA_HOME)/lib
+
+# Homebrew installs numpy in a non standard path (keg only)
+# PYTHON_INCLUDE += $(dir $(shell python -c 'import numpy.core; print(numpy.core.__file__)'))/include
+# PYTHON_LIB += $(shell brew --prefix numpy)/lib
+
+# Uncomment to support layers written in Python (will link against Python libs)
+# WITH_PYTHON_LAYER := 1
+
+# Whatever else you find you need goes here.
+INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
+LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
+
+# If Homebrew is installed at a non standard location (for example your home directory) and you use it for general dependencies
+# INCLUDE_DIRS += $(shell brew --prefix)/include
+# LIBRARY_DIRS += $(shell brew --prefix)/lib
+
+# NCCL acceleration switch (uncomment to build with NCCL)
+# https://github.com/NVIDIA/nccl (last tested version: v1.2.3-1+cuda8.0)
+# USE_NCCL := 1
+
+# Uncomment to use `pkg-config` to specify OpenCV library paths.
+# (Usually not necessary -- OpenCV libraries are normally installed in one of the above $LIBRARY_DIRS.)
+# USE_PKG_CONFIG := 1
+
+# N.B. both build and distribute dirs are cleared on `make clean`
+BUILD_DIR := build
+DISTRIBUTE_DIR := distribute
+
+# Uncomment for debugging. Does not work on OSX due to https://github.com/BVLC/caffe/issues/171
+# DEBUG := 1
+
+# The ID of the GPU that 'make runtest' will use to run unit tests.
+TEST_GPUID := 0
+
+# enable pretty build (comment to see full commands)
+Q ?= @
diff --git a/3rdparty/caffe/Makefile.config.Ubuntu14_cuda_7.example b/3rdparty/caffe/Makefile.config.Ubuntu14_cuda_7.example
new file mode 100644
index 00000000..224dfbc1
--- /dev/null
+++ b/3rdparty/caffe/Makefile.config.Ubuntu14_cuda_7.example
@@ -0,0 +1,125 @@
+## Refer to http://caffe.berkeleyvision.org/installation.html
+# Contributions simplifying and improving our build system are welcome!
+
+# cuDNN acceleration switch (uncomment to build with cuDNN).
+USE_CUDNN := 1
+
+# CPU-only switch (uncomment to build without GPU support).
+# CPU_ONLY := 1
+
+# uncomment to disable IO dependencies and corresponding data layers
+# USE_OPENCV := 0
+# USE_LEVELDB := 0
+# USE_LMDB := 0
+
+# uncomment to allow MDB_NOLOCK when reading LMDB files (only if necessary)
+# You should not set this flag if you will be reading LMDBs with any
+# possibility of simultaneous read and write
+# ALLOW_LMDB_NOLOCK := 1
+
+# Uncomment if you're using OpenCV 3
+# OPENCV_VERSION := 3
+
+# To customize your choice of compiler, uncomment and set the following.
+# N.B. the default for Linux is g++ and the default for OSX is clang++
+# CUSTOM_CXX := g++
+
+# CUDA directory contains bin/ and lib/ directories that we need.
+CUDA_DIR := /usr/local/cuda
+# On Ubuntu 14.04, if cuda tools are installed via
+# "sudo apt-get install nvidia-cuda-toolkit" then use this instead:
+# CUDA_DIR := /usr
+
+# CUDA architecture setting: going with all of them.
+# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
+# For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.
+CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
+ -gencode arch=compute_35,code=sm_35 \
+ -gencode arch=compute_50,code=sm_50 \
+ -gencode arch=compute_52,code=sm_52
+# Deprecated
+# CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
+# -gencode arch=compute_20,code=sm_21 \
+# -gencode arch=compute_30,code=sm_30 \
+# -gencode arch=compute_35,code=sm_35 \
+# -gencode arch=compute_50,code=sm_50 \
+# -gencode arch=compute_52,code=sm_52 \
+# -gencode arch=compute_60,code=sm_60 \
+# -gencode arch=compute_61,code=sm_61 \
+# -gencode arch=compute_61,code=compute_61
+
+# BLAS choice:
+# atlas for ATLAS (default)
+# mkl for MKL
+# open for OpenBlas
+BLAS := atlas
+# Custom (MKL/ATLAS/OpenBLAS) include and lib directories.
+# Leave commented to accept the defaults for your choice of BLAS
+# (which should work)!
+# BLAS_INCLUDE := /path/to/your/blas
+# BLAS_LIB := /path/to/your/blas
+
+# Homebrew puts openblas in a directory that is not on the standard search path
+# BLAS_INCLUDE := $(shell brew --prefix openblas)/include
+# BLAS_LIB := $(shell brew --prefix openblas)/lib
+
+# This is required only if you will compile the matlab interface.
+# MATLAB directory should contain the mex binary in /bin.
+# MATLAB_DIR := /usr/local
+# MATLAB_DIR := /Applications/MATLAB_R2012b.app
+
+# NOTE: this is required only if you will compile the python interface.
+# We need to be able to find Python.h and numpy/arrayobject.h.
+PYTHON_INCLUDE := /usr/include/python2.7 \
+ /usr/lib/python2.7/dist-packages/numpy/core/include
+# Anaconda Python distribution is quite popular. Include path:
+# Verify anaconda location, sometimes it's in root.
+# ANACONDA_HOME := $(HOME)/anaconda
+# PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
+ # $(ANACONDA_HOME)/include/python2.7 \
+ # $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include
+
+# Uncomment to use Python 3 (default is Python 2)
+# PYTHON_LIBRARIES := boost_python3 python3.5m
+# PYTHON_INCLUDE := /usr/include/python3.5m \
+# /usr/lib/python3.5/dist-packages/numpy/core/include
+
+# We need to be able to find libpythonX.X.so or .dylib.
+PYTHON_LIB := /usr/lib /usr/local/lib
+# PYTHON_LIB := $(ANACONDA_HOME)/lib
+
+# Homebrew installs numpy in a non standard path (keg only)
+# PYTHON_INCLUDE += $(dir $(shell python -c 'import numpy.core; print(numpy.core.__file__)'))/include
+# PYTHON_LIB += $(shell brew --prefix numpy)/lib
+
+# Uncomment to support layers written in Python (will link against Python libs)
+# WITH_PYTHON_LAYER := 1
+
+# Whatever else you find you need goes here.
+INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
+LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
+
+# If Homebrew is installed at a non standard location (for example your home directory) and you use it for general dependencies
+# INCLUDE_DIRS += $(shell brew --prefix)/include
+# LIBRARY_DIRS += $(shell brew --prefix)/lib
+
+# NCCL acceleration switch (uncomment to build with NCCL)
+# https://github.com/NVIDIA/nccl (last tested version: v1.2.3-1+cuda8.0)
+# USE_NCCL := 1
+
+# Uncomment to use `pkg-config` to specify OpenCV library paths.
+# (Usually not necessary -- OpenCV libraries are normally installed in one of the above $LIBRARY_DIRS.)
+# USE_PKG_CONFIG := 1
+
+# N.B. both build and distribute dirs are cleared on `make clean`
+BUILD_DIR := build
+DISTRIBUTE_DIR := distribute
+
+# Uncomment for debugging. Does not work on OSX due to https://github.com/BVLC/caffe/issues/171
+# DEBUG := 1
+
+# The ID of the GPU that 'make runtest' will use to run unit tests.
+TEST_GPUID := 0
+
+# enable pretty build (comment to see full commands)
+Q ?= @
diff --git a/3rdparty/caffe/Makefile.config.Ubuntu16.example b/3rdparty/caffe/Makefile.config.Ubuntu16.example
new file mode 100644
index 00000000..fb923605
--- /dev/null
+++ b/3rdparty/caffe/Makefile.config.Ubuntu16.example
@@ -0,0 +1,128 @@
+## Refer to http://caffe.berkeleyvision.org/installation.html
+# Contributions simplifying and improving our build system are welcome!
+
+# cuDNN acceleration switch (uncomment to build with cuDNN).
+USE_CUDNN := 1
+
+# CPU-only switch (uncomment to build without GPU support).
+# CPU_ONLY := 1
+
+# uncomment to disable IO dependencies and corresponding data layers
+# USE_OPENCV := 0
+# USE_LEVELDB := 0
+# USE_LMDB := 0
+
+# uncomment to allow MDB_NOLOCK when reading LMDB files (only if necessary)
+# You should not set this flag if you will be reading LMDBs with any
+# possibility of simultaneous read and write
+# ALLOW_LMDB_NOLOCK := 1
+
+# Uncomment if you're using OpenCV 3
+# OPENCV_VERSION := 3
+
+# To customize your choice of compiler, uncomment and set the following.
+# N.B. the default for Linux is g++ and the default for OSX is clang++
+# CUSTOM_CXX := g++
+
+# CUDA directory contains bin/ and lib/ directories that we need.
+CUDA_DIR := /usr/local/cuda
+# On Ubuntu 14.04, if cuda tools are installed via
+# "sudo apt-get install nvidia-cuda-toolkit" then use this instead:
+# CUDA_DIR := /usr
+
+# CUDA architecture setting: going with all of them.
+# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
+# For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.
+CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
+ -gencode arch=compute_35,code=sm_35 \
+ -gencode arch=compute_50,code=sm_50 \
+ -gencode arch=compute_52,code=sm_52 \
+ -gencode arch=compute_60,code=sm_60 \
+ -gencode arch=compute_61,code=sm_61 \
+ -gencode arch=compute_61,code=compute_61
+# Deprecated
+# CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
+# -gencode arch=compute_20,code=sm_21 \
+# -gencode arch=compute_30,code=sm_30 \
+# -gencode arch=compute_35,code=sm_35 \
+# -gencode arch=compute_50,code=sm_50 \
+# -gencode arch=compute_52,code=sm_52 \
+# -gencode arch=compute_60,code=sm_60 \
+# -gencode arch=compute_61,code=sm_61 \
+# -gencode arch=compute_61,code=compute_61
+
+# BLAS choice:
+# atlas for ATLAS (default)
+# mkl for MKL
+# open for OpenBlas
+BLAS := atlas
+# Custom (MKL/ATLAS/OpenBLAS) include and lib directories.
+# Leave commented to accept the defaults for your choice of BLAS
+# (which should work)!
+# BLAS_INCLUDE := /path/to/your/blas
+# BLAS_LIB := /path/to/your/blas
+
+# Homebrew puts openblas in a directory that is not on the standard search path
+# BLAS_INCLUDE := $(shell brew --prefix openblas)/include
+# BLAS_LIB := $(shell brew --prefix openblas)/lib
+
+# This is required only if you will compile the matlab interface.
+# MATLAB directory should contain the mex binary in /bin.
+# MATLAB_DIR := /usr/local
+# MATLAB_DIR := /Applications/MATLAB_R2012b.app
+
+# NOTE: this is required only if you will compile the python interface.
+# We need to be able to find Python.h and numpy/arrayobject.h.
+PYTHON_INCLUDE := /usr/include/python2.7 \
+ /usr/lib/python2.7/dist-packages/numpy/core/include
+# Anaconda Python distribution is quite popular. Include path:
+# Verify anaconda location, sometimes it's in root.
+# ANACONDA_HOME := $(HOME)/anaconda
+# PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
+ # $(ANACONDA_HOME)/include/python2.7 \
+ # $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include
+
+# Uncomment to use Python 3 (default is Python 2)
+# PYTHON_LIBRARIES := boost_python3 python3.5m
+# PYTHON_INCLUDE := /usr/include/python3.5m \
+# /usr/lib/python3.5/dist-packages/numpy/core/include
+
+# We need to be able to find libpythonX.X.so or .dylib.
+PYTHON_LIB := /usr/lib /usr/local/lib
+# PYTHON_LIB := $(ANACONDA_HOME)/lib
+
+# Homebrew installs numpy in a non standard path (keg only)
+# PYTHON_INCLUDE += $(dir $(shell python -c 'import numpy.core; print(numpy.core.__file__)'))/include
+# PYTHON_LIB += $(shell brew --prefix numpy)/lib
+
+# Uncomment to support layers written in Python (will link against Python libs)
+# WITH_PYTHON_LAYER := 1
+
+# Whatever else you find you need goes here.
+INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
+LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
+
+# If Homebrew is installed at a non standard location (for example your home directory) and you use it for general dependencies
+# INCLUDE_DIRS += $(shell brew --prefix)/include
+# LIBRARY_DIRS += $(shell brew --prefix)/lib
+
+# NCCL acceleration switch (uncomment to build with NCCL)
+# https://github.com/NVIDIA/nccl (last tested version: v1.2.3-1+cuda8.0)
+# USE_NCCL := 1
+
+# Uncomment to use `pkg-config` to specify OpenCV library paths.
+# (Usually not necessary -- OpenCV libraries are normally installed in one of the above $LIBRARY_DIRS.)
+# USE_PKG_CONFIG := 1
+
+# N.B. both build and distribute dirs are cleared on `make clean`
+BUILD_DIR := build
+DISTRIBUTE_DIR := distribute
+
+# Uncomment for debugging. Does not work on OSX due to https://github.com/BVLC/caffe/issues/171
+# DEBUG := 1
+
+# The ID of the GPU that 'make runtest' will use to run unit tests.
+TEST_GPUID := 0
+
+# enable pretty build (comment to see full commands)
+Q ?= @
diff --git a/3rdparty/caffe/Makefile.config.Ubuntu16_cuda_7.example b/3rdparty/caffe/Makefile.config.Ubuntu16_cuda_7.example
new file mode 100644
index 00000000..15c005c0
--- /dev/null
+++ b/3rdparty/caffe/Makefile.config.Ubuntu16_cuda_7.example
@@ -0,0 +1,125 @@
+## Refer to http://caffe.berkeleyvision.org/installation.html
+# Contributions simplifying and improving our build system are welcome!
+
+# cuDNN acceleration switch (uncomment to build with cuDNN).
+USE_CUDNN := 1
+
+# CPU-only switch (uncomment to build without GPU support).
+# CPU_ONLY := 1
+
+# uncomment to disable IO dependencies and corresponding data layers
+# USE_OPENCV := 0
+# USE_LEVELDB := 0
+# USE_LMDB := 0
+
+# uncomment to allow MDB_NOLOCK when reading LMDB files (only if necessary)
+# You should not set this flag if you will be reading LMDBs with any
+# possibility of simultaneous read and write
+# ALLOW_LMDB_NOLOCK := 1
+
+# Uncomment if you're using OpenCV 3
+# OPENCV_VERSION := 3
+
+# To customize your choice of compiler, uncomment and set the following.
+# N.B. the default for Linux is g++ and the default for OSX is clang++
+# CUSTOM_CXX := g++
+
+# CUDA directory contains bin/ and lib/ directories that we need.
+CUDA_DIR := /usr/local/cuda
+# On Ubuntu 14.04, if cuda tools are installed via
+# "sudo apt-get install nvidia-cuda-toolkit" then use this instead:
+# CUDA_DIR := /usr
+
+# CUDA architecture setting: going with all of them.
+# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
+# For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.
+CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
+ -gencode arch=compute_35,code=sm_35 \
+ -gencode arch=compute_50,code=sm_50 \
+ -gencode arch=compute_52,code=sm_52
+# Deprecated
+# CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
+# -gencode arch=compute_20,code=sm_21 \
+# -gencode arch=compute_30,code=sm_30 \
+# -gencode arch=compute_35,code=sm_35 \
+# -gencode arch=compute_50,code=sm_50 \
+# -gencode arch=compute_52,code=sm_52 \
+# -gencode arch=compute_60,code=sm_60 \
+# -gencode arch=compute_61,code=sm_61 \
+# -gencode arch=compute_61,code=compute_61
+
+# BLAS choice:
+# atlas for ATLAS (default)
+# mkl for MKL
+# open for OpenBlas
+BLAS := atlas
+# Custom (MKL/ATLAS/OpenBLAS) include and lib directories.
+# Leave commented to accept the defaults for your choice of BLAS
+# (which should work)!
+# BLAS_INCLUDE := /path/to/your/blas
+# BLAS_LIB := /path/to/your/blas
+
+# Homebrew puts openblas in a directory that is not on the standard search path
+# BLAS_INCLUDE := $(shell brew --prefix openblas)/include
+# BLAS_LIB := $(shell brew --prefix openblas)/lib
+
+# This is required only if you will compile the matlab interface.
+# MATLAB directory should contain the mex binary in /bin.
+# MATLAB_DIR := /usr/local
+# MATLAB_DIR := /Applications/MATLAB_R2012b.app
+
+# NOTE: this is required only if you will compile the python interface.
+# We need to be able to find Python.h and numpy/arrayobject.h.
+PYTHON_INCLUDE := /usr/include/python2.7 \
+ /usr/lib/python2.7/dist-packages/numpy/core/include
+# Anaconda Python distribution is quite popular. Include path:
+# Verify anaconda location, sometimes it's in root.
+# ANACONDA_HOME := $(HOME)/anaconda
+# PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
+ # $(ANACONDA_HOME)/include/python2.7 \
+ # $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include
+
+# Uncomment to use Python 3 (default is Python 2)
+# PYTHON_LIBRARIES := boost_python3 python3.5m
+# PYTHON_INCLUDE := /usr/include/python3.5m \
+# /usr/lib/python3.5/dist-packages/numpy/core/include
+
+# We need to be able to find libpythonX.X.so or .dylib.
+PYTHON_LIB := /usr/lib /usr/local/lib
+# PYTHON_LIB := $(ANACONDA_HOME)/lib
+
+# Homebrew installs numpy in a non standard path (keg only)
+# PYTHON_INCLUDE += $(dir $(shell python -c 'import numpy.core; print(numpy.core.__file__)'))/include
+# PYTHON_LIB += $(shell brew --prefix numpy)/lib
+
+# Uncomment to support layers written in Python (will link against Python libs)
+# WITH_PYTHON_LAYER := 1
+
+# Whatever else you find you need goes here.
+INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
+LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
+
+# If Homebrew is installed at a non standard location (for example your home directory) and you use it for general dependencies
+# INCLUDE_DIRS += $(shell brew --prefix)/include
+# LIBRARY_DIRS += $(shell brew --prefix)/lib
+
+# NCCL acceleration switch (uncomment to build with NCCL)
+# https://github.com/NVIDIA/nccl (last tested version: v1.2.3-1+cuda8.0)
+# USE_NCCL := 1
+
+# Uncomment to use `pkg-config` to specify OpenCV library paths.
+# (Usually not necessary -- OpenCV libraries are normally installed in one of the above $LIBRARY_DIRS.)
+# USE_PKG_CONFIG := 1
+
+# N.B. both build and distribute dirs are cleared on `make clean`
+BUILD_DIR := build
+DISTRIBUTE_DIR := distribute
+
+# Uncomment for debugging. Does not work on OSX due to https://github.com/BVLC/caffe/issues/171
+# DEBUG := 1
+
+# The ID of the GPU that 'make runtest' will use to run unit tests.
+TEST_GPUID := 0
+
+# enable pretty build (comment to see full commands)
+Q ?= @
diff --git a/3rdparty/caffe/README.md b/3rdparty/caffe/README.md
new file mode 100644
index 00000000..0ae3616b
--- /dev/null
+++ b/3rdparty/caffe/README.md
@@ -0,0 +1,37 @@
+# Caffe
+
+[](https://travis-ci.org/BVLC/caffe)
+[](LICENSE)
+
+Caffe is a deep learning framework made with expression, speed, and modularity in mind.
+It is developed by Berkeley AI Research ([BAIR](http://bair.berkeley.edu))/The Berkeley Vision and Learning Center (BVLC) and community contributors.
+
+Check out the [project site](http://caffe.berkeleyvision.org) for all the details like
+
+- [DIY Deep Learning for Vision with Caffe](https://docs.google.com/presentation/d/1UeKXVgRvvxg9OUdh_UiC5G71UMscNPlvArsWER41PsU/edit#slide=id.p)
+- [Tutorial Documentation](http://caffe.berkeleyvision.org/tutorial/)
+- [BAIR reference models](http://caffe.berkeleyvision.org/model_zoo.html) and the [community model zoo](https://github.com/BVLC/caffe/wiki/Model-Zoo)
+- [Installation instructions](http://caffe.berkeleyvision.org/installation.html)
+
+and step-by-step examples.
+
+[](https://gitter.im/BVLC/caffe?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
+Please join the [caffe-users group](https://groups.google.com/forum/#!forum/caffe-users) or [gitter chat](https://gitter.im/BVLC/caffe) to ask questions and talk about methods and models.
+Framework development discussions and thorough bug reports are collected on [Issues](https://github.com/BVLC/caffe/issues).
+
+Happy brewing!
+
+## License and Citation
+
+Caffe is released under the [BSD 2-Clause license](https://github.com/BVLC/caffe/blob/master/LICENSE).
+The BAIR/BVLC reference models are released for unrestricted use.
+
+Please cite Caffe in your publications if it helps your research:
+
+ @article{jia2014caffe,
+ Author = {Jia, Yangqing and Shelhamer, Evan and Donahue, Jeff and Karayev, Sergey and Long, Jonathan and Girshick, Ross and Guadarrama, Sergio and Darrell, Trevor},
+ Journal = {arXiv preprint arXiv:1408.5093},
+ Title = {Caffe: Convolutional Architecture for Fast Feature Embedding},
+ Year = {2014}
+ }
diff --git a/3rdparty/caffe/caffe.cloc b/3rdparty/caffe/caffe.cloc
new file mode 100644
index 00000000..a36ab619
--- /dev/null
+++ b/3rdparty/caffe/caffe.cloc
@@ -0,0 +1,53 @@
+Bourne Shell
+ filter remove_matches ^\s*#
+ filter remove_inline #.*$
+ extension sh
+ script_exe sh
+C
+ filter remove_matches ^\s*//
+ filter call_regexp_common C
+ filter remove_inline //.*$
+ extension c
+ extension ec
+ extension pgc
+C++
+ filter remove_matches ^\s*//
+ filter remove_inline //.*$
+ filter call_regexp_common C
+ extension C
+ extension cc
+ extension cpp
+ extension cxx
+ extension pcc
+C/C++ Header
+ filter remove_matches ^\s*//
+ filter call_regexp_common C
+ filter remove_inline //.*$
+ extension H
+ extension h
+ extension hh
+ extension hpp
+CUDA
+ filter remove_matches ^\s*//
+ filter remove_inline //.*$
+ filter call_regexp_common C
+ extension cu
+Python
+ filter remove_matches ^\s*#
+ filter docstring_to_C
+ filter call_regexp_common C
+ filter remove_inline #.*$
+ extension py
+make
+ filter remove_matches ^\s*#
+ filter remove_inline #.*$
+ extension Gnumakefile
+ extension Makefile
+ extension am
+ extension gnumakefile
+ extension makefile
+ filename Gnumakefile
+ filename Makefile
+ filename gnumakefile
+ filename makefile
+ script_exe make
diff --git a/3rdparty/caffe/cmake/ConfigGen.cmake b/3rdparty/caffe/cmake/ConfigGen.cmake
new file mode 100644
index 00000000..ad91f542
--- /dev/null
+++ b/3rdparty/caffe/cmake/ConfigGen.cmake
@@ -0,0 +1,56 @@
+
+################################################################################################
+# Helper function to get all list items that begin with given prefix
+# Usage:
+# caffe_get_items_with_prefix( )
+function(caffe_get_items_with_prefix prefix list_variable output_variable)
+ set(__result "")
+ foreach(__e ${${list_variable}})
+ if(__e MATCHES "^${prefix}.*")
+ list(APPEND __result ${__e})
+ endif()
+ endforeach()
+ set(${output_variable} ${__result} PARENT_SCOPE)
+endfunction()
+
+################################################################################################
+# Function for generation Caffe build- and install- tree export config files
+# Usage:
+# caffe_generate_export_configs()
+function(caffe_generate_export_configs)
+ set(install_cmake_suffix "share/Caffe")
+
+ if(NOT HAVE_CUDA)
+ set(HAVE_CUDA FALSE)
+ endif()
+
+ if(NOT HAVE_CUDNN)
+ set(HAVE_CUDNN FALSE)
+ endif()
+
+ # ---[ Configure build-tree CaffeConfig.cmake file ]---
+
+ configure_file("cmake/Templates/CaffeConfig.cmake.in" "${PROJECT_BINARY_DIR}/CaffeConfig.cmake" @ONLY)
+
+ # Add targets to the build-tree export set
+ export(TARGETS caffe proto FILE "${PROJECT_BINARY_DIR}/CaffeTargets.cmake")
+ export(PACKAGE Caffe)
+
+ # ---[ Configure install-tree CaffeConfig.cmake file ]---
+
+ configure_file("cmake/Templates/CaffeConfig.cmake.in" "${PROJECT_BINARY_DIR}/cmake/CaffeConfig.cmake" @ONLY)
+
+ # Install the CaffeConfig.cmake and export set to use with install-tree
+ install(FILES "${PROJECT_BINARY_DIR}/cmake/CaffeConfig.cmake" DESTINATION ${install_cmake_suffix})
+ install(EXPORT CaffeTargets DESTINATION ${install_cmake_suffix})
+
+ # ---[ Configure and install version file ]---
+
+ # TODO: Lines below are commented because Caffe doesn't declare its version in headers.
+ # When the declarations are added, modify `caffe_extract_caffe_version()` macro and uncomment
+
+ # configure_file(cmake/Templates/CaffeConfigVersion.cmake.in "${PROJECT_BINARY_DIR}/CaffeConfigVersion.cmake" @ONLY)
+ # install(FILES "${PROJECT_BINARY_DIR}/CaffeConfigVersion.cmake" DESTINATION ${install_cmake_suffix})
+endfunction()
+
+
diff --git a/3rdparty/caffe/cmake/Cuda.cmake b/3rdparty/caffe/cmake/Cuda.cmake
new file mode 100644
index 00000000..b2b19e8b
--- /dev/null
+++ b/3rdparty/caffe/cmake/Cuda.cmake
@@ -0,0 +1,292 @@
+if(CPU_ONLY)
+ return()
+endif()
+
+# Known NVIDIA GPU achitectures Caffe can be compiled for.
+# This list will be used for CUDA_ARCH_NAME = All option
+set(Caffe_known_gpu_archs "20 21(20) 30 35 50 60 61")
+
+################################################################################################
+# A function for automatic detection of GPUs installed (if autodetection is enabled)
+# Usage:
+# caffe_detect_installed_gpus(out_variable)
+function(caffe_detect_installed_gpus out_variable)
+ if(NOT CUDA_gpu_detect_output)
+ set(__cufile ${PROJECT_BINARY_DIR}/detect_cuda_archs.cu)
+
+ file(WRITE ${__cufile} ""
+ "#include \n"
+ "int main()\n"
+ "{\n"
+ " int count = 0;\n"
+ " if (cudaSuccess != cudaGetDeviceCount(&count)) return -1;\n"
+ " if (count == 0) return -1;\n"
+ " for (int device = 0; device < count; ++device)\n"
+ " {\n"
+ " cudaDeviceProp prop;\n"
+ " if (cudaSuccess == cudaGetDeviceProperties(&prop, device))\n"
+ " std::printf(\"%d.%d \", prop.major, prop.minor);\n"
+ " }\n"
+ " return 0;\n"
+ "}\n")
+
+ execute_process(COMMAND "${CUDA_NVCC_EXECUTABLE}" "--run" "${__cufile}"
+ WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/CMakeFiles/"
+ RESULT_VARIABLE __nvcc_res OUTPUT_VARIABLE __nvcc_out
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ if(__nvcc_res EQUAL 0)
+ string(REPLACE "2.1" "2.1(2.0)" __nvcc_out "${__nvcc_out}")
+ set(CUDA_gpu_detect_output ${__nvcc_out} CACHE INTERNAL "Returned GPU architetures from caffe_detect_gpus tool" FORCE)
+ endif()
+ endif()
+
+ if(NOT CUDA_gpu_detect_output)
+ message(STATUS "Automatic GPU detection failed. Building for all known architectures.")
+ set(${out_variable} ${Caffe_known_gpu_archs} PARENT_SCOPE)
+ else()
+ set(${out_variable} ${CUDA_gpu_detect_output} PARENT_SCOPE)
+ endif()
+endfunction()
+
+
+################################################################################################
+# Function for selecting GPU arch flags for nvcc based on CUDA_ARCH_NAME
+# Usage:
+# caffe_select_nvcc_arch_flags(out_variable)
+function(caffe_select_nvcc_arch_flags out_variable)
+ # List of arch names
+ set(__archs_names "Fermi" "Kepler" "Maxwell" "Pascal" "All" "Manual")
+ set(__archs_name_default "All")
+ if(NOT CMAKE_CROSSCOMPILING)
+ list(APPEND __archs_names "Auto")
+ set(__archs_name_default "Auto")
+ endif()
+
+ # set CUDA_ARCH_NAME strings (so it will be seen as dropbox in CMake-Gui)
+ set(CUDA_ARCH_NAME ${__archs_name_default} CACHE STRING "Select target NVIDIA GPU achitecture.")
+ set_property( CACHE CUDA_ARCH_NAME PROPERTY STRINGS "" ${__archs_names} )
+ mark_as_advanced(CUDA_ARCH_NAME)
+
+ # verify CUDA_ARCH_NAME value
+ if(NOT ";${__archs_names};" MATCHES ";${CUDA_ARCH_NAME};")
+ string(REPLACE ";" ", " __archs_names "${__archs_names}")
+ message(FATAL_ERROR "Only ${__archs_names} architeture names are supported.")
+ endif()
+
+ if(${CUDA_ARCH_NAME} STREQUAL "Manual")
+ set(CUDA_ARCH_BIN ${Caffe_known_gpu_archs} CACHE STRING "Specify 'real' GPU architectures to build binaries for, BIN(PTX) format is supported")
+ set(CUDA_ARCH_PTX "50" CACHE STRING "Specify 'virtual' PTX architectures to build PTX intermediate code for")
+ mark_as_advanced(CUDA_ARCH_BIN CUDA_ARCH_PTX)
+ else()
+ unset(CUDA_ARCH_BIN CACHE)
+ unset(CUDA_ARCH_PTX CACHE)
+ endif()
+
+ if(${CUDA_ARCH_NAME} STREQUAL "Fermi")
+ set(__cuda_arch_bin "20 21(20)")
+ elseif(${CUDA_ARCH_NAME} STREQUAL "Kepler")
+ set(__cuda_arch_bin "30 35")
+ elseif(${CUDA_ARCH_NAME} STREQUAL "Maxwell")
+ set(__cuda_arch_bin "50")
+ elseif(${CUDA_ARCH_NAME} STREQUAL "Pascal")
+ set(__cuda_arch_bin "60 61")
+ elseif(${CUDA_ARCH_NAME} STREQUAL "All")
+ set(__cuda_arch_bin ${Caffe_known_gpu_archs})
+ elseif(${CUDA_ARCH_NAME} STREQUAL "Auto")
+ caffe_detect_installed_gpus(__cuda_arch_bin)
+ else() # (${CUDA_ARCH_NAME} STREQUAL "Manual")
+ set(__cuda_arch_bin ${CUDA_ARCH_BIN})
+ endif()
+
+ # remove dots and convert to lists
+ string(REGEX REPLACE "\\." "" __cuda_arch_bin "${__cuda_arch_bin}")
+ string(REGEX REPLACE "\\." "" __cuda_arch_ptx "${CUDA_ARCH_PTX}")
+ string(REGEX MATCHALL "[0-9()]+" __cuda_arch_bin "${__cuda_arch_bin}")
+ string(REGEX MATCHALL "[0-9]+" __cuda_arch_ptx "${__cuda_arch_ptx}")
+ caffe_list_unique(__cuda_arch_bin __cuda_arch_ptx)
+
+ set(__nvcc_flags "")
+ set(__nvcc_archs_readable "")
+
+ # Tell NVCC to add binaries for the specified GPUs
+ foreach(__arch ${__cuda_arch_bin})
+ if(__arch MATCHES "([0-9]+)\\(([0-9]+)\\)")
+ # User explicitly specified PTX for the concrete BIN
+ list(APPEND __nvcc_flags -gencode arch=compute_${CMAKE_MATCH_2},code=sm_${CMAKE_MATCH_1})
+ list(APPEND __nvcc_archs_readable sm_${CMAKE_MATCH_1})
+ else()
+ # User didn't explicitly specify PTX for the concrete BIN, we assume PTX=BIN
+ list(APPEND __nvcc_flags -gencode arch=compute_${__arch},code=sm_${__arch})
+ list(APPEND __nvcc_archs_readable sm_${__arch})
+ endif()
+ endforeach()
+
+ # Tell NVCC to add PTX intermediate code for the specified architectures
+ foreach(__arch ${__cuda_arch_ptx})
+ list(APPEND __nvcc_flags -gencode arch=compute_${__arch},code=compute_${__arch})
+ list(APPEND __nvcc_archs_readable compute_${__arch})
+ endforeach()
+
+ string(REPLACE ";" " " __nvcc_archs_readable "${__nvcc_archs_readable}")
+ set(${out_variable} ${__nvcc_flags} PARENT_SCOPE)
+ set(${out_variable}_readable ${__nvcc_archs_readable} PARENT_SCOPE)
+endfunction()
+
+################################################################################################
+# Short command for cuda compilation
+# Usage:
+# caffe_cuda_compile( )
+macro(caffe_cuda_compile objlist_variable)
+ foreach(var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG)
+ set(${var}_backup_in_cuda_compile_ "${${var}}")
+
+ # we remove /EHa as it generates warnings under windows
+ string(REPLACE "/EHa" "" ${var} "${${var}}")
+
+ endforeach()
+
+ if(UNIX OR APPLE)
+ list(APPEND CUDA_NVCC_FLAGS -Xcompiler -fPIC)
+ endif()
+
+ if(APPLE)
+ list(APPEND CUDA_NVCC_FLAGS -Xcompiler -Wno-unused-function)
+ endif()
+
+ cuda_compile(cuda_objcs ${ARGN})
+
+ foreach(var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG)
+ set(${var} "${${var}_backup_in_cuda_compile_}")
+ unset(${var}_backup_in_cuda_compile_)
+ endforeach()
+
+ set(${objlist_variable} ${cuda_objcs})
+endmacro()
+
+################################################################################################
+# Short command for cuDNN detection. Believe it soon will be a part of CUDA toolkit distribution.
+# That's why not FindcuDNN.cmake file, but just the macro
+# Usage:
+# detect_cuDNN()
+function(detect_cuDNN)
+ set(CUDNN_ROOT "" CACHE PATH "CUDNN root folder")
+
+ find_path(CUDNN_INCLUDE cudnn.h
+ PATHS ${CUDNN_ROOT} $ENV{CUDNN_ROOT} ${CUDA_TOOLKIT_INCLUDE}
+ DOC "Path to cuDNN include directory." )
+
+ # dynamic libs have different suffix in mac and linux
+ if(APPLE)
+ set(CUDNN_LIB_NAME "libcudnn.dylib")
+ else()
+ set(CUDNN_LIB_NAME "libcudnn.so")
+ endif()
+
+ get_filename_component(__libpath_hist ${CUDA_CUDART_LIBRARY} PATH)
+ find_library(CUDNN_LIBRARY NAMES ${CUDNN_LIB_NAME}
+ PATHS ${CUDNN_ROOT} $ENV{CUDNN_ROOT} ${CUDNN_INCLUDE} ${__libpath_hist} ${__libpath_hist}/../lib
+ DOC "Path to cuDNN library.")
+
+ if(CUDNN_INCLUDE AND CUDNN_LIBRARY)
+ set(HAVE_CUDNN TRUE PARENT_SCOPE)
+ set(CUDNN_FOUND TRUE PARENT_SCOPE)
+
+ file(READ ${CUDNN_INCLUDE}/cudnn.h CUDNN_VERSION_FILE_CONTENTS)
+
+ # cuDNN v3 and beyond
+ string(REGEX MATCH "define CUDNN_MAJOR * +([0-9]+)"
+ CUDNN_VERSION_MAJOR "${CUDNN_VERSION_FILE_CONTENTS}")
+ string(REGEX REPLACE "define CUDNN_MAJOR * +([0-9]+)" "\\1"
+ CUDNN_VERSION_MAJOR "${CUDNN_VERSION_MAJOR}")
+ string(REGEX MATCH "define CUDNN_MINOR * +([0-9]+)"
+ CUDNN_VERSION_MINOR "${CUDNN_VERSION_FILE_CONTENTS}")
+ string(REGEX REPLACE "define CUDNN_MINOR * +([0-9]+)" "\\1"
+ CUDNN_VERSION_MINOR "${CUDNN_VERSION_MINOR}")
+ string(REGEX MATCH "define CUDNN_PATCHLEVEL * +([0-9]+)"
+ CUDNN_VERSION_PATCH "${CUDNN_VERSION_FILE_CONTENTS}")
+ string(REGEX REPLACE "define CUDNN_PATCHLEVEL * +([0-9]+)" "\\1"
+ CUDNN_VERSION_PATCH "${CUDNN_VERSION_PATCH}")
+
+ if(NOT CUDNN_VERSION_MAJOR)
+ set(CUDNN_VERSION "???")
+ else()
+ set(CUDNN_VERSION "${CUDNN_VERSION_MAJOR}.${CUDNN_VERSION_MINOR}.${CUDNN_VERSION_PATCH}")
+ endif()
+
+ message(STATUS "Found cuDNN: ver. ${CUDNN_VERSION} found (include: ${CUDNN_INCLUDE}, library: ${CUDNN_LIBRARY})")
+
+ string(COMPARE LESS "${CUDNN_VERSION_MAJOR}" 3 cuDNNVersionIncompatible)
+ if(cuDNNVersionIncompatible)
+ message(FATAL_ERROR "cuDNN version >3 is required.")
+ endif()
+
+ set(CUDNN_VERSION "${CUDNN_VERSION}" PARENT_SCOPE)
+ mark_as_advanced(CUDNN_INCLUDE CUDNN_LIBRARY CUDNN_ROOT)
+
+ endif()
+endfunction()
+
+################################################################################################
+### Non macro section
+################################################################################################
+
+find_package(CUDA 5.5 QUIET)
+find_cuda_helper_libs(curand) # cmake 2.8.7 compartibility which doesn't search for curand
+
+if(NOT CUDA_FOUND)
+ return()
+endif()
+
+set(HAVE_CUDA TRUE)
+message(STATUS "CUDA detected: " ${CUDA_VERSION})
+list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${CUDA_INCLUDE_DIRS})
+list(APPEND Caffe_LINKER_LIBS PUBLIC ${CUDA_CUDART_LIBRARY}
+ ${CUDA_curand_LIBRARY} ${CUDA_CUBLAS_LIBRARIES})
+
+# cudnn detection
+if(USE_CUDNN)
+ detect_cuDNN()
+ if(HAVE_CUDNN)
+ list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_CUDNN)
+ list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${CUDNN_INCLUDE})
+ list(APPEND Caffe_LINKER_LIBS PUBLIC ${CUDNN_LIBRARY})
+ endif()
+endif()
+
+# setting nvcc arch flags
+caffe_select_nvcc_arch_flags(NVCC_FLAGS_EXTRA)
+list(APPEND CUDA_NVCC_FLAGS ${NVCC_FLAGS_EXTRA})
+message(STATUS "Added CUDA NVCC flags for: ${NVCC_FLAGS_EXTRA_readable}")
+
+# Boost 1.55 workaround, see https://svn.boost.org/trac/boost/ticket/9392 or
+# https://github.com/ComputationalRadiationPhysics/picongpu/blob/master/src/picongpu/CMakeLists.txt
+if(Boost_VERSION EQUAL 105500)
+ message(STATUS "Cuda + Boost 1.55: Applying noinline work around")
+ # avoid warning for CMake >= 2.8.12
+ set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} \"-DBOOST_NOINLINE=__attribute__((noinline))\" ")
+endif()
+
+# disable some nvcc diagnostic that apears in boost, glog, glags, opencv, etc.
+foreach(diag cc_clobber_ignored integer_sign_change useless_using_declaration set_but_not_used)
+ list(APPEND CUDA_NVCC_FLAGS -Xcudafe --diag_suppress=${diag})
+endforeach()
+
+# setting default testing device
+if(NOT CUDA_TEST_DEVICE)
+ set(CUDA_TEST_DEVICE -1)
+endif()
+
+mark_as_advanced(CUDA_BUILD_CUBIN CUDA_BUILD_EMULATION CUDA_VERBOSE_BUILD)
+mark_as_advanced(CUDA_SDK_ROOT_DIR CUDA_SEPARABLE_COMPILATION)
+
+# Handle clang/libc++ issue
+if(APPLE)
+ caffe_detect_darwin_version(OSX_VERSION)
+
+ # OSX 10.9 and higher uses clang/libc++ by default which is incompatible with old CUDA toolkits
+ if(OSX_VERSION VERSION_GREATER 10.8)
+ # enabled by default if and only if CUDA version is less than 7.0
+ caffe_option(USE_libstdcpp "Use libstdc++ instead of libc++" (CUDA_VERSION VERSION_LESS 7.0))
+ endif()
+endif()
diff --git a/3rdparty/caffe/cmake/Dependencies.cmake b/3rdparty/caffe/cmake/Dependencies.cmake
new file mode 100644
index 00000000..4a5bac47
--- /dev/null
+++ b/3rdparty/caffe/cmake/Dependencies.cmake
@@ -0,0 +1,203 @@
+# These lists are later turned into target properties on main caffe library target
+set(Caffe_LINKER_LIBS "")
+set(Caffe_INCLUDE_DIRS "")
+set(Caffe_DEFINITIONS "")
+set(Caffe_COMPILE_OPTIONS "")
+
+# ---[ Boost
+find_package(Boost 1.55 REQUIRED COMPONENTS system thread filesystem)
+list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${Boost_INCLUDE_DIRS})
+list(APPEND Caffe_LINKER_LIBS PUBLIC ${Boost_LIBRARIES})
+
+# ---[ Threads
+find_package(Threads REQUIRED)
+list(APPEND Caffe_LINKER_LIBS PRIVATE ${CMAKE_THREAD_LIBS_INIT})
+
+# ---[ OpenMP
+if(USE_OPENMP)
+ # Ideally, this should be provided by the BLAS library IMPORTED target. However,
+ # nobody does this, so we need to link to OpenMP explicitly and have the maintainer
+ # to flick the switch manually as needed.
+ #
+ # Moreover, OpenMP package does not provide an IMPORTED target as well, and the
+ # suggested way of linking to OpenMP is to append to CMAKE_{C,CXX}_FLAGS.
+ # However, this naïve method will force any user of Caffe to add the same kludge
+ # into their buildsystem again, so we put these options into per-target PUBLIC
+ # compile options and link flags, so that they will be exported properly.
+ find_package(OpenMP REQUIRED)
+ list(APPEND Caffe_LINKER_LIBS PRIVATE ${OpenMP_CXX_FLAGS})
+ list(APPEND Caffe_COMPILE_OPTIONS PRIVATE ${OpenMP_CXX_FLAGS})
+endif()
+
+# ---[ Google-glog
+include("cmake/External/glog.cmake")
+list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${GLOG_INCLUDE_DIRS})
+list(APPEND Caffe_LINKER_LIBS PUBLIC ${GLOG_LIBRARIES})
+
+# ---[ Google-gflags
+include("cmake/External/gflags.cmake")
+list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${GFLAGS_INCLUDE_DIRS})
+list(APPEND Caffe_LINKER_LIBS PUBLIC ${GFLAGS_LIBRARIES})
+
+# ---[ Google-protobuf
+include(cmake/ProtoBuf.cmake)
+
+# ---[ HDF5
+find_package(HDF5 COMPONENTS HL REQUIRED)
+list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${HDF5_INCLUDE_DIRS})
+list(APPEND Caffe_LINKER_LIBS PUBLIC ${HDF5_LIBRARIES} ${HDF5_HL_LIBRARIES})
+
+# ---[ LMDB
+if(USE_LMDB)
+ find_package(LMDB REQUIRED)
+ list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${LMDB_INCLUDE_DIR})
+ list(APPEND Caffe_LINKER_LIBS PUBLIC ${LMDB_LIBRARIES})
+ list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_LMDB)
+ if(ALLOW_LMDB_NOLOCK)
+ list(APPEND Caffe_DEFINITIONS PRIVATE -DALLOW_LMDB_NOLOCK)
+ endif()
+endif()
+
+# ---[ LevelDB
+if(USE_LEVELDB)
+ find_package(LevelDB REQUIRED)
+ list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${LevelDB_INCLUDES})
+ list(APPEND Caffe_LINKER_LIBS PUBLIC ${LevelDB_LIBRARIES})
+ list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_LEVELDB)
+endif()
+
+# ---[ Snappy
+if(USE_LEVELDB)
+ find_package(Snappy REQUIRED)
+ list(APPEND Caffe_INCLUDE_DIRS PRIVATE ${Snappy_INCLUDE_DIR})
+ list(APPEND Caffe_LINKER_LIBS PRIVATE ${Snappy_LIBRARIES})
+endif()
+
+# ---[ CUDA
+include(cmake/Cuda.cmake)
+if(NOT HAVE_CUDA)
+ if(CPU_ONLY)
+ message(STATUS "-- CUDA is disabled. Building without it...")
+ else()
+ message(WARNING "-- CUDA is not detected by cmake. Building without it...")
+ endif()
+
+ list(APPEND Caffe_DEFINITIONS PUBLIC -DCPU_ONLY)
+endif()
+
+if(USE_NCCL)
+ find_package(NCCL REQUIRED)
+ include_directories(SYSTEM ${NCCL_INCLUDE_DIR})
+ list(APPEND Caffe_LINKER_LIBS ${NCCL_LIBRARIES})
+ add_definitions(-DUSE_NCCL)
+endif()
+
+# ---[ OpenCV
+if(USE_OPENCV)
+ find_package(OpenCV QUIET COMPONENTS core highgui imgproc imgcodecs)
+ if(NOT OpenCV_FOUND) # if not OpenCV 3.x, then imgcodecs are not found
+ find_package(OpenCV REQUIRED COMPONENTS core highgui imgproc)
+ endif()
+ list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${OpenCV_INCLUDE_DIRS})
+ list(APPEND Caffe_LINKER_LIBS PUBLIC ${OpenCV_LIBS})
+ message(STATUS "OpenCV found (${OpenCV_CONFIG_PATH})")
+ list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_OPENCV)
+endif()
+
+# ---[ BLAS
+if(NOT APPLE)
+ set(BLAS "Atlas" CACHE STRING "Selected BLAS library")
+ set_property(CACHE BLAS PROPERTY STRINGS "Atlas;Open;MKL")
+
+ if(BLAS STREQUAL "Atlas" OR BLAS STREQUAL "atlas")
+ find_package(Atlas REQUIRED)
+ list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${Atlas_INCLUDE_DIR})
+ list(APPEND Caffe_LINKER_LIBS PUBLIC ${Atlas_LIBRARIES})
+ elseif(BLAS STREQUAL "Open" OR BLAS STREQUAL "open")
+ find_package(OpenBLAS REQUIRED)
+ list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${OpenBLAS_INCLUDE_DIR})
+ list(APPEND Caffe_LINKER_LIBS PUBLIC ${OpenBLAS_LIB})
+ elseif(BLAS STREQUAL "MKL" OR BLAS STREQUAL "mkl")
+ find_package(MKL REQUIRED)
+ list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${MKL_INCLUDE_DIR})
+ list(APPEND Caffe_LINKER_LIBS PUBLIC ${MKL_LIBRARIES})
+ list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_MKL)
+ endif()
+elseif(APPLE)
+ find_package(vecLib REQUIRED)
+ list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${vecLib_INCLUDE_DIR})
+ list(APPEND Caffe_LINKER_LIBS PUBLIC ${vecLib_LINKER_LIBS})
+
+ if(VECLIB_FOUND)
+ if(NOT vecLib_INCLUDE_DIR MATCHES "^/System/Library/Frameworks/vecLib.framework.*")
+ list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_ACCELERATE)
+ endif()
+ endif()
+endif()
+
+# ---[ Python
+if(BUILD_python)
+ if(NOT "${python_version}" VERSION_LESS "3.0.0")
+ # use python3
+ find_package(PythonInterp 3.0)
+ find_package(PythonLibs 3.0)
+ find_package(NumPy 1.7.1)
+ # Find the matching boost python implementation
+ set(version ${PYTHONLIBS_VERSION_STRING})
+
+ STRING( REGEX REPLACE "[^0-9]" "" boost_py_version ${version} )
+ find_package(Boost 1.46 COMPONENTS "python-py${boost_py_version}")
+ set(Boost_PYTHON_FOUND ${Boost_PYTHON-PY${boost_py_version}_FOUND})
+
+ while(NOT "${version}" STREQUAL "" AND NOT Boost_PYTHON_FOUND)
+ STRING( REGEX REPLACE "([0-9.]+).[0-9]+" "\\1" version ${version} )
+
+ STRING( REGEX REPLACE "[^0-9]" "" boost_py_version ${version} )
+ find_package(Boost 1.46 COMPONENTS "python-py${boost_py_version}")
+ set(Boost_PYTHON_FOUND ${Boost_PYTHON-PY${boost_py_version}_FOUND})
+
+ STRING( REGEX MATCHALL "([0-9.]+).[0-9]+" has_more_version ${version} )
+ if("${has_more_version}" STREQUAL "")
+ break()
+ endif()
+ endwhile()
+ if(NOT Boost_PYTHON_FOUND)
+ find_package(Boost 1.46 COMPONENTS python)
+ endif()
+ else()
+ # disable Python 3 search
+ find_package(PythonInterp 2.7)
+ find_package(PythonLibs 2.7)
+ find_package(NumPy 1.7.1)
+ find_package(Boost 1.46 COMPONENTS python)
+ endif()
+ if(PYTHONLIBS_FOUND AND NUMPY_FOUND AND Boost_PYTHON_FOUND)
+ set(HAVE_PYTHON TRUE)
+ if(BUILD_python_layer)
+ list(APPEND Caffe_DEFINITIONS PRIVATE -DWITH_PYTHON_LAYER)
+ list(APPEND Caffe_INCLUDE_DIRS PRIVATE ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR} PUBLIC ${Boost_INCLUDE_DIRS})
+ list(APPEND Caffe_LINKER_LIBS PRIVATE ${PYTHON_LIBRARIES} PUBLIC ${Boost_LIBRARIES})
+ endif()
+ endif()
+endif()
+
+# ---[ Matlab
+if(BUILD_matlab)
+ find_package(MatlabMex)
+ if(MATLABMEX_FOUND)
+ set(HAVE_MATLAB TRUE)
+ endif()
+
+ # sudo apt-get install liboctave-dev
+ find_program(Octave_compiler NAMES mkoctfile DOC "Octave C++ compiler")
+
+ if(HAVE_MATLAB AND Octave_compiler)
+ set(Matlab_build_mex_using "Matlab" CACHE STRING "Select Matlab or Octave if both detected")
+ set_property(CACHE Matlab_build_mex_using PROPERTY STRINGS "Matlab;Octave")
+ endif()
+endif()
+
+# ---[ Doxygen
+if(BUILD_docs)
+ find_package(Doxygen)
+endif()
diff --git a/3rdparty/caffe/cmake/External/gflags.cmake b/3rdparty/caffe/cmake/External/gflags.cmake
new file mode 100644
index 00000000..e3dba04f
--- /dev/null
+++ b/3rdparty/caffe/cmake/External/gflags.cmake
@@ -0,0 +1,56 @@
+if (NOT __GFLAGS_INCLUDED) # guard against multiple includes
+ set(__GFLAGS_INCLUDED TRUE)
+
+ # use the system-wide gflags if present
+ find_package(GFlags)
+ if (GFLAGS_FOUND)
+ set(GFLAGS_EXTERNAL FALSE)
+ else()
+ # gflags will use pthreads if it's available in the system, so we must link with it
+ find_package(Threads)
+
+ # build directory
+ set(gflags_PREFIX ${CMAKE_BINARY_DIR}/external/gflags-prefix)
+ # install directory
+ set(gflags_INSTALL ${CMAKE_BINARY_DIR}/external/gflags-install)
+
+ # we build gflags statically, but want to link it into the caffe shared library
+ # this requires position-independent code
+ if (UNIX)
+ set(GFLAGS_EXTRA_COMPILER_FLAGS "-fPIC")
+ endif()
+
+ set(GFLAGS_CXX_FLAGS ${CMAKE_CXX_FLAGS} ${GFLAGS_EXTRA_COMPILER_FLAGS})
+ set(GFLAGS_C_FLAGS ${CMAKE_C_FLAGS} ${GFLAGS_EXTRA_COMPILER_FLAGS})
+
+ ExternalProject_Add(gflags
+ PREFIX ${gflags_PREFIX}
+ GIT_REPOSITORY "https://github.com/gflags/gflags.git"
+ GIT_TAG "v2.1.2"
+ UPDATE_COMMAND ""
+ INSTALL_DIR ${gflags_INSTALL}
+ CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
+ -DCMAKE_INSTALL_PREFIX=${gflags_INSTALL}
+ -DBUILD_SHARED_LIBS=OFF
+ -DBUILD_STATIC_LIBS=ON
+ -DBUILD_PACKAGING=OFF
+ -DBUILD_TESTING=OFF
+ -DBUILD_NC_TESTS=OFF
+ -BUILD_CONFIG_TESTS=OFF
+ -DINSTALL_HEADERS=ON
+ -DCMAKE_C_FLAGS=${GFLAGS_C_FLAGS}
+ -DCMAKE_CXX_FLAGS=${GFLAGS_CXX_FLAGS}
+ LOG_DOWNLOAD 1
+ LOG_INSTALL 1
+ )
+
+ set(GFLAGS_FOUND TRUE)
+ set(GFLAGS_INCLUDE_DIRS ${gflags_INSTALL}/include)
+ set(GFLAGS_LIBRARIES ${gflags_INSTALL}/lib/libgflags.a ${CMAKE_THREAD_LIBS_INIT})
+ set(GFLAGS_LIBRARY_DIRS ${gflags_INSTALL}/lib)
+ set(GFLAGS_EXTERNAL TRUE)
+
+ list(APPEND external_project_dependencies gflags)
+ endif()
+
+endif()
diff --git a/3rdparty/caffe/cmake/External/glog.cmake b/3rdparty/caffe/cmake/External/glog.cmake
new file mode 100644
index 00000000..f9d0549c
--- /dev/null
+++ b/3rdparty/caffe/cmake/External/glog.cmake
@@ -0,0 +1,57 @@
+# glog depends on gflags
+include("cmake/External/gflags.cmake")
+
+if (NOT __GLOG_INCLUDED)
+ set(__GLOG_INCLUDED TRUE)
+
+ # try the system-wide glog first
+ find_package(Glog)
+ if (GLOG_FOUND)
+ set(GLOG_EXTERNAL FALSE)
+ else()
+ # fetch and build glog from github
+
+ # build directory
+ set(glog_PREFIX ${CMAKE_BINARY_DIR}/external/glog-prefix)
+ # install directory
+ set(glog_INSTALL ${CMAKE_BINARY_DIR}/external/glog-install)
+
+ # we build glog statically, but want to link it into the caffe shared library
+ # this requires position-independent code
+ if (UNIX)
+ set(GLOG_EXTRA_COMPILER_FLAGS "-fPIC")
+ endif()
+
+ set(GLOG_CXX_FLAGS ${CMAKE_CXX_FLAGS} ${GLOG_EXTRA_COMPILER_FLAGS})
+ set(GLOG_C_FLAGS ${CMAKE_C_FLAGS} ${GLOG_EXTRA_COMPILER_FLAGS})
+
+ # depend on gflags if we're also building it
+ if (GFLAGS_EXTERNAL)
+ set(GLOG_DEPENDS gflags)
+ endif()
+
+ ExternalProject_Add(glog
+ DEPENDS ${GLOG_DEPENDS}
+ PREFIX ${glog_PREFIX}
+ GIT_REPOSITORY "https://github.com/google/glog"
+ GIT_TAG "v0.3.4"
+ UPDATE_COMMAND ""
+ INSTALL_DIR ${gflags_INSTALL}
+ PATCH_COMMAND autoreconf -i ${glog_PREFIX}/src/glog
+ CONFIGURE_COMMAND env "CFLAGS=${GLOG_C_FLAGS}" "CXXFLAGS=${GLOG_CXX_FLAGS}" ${glog_PREFIX}/src/glog/configure --prefix=${glog_INSTALL} --enable-shared=no --enable-static=yes --with-gflags=${GFLAGS_LIBRARY_DIRS}/..
+ LOG_DOWNLOAD 1
+ LOG_CONFIGURE 1
+ LOG_INSTALL 1
+ )
+
+ set(GLOG_FOUND TRUE)
+ set(GLOG_INCLUDE_DIRS ${glog_INSTALL}/include)
+ set(GLOG_LIBRARIES ${GFLAGS_LIBRARIES} ${glog_INSTALL}/lib/libglog.a)
+ set(GLOG_LIBRARY_DIRS ${glog_INSTALL}/lib)
+ set(GLOG_EXTERNAL TRUE)
+
+ list(APPEND external_project_dependencies glog)
+ endif()
+
+endif()
+
diff --git a/3rdparty/caffe/cmake/Misc.cmake b/3rdparty/caffe/cmake/Misc.cmake
new file mode 100644
index 00000000..9dd2609b
--- /dev/null
+++ b/3rdparty/caffe/cmake/Misc.cmake
@@ -0,0 +1,52 @@
+# ---[ Configuration types
+set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Possible configurations" FORCE)
+mark_as_advanced(CMAKE_CONFIGURATION_TYPES)
+
+if(DEFINED CMAKE_BUILD_TYPE)
+ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES})
+endif()
+
+# --[ If user doesn't specify build type then assume release
+if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_BUILD_TYPE Release)
+endif()
+
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ set(CMAKE_COMPILER_IS_CLANGXX TRUE)
+endif()
+
+# ---[ Solution folders
+caffe_option(USE_PROJECT_FOLDERS "IDE Solution folders" (MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode) )
+
+if(USE_PROJECT_FOLDERS)
+ set_property(GLOBAL PROPERTY USE_FOLDERS ON)
+ set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets")
+endif()
+
+# ---[ Install options
+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+ set(CMAKE_INSTALL_PREFIX "${PROJECT_BINARY_DIR}/install" CACHE PATH "Default install path" FORCE)
+endif()
+
+# ---[ RPATH settings
+set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE CACHE BOOLEAN "Use link paths for shared library rpath")
+set(CMAKE_MACOSX_RPATH TRUE)
+
+list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES ${CMAKE_INSTALL_PREFIX}/lib __is_systtem_dir)
+if(${__is_systtem_dir} STREQUAL -1)
+ set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib)
+endif()
+
+# ---[ Funny target
+if(UNIX OR APPLE)
+ add_custom_target(symlink_to_build COMMAND "ln" "-sf" "${PROJECT_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/build"
+ COMMENT "Adding symlink: /build -> ${PROJECT_BINARY_DIR}" )
+endif()
+
+# ---[ Set debug postfix
+set(Caffe_DEBUG_POSTFIX "-d")
+
+set(Caffe_POSTFIX "")
+if(CMAKE_BUILD_TYPE MATCHES "Debug")
+ set(Caffe_POSTFIX ${Caffe_DEBUG_POSTFIX})
+endif()
diff --git a/3rdparty/caffe/cmake/Modules/FindAtlas.cmake b/3rdparty/caffe/cmake/Modules/FindAtlas.cmake
new file mode 100644
index 00000000..7ffa6393
--- /dev/null
+++ b/3rdparty/caffe/cmake/Modules/FindAtlas.cmake
@@ -0,0 +1,52 @@
+# Find the Atlas (and Lapack) libraries
+#
+# The following variables are optionally searched for defaults
+# Atlas_ROOT_DIR: Base directory where all Atlas components are found
+#
+# The following are set after configuration is done:
+# Atlas_FOUND
+# Atlas_INCLUDE_DIRS
+# Atlas_LIBRARIES
+# Atlas_LIBRARYRARY_DIRS
+
+set(Atlas_INCLUDE_SEARCH_PATHS
+ /usr/include/atlas
+ /usr/include/atlas-base
+ $ENV{Atlas_ROOT_DIR}
+ $ENV{Atlas_ROOT_DIR}/include
+)
+
+set(Atlas_LIB_SEARCH_PATHS
+ /usr/lib/atlas
+ /usr/lib/atlas-base
+ $ENV{Atlas_ROOT_DIR}
+ $ENV{Atlas_ROOT_DIR}/lib
+)
+
+find_path(Atlas_CBLAS_INCLUDE_DIR NAMES cblas.h PATHS ${Atlas_INCLUDE_SEARCH_PATHS})
+find_path(Atlas_CLAPACK_INCLUDE_DIR NAMES clapack.h PATHS ${Atlas_INCLUDE_SEARCH_PATHS})
+
+find_library(Atlas_CBLAS_LIBRARY NAMES ptcblas_r ptcblas cblas_r cblas PATHS ${Atlas_LIB_SEARCH_PATHS})
+find_library(Atlas_BLAS_LIBRARY NAMES atlas_r atlas PATHS ${Atlas_LIB_SEARCH_PATHS})
+find_library(Atlas_LAPACK_LIBRARY NAMES lapack alapack_r alapack lapack_atlas atllapack PATHS ${Atlas_LIB_SEARCH_PATHS})
+
+set(LOOKED_FOR
+ Atlas_CBLAS_INCLUDE_DIR
+ Atlas_CLAPACK_INCLUDE_DIR
+
+ Atlas_CBLAS_LIBRARY
+ Atlas_BLAS_LIBRARY
+ Atlas_LAPACK_LIBRARY
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Atlas DEFAULT_MSG ${LOOKED_FOR})
+
+if(ATLAS_FOUND)
+ set(Atlas_INCLUDE_DIR ${Atlas_CBLAS_INCLUDE_DIR} ${Atlas_CLAPACK_INCLUDE_DIR})
+ set(Atlas_LIBRARIES ${Atlas_LAPACK_LIBRARY} ${Atlas_CBLAS_LIBRARY} ${Atlas_BLAS_LIBRARY})
+ mark_as_advanced(${LOOKED_FOR})
+
+ message(STATUS "Found Atlas (include: ${Atlas_CBLAS_INCLUDE_DIR} library: ${Atlas_BLAS_LIBRARY} lapack: ${Atlas_LAPACK_LIBRARY}")
+endif(ATLAS_FOUND)
+
diff --git a/3rdparty/caffe/cmake/Modules/FindGFlags.cmake b/3rdparty/caffe/cmake/Modules/FindGFlags.cmake
new file mode 100644
index 00000000..29b60f05
--- /dev/null
+++ b/3rdparty/caffe/cmake/Modules/FindGFlags.cmake
@@ -0,0 +1,50 @@
+# - Try to find GFLAGS
+#
+# The following variables are optionally searched for defaults
+# GFLAGS_ROOT_DIR: Base directory where all GFLAGS components are found
+#
+# The following are set after configuration is done:
+# GFLAGS_FOUND
+# GFLAGS_INCLUDE_DIRS
+# GFLAGS_LIBRARIES
+# GFLAGS_LIBRARYRARY_DIRS
+
+include(FindPackageHandleStandardArgs)
+
+set(GFLAGS_ROOT_DIR "" CACHE PATH "Folder contains Gflags")
+
+# We are testing only a couple of files in the include directories
+if(WIN32)
+ find_path(GFLAGS_INCLUDE_DIR gflags/gflags.h
+ PATHS ${GFLAGS_ROOT_DIR}/src/windows)
+else()
+ find_path(GFLAGS_INCLUDE_DIR gflags/gflags.h
+ PATHS ${GFLAGS_ROOT_DIR})
+endif()
+
+if(MSVC)
+ find_library(GFLAGS_LIBRARY_RELEASE
+ NAMES libgflags
+ PATHS ${GFLAGS_ROOT_DIR}
+ PATH_SUFFIXES Release)
+
+ find_library(GFLAGS_LIBRARY_DEBUG
+ NAMES libgflags-debug
+ PATHS ${GFLAGS_ROOT_DIR}
+ PATH_SUFFIXES Debug)
+
+ set(GFLAGS_LIBRARY optimized ${GFLAGS_LIBRARY_RELEASE} debug ${GFLAGS_LIBRARY_DEBUG})
+else()
+ find_library(GFLAGS_LIBRARY gflags)
+endif()
+
+find_package_handle_standard_args(GFlags DEFAULT_MSG GFLAGS_INCLUDE_DIR GFLAGS_LIBRARY)
+
+
+if(GFLAGS_FOUND)
+ set(GFLAGS_INCLUDE_DIRS ${GFLAGS_INCLUDE_DIR})
+ set(GFLAGS_LIBRARIES ${GFLAGS_LIBRARY})
+ message(STATUS "Found gflags (include: ${GFLAGS_INCLUDE_DIR}, library: ${GFLAGS_LIBRARY})")
+ mark_as_advanced(GFLAGS_LIBRARY_DEBUG GFLAGS_LIBRARY_RELEASE
+ GFLAGS_LIBRARY GFLAGS_INCLUDE_DIR GFLAGS_ROOT_DIR)
+endif()
diff --git a/3rdparty/caffe/cmake/Modules/FindGlog.cmake b/3rdparty/caffe/cmake/Modules/FindGlog.cmake
new file mode 100644
index 00000000..99abbe47
--- /dev/null
+++ b/3rdparty/caffe/cmake/Modules/FindGlog.cmake
@@ -0,0 +1,48 @@
+# - Try to find Glog
+#
+# The following variables are optionally searched for defaults
+# GLOG_ROOT_DIR: Base directory where all GLOG components are found
+#
+# The following are set after configuration is done:
+# GLOG_FOUND
+# GLOG_INCLUDE_DIRS
+# GLOG_LIBRARIES
+# GLOG_LIBRARYRARY_DIRS
+
+include(FindPackageHandleStandardArgs)
+
+set(GLOG_ROOT_DIR "" CACHE PATH "Folder contains Google glog")
+
+if(WIN32)
+ find_path(GLOG_INCLUDE_DIR glog/logging.h
+ PATHS ${GLOG_ROOT_DIR}/src/windows)
+else()
+ find_path(GLOG_INCLUDE_DIR glog/logging.h
+ PATHS ${GLOG_ROOT_DIR})
+endif()
+
+if(MSVC)
+ find_library(GLOG_LIBRARY_RELEASE libglog_static
+ PATHS ${GLOG_ROOT_DIR}
+ PATH_SUFFIXES Release)
+
+ find_library(GLOG_LIBRARY_DEBUG libglog_static
+ PATHS ${GLOG_ROOT_DIR}
+ PATH_SUFFIXES Debug)
+
+ set(GLOG_LIBRARY optimized ${GLOG_LIBRARY_RELEASE} debug ${GLOG_LIBRARY_DEBUG})
+else()
+ find_library(GLOG_LIBRARY glog
+ PATHS ${GLOG_ROOT_DIR}
+ PATH_SUFFIXES lib lib64)
+endif()
+
+find_package_handle_standard_args(Glog DEFAULT_MSG GLOG_INCLUDE_DIR GLOG_LIBRARY)
+
+if(GLOG_FOUND)
+ set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR})
+ set(GLOG_LIBRARIES ${GLOG_LIBRARY})
+ message(STATUS "Found glog (include: ${GLOG_INCLUDE_DIR}, library: ${GLOG_LIBRARY})")
+ mark_as_advanced(GLOG_ROOT_DIR GLOG_LIBRARY_RELEASE GLOG_LIBRARY_DEBUG
+ GLOG_LIBRARY GLOG_INCLUDE_DIR)
+endif()
diff --git a/3rdparty/caffe/cmake/Modules/FindLAPACK.cmake b/3rdparty/caffe/cmake/Modules/FindLAPACK.cmake
new file mode 100644
index 00000000..9641c45d
--- /dev/null
+++ b/3rdparty/caffe/cmake/Modules/FindLAPACK.cmake
@@ -0,0 +1,190 @@
+# - Find LAPACK library
+# This module finds an installed fortran library that implements the LAPACK
+# linear-algebra interface (see http://www.netlib.org/lapack/).
+#
+# The approach follows that taken for the autoconf macro file, acx_lapack.m4
+# (distributed at http://ac-archive.sourceforge.net/ac-archive/acx_lapack.html).
+#
+# This module sets the following variables:
+# LAPACK_FOUND - set to true if a library implementing the LAPACK interface is found
+# LAPACK_LIBRARIES - list of libraries (using full path name) for LAPACK
+
+# Note: I do not think it is a good idea to mixup different BLAS/LAPACK versions
+# Hence, this script wants to find a Lapack library matching your Blas library
+
+# Do nothing if LAPACK was found before
+IF(NOT LAPACK_FOUND)
+
+SET(LAPACK_LIBRARIES)
+SET(LAPACK_INFO)
+
+IF(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED)
+ FIND_PACKAGE(BLAS)
+ELSE(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED)
+ FIND_PACKAGE(BLAS REQUIRED)
+ENDIF(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED)
+
+# Old search lapack script
+include(CheckFortranFunctionExists)
+
+macro(Check_Lapack_Libraries LIBRARIES _prefix _name _flags _list _blas)
+ # This macro checks for the existence of the combination of fortran libraries
+ # given by _list. If the combination is found, this macro checks (using the
+ # Check_Fortran_Function_Exists macro) whether can link against that library
+ # combination using the name of a routine given by _name using the linker
+ # flags given by _flags. If the combination of libraries is found and passes
+ # the link test, LIBRARIES is set to the list of complete library paths that
+ # have been found. Otherwise, LIBRARIES is set to FALSE.
+ # N.B. _prefix is the prefix applied to the names of all cached variables that
+ # are generated internally and marked advanced by this macro.
+ set(_libraries_work TRUE)
+ set(${LIBRARIES})
+ set(_combined_name)
+ foreach(_library ${_list})
+ set(_combined_name ${_combined_name}_${_library})
+ if(_libraries_work)
+ if (WIN32)
+ find_library(${_prefix}_${_library}_LIBRARY
+ NAMES ${_library} PATHS ENV LIB PATHS ENV PATH)
+ else (WIN32)
+ if(APPLE)
+ find_library(${_prefix}_${_library}_LIBRARY
+ NAMES ${_library}
+ PATHS /usr/local/lib /usr/lib /usr/local/lib64 /usr/lib64
+ ENV DYLD_LIBRARY_PATH)
+ else(APPLE)
+ find_library(${_prefix}_${_library}_LIBRARY
+ NAMES ${_library}
+ PATHS /usr/local/lib /usr/lib /usr/local/lib64 /usr/lib64
+ ENV LD_LIBRARY_PATH)
+ endif(APPLE)
+ endif(WIN32)
+ mark_as_advanced(${_prefix}_${_library}_LIBRARY)
+ set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY})
+ set(_libraries_work ${${_prefix}_${_library}_LIBRARY})
+ endif(_libraries_work)
+ endforeach(_library ${_list})
+ if(_libraries_work)
+ # Test this combination of libraries.
+ set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_blas})
+ if (CMAKE_Fortran_COMPILER_WORKS)
+ check_fortran_function_exists(${_name} ${_prefix}${_combined_name}_WORKS)
+ else (CMAKE_Fortran_COMPILER_WORKS)
+ check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS)
+ endif (CMAKE_Fortran_COMPILER_WORKS)
+ set(CMAKE_REQUIRED_LIBRARIES)
+ mark_as_advanced(${_prefix}${_combined_name}_WORKS)
+ set(_libraries_work ${${_prefix}${_combined_name}_WORKS})
+ endif(_libraries_work)
+ if(NOT _libraries_work)
+ set(${LIBRARIES} FALSE)
+ endif(NOT _libraries_work)
+endmacro(Check_Lapack_Libraries)
+
+
+if(BLAS_FOUND)
+
+ # Intel MKL
+ IF((NOT LAPACK_INFO) AND (BLAS_INFO STREQUAL "mkl"))
+ IF(MKL_LAPACK_LIBRARIES)
+ SET(LAPACK_LIBRARIES ${MKL_LAPACK_LIBRARIES} ${MKL_LIBRARIES})
+ ELSE(MKL_LAPACK_LIBRARIES)
+ SET(LAPACK_LIBRARIES ${MKL_LIBRARIES})
+ ENDIF(MKL_LAPACK_LIBRARIES)
+ SET(LAPACK_INCLUDE_DIR ${MKL_INCLUDE_DIR})
+ SET(LAPACK_INFO "mkl")
+ ENDIF()
+
+ # OpenBlas
+ IF((NOT LAPACK_INFO) AND (BLAS_INFO STREQUAL "open"))
+ SET(CMAKE_REQUIRED_LIBRARIES ${BLAS_LIBRARIES})
+ check_function_exists("cheev_" OPEN_LAPACK_WORKS)
+ if(OPEN_LAPACK_WORKS)
+ SET(LAPACK_INFO "open")
+ else()
+ message(STATUS "It seems OpenBlas has not been compiled with Lapack support")
+ endif()
+ endif()
+
+ # GotoBlas
+ IF((NOT LAPACK_INFO) AND (BLAS_INFO STREQUAL "goto"))
+ SET(CMAKE_REQUIRED_LIBRARIES ${BLAS_LIBRARIES})
+ check_function_exists("cheev_" GOTO_LAPACK_WORKS)
+ if(GOTO_LAPACK_WORKS)
+ SET(LAPACK_INFO "goto")
+ else()
+ message(STATUS "It seems GotoBlas has not been compiled with Lapack support")
+ endif()
+ endif()
+
+ # ACML
+ IF((NOT LAPACK_INFO) AND (BLAS_INFO STREQUAL "acml"))
+ SET(CMAKE_REQUIRED_LIBRARIES ${BLAS_LIBRARIES})
+ check_function_exists("cheev_" ACML_LAPACK_WORKS)
+ if(ACML_LAPACK_WORKS)
+ SET(LAPACK_INFO "acml")
+ else()
+ message(STATUS "Strangely, this ACML library does not support Lapack?!")
+ endif()
+ endif()
+
+ # Accelerate
+ IF((NOT LAPACK_INFO) AND (BLAS_INFO STREQUAL "accelerate"))
+ SET(CMAKE_REQUIRED_LIBRARIES ${BLAS_LIBRARIES})
+ check_function_exists("cheev_" ACCELERATE_LAPACK_WORKS)
+ if(ACCELERATE_LAPACK_WORKS)
+ SET(LAPACK_INFO "accelerate")
+ else()
+ message(STATUS "Strangely, this Accelerate library does not support Lapack?!")
+ endif()
+ endif()
+
+ # vecLib
+ IF((NOT LAPACK_INFO) AND (BLAS_INFO STREQUAL "veclib"))
+ SET(CMAKE_REQUIRED_LIBRARIES ${BLAS_LIBRARIES})
+ check_function_exists("cheev_" VECLIB_LAPACK_WORKS)
+ if(VECLIB_LAPACK_WORKS)
+ SET(LAPACK_INFO "veclib")
+ else()
+ message(STATUS "Strangely, this vecLib library does not support Lapack?!")
+ endif()
+ endif()
+
+ # Generic LAPACK library?
+ IF((NOT LAPACK_INFO) AND (BLAS_INFO STREQUAL "generic"))
+ check_lapack_libraries(
+ LAPACK_LIBRARIES
+ LAPACK
+ cheev
+ ""
+ "lapack"
+ "${BLAS_LIBRARIES}"
+ )
+ if(LAPACK_LIBRARIES)
+ SET(LAPACK_INFO "generic")
+ endif(LAPACK_LIBRARIES)
+ endif()
+
+else(BLAS_FOUND)
+ message(STATUS "LAPACK requires BLAS")
+endif(BLAS_FOUND)
+
+if(LAPACK_INFO)
+ set(LAPACK_FOUND TRUE)
+else(LAPACK_INFO)
+ set(LAPACK_FOUND FALSE)
+endif(LAPACK_INFO)
+
+IF (NOT LAPACK_FOUND AND LAPACK_FIND_REQUIRED)
+ message(FATAL_ERROR "Cannot find a library with LAPACK API. Please specify library location.")
+ENDIF (NOT LAPACK_FOUND AND LAPACK_FIND_REQUIRED)
+IF(NOT LAPACK_FIND_QUIETLY)
+ IF(LAPACK_FOUND)
+ MESSAGE(STATUS "Found a library with LAPACK API. (${LAPACK_INFO})")
+ ELSE(LAPACK_FOUND)
+ MESSAGE(STATUS "Cannot find a library with LAPACK API. Not using LAPACK.")
+ ENDIF(LAPACK_FOUND)
+ENDIF(NOT LAPACK_FIND_QUIETLY)
+
+# Do nothing if LAPACK was found before
+ENDIF(NOT LAPACK_FOUND)
diff --git a/3rdparty/caffe/cmake/Modules/FindLMDB.cmake b/3rdparty/caffe/cmake/Modules/FindLMDB.cmake
new file mode 100644
index 00000000..8a817fd6
--- /dev/null
+++ b/3rdparty/caffe/cmake/Modules/FindLMDB.cmake
@@ -0,0 +1,28 @@
+# Try to find the LMBD libraries and headers
+# LMDB_FOUND - system has LMDB lib
+# LMDB_INCLUDE_DIR - the LMDB include directory
+# LMDB_LIBRARIES - Libraries needed to use LMDB
+
+# FindCWD based on FindGMP by:
+# Copyright (c) 2006, Laurent Montel,
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+
+# Adapted from FindCWD by:
+# Copyright 2013 Conrad Steenberg
+# Aug 31, 2013
+
+find_path(LMDB_INCLUDE_DIR NAMES lmdb.h PATHS "$ENV{LMDB_DIR}/include")
+find_library(LMDB_LIBRARIES NAMES lmdb PATHS "$ENV{LMDB_DIR}/lib" )
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(LMDB DEFAULT_MSG LMDB_INCLUDE_DIR LMDB_LIBRARIES)
+
+if(LMDB_FOUND)
+ message(STATUS "Found lmdb (include: ${LMDB_INCLUDE_DIR}, library: ${LMDB_LIBRARIES})")
+ mark_as_advanced(LMDB_INCLUDE_DIR LMDB_LIBRARIES)
+
+ caffe_parse_header(${LMDB_INCLUDE_DIR}/lmdb.h
+ LMDB_VERSION_LINES MDB_VERSION_MAJOR MDB_VERSION_MINOR MDB_VERSION_PATCH)
+ set(LMDB_VERSION "${MDB_VERSION_MAJOR}.${MDB_VERSION_MINOR}.${MDB_VERSION_PATCH}")
+endif()
diff --git a/3rdparty/caffe/cmake/Modules/FindLevelDB.cmake b/3rdparty/caffe/cmake/Modules/FindLevelDB.cmake
new file mode 100644
index 00000000..97f08ac9
--- /dev/null
+++ b/3rdparty/caffe/cmake/Modules/FindLevelDB.cmake
@@ -0,0 +1,44 @@
+# - Find LevelDB
+#
+# LevelDB_INCLUDES - List of LevelDB includes
+# LevelDB_LIBRARIES - List of libraries when using LevelDB.
+# LevelDB_FOUND - True if LevelDB found.
+
+# Look for the header file.
+find_path(LevelDB_INCLUDE NAMES leveldb/db.h
+ PATHS $ENV{LEVELDB_ROOT}/include /opt/local/include /usr/local/include /usr/include
+ DOC "Path in which the file leveldb/db.h is located." )
+
+# Look for the library.
+find_library(LevelDB_LIBRARY NAMES leveldb
+ PATHS /usr/lib $ENV{LEVELDB_ROOT}/lib
+ DOC "Path to leveldb library." )
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(LevelDB DEFAULT_MSG LevelDB_INCLUDE LevelDB_LIBRARY)
+
+if(LEVELDB_FOUND)
+ message(STATUS "Found LevelDB (include: ${LevelDB_INCLUDE}, library: ${LevelDB_LIBRARY})")
+ set(LevelDB_INCLUDES ${LevelDB_INCLUDE})
+ set(LevelDB_LIBRARIES ${LevelDB_LIBRARY})
+ mark_as_advanced(LevelDB_INCLUDE LevelDB_LIBRARY)
+
+ if(EXISTS "${LevelDB_INCLUDE}/leveldb/db.h")
+ file(STRINGS "${LevelDB_INCLUDE}/leveldb/db.h" __version_lines
+ REGEX "static const int k[^V]+Version[ \t]+=[ \t]+[0-9]+;")
+
+ foreach(__line ${__version_lines})
+ if(__line MATCHES "[^k]+kMajorVersion[ \t]+=[ \t]+([0-9]+);")
+ set(LEVELDB_VERSION_MAJOR ${CMAKE_MATCH_1})
+ elseif(__line MATCHES "[^k]+kMinorVersion[ \t]+=[ \t]+([0-9]+);")
+ set(LEVELDB_VERSION_MINOR ${CMAKE_MATCH_1})
+ endif()
+ endforeach()
+
+ if(LEVELDB_VERSION_MAJOR AND LEVELDB_VERSION_MINOR)
+ set(LEVELDB_VERSION "${LEVELDB_VERSION_MAJOR}.${LEVELDB_VERSION_MINOR}")
+ endif()
+
+ caffe_clear_vars(__line __version_lines)
+ endif()
+endif()
diff --git a/3rdparty/caffe/cmake/Modules/FindMKL.cmake b/3rdparty/caffe/cmake/Modules/FindMKL.cmake
new file mode 100644
index 00000000..5ab93b2d
--- /dev/null
+++ b/3rdparty/caffe/cmake/Modules/FindMKL.cmake
@@ -0,0 +1,110 @@
+# Find the MKL libraries
+#
+# Options:
+#
+# MKL_USE_SINGLE_DYNAMIC_LIBRARY : use single dynamic library interface
+# MKL_USE_STATIC_LIBS : use static libraries
+# MKL_MULTI_THREADED : use multi-threading
+#
+# This module defines the following variables:
+#
+# MKL_FOUND : True mkl is found
+# MKL_INCLUDE_DIR : unclude directory
+# MKL_LIBRARIES : the libraries to link against.
+
+
+# ---[ Options
+caffe_option(MKL_USE_SINGLE_DYNAMIC_LIBRARY "Use single dynamic library interface" ON)
+caffe_option(MKL_USE_STATIC_LIBS "Use static libraries" OFF IF NOT MKL_USE_SINGLE_DYNAMIC_LIBRARY)
+caffe_option(MKL_MULTI_THREADED "Use multi-threading" ON IF NOT MKL_USE_SINGLE_DYNAMIC_LIBRARY)
+
+# ---[ Root folders
+set(INTEL_ROOT "/opt/intel" CACHE PATH "Folder contains intel libs")
+find_path(MKL_ROOT include/mkl.h PATHS $ENV{MKLROOT} ${INTEL_ROOT}/mkl
+ DOC "Folder contains MKL")
+
+# ---[ Find include dir
+find_path(MKL_INCLUDE_DIR mkl.h PATHS ${MKL_ROOT} PATH_SUFFIXES include)
+set(__looked_for MKL_INCLUDE_DIR)
+
+# ---[ Find libraries
+if(CMAKE_SIZEOF_VOID_P EQUAL 4)
+ set(__path_suffixes lib lib/ia32)
+else()
+ set(__path_suffixes lib lib/intel64)
+endif()
+
+set(__mkl_libs "")
+if(MKL_USE_SINGLE_DYNAMIC_LIBRARY)
+ list(APPEND __mkl_libs rt)
+else()
+ if(CMAKE_SIZEOF_VOID_P EQUAL 4)
+ if(WIN32)
+ list(APPEND __mkl_libs intel_c)
+ else()
+ list(APPEND __mkl_libs intel gf)
+ endif()
+ else()
+ list(APPEND __mkl_libs intel_lp64 gf_lp64)
+ endif()
+
+ if(MKL_MULTI_THREADED)
+ list(APPEND __mkl_libs intel_thread)
+ else()
+ list(APPEND __mkl_libs sequential)
+ endif()
+
+ list(APPEND __mkl_libs core cdft_core)
+endif()
+
+
+foreach (__lib ${__mkl_libs})
+ set(__mkl_lib "mkl_${__lib}")
+ string(TOUPPER ${__mkl_lib} __mkl_lib_upper)
+
+ if(MKL_USE_STATIC_LIBS)
+ set(__mkl_lib "lib${__mkl_lib}.a")
+ endif()
+
+ find_library(${__mkl_lib_upper}_LIBRARY
+ NAMES ${__mkl_lib}
+ PATHS ${MKL_ROOT} "${MKL_INCLUDE_DIR}/.."
+ PATH_SUFFIXES ${__path_suffixes}
+ DOC "The path to Intel(R) MKL ${__mkl_lib} library")
+ mark_as_advanced(${__mkl_lib_upper}_LIBRARY)
+
+ list(APPEND __looked_for ${__mkl_lib_upper}_LIBRARY)
+ list(APPEND MKL_LIBRARIES ${${__mkl_lib_upper}_LIBRARY})
+endforeach()
+
+
+if(NOT MKL_USE_SINGLE_DYNAMIC_LIBRARY)
+ if (MKL_USE_STATIC_LIBS)
+ set(__iomp5_libs iomp5 libiomp5mt.lib)
+ else()
+ set(__iomp5_libs iomp5 libiomp5md.lib)
+ endif()
+
+ if(WIN32)
+ find_path(INTEL_INCLUDE_DIR omp.h PATHS ${INTEL_ROOT} PATH_SUFFIXES include)
+ list(APPEND __looked_for INTEL_INCLUDE_DIR)
+ endif()
+
+ find_library(MKL_RTL_LIBRARY ${__iomp5_libs}
+ PATHS ${INTEL_RTL_ROOT} ${INTEL_ROOT}/compiler ${MKL_ROOT}/.. ${MKL_ROOT}/../compiler
+ PATH_SUFFIXES ${__path_suffixes}
+ DOC "Path to Path to OpenMP runtime library")
+
+ list(APPEND __looked_for MKL_RTL_LIBRARY)
+ list(APPEND MKL_LIBRARIES ${MKL_RTL_LIBRARY})
+endif()
+
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(MKL DEFAULT_MSG ${__looked_for})
+
+if(MKL_FOUND)
+ message(STATUS "Found MKL (include: ${MKL_INCLUDE_DIR}, lib: ${MKL_LIBRARIES}")
+endif()
+
+caffe_clear_vars(__looked_for __mkl_libs __path_suffixes __lib_suffix __iomp5_libs)
diff --git a/3rdparty/caffe/cmake/Modules/FindMatlabMex.cmake b/3rdparty/caffe/cmake/Modules/FindMatlabMex.cmake
new file mode 100644
index 00000000..28ae65e7
--- /dev/null
+++ b/3rdparty/caffe/cmake/Modules/FindMatlabMex.cmake
@@ -0,0 +1,48 @@
+# This module looks for MatlabMex compiler
+# Defines variables:
+# Matlab_DIR - Matlab root dir
+# Matlab_mex - path to mex compiler
+# Matlab_mexext - path to mexext
+
+if(MSVC)
+ foreach(__ver "9.30" "7.14" "7.11" "7.10" "7.9" "7.8" "7.7")
+ get_filename_component(__matlab_root "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB\\${__ver};MATLABROOT]" ABSOLUTE)
+ if(__matlab_root)
+ break()
+ endif()
+ endforeach()
+endif()
+
+if(APPLE)
+ foreach(__ver "R2014b" "R2014a" "R2013b" "R2013a" "R2012b" "R2012a" "R2011b" "R2011a" "R2010b" "R2010a")
+ if(EXISTS /Applications/MATLAB_${__ver}.app)
+ set(__matlab_root /Applications/MATLAB_${__ver}.app)
+ break()
+ endif()
+ endforeach()
+endif()
+
+if(UNIX)
+ execute_process(COMMAND which matlab OUTPUT_STRIP_TRAILING_WHITESPACE
+ OUTPUT_VARIABLE __out RESULT_VARIABLE __res)
+
+ if(__res MATCHES 0) # Suppress `readlink` warning if `which` returned nothing
+ execute_process(COMMAND which matlab COMMAND xargs readlink
+ COMMAND xargs dirname COMMAND xargs dirname COMMAND xargs echo -n
+ OUTPUT_VARIABLE __matlab_root OUTPUT_STRIP_TRAILING_WHITESPACE)
+ endif()
+endif()
+
+
+find_path(Matlab_DIR NAMES bin/mex bin/mexext PATHS ${__matlab_root}
+ DOC "Matlab directory" NO_DEFAULT_PATH)
+
+find_program(Matlab_mex NAMES mex mex.bat HINTS ${Matlab_DIR} PATH_SUFFIXES bin NO_DEFAULT_PATH)
+find_program(Matlab_mexext NAMES mexext mexext.bat HINTS ${Matlab_DIR} PATH_SUFFIXES bin NO_DEFAULT_PATH)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(MatlabMex DEFAULT_MSG Matlab_mex Matlab_mexext)
+
+if(MATLABMEX_FOUND)
+ mark_as_advanced(Matlab_mex Matlab_mexext)
+endif()
diff --git a/3rdparty/caffe/cmake/Modules/FindNCCL.cmake b/3rdparty/caffe/cmake/Modules/FindNCCL.cmake
new file mode 100644
index 00000000..c8845934
--- /dev/null
+++ b/3rdparty/caffe/cmake/Modules/FindNCCL.cmake
@@ -0,0 +1,26 @@
+set(NCCL_INC_PATHS
+ /usr/include
+ /usr/local/include
+ $ENV{NCCL_DIR}/include
+ )
+
+set(NCCL_LIB_PATHS
+ /lib
+ /lib64
+ /usr/lib
+ /usr/lib64
+ /usr/local/lib
+ /usr/local/lib64
+ $ENV{NCCL_DIR}/lib
+ )
+
+find_path(NCCL_INCLUDE_DIR NAMES nccl.h PATHS ${NCCL_INC_PATHS})
+find_library(NCCL_LIBRARIES NAMES nccl PATHS ${NCCL_LIB_PATHS})
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(NCCL DEFAULT_MSG NCCL_INCLUDE_DIR NCCL_LIBRARIES)
+
+if (NCCL_FOUND)
+ message(STATUS "Found NCCL (include: ${NCCL_INCLUDE_DIR}, library: ${NCCL_LIBRARIES})")
+ mark_as_advanced(NCCL_INCLUDE_DIR NCCL_LIBRARIES)
+endif ()
diff --git a/3rdparty/caffe/cmake/Modules/FindNumPy.cmake b/3rdparty/caffe/cmake/Modules/FindNumPy.cmake
new file mode 100644
index 00000000..a671494c
--- /dev/null
+++ b/3rdparty/caffe/cmake/Modules/FindNumPy.cmake
@@ -0,0 +1,58 @@
+# - Find the NumPy libraries
+# This module finds if NumPy is installed, and sets the following variables
+# indicating where it is.
+#
+# TODO: Update to provide the libraries and paths for linking npymath lib.
+#
+# NUMPY_FOUND - was NumPy found
+# NUMPY_VERSION - the version of NumPy found as a string
+# NUMPY_VERSION_MAJOR - the major version number of NumPy
+# NUMPY_VERSION_MINOR - the minor version number of NumPy
+# NUMPY_VERSION_PATCH - the patch version number of NumPy
+# NUMPY_VERSION_DECIMAL - e.g. version 1.6.1 is 10601
+# NUMPY_INCLUDE_DIR - path to the NumPy include files
+
+unset(NUMPY_VERSION)
+unset(NUMPY_INCLUDE_DIR)
+
+if(PYTHONINTERP_FOUND)
+ execute_process(COMMAND "${PYTHON_EXECUTABLE}" "-c"
+ "import numpy as n; print(n.__version__); print(n.get_include());"
+ RESULT_VARIABLE __result
+ OUTPUT_VARIABLE __output
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ if(__result MATCHES 0)
+ string(REGEX REPLACE ";" "\\\\;" __values ${__output})
+ string(REGEX REPLACE "\r?\n" ";" __values ${__values})
+ list(GET __values 0 NUMPY_VERSION)
+ list(GET __values 1 NUMPY_INCLUDE_DIR)
+
+ string(REGEX MATCH "^([0-9])+\\.([0-9])+\\.([0-9])+" __ver_check "${NUMPY_VERSION}")
+ if(NOT "${__ver_check}" STREQUAL "")
+ set(NUMPY_VERSION_MAJOR ${CMAKE_MATCH_1})
+ set(NUMPY_VERSION_MINOR ${CMAKE_MATCH_2})
+ set(NUMPY_VERSION_PATCH ${CMAKE_MATCH_3})
+ math(EXPR NUMPY_VERSION_DECIMAL
+ "(${NUMPY_VERSION_MAJOR} * 10000) + (${NUMPY_VERSION_MINOR} * 100) + ${NUMPY_VERSION_PATCH}")
+ string(REGEX REPLACE "\\\\" "/" NUMPY_INCLUDE_DIR ${NUMPY_INCLUDE_DIR})
+ else()
+ unset(NUMPY_VERSION)
+ unset(NUMPY_INCLUDE_DIR)
+ message(STATUS "Requested NumPy version and include path, but got instead:\n${__output}\n")
+ endif()
+ endif()
+else()
+ message(STATUS "To find NumPy Python interpretator is required to be found.")
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(NumPy REQUIRED_VARS NUMPY_INCLUDE_DIR NUMPY_VERSION
+ VERSION_VAR NUMPY_VERSION)
+
+if(NUMPY_FOUND)
+ message(STATUS "NumPy ver. ${NUMPY_VERSION} found (include: ${NUMPY_INCLUDE_DIR})")
+endif()
+
+caffe_clear_vars(__result __output __error_value __values __ver_check __error_value)
+
diff --git a/3rdparty/caffe/cmake/Modules/FindOpenBLAS.cmake b/3rdparty/caffe/cmake/Modules/FindOpenBLAS.cmake
new file mode 100644
index 00000000..a6512ae7
--- /dev/null
+++ b/3rdparty/caffe/cmake/Modules/FindOpenBLAS.cmake
@@ -0,0 +1,64 @@
+
+
+SET(Open_BLAS_INCLUDE_SEARCH_PATHS
+ /usr/include
+ /usr/include/openblas
+ /usr/include/openblas-base
+ /usr/local/include
+ /usr/local/include/openblas
+ /usr/local/include/openblas-base
+ /opt/OpenBLAS/include
+ $ENV{OpenBLAS_HOME}
+ $ENV{OpenBLAS_HOME}/include
+)
+
+SET(Open_BLAS_LIB_SEARCH_PATHS
+ /lib/
+ /lib/openblas-base
+ /lib64/
+ /usr/lib
+ /usr/lib/openblas-base
+ /usr/lib64
+ /usr/local/lib
+ /usr/local/lib64
+ /opt/OpenBLAS/lib
+ $ENV{OpenBLAS}cd
+ $ENV{OpenBLAS}/lib
+ $ENV{OpenBLAS_HOME}
+ $ENV{OpenBLAS_HOME}/lib
+ )
+
+FIND_PATH(OpenBLAS_INCLUDE_DIR NAMES cblas.h PATHS ${Open_BLAS_INCLUDE_SEARCH_PATHS})
+FIND_LIBRARY(OpenBLAS_LIB NAMES openblas PATHS ${Open_BLAS_LIB_SEARCH_PATHS})
+
+SET(OpenBLAS_FOUND ON)
+
+# Check include files
+IF(NOT OpenBLAS_INCLUDE_DIR)
+ SET(OpenBLAS_FOUND OFF)
+ MESSAGE(STATUS "Could not find OpenBLAS include. Turning OpenBLAS_FOUND off")
+ENDIF()
+
+# Check libraries
+IF(NOT OpenBLAS_LIB)
+ SET(OpenBLAS_FOUND OFF)
+ MESSAGE(STATUS "Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off")
+ENDIF()
+
+IF (OpenBLAS_FOUND)
+ IF (NOT OpenBLAS_FIND_QUIETLY)
+ MESSAGE(STATUS "Found OpenBLAS libraries: ${OpenBLAS_LIB}")
+ MESSAGE(STATUS "Found OpenBLAS include: ${OpenBLAS_INCLUDE_DIR}")
+ ENDIF (NOT OpenBLAS_FIND_QUIETLY)
+ELSE (OpenBLAS_FOUND)
+ IF (OpenBLAS_FIND_REQUIRED)
+ MESSAGE(FATAL_ERROR "Could not find OpenBLAS")
+ ENDIF (OpenBLAS_FIND_REQUIRED)
+ENDIF (OpenBLAS_FOUND)
+
+MARK_AS_ADVANCED(
+ OpenBLAS_INCLUDE_DIR
+ OpenBLAS_LIB
+ OpenBLAS
+)
+
diff --git a/3rdparty/caffe/cmake/Modules/FindSnappy.cmake b/3rdparty/caffe/cmake/Modules/FindSnappy.cmake
new file mode 100644
index 00000000..eff2a864
--- /dev/null
+++ b/3rdparty/caffe/cmake/Modules/FindSnappy.cmake
@@ -0,0 +1,28 @@
+# Find the Snappy libraries
+#
+# The following variables are optionally searched for defaults
+# Snappy_ROOT_DIR: Base directory where all Snappy components are found
+#
+# The following are set after configuration is done:
+# SNAPPY_FOUND
+# Snappy_INCLUDE_DIR
+# Snappy_LIBRARIES
+
+find_path(Snappy_INCLUDE_DIR NAMES snappy.h
+ PATHS ${SNAPPY_ROOT_DIR} ${SNAPPY_ROOT_DIR}/include)
+
+find_library(Snappy_LIBRARIES NAMES snappy
+ PATHS ${SNAPPY_ROOT_DIR} ${SNAPPY_ROOT_DIR}/lib)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Snappy DEFAULT_MSG Snappy_INCLUDE_DIR Snappy_LIBRARIES)
+
+if(SNAPPY_FOUND)
+ message(STATUS "Found Snappy (include: ${Snappy_INCLUDE_DIR}, library: ${Snappy_LIBRARIES})")
+ mark_as_advanced(Snappy_INCLUDE_DIR Snappy_LIBRARIES)
+
+ caffe_parse_header(${Snappy_INCLUDE_DIR}/snappy-stubs-public.h
+ SNAPPY_VERION_LINES SNAPPY_MAJOR SNAPPY_MINOR SNAPPY_PATCHLEVEL)
+ set(Snappy_VERSION "${SNAPPY_MAJOR}.${SNAPPY_MINOR}.${SNAPPY_PATCHLEVEL}")
+endif()
+
diff --git a/3rdparty/caffe/cmake/Modules/FindvecLib.cmake b/3rdparty/caffe/cmake/Modules/FindvecLib.cmake
new file mode 100644
index 00000000..8eaab594
--- /dev/null
+++ b/3rdparty/caffe/cmake/Modules/FindvecLib.cmake
@@ -0,0 +1,35 @@
+# Find the vecLib libraries as part of Accelerate.framework or as standalon framework
+#
+# The following are set after configuration is done:
+# VECLIB_FOUND
+# vecLib_INCLUDE_DIR
+# vecLib_LINKER_LIBS
+
+
+if(NOT APPLE)
+ return()
+endif()
+
+set(__veclib_include_suffix "Frameworks/vecLib.framework/Versions/Current/Headers")
+
+find_path(vecLib_INCLUDE_DIR vecLib.h
+ DOC "vecLib include directory"
+ PATHS /System/Library/Frameworks/Accelerate.framework/Versions/Current/${__veclib_include_suffix}
+ /System/Library/${__veclib_include_suffix}
+ /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Accelerate.framework/Versions/Current/Frameworks/vecLib.framework/Headers/
+ NO_DEFAULT_PATH)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(vecLib DEFAULT_MSG vecLib_INCLUDE_DIR)
+
+if(VECLIB_FOUND)
+ if(vecLib_INCLUDE_DIR MATCHES "^/System/Library/Frameworks/vecLib.framework.*")
+ set(vecLib_LINKER_LIBS -lcblas "-framework vecLib")
+ message(STATUS "Found standalone vecLib.framework")
+ else()
+ set(vecLib_LINKER_LIBS -lcblas "-framework Accelerate")
+ message(STATUS "Found vecLib as part of Accelerate.framework")
+ endif()
+
+ mark_as_advanced(vecLib_INCLUDE_DIR)
+endif()
diff --git a/3rdparty/caffe/cmake/ProtoBuf.cmake b/3rdparty/caffe/cmake/ProtoBuf.cmake
new file mode 100644
index 00000000..8005b448
--- /dev/null
+++ b/3rdparty/caffe/cmake/ProtoBuf.cmake
@@ -0,0 +1,90 @@
+# Finds Google Protocol Buffers library and compilers and extends
+# the standard cmake script with version and python generation support
+
+find_package( Protobuf REQUIRED )
+list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${PROTOBUF_INCLUDE_DIR})
+list(APPEND Caffe_LINKER_LIBS PUBLIC ${PROTOBUF_LIBRARIES})
+
+# As of Ubuntu 14.04 protoc is no longer a part of libprotobuf-dev package
+# and should be installed separately as in: sudo apt-get install protobuf-compiler
+if(EXISTS ${PROTOBUF_PROTOC_EXECUTABLE})
+ message(STATUS "Found PROTOBUF Compiler: ${PROTOBUF_PROTOC_EXECUTABLE}")
+else()
+ message(FATAL_ERROR "Could not find PROTOBUF Compiler")
+endif()
+
+if(PROTOBUF_FOUND)
+ # fetches protobuf version
+ caffe_parse_header(${PROTOBUF_INCLUDE_DIR}/google/protobuf/stubs/common.h VERION_LINE GOOGLE_PROTOBUF_VERSION)
+ string(REGEX MATCH "([0-9])00([0-9])00([0-9])" PROTOBUF_VERSION ${GOOGLE_PROTOBUF_VERSION})
+ set(PROTOBUF_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
+ unset(GOOGLE_PROTOBUF_VERSION)
+endif()
+
+# place where to generate protobuf sources
+set(proto_gen_folder "${PROJECT_BINARY_DIR}/include/caffe/proto")
+include_directories("${PROJECT_BINARY_DIR}/include")
+
+set(PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE)
+
+################################################################################################
+# Modification of standard 'protobuf_generate_cpp()' with output dir parameter and python support
+# Usage:
+# caffe_protobuf_generate_cpp_py( )
+function(caffe_protobuf_generate_cpp_py output_dir srcs_var hdrs_var python_var)
+ if(NOT ARGN)
+ message(SEND_ERROR "Error: caffe_protobuf_generate_cpp_py() called without any proto files")
+ return()
+ endif()
+
+ if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
+ # Create an include path for each file specified
+ foreach(fil ${ARGN})
+ get_filename_component(abs_fil ${fil} ABSOLUTE)
+ get_filename_component(abs_path ${abs_fil} PATH)
+ list(FIND _protoc_include ${abs_path} _contains_already)
+ if(${_contains_already} EQUAL -1)
+ list(APPEND _protoc_include -I ${abs_path})
+ endif()
+ endforeach()
+ else()
+ set(_protoc_include -I ${CMAKE_CURRENT_SOURCE_DIR})
+ endif()
+
+ if(DEFINED PROTOBUF_IMPORT_DIRS)
+ foreach(dir ${PROTOBUF_IMPORT_DIRS})
+ get_filename_component(abs_path ${dir} ABSOLUTE)
+ list(FIND _protoc_include ${abs_path} _contains_already)
+ if(${_contains_already} EQUAL -1)
+ list(APPEND _protoc_include -I ${abs_path})
+ endif()
+ endforeach()
+ endif()
+
+ set(${srcs_var})
+ set(${hdrs_var})
+ set(${python_var})
+ foreach(fil ${ARGN})
+ get_filename_component(abs_fil ${fil} ABSOLUTE)
+ get_filename_component(fil_we ${fil} NAME_WE)
+
+ list(APPEND ${srcs_var} "${output_dir}/${fil_we}.pb.cc")
+ list(APPEND ${hdrs_var} "${output_dir}/${fil_we}.pb.h")
+ list(APPEND ${python_var} "${output_dir}/${fil_we}_pb2.py")
+
+ add_custom_command(
+ OUTPUT "${output_dir}/${fil_we}.pb.cc"
+ "${output_dir}/${fil_we}.pb.h"
+ "${output_dir}/${fil_we}_pb2.py"
+ COMMAND ${CMAKE_COMMAND} -E make_directory "${output_dir}"
+ COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} --cpp_out ${output_dir} ${_protoc_include} ${abs_fil}
+ COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} --python_out ${output_dir} ${_protoc_include} ${abs_fil}
+ DEPENDS ${abs_fil}
+ COMMENT "Running C++/Python protocol buffer compiler on ${fil}" VERBATIM )
+ endforeach()
+
+ set_source_files_properties(${${srcs_var}} ${${hdrs_var}} ${${python_var}} PROPERTIES GENERATED TRUE)
+ set(${srcs_var} ${${srcs_var}} PARENT_SCOPE)
+ set(${hdrs_var} ${${hdrs_var}} PARENT_SCOPE)
+ set(${python_var} ${${python_var}} PARENT_SCOPE)
+endfunction()
diff --git a/3rdparty/caffe/cmake/Summary.cmake b/3rdparty/caffe/cmake/Summary.cmake
new file mode 100644
index 00000000..ed8c2526
--- /dev/null
+++ b/3rdparty/caffe/cmake/Summary.cmake
@@ -0,0 +1,178 @@
+################################################################################################
+# Caffe status report function.
+# Automatically align right column and selects text based on condition.
+# Usage:
+# caffe_status()
+# caffe_status( [ ...])
+# caffe_status( THEN ELSE )
+function(caffe_status text)
+ set(status_cond)
+ set(status_then)
+ set(status_else)
+
+ set(status_current_name "cond")
+ foreach(arg ${ARGN})
+ if(arg STREQUAL "THEN")
+ set(status_current_name "then")
+ elseif(arg STREQUAL "ELSE")
+ set(status_current_name "else")
+ else()
+ list(APPEND status_${status_current_name} ${arg})
+ endif()
+ endforeach()
+
+ if(DEFINED status_cond)
+ set(status_placeholder_length 23)
+ string(RANDOM LENGTH ${status_placeholder_length} ALPHABET " " status_placeholder)
+ string(LENGTH "${text}" status_text_length)
+ if(status_text_length LESS status_placeholder_length)
+ string(SUBSTRING "${text}${status_placeholder}" 0 ${status_placeholder_length} status_text)
+ elseif(DEFINED status_then OR DEFINED status_else)
+ message(STATUS "${text}")
+ set(status_text "${status_placeholder}")
+ else()
+ set(status_text "${text}")
+ endif()
+
+ if(DEFINED status_then OR DEFINED status_else)
+ if(${status_cond})
+ string(REPLACE ";" " " status_then "${status_then}")
+ string(REGEX REPLACE "^[ \t]+" "" status_then "${status_then}")
+ message(STATUS "${status_text} ${status_then}")
+ else()
+ string(REPLACE ";" " " status_else "${status_else}")
+ string(REGEX REPLACE "^[ \t]+" "" status_else "${status_else}")
+ message(STATUS "${status_text} ${status_else}")
+ endif()
+ else()
+ string(REPLACE ";" " " status_cond "${status_cond}")
+ string(REGEX REPLACE "^[ \t]+" "" status_cond "${status_cond}")
+ message(STATUS "${status_text} ${status_cond}")
+ endif()
+ else()
+ message(STATUS "${text}")
+ endif()
+endfunction()
+
+
+################################################################################################
+# Function for fetching Caffe version from git and headers
+# Usage:
+# caffe_extract_caffe_version()
+function(caffe_extract_caffe_version)
+ set(Caffe_GIT_VERSION "unknown")
+ find_package(Git)
+ if(GIT_FOUND)
+ execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --always --dirty
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
+ WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
+ OUTPUT_VARIABLE Caffe_GIT_VERSION
+ RESULT_VARIABLE __git_result)
+ if(NOT ${__git_result} EQUAL 0)
+ set(Caffe_GIT_VERSION "unknown")
+ endif()
+ endif()
+
+ set(Caffe_GIT_VERSION ${Caffe_GIT_VERSION} PARENT_SCOPE)
+ set(Caffe_VERSION " (Caffe doesn't declare its version in headers)" PARENT_SCOPE)
+
+ # caffe_parse_header(${Caffe_INCLUDE_DIR}/caffe/version.hpp Caffe_VERSION_LINES CAFFE_MAJOR CAFFE_MINOR CAFFE_PATCH)
+ # set(Caffe_VERSION "${CAFFE_MAJOR}.${CAFFE_MINOR}.${CAFFE_PATCH}" PARENT_SCOPE)
+
+ # or for #define Caffe_VERSION "x.x.x"
+ # caffe_parse_header_single_define(Caffe ${Caffe_INCLUDE_DIR}/caffe/version.hpp Caffe_VERSION)
+ # set(Caffe_VERSION ${Caffe_VERSION_STRING} PARENT_SCOPE)
+
+endfunction()
+
+
+################################################################################################
+# Prints accumulated caffe configuration summary
+# Usage:
+# caffe_print_configuration_summary()
+
+function(caffe_print_configuration_summary)
+ caffe_extract_caffe_version()
+ set(Caffe_VERSION ${Caffe_VERSION} PARENT_SCOPE)
+
+ caffe_merge_flag_lists(__flags_rel CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS)
+ caffe_merge_flag_lists(__flags_deb CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS)
+
+ caffe_status("")
+ caffe_status("******************* Caffe Configuration Summary *******************")
+ caffe_status("General:")
+ caffe_status(" Version : ${CAFFE_TARGET_VERSION}")
+ caffe_status(" Git : ${Caffe_GIT_VERSION}")
+ caffe_status(" System : ${CMAKE_SYSTEM_NAME}")
+ caffe_status(" C++ compiler : ${CMAKE_CXX_COMPILER}")
+ caffe_status(" Release CXX flags : ${__flags_rel}")
+ caffe_status(" Debug CXX flags : ${__flags_deb}")
+ caffe_status(" Build type : ${CMAKE_BUILD_TYPE}")
+ caffe_status("")
+ caffe_status(" BUILD_SHARED_LIBS : ${BUILD_SHARED_LIBS}")
+ caffe_status(" BUILD_python : ${BUILD_python}")
+ caffe_status(" BUILD_matlab : ${BUILD_matlab}")
+ caffe_status(" BUILD_docs : ${BUILD_docs}")
+ caffe_status(" CPU_ONLY : ${CPU_ONLY}")
+ caffe_status(" USE_OPENCV : ${USE_OPENCV}")
+ caffe_status(" USE_LEVELDB : ${USE_LEVELDB}")
+ caffe_status(" USE_LMDB : ${USE_LMDB}")
+ caffe_status(" USE_NCCL : ${USE_NCCL}")
+ caffe_status(" ALLOW_LMDB_NOLOCK : ${ALLOW_LMDB_NOLOCK}")
+ caffe_status("")
+ caffe_status("Dependencies:")
+ caffe_status(" BLAS : " APPLE THEN "Yes (vecLib)" ELSE "Yes (${BLAS})")
+ caffe_status(" Boost : Yes (ver. ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION})")
+ caffe_status(" glog : Yes")
+ caffe_status(" gflags : Yes")
+ caffe_status(" protobuf : " PROTOBUF_FOUND THEN "Yes (ver. ${PROTOBUF_VERSION})" ELSE "No" )
+ if(USE_LMDB)
+ caffe_status(" lmdb : " LMDB_FOUND THEN "Yes (ver. ${LMDB_VERSION})" ELSE "No")
+ endif()
+ if(USE_LEVELDB)
+ caffe_status(" LevelDB : " LEVELDB_FOUND THEN "Yes (ver. ${LEVELDB_VERSION})" ELSE "No")
+ caffe_status(" Snappy : " SNAPPY_FOUND THEN "Yes (ver. ${Snappy_VERSION})" ELSE "No" )
+ endif()
+ if(USE_OPENCV)
+ caffe_status(" OpenCV : Yes (ver. ${OpenCV_VERSION})")
+ endif()
+ caffe_status(" CUDA : " HAVE_CUDA THEN "Yes (ver. ${CUDA_VERSION})" ELSE "No" )
+ caffe_status("")
+ if(HAVE_CUDA)
+ caffe_status("NVIDIA CUDA:")
+ caffe_status(" Target GPU(s) : ${CUDA_ARCH_NAME}" )
+ caffe_status(" GPU arch(s) : ${NVCC_FLAGS_EXTRA_readable}")
+ if(USE_CUDNN)
+ caffe_status(" cuDNN : " HAVE_CUDNN THEN "Yes (ver. ${CUDNN_VERSION})" ELSE "Not found")
+ else()
+ caffe_status(" cuDNN : Disabled")
+ endif()
+ caffe_status("")
+ endif()
+ if(HAVE_PYTHON)
+ caffe_status("Python:")
+ caffe_status(" Interpreter :" PYTHON_EXECUTABLE THEN "${PYTHON_EXECUTABLE} (ver. ${PYTHON_VERSION_STRING})" ELSE "No")
+ caffe_status(" Libraries :" PYTHONLIBS_FOUND THEN "${PYTHON_LIBRARIES} (ver ${PYTHONLIBS_VERSION_STRING})" ELSE "No")
+ caffe_status(" NumPy :" NUMPY_FOUND THEN "${NUMPY_INCLUDE_DIR} (ver ${NUMPY_VERSION})" ELSE "No")
+ caffe_status("")
+ endif()
+ if(BUILD_matlab)
+ caffe_status("Matlab:")
+ caffe_status(" Matlab :" HAVE_MATLAB THEN "Yes (${Matlab_mex}, ${Matlab_mexext}" ELSE "No")
+ caffe_status(" Octave :" Octave_compiler THEN "Yes (${Octave_compiler})" ELSE "No")
+ if(HAVE_MATLAB AND Octave_compiler)
+ caffe_status(" Build mex using : ${Matlab_build_mex_using}")
+ endif()
+ caffe_status("")
+ endif()
+ if(BUILD_docs)
+ caffe_status("Documentaion:")
+ caffe_status(" Doxygen :" DOXYGEN_FOUND THEN "${DOXYGEN_EXECUTABLE} (${DOXYGEN_VERSION})" ELSE "No")
+ caffe_status(" config_file : ${DOXYGEN_config_file}")
+
+ caffe_status("")
+ endif()
+ caffe_status("Install:")
+ caffe_status(" Install path : ${CMAKE_INSTALL_PREFIX}")
+ caffe_status("")
+endfunction()
diff --git a/3rdparty/caffe/cmake/Targets.cmake b/3rdparty/caffe/cmake/Targets.cmake
new file mode 100644
index 00000000..090f86c5
--- /dev/null
+++ b/3rdparty/caffe/cmake/Targets.cmake
@@ -0,0 +1,174 @@
+################################################################################################
+# Defines global Caffe_LINK flag, This flag is required to prevent linker from excluding
+# some objects which are not addressed directly but are registered via static constructors
+macro(caffe_set_caffe_link)
+ if(BUILD_SHARED_LIBS)
+ set(Caffe_LINK caffe)
+ else()
+ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ set(Caffe_LINK -Wl,-force_load caffe)
+ elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+ set(Caffe_LINK -Wl,--whole-archive caffe -Wl,--no-whole-archive)
+ endif()
+ endif()
+endmacro()
+################################################################################################
+# Convenient command to setup source group for IDEs that support this feature (VS, XCode)
+# Usage:
+# caffe_source_group( GLOB[_RECURSE] )
+function(caffe_source_group group)
+ cmake_parse_arguments(CAFFE_SOURCE_GROUP "" "" "GLOB;GLOB_RECURSE" ${ARGN})
+ if(CAFFE_SOURCE_GROUP_GLOB)
+ file(GLOB srcs1 ${CAFFE_SOURCE_GROUP_GLOB})
+ source_group(${group} FILES ${srcs1})
+ endif()
+
+ if(CAFFE_SOURCE_GROUP_GLOB_RECURSE)
+ file(GLOB_RECURSE srcs2 ${CAFFE_SOURCE_GROUP_GLOB_RECURSE})
+ source_group(${group} FILES ${srcs2})
+ endif()
+endfunction()
+
+################################################################################################
+# Collecting sources from globbing and appending to output list variable
+# Usage:
+# caffe_collect_sources( GLOB[_RECURSE] )
+function(caffe_collect_sources variable)
+ cmake_parse_arguments(CAFFE_COLLECT_SOURCES "" "" "GLOB;GLOB_RECURSE" ${ARGN})
+ if(CAFFE_COLLECT_SOURCES_GLOB)
+ file(GLOB srcs1 ${CAFFE_COLLECT_SOURCES_GLOB})
+ set(${variable} ${variable} ${srcs1})
+ endif()
+
+ if(CAFFE_COLLECT_SOURCES_GLOB_RECURSE)
+ file(GLOB_RECURSE srcs2 ${CAFFE_COLLECT_SOURCES_GLOB_RECURSE})
+ set(${variable} ${variable} ${srcs2})
+ endif()
+endfunction()
+
+################################################################################################
+# Short command getting caffe sources (assuming standard Caffe code tree)
+# Usage:
+# caffe_pickup_caffe_sources()
+function(caffe_pickup_caffe_sources root)
+ # put all files in source groups (visible as subfolder in many IDEs)
+ caffe_source_group("Include" GLOB "${root}/include/caffe/*.h*")
+ caffe_source_group("Include\\Util" GLOB "${root}/include/caffe/util/*.h*")
+ caffe_source_group("Include" GLOB "${PROJECT_BINARY_DIR}/caffe_config.h*")
+ caffe_source_group("Source" GLOB "${root}/src/caffe/*.cpp")
+ caffe_source_group("Source\\Util" GLOB "${root}/src/caffe/util/*.cpp")
+ caffe_source_group("Source\\Layers" GLOB "${root}/src/caffe/layers/*.cpp")
+ caffe_source_group("Source\\Cuda" GLOB "${root}/src/caffe/layers/*.cu")
+ caffe_source_group("Source\\Cuda" GLOB "${root}/src/caffe/util/*.cu")
+ caffe_source_group("Source\\Proto" GLOB "${root}/src/caffe/proto/*.proto")
+
+ # source groups for test target
+ caffe_source_group("Include" GLOB "${root}/include/caffe/test/test_*.h*")
+ caffe_source_group("Source" GLOB "${root}/src/caffe/test/test_*.cpp")
+ caffe_source_group("Source\\Cuda" GLOB "${root}/src/caffe/test/test_*.cu")
+
+ # collect files
+ file(GLOB test_hdrs ${root}/include/caffe/test/test_*.h*)
+ file(GLOB test_srcs ${root}/src/caffe/test/test_*.cpp)
+ file(GLOB_RECURSE hdrs ${root}/include/caffe/*.h*)
+ file(GLOB_RECURSE srcs ${root}/src/caffe/*.cpp)
+ list(REMOVE_ITEM hdrs ${test_hdrs})
+ list(REMOVE_ITEM srcs ${test_srcs})
+
+ # adding headers to make the visible in some IDEs (Qt, VS, Xcode)
+ list(APPEND srcs ${hdrs} ${PROJECT_BINARY_DIR}/caffe_config.h)
+ list(APPEND test_srcs ${test_hdrs})
+
+ # collect cuda files
+ file(GLOB test_cuda ${root}/src/caffe/test/test_*.cu)
+ file(GLOB_RECURSE cuda ${root}/src/caffe/*.cu)
+ list(REMOVE_ITEM cuda ${test_cuda})
+
+ # add proto to make them editable in IDEs too
+ file(GLOB_RECURSE proto_files ${root}/src/caffe/*.proto)
+ list(APPEND srcs ${proto_files})
+
+ # convert to absolute paths
+ caffe_convert_absolute_paths(srcs)
+ caffe_convert_absolute_paths(cuda)
+ caffe_convert_absolute_paths(test_srcs)
+ caffe_convert_absolute_paths(test_cuda)
+
+ # propagate to parent scope
+ set(srcs ${srcs} PARENT_SCOPE)
+ set(cuda ${cuda} PARENT_SCOPE)
+ set(test_srcs ${test_srcs} PARENT_SCOPE)
+ set(test_cuda ${test_cuda} PARENT_SCOPE)
+endfunction()
+
+################################################################################################
+# Short command for setting default target properties
+# Usage:
+# caffe_default_properties()
+function(caffe_default_properties target)
+ set_target_properties(${target} PROPERTIES
+ DEBUG_POSTFIX ${Caffe_DEBUG_POSTFIX}
+ ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib"
+ LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib"
+ RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
+ # make sure we build all external dependencies first
+ if (DEFINED external_project_dependencies)
+ add_dependencies(${target} ${external_project_dependencies})
+ endif()
+endfunction()
+
+################################################################################################
+# Short command for setting runtime directory for build target
+# Usage:
+# caffe_set_runtime_directory( )
+function(caffe_set_runtime_directory target dir)
+ set_target_properties(${target} PROPERTIES
+ RUNTIME_OUTPUT_DIRECTORY "${dir}")
+endfunction()
+
+################################################################################################
+# Short command for setting solution folder property for target
+# Usage:
+# caffe_set_solution_folder( )
+function(caffe_set_solution_folder target folder)
+ if(USE_PROJECT_FOLDERS)
+ set_target_properties(${target} PROPERTIES FOLDER "${folder}")
+ endif()
+endfunction()
+
+################################################################################################
+# Reads lines from input file, prepends source directory to each line and writes to output file
+# Usage:
+# caffe_configure_testdatafile()
+function(caffe_configure_testdatafile file)
+ file(STRINGS ${file} __lines)
+ set(result "")
+ foreach(line ${__lines})
+ set(result "${result}${PROJECT_SOURCE_DIR}/${line}\n")
+ endforeach()
+ file(WRITE ${file}.gen.cmake ${result})
+endfunction()
+
+################################################################################################
+# Filter out all files that are not included in selected list
+# Usage:
+# caffe_leave_only_selected_tests( )
+function(caffe_leave_only_selected_tests file_list)
+ if(NOT ARGN)
+ return() # blank list means leave all
+ endif()
+ string(REPLACE "," ";" __selected ${ARGN})
+ list(APPEND __selected caffe_main)
+
+ set(result "")
+ foreach(f ${${file_list}})
+ get_filename_component(name ${f} NAME_WE)
+ string(REGEX REPLACE "^test_" "" name ${name})
+ list(FIND __selected ${name} __index)
+ if(NOT __index EQUAL -1)
+ list(APPEND result ${f})
+ endif()
+ endforeach()
+ set(${file_list} ${result} PARENT_SCOPE)
+endfunction()
+
diff --git a/3rdparty/caffe/cmake/Templates/CaffeConfig.cmake.in b/3rdparty/caffe/cmake/Templates/CaffeConfig.cmake.in
new file mode 100644
index 00000000..77c4059e
--- /dev/null
+++ b/3rdparty/caffe/cmake/Templates/CaffeConfig.cmake.in
@@ -0,0 +1,55 @@
+# Config file for the Caffe package.
+#
+# Note:
+# Caffe and this config file depends on opencv,
+# so put `find_package(OpenCV)` before searching Caffe
+# via `find_package(Caffe)`. All other lib/includes
+# dependencies are hard coded in the file
+#
+# After successful configuration the following variables
+# will be defined:
+#
+# Caffe_LIBRARIES - IMPORTED targets to link against
+# (There is no Caffe_INCLUDE_DIRS and Caffe_DEFINITIONS
+# because they are specified in the IMPORTED target interface.)
+#
+# Caffe_HAVE_CUDA - signals about CUDA support
+# Caffe_HAVE_CUDNN - signals about cuDNN support
+
+
+# OpenCV dependency (optional)
+
+if(@USE_OPENCV@)
+ if(NOT OpenCV_FOUND)
+ set(Caffe_OpenCV_CONFIG_PATH "@OpenCV_CONFIG_PATH@")
+ if(Caffe_OpenCV_CONFIG_PATH)
+ get_filename_component(Caffe_OpenCV_CONFIG_PATH ${Caffe_OpenCV_CONFIG_PATH} ABSOLUTE)
+
+ if(EXISTS ${Caffe_OpenCV_CONFIG_PATH} AND NOT TARGET opencv_core)
+ message(STATUS "Caffe: using OpenCV config from ${Caffe_OpenCV_CONFIG_PATH}")
+ include(${Caffe_OpenCV_CONFIG_PATH}/OpenCVConfig.cmake)
+ endif()
+
+ else()
+ find_package(OpenCV REQUIRED)
+ endif()
+ unset(Caffe_OpenCV_CONFIG_PATH)
+ endif()
+endif()
+
+# Compute paths
+get_filename_component(Caffe_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+
+# Our library dependencies
+if(NOT TARGET caffe AND NOT caffe_BINARY_DIR)
+ include("${Caffe_CMAKE_DIR}/CaffeTargets.cmake")
+endif()
+
+# List of IMPORTED libs created by CaffeTargets.cmake
+# These targets already specify all needed definitions and include pathes
+set(Caffe_LIBRARIES caffe)
+
+# Cuda support variables
+set(Caffe_CPU_ONLY @CPU_ONLY@)
+set(Caffe_HAVE_CUDA @HAVE_CUDA@)
+set(Caffe_HAVE_CUDNN @HAVE_CUDNN@)
diff --git a/3rdparty/caffe/cmake/Templates/CaffeConfigVersion.cmake.in b/3rdparty/caffe/cmake/Templates/CaffeConfigVersion.cmake.in
new file mode 100644
index 00000000..19f85309
--- /dev/null
+++ b/3rdparty/caffe/cmake/Templates/CaffeConfigVersion.cmake.in
@@ -0,0 +1,11 @@
+set(PACKAGE_VERSION "@Caffe_VERSION@")
+
+# Check whether the requested PACKAGE_FIND_VERSION is compatible
+if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+else()
+ set(PACKAGE_VERSION_COMPATIBLE TRUE)
+ if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}")
+ set(PACKAGE_VERSION_EXACT TRUE)
+ endif()
+endif()
diff --git a/3rdparty/caffe/cmake/Templates/caffe_config.h.in b/3rdparty/caffe/cmake/Templates/caffe_config.h.in
new file mode 100644
index 00000000..2080c63d
--- /dev/null
+++ b/3rdparty/caffe/cmake/Templates/caffe_config.h.in
@@ -0,0 +1,12 @@
+/* Sources directory */
+#define SOURCE_FOLDER "${PROJECT_SOURCE_DIR}"
+
+/* Binaries directory */
+#define BINARY_FOLDER "${PROJECT_BINARY_DIR}"
+
+/* This is an absolute path so that we can run test from any build
+ * directory */
+#define ABS_TEST_DATA_DIR "${PROJECT_SOURCE_DIR}/src/caffe/test/test_data/"
+
+/* Test device */
+#define CUDA_TEST_DEVICE ${CUDA_TEST_DEVICE}
diff --git a/3rdparty/caffe/cmake/Uninstall.cmake.in b/3rdparty/caffe/cmake/Uninstall.cmake.in
new file mode 100644
index 00000000..bb8e2964
--- /dev/null
+++ b/3rdparty/caffe/cmake/Uninstall.cmake.in
@@ -0,0 +1,26 @@
+if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+ message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+
+if (NOT DEFINED CMAKE_INSTALL_PREFIX)
+ set (CMAKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@")
+endif ()
+ message(${CMAKE_INSTALL_PREFIX})
+
+file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
+string(REGEX REPLACE "\n" ";" files "${files}")
+foreach(file ${files})
+ message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
+ if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+ exec_program(
+ "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
+ OUTPUT_VARIABLE rm_out
+ RETURN_VALUE rm_retval
+ )
+ if(NOT "${rm_retval}" STREQUAL 0)
+ message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
+ endif(NOT "${rm_retval}" STREQUAL 0)
+ else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+ message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
+ endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+endforeach(file)
\ No newline at end of file
diff --git a/3rdparty/caffe/cmake/Utils.cmake b/3rdparty/caffe/cmake/Utils.cmake
new file mode 100644
index 00000000..653de5fd
--- /dev/null
+++ b/3rdparty/caffe/cmake/Utils.cmake
@@ -0,0 +1,382 @@
+################################################################################################
+# Command alias for debugging messages
+# Usage:
+# dmsg()
+function(dmsg)
+ message(STATUS ${ARGN})
+endfunction()
+
+################################################################################################
+# Removes duplicates from list(s)
+# Usage:
+# caffe_list_unique( [] [...])
+macro(caffe_list_unique)
+ foreach(__lst ${ARGN})
+ if(${__lst})
+ list(REMOVE_DUPLICATES ${__lst})
+ endif()
+ endforeach()
+endmacro()
+
+################################################################################################
+# Clears variables from list
+# Usage:
+# caffe_clear_vars()
+macro(caffe_clear_vars)
+ foreach(_var ${ARGN})
+ unset(${_var})
+ endforeach()
+endmacro()
+
+################################################################################################
+# Removes duplicates from string
+# Usage:
+# caffe_string_unique()
+function(caffe_string_unique __string)
+ if(${__string})
+ set(__list ${${__string}})
+ separate_arguments(__list)
+ list(REMOVE_DUPLICATES __list)
+ foreach(__e ${__list})
+ set(__str "${__str} ${__e}")
+ endforeach()
+ set(${__string} ${__str} PARENT_SCOPE)
+ endif()
+endfunction()
+
+################################################################################################
+# Prints list element per line
+# Usage:
+# caffe_print_list()
+function(caffe_print_list)
+ foreach(e ${ARGN})
+ message(STATUS ${e})
+ endforeach()
+endfunction()
+
+################################################################################################
+# Function merging lists of compiler flags to single string.
+# Usage:
+# caffe_merge_flag_lists(out_variable [] [] ...)
+function(caffe_merge_flag_lists out_var)
+ set(__result "")
+ foreach(__list ${ARGN})
+ foreach(__flag ${${__list}})
+ string(STRIP ${__flag} __flag)
+ set(__result "${__result} ${__flag}")
+ endforeach()
+ endforeach()
+ string(STRIP ${__result} __result)
+ set(${out_var} ${__result} PARENT_SCOPE)
+endfunction()
+
+################################################################################################
+# Converts all paths in list to absolute
+# Usage:
+# caffe_convert_absolute_paths()
+function(caffe_convert_absolute_paths variable)
+ set(__dlist "")
+ foreach(__s ${${variable}})
+ get_filename_component(__abspath ${__s} ABSOLUTE)
+ list(APPEND __list ${__abspath})
+ endforeach()
+ set(${variable} ${__list} PARENT_SCOPE)
+endfunction()
+
+################################################################################################
+# Reads set of version defines from the header file
+# Usage:
+# caffe_parse_header( ..)
+macro(caffe_parse_header FILENAME FILE_VAR)
+ set(vars_regex "")
+ set(__parnet_scope OFF)
+ set(__add_cache OFF)
+ foreach(name ${ARGN})
+ if("${name}" STREQUAL "PARENT_SCOPE")
+ set(__parnet_scope ON)
+ elseif("${name}" STREQUAL "CACHE")
+ set(__add_cache ON)
+ elseif(vars_regex)
+ set(vars_regex "${vars_regex}|${name}")
+ else()
+ set(vars_regex "${name}")
+ endif()
+ endforeach()
+ if(EXISTS "${FILENAME}")
+ file(STRINGS "${FILENAME}" ${FILE_VAR} REGEX "#define[ \t]+(${vars_regex})[ \t]+[0-9]+" )
+ else()
+ unset(${FILE_VAR})
+ endif()
+ foreach(name ${ARGN})
+ if(NOT "${name}" STREQUAL "PARENT_SCOPE" AND NOT "${name}" STREQUAL "CACHE")
+ if(${FILE_VAR})
+ if(${FILE_VAR} MATCHES ".+[ \t]${name}[ \t]+([0-9]+).*")
+ string(REGEX REPLACE ".+[ \t]${name}[ \t]+([0-9]+).*" "\\1" ${name} "${${FILE_VAR}}")
+ else()
+ set(${name} "")
+ endif()
+ if(__add_cache)
+ set(${name} ${${name}} CACHE INTERNAL "${name} parsed from ${FILENAME}" FORCE)
+ elseif(__parnet_scope)
+ set(${name} "${${name}}" PARENT_SCOPE)
+ endif()
+ else()
+ unset(${name} CACHE)
+ endif()
+ endif()
+ endforeach()
+endmacro()
+
+################################################################################################
+# Reads single version define from the header file and parses it
+# Usage:
+# caffe_parse_header_single_define( )
+function(caffe_parse_header_single_define LIBNAME HDR_PATH VARNAME)
+ set(${LIBNAME}_H "")
+ if(EXISTS "${HDR_PATH}")
+ file(STRINGS "${HDR_PATH}" ${LIBNAME}_H REGEX "^#define[ \t]+${VARNAME}[ \t]+\"[^\"]*\".*$" LIMIT_COUNT 1)
+ endif()
+
+ if(${LIBNAME}_H)
+ string(REGEX REPLACE "^.*[ \t]${VARNAME}[ \t]+\"([0-9]+).*$" "\\1" ${LIBNAME}_VERSION_MAJOR "${${LIBNAME}_H}")
+ string(REGEX REPLACE "^.*[ \t]${VARNAME}[ \t]+\"[0-9]+\\.([0-9]+).*$" "\\1" ${LIBNAME}_VERSION_MINOR "${${LIBNAME}_H}")
+ string(REGEX REPLACE "^.*[ \t]${VARNAME}[ \t]+\"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" ${LIBNAME}_VERSION_PATCH "${${LIBNAME}_H}")
+ set(${LIBNAME}_VERSION_MAJOR ${${LIBNAME}_VERSION_MAJOR} ${ARGN} PARENT_SCOPE)
+ set(${LIBNAME}_VERSION_MINOR ${${LIBNAME}_VERSION_MINOR} ${ARGN} PARENT_SCOPE)
+ set(${LIBNAME}_VERSION_PATCH ${${LIBNAME}_VERSION_PATCH} ${ARGN} PARENT_SCOPE)
+ set(${LIBNAME}_VERSION_STRING "${${LIBNAME}_VERSION_MAJOR}.${${LIBNAME}_VERSION_MINOR}.${${LIBNAME}_VERSION_PATCH}" PARENT_SCOPE)
+
+ # append a TWEAK version if it exists:
+ set(${LIBNAME}_VERSION_TWEAK "")
+ if("${${LIBNAME}_H}" MATCHES "^.*[ \t]${VARNAME}[ \t]+\"[0-9]+\\.[0-9]+\\.[0-9]+\\.([0-9]+).*$")
+ set(${LIBNAME}_VERSION_TWEAK "${CMAKE_MATCH_1}" ${ARGN} PARENT_SCOPE)
+ endif()
+ if(${LIBNAME}_VERSION_TWEAK)
+ set(${LIBNAME}_VERSION_STRING "${${LIBNAME}_VERSION_STRING}.${${LIBNAME}_VERSION_TWEAK}" ${ARGN} PARENT_SCOPE)
+ else()
+ set(${LIBNAME}_VERSION_STRING "${${LIBNAME}_VERSION_STRING}" ${ARGN} PARENT_SCOPE)
+ endif()
+ endif()
+endfunction()
+
+########################################################################################################
+# An option that the user can select. Can accept condition to control when option is available for user.
+# Usage:
+# caffe_option( "doc string" [IF ])
+function(caffe_option variable description value)
+ set(__value ${value})
+ set(__condition "")
+ set(__varname "__value")
+ foreach(arg ${ARGN})
+ if(arg STREQUAL "IF" OR arg STREQUAL "if")
+ set(__varname "__condition")
+ else()
+ list(APPEND ${__varname} ${arg})
+ endif()
+ endforeach()
+ unset(__varname)
+ if("${__condition}" STREQUAL "")
+ set(__condition 2 GREATER 1)
+ endif()
+
+ if(${__condition})
+ if("${__value}" MATCHES ";")
+ if(${__value})
+ option(${variable} "${description}" ON)
+ else()
+ option(${variable} "${description}" OFF)
+ endif()
+ elseif(DEFINED ${__value})
+ if(${__value})
+ option(${variable} "${description}" ON)
+ else()
+ option(${variable} "${description}" OFF)
+ endif()
+ else()
+ option(${variable} "${description}" ${__value})
+ endif()
+ else()
+ unset(${variable} CACHE)
+ endif()
+endfunction()
+
+################################################################################################
+# Utility macro for comparing two lists. Used for CMake debugging purposes
+# Usage:
+# caffe_compare_lists( [description])
+function(caffe_compare_lists list1 list2 desc)
+ set(__list1 ${${list1}})
+ set(__list2 ${${list2}})
+ list(SORT __list1)
+ list(SORT __list2)
+ list(LENGTH __list1 __len1)
+ list(LENGTH __list2 __len2)
+
+ if(NOT ${__len1} EQUAL ${__len2})
+ message(FATAL_ERROR "Lists are not equal. ${__len1} != ${__len2}. ${desc}")
+ endif()
+
+ foreach(__i RANGE 1 ${__len1})
+ math(EXPR __index "${__i}- 1")
+ list(GET __list1 ${__index} __item1)
+ list(GET __list2 ${__index} __item2)
+ if(NOT ${__item1} STREQUAL ${__item2})
+ message(FATAL_ERROR "Lists are not equal. Differ at element ${__index}. ${desc}")
+ endif()
+ endforeach()
+endfunction()
+
+################################################################################################
+# Command for disabling warnings for different platforms (see below for gcc and VisualStudio)
+# Usage:
+# caffe_warnings_disable( -Wshadow /wd4996 ..,)
+macro(caffe_warnings_disable)
+ set(_flag_vars "")
+ set(_msvc_warnings "")
+ set(_gxx_warnings "")
+
+ foreach(arg ${ARGN})
+ if(arg MATCHES "^CMAKE_")
+ list(APPEND _flag_vars ${arg})
+ elseif(arg MATCHES "^/wd")
+ list(APPEND _msvc_warnings ${arg})
+ elseif(arg MATCHES "^-W")
+ list(APPEND _gxx_warnings ${arg})
+ endif()
+ endforeach()
+
+ if(NOT _flag_vars)
+ set(_flag_vars CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
+ endif()
+
+ if(MSVC AND _msvc_warnings)
+ foreach(var ${_flag_vars})
+ foreach(warning ${_msvc_warnings})
+ set(${var} "${${var}} ${warning}")
+ endforeach()
+ endforeach()
+ elseif((CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) AND _gxx_warnings)
+ foreach(var ${_flag_vars})
+ foreach(warning ${_gxx_warnings})
+ if(NOT warning MATCHES "^-Wno-")
+ string(REPLACE "${warning}" "" ${var} "${${var}}")
+ string(REPLACE "-W" "-Wno-" warning "${warning}")
+ endif()
+ set(${var} "${${var}} ${warning}")
+ endforeach()
+ endforeach()
+ endif()
+ caffe_clear_vars(_flag_vars _msvc_warnings _gxx_warnings)
+endmacro()
+
+################################################################################################
+# Helper function get current definitions
+# Usage:
+# caffe_get_current_definitions()
+function(caffe_get_current_definitions definitions_var)
+ get_property(current_definitions DIRECTORY PROPERTY COMPILE_DEFINITIONS)
+ set(result "")
+
+ foreach(d ${current_definitions})
+ list(APPEND result -D${d})
+ endforeach()
+
+ caffe_list_unique(result)
+ set(${definitions_var} ${result} PARENT_SCOPE)
+endfunction()
+
+################################################################################################
+# Helper function get current includes/definitions
+# Usage:
+# caffe_get_current_cflags()
+function(caffe_get_current_cflags cflags_var)
+ get_property(current_includes DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
+ caffe_convert_absolute_paths(current_includes)
+ caffe_get_current_definitions(cflags)
+
+ foreach(i ${current_includes})
+ list(APPEND cflags "-I${i}")
+ endforeach()
+
+ caffe_list_unique(cflags)
+ set(${cflags_var} ${cflags} PARENT_SCOPE)
+endfunction()
+
+################################################################################################
+# Helper function to parse current linker libs into link directories, libflags and osx frameworks
+# Usage:
+# caffe_parse_linker_libs( )
+function(caffe_parse_linker_libs Caffe_LINKER_LIBS_variable folders_var flags_var frameworks_var)
+
+ set(__unspec "")
+ set(__debug "")
+ set(__optimized "")
+ set(__framework "")
+ set(__varname "__unspec")
+
+ # split libs into debug, optimized, unspecified and frameworks
+ foreach(list_elem ${${Caffe_LINKER_LIBS_variable}})
+ if(list_elem STREQUAL "debug")
+ set(__varname "__debug")
+ elseif(list_elem STREQUAL "optimized")
+ set(__varname "__optimized")
+ elseif(list_elem MATCHES "^-framework[ \t]+([^ \t].*)")
+ list(APPEND __framework -framework ${CMAKE_MATCH_1})
+ else()
+ list(APPEND ${__varname} ${list_elem})
+ set(__varname "__unspec")
+ endif()
+ endforeach()
+
+ # attach debug or optimized libs to unspecified according to current configuration
+ if(CMAKE_BUILD_TYPE MATCHES "Debug")
+ set(__libs ${__unspec} ${__debug})
+ else()
+ set(__libs ${__unspec} ${__optimized})
+ endif()
+
+ set(libflags "")
+ set(folders "")
+
+ # convert linker libraries list to link flags
+ foreach(lib ${__libs})
+ if(TARGET ${lib})
+ list(APPEND folders $)
+ list(APPEND libflags -l${lib})
+ elseif(lib MATCHES "^-l.*")
+ list(APPEND libflags ${lib})
+ elseif(IS_ABSOLUTE ${lib})
+ get_filename_component(folder ${lib} PATH)
+ get_filename_component(filename ${lib} NAME)
+ string(REGEX REPLACE "\\.[^.]*$" "" filename_without_shortest_ext ${filename})
+
+ string(REGEX MATCH "^lib(.*)" __match ${filename_without_shortest_ext})
+ list(APPEND libflags -l${CMAKE_MATCH_1})
+ list(APPEND folders ${folder})
+ else()
+ message(FATAL_ERROR "Logic error. Need to update cmake script")
+ endif()
+ endforeach()
+
+ caffe_list_unique(libflags folders)
+
+ set(${folders_var} ${folders} PARENT_SCOPE)
+ set(${flags_var} ${libflags} PARENT_SCOPE)
+ set(${frameworks_var} ${__framework} PARENT_SCOPE)
+endfunction()
+
+################################################################################################
+# Helper function to detect Darwin version, i.e. 10.8, 10.9, 10.10, ....
+# Usage:
+# caffe_detect_darwin_version()
+function(caffe_detect_darwin_version output_var)
+ if(APPLE)
+ execute_process(COMMAND /usr/bin/sw_vers -productVersion
+ RESULT_VARIABLE __sw_vers OUTPUT_VARIABLE __sw_vers_out
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ set(${output_var} ${__sw_vers_out} PARENT_SCOPE)
+ else()
+ set(${output_var} "" PARENT_SCOPE)
+ endif()
+endfunction()
diff --git a/3rdparty/caffe/cmake/lint.cmake b/3rdparty/caffe/cmake/lint.cmake
new file mode 100644
index 00000000..70a00657
--- /dev/null
+++ b/3rdparty/caffe/cmake/lint.cmake
@@ -0,0 +1,50 @@
+
+set(CMAKE_SOURCE_DIR ..)
+set(LINT_COMMAND ${CMAKE_SOURCE_DIR}/scripts/cpp_lint.py)
+set(SRC_FILE_EXTENSIONS h hpp hu c cpp cu cc)
+set(EXCLUDE_FILE_EXTENSTIONS pb.h pb.cc)
+set(LINT_DIRS include src/caffe examples tools python matlab)
+
+cmake_policy(SET CMP0009 NEW) # suppress cmake warning
+
+# find all files of interest
+foreach(ext ${SRC_FILE_EXTENSIONS})
+ foreach(dir ${LINT_DIRS})
+ file(GLOB_RECURSE FOUND_FILES ${CMAKE_SOURCE_DIR}/${dir}/*.${ext})
+ set(LINT_SOURCES ${LINT_SOURCES} ${FOUND_FILES})
+ endforeach()
+endforeach()
+
+# find all files that should be excluded
+foreach(ext ${EXCLUDE_FILE_EXTENSTIONS})
+ file(GLOB_RECURSE FOUND_FILES ${CMAKE_SOURCE_DIR}/*.${ext})
+ set(EXCLUDED_FILES ${EXCLUDED_FILES} ${FOUND_FILES})
+endforeach()
+
+# exclude generated pb files
+list(REMOVE_ITEM LINT_SOURCES ${EXCLUDED_FILES})
+
+execute_process(
+ COMMAND ${LINT_COMMAND} ${LINT_SOURCES}
+ ERROR_VARIABLE LINT_OUTPUT
+ ERROR_STRIP_TRAILING_WHITESPACE
+)
+
+string(REPLACE "\n" ";" LINT_OUTPUT ${LINT_OUTPUT})
+
+list(GET LINT_OUTPUT -1 LINT_RESULT)
+list(REMOVE_AT LINT_OUTPUT -1)
+string(REPLACE " " ";" LINT_RESULT ${LINT_RESULT})
+list(GET LINT_RESULT -1 NUM_ERRORS)
+if(NUM_ERRORS GREATER 0)
+ foreach(msg ${LINT_OUTPUT})
+ string(FIND ${msg} "Done" result)
+ if(result LESS 0)
+ message(STATUS ${msg})
+ endif()
+ endforeach()
+ message(FATAL_ERROR "Lint found ${NUM_ERRORS} errors!")
+else()
+ message(STATUS "Lint did not find any errors!")
+endif()
+
diff --git a/3rdparty/caffe/docker/README.md b/3rdparty/caffe/docker/README.md
new file mode 100644
index 00000000..f9c7c756
--- /dev/null
+++ b/3rdparty/caffe/docker/README.md
@@ -0,0 +1,47 @@
+### Running an official image
+
+You can run one of the automatic [builds](https://hub.docker.com/r/bvlc/caffe). E.g. for the CPU version:
+
+`docker run -ti bvlc/caffe:cpu caffe --version`
+
+or for GPU support (You need a CUDA 8.0 capable driver and
+[nvidia-docker](https://github.com/NVIDIA/nvidia-docker)):
+
+`nvidia-docker run -ti bvlc/caffe:gpu caffe --version`
+
+You might see an error about libdc1394, ignore it.
+
+### Docker run options
+
+By default caffe runs as root, thus any output files, e.g. snapshots, will be owned
+by root. It also runs by default in a container-private folder.
+
+You can change this using flags, like user (-u), current directory, and volumes (-w and -v).
+E.g. this behaves like the usual caffe executable:
+
+`docker run --rm -u $(id -u):$(id -g) -v $(pwd):$(pwd) -w $(pwd) bvlc/caffe:cpu caffe train --solver=example_solver.prototxt`
+
+Containers can also be used interactively, specifying e.g. `bash` or `ipython`
+instead of `caffe`.
+
+```
+docker run -ti bvlc/caffe:cpu ipython
+import caffe
+...
+```
+
+The caffe build requirements are included in the container, so this can be used to
+build and run custom versions of caffe. Also, `caffe/python` is in PATH, so python
+utilities can be used directly, e.g. `draw_net.py`, `classify.py`, or `detect.py`.
+
+### Building images yourself
+
+Examples:
+
+`docker build -t caffe:cpu cpu`
+
+`docker build -t caffe:gpu gpu`
+
+You can also build Caffe and run the tests in the image:
+
+`docker run -ti caffe:cpu bash -c "cd /opt/caffe/build; make runtest"`
diff --git a/3rdparty/caffe/docker/cpu/Dockerfile b/3rdparty/caffe/docker/cpu/Dockerfile
new file mode 100644
index 00000000..67e2e61b
--- /dev/null
+++ b/3rdparty/caffe/docker/cpu/Dockerfile
@@ -0,0 +1,46 @@
+FROM ubuntu:16.04
+LABEL maintainer caffe-maint@googlegroups.com
+
+RUN apt-get update && apt-get install -y --no-install-recommends \
+ build-essential \
+ cmake \
+ git \
+ wget \
+ libatlas-base-dev \
+ libboost-all-dev \
+ libgflags-dev \
+ libgoogle-glog-dev \
+ libhdf5-serial-dev \
+ libleveldb-dev \
+ liblmdb-dev \
+ libopencv-dev \
+ libprotobuf-dev \
+ libsnappy-dev \
+ protobuf-compiler \
+ python-dev \
+ python-numpy \
+ python-pip \
+ python-setuptools \
+ python-scipy && \
+ rm -rf /var/lib/apt/lists/*
+
+ENV CAFFE_ROOT=/opt/caffe
+WORKDIR $CAFFE_ROOT
+
+# FIXME: use ARG instead of ENV once DockerHub supports this
+# https://github.com/docker/hub-feedback/issues/460
+ENV CLONE_TAG=1.0
+
+RUN git clone -b ${CLONE_TAG} --depth 1 https://github.com/BVLC/caffe.git . && \
+ pip install --upgrade pip && \
+ cd python && for req in $(cat requirements.txt) pydot; do pip install $req; done && cd .. && \
+ mkdir build && cd build && \
+ cmake -DCPU_ONLY=1 .. && \
+ make -j"$(nproc)"
+
+ENV PYCAFFE_ROOT $CAFFE_ROOT/python
+ENV PYTHONPATH $PYCAFFE_ROOT:$PYTHONPATH
+ENV PATH $CAFFE_ROOT/build/tools:$PYCAFFE_ROOT:$PATH
+RUN echo "$CAFFE_ROOT/build/lib" >> /etc/ld.so.conf.d/caffe.conf && ldconfig
+
+WORKDIR /workspace
diff --git a/3rdparty/caffe/docker/gpu/Dockerfile b/3rdparty/caffe/docker/gpu/Dockerfile
new file mode 100644
index 00000000..dcdbdf32
--- /dev/null
+++ b/3rdparty/caffe/docker/gpu/Dockerfile
@@ -0,0 +1,47 @@
+FROM nvidia/cuda:8.0-cudnn6-devel-ubuntu16.04
+LABEL maintainer caffe-maint@googlegroups.com
+
+RUN apt-get update && apt-get install -y --no-install-recommends \
+ build-essential \
+ cmake \
+ git \
+ wget \
+ libatlas-base-dev \
+ libboost-all-dev \
+ libgflags-dev \
+ libgoogle-glog-dev \
+ libhdf5-serial-dev \
+ libleveldb-dev \
+ liblmdb-dev \
+ libopencv-dev \
+ libprotobuf-dev \
+ libsnappy-dev \
+ protobuf-compiler \
+ python-dev \
+ python-numpy \
+ python-pip \
+ python-setuptools \
+ python-scipy && \
+ rm -rf /var/lib/apt/lists/*
+
+ENV CAFFE_ROOT=/opt/caffe
+WORKDIR $CAFFE_ROOT
+
+# FIXME: use ARG instead of ENV once DockerHub supports this
+# https://github.com/docker/hub-feedback/issues/460
+ENV CLONE_TAG=1.0
+
+RUN git clone -b ${CLONE_TAG} --depth 1 https://github.com/BVLC/caffe.git . && \
+ pip install --upgrade pip && \
+ cd python && for req in $(cat requirements.txt) pydot; do pip install $req; done && cd .. && \
+ git clone https://github.com/NVIDIA/nccl.git && cd nccl && make -j install && cd .. && rm -rf nccl && \
+ mkdir build && cd build && \
+ cmake -DUSE_CUDNN=1 -DUSE_NCCL=1 .. && \
+ make -j"$(nproc)"
+
+ENV PYCAFFE_ROOT $CAFFE_ROOT/python
+ENV PYTHONPATH $PYCAFFE_ROOT:$PYTHONPATH
+ENV PATH $CAFFE_ROOT/build/tools:$PYCAFFE_ROOT:$PATH
+RUN echo "$CAFFE_ROOT/build/lib" >> /etc/ld.so.conf.d/caffe.conf && ldconfig
+
+WORKDIR /workspace
diff --git a/3rdparty/caffe/docs/CMakeLists.txt b/3rdparty/caffe/docs/CMakeLists.txt
new file mode 100644
index 00000000..ae47e461
--- /dev/null
+++ b/3rdparty/caffe/docs/CMakeLists.txt
@@ -0,0 +1,106 @@
+# Building docs script
+# Requirements:
+# sudo apt-get install doxygen texlive ruby-dev
+# sudo gem install jekyll execjs therubyracer
+
+if(NOT BUILD_docs OR NOT DOXYGEN_FOUND)
+ return()
+endif()
+
+#################################################################################################
+# Gather docs from /examples/**/readme.md
+function(gather_readmes_as_prebuild_cmd target gathered_dir root)
+ set(full_gathered_dir ${root}/${gathered_dir})
+
+ file(GLOB_RECURSE readmes ${root}/examples/readme.md ${root}/examples/README.md)
+ foreach(file ${readmes})
+ # Only use file if it is to be included in docs.
+ file(STRINGS ${file} file_lines REGEX "include_in_docs: true")
+
+ if(file_lines)
+ # Since everything is called readme.md, rename it by its dirname.
+ file(RELATIVE_PATH file ${root} ${file})
+ get_filename_component(folder ${file} PATH)
+ set(new_filename ${full_gathered_dir}/${folder}.md)
+
+ # folder value might be like /readme.md. That's why make directory.
+ get_filename_component(new_folder ${new_filename} PATH)
+ add_custom_command(TARGET ${target} PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${new_folder}
+ COMMAND ln -sf ${root}/${file} ${new_filename}
+ COMMENT "Creating symlink ${new_filename} -> ${root}/${file}"
+ WORKING_DIRECTORY ${root} VERBATIM)
+ endif()
+ endforeach()
+endfunction()
+
+################################################################################################
+# Gather docs from examples/*.ipynb and add YAML front-matter.
+function(gather_notebooks_as_prebuild_cmd target gathered_dir root)
+ set(full_gathered_dir ${root}/${gathered_dir})
+
+ if(NOT PYTHON_EXECUTABLE)
+ message(STATUS "Python interpeter is not found. Can't include *.ipynb files in docs. Skipping...")
+ return()
+ endif()
+
+ file(GLOB_RECURSE notebooks ${root}/examples/*.ipynb)
+ foreach(file ${notebooks})
+ file(RELATIVE_PATH file ${root} ${file})
+ set(new_filename ${full_gathered_dir}/${file})
+
+ get_filename_component(new_folder ${new_filename} PATH)
+ add_custom_command(TARGET ${target} PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${new_folder}
+ COMMAND ${PYTHON_EXECUTABLE} scripts/copy_notebook.py ${file} ${new_filename}
+ COMMENT "Copying notebook ${file} to ${new_filename}"
+ WORKING_DIRECTORY ${root} VERBATIM)
+ endforeach()
+
+ set(${outputs_var} ${outputs} PARENT_SCOPE)
+endfunction()
+
+################################################################################################
+########################## [ Non macro part ] ##################################################
+
+# Gathering is done at each 'make doc'
+file(REMOVE_RECURSE ${PROJECT_SOURCE_DIR}/docs/gathered)
+
+# Doxygen config file path
+set(DOXYGEN_config_file ${PROJECT_SOURCE_DIR}/.Doxyfile CACHE FILEPATH "Doxygen config file")
+
+# Adding docs target
+add_custom_target(docs COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_config_file}
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ COMMENT "Launching doxygen..." VERBATIM)
+
+# Gathering examples into docs subfolder
+gather_notebooks_as_prebuild_cmd(docs docs/gathered ${PROJECT_SOURCE_DIR})
+gather_readmes_as_prebuild_cmd(docs docs/gathered ${PROJECT_SOURCE_DIR})
+
+# Auto detect output directory
+file(STRINGS ${DOXYGEN_config_file} config_line REGEX "OUTPUT_DIRECTORY[ \t]+=[^=].*")
+if(config_line)
+ string(REGEX MATCH "OUTPUT_DIRECTORY[ \t]+=([^=].*)" __ver_check "${config_line}")
+ string(STRIP ${CMAKE_MATCH_1} output_dir)
+ message(STATUS "Detected Doxygen OUTPUT_DIRECTORY: ${output_dir}")
+else()
+ set(output_dir ./doxygen/)
+ message(STATUS "Can't find OUTPUT_DIRECTORY in doxygen config file. Try to use default: ${output_dir}")
+endif()
+
+if(NOT IS_ABSOLUTE ${output_dir})
+ set(output_dir ${PROJECT_SOURCE_DIR}/${output_dir})
+ get_filename_component(output_dir ${output_dir} ABSOLUTE)
+endif()
+
+# creates symlink in docs subfolder to code documentation built by doxygen
+add_custom_command(TARGET docs POST_BUILD VERBATIM
+ COMMAND ln -sfn "${output_dir}/html" doxygen
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/docs
+ COMMENT "Creating symlink ${PROJECT_SOURCE_DIR}/docs/doxygen -> ${output_dir}/html")
+
+# for quick launch of jekyll
+add_custom_target(jekyll COMMAND jekyll serve -w -s . -d _site --port=4000
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/docs
+ COMMENT "Launching jekyll..." VERBATIM)
diff --git a/3rdparty/caffe/docs/CNAME b/3rdparty/caffe/docs/CNAME
new file mode 100644
index 00000000..eee1ae26
--- /dev/null
+++ b/3rdparty/caffe/docs/CNAME
@@ -0,0 +1 @@
+caffe.berkeleyvision.org
diff --git a/3rdparty/caffe/docs/README.md b/3rdparty/caffe/docs/README.md
new file mode 100644
index 00000000..8f1781e3
--- /dev/null
+++ b/3rdparty/caffe/docs/README.md
@@ -0,0 +1,5 @@
+# Caffe Documentation
+
+To generate the documentation, run `$CAFFE_ROOT/scripts/build_docs.sh`.
+
+To push your changes to the documentation to the gh-pages branch of your or the BVLC repo, run `$CAFFE_ROOT/scripts/deploy_docs.sh `.
diff --git a/3rdparty/caffe/docs/_config.yml b/3rdparty/caffe/docs/_config.yml
new file mode 100644
index 00000000..95aec12b
--- /dev/null
+++ b/3rdparty/caffe/docs/_config.yml
@@ -0,0 +1,7 @@
+defaults:
+ -
+ scope:
+ path: "" # an empty string here means all files in the project
+ values:
+ layout: "default"
+
diff --git a/3rdparty/caffe/docs/_layouts/default.html b/3rdparty/caffe/docs/_layouts/default.html
new file mode 100644
index 00000000..3799e95a
--- /dev/null
+++ b/3rdparty/caffe/docs/_layouts/default.html
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+ Caffe {% if page contains 'title' %}| {{ page.title }}{% endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/3rdparty/caffe/docs/development.md b/3rdparty/caffe/docs/development.md
new file mode 100644
index 00000000..ec05bbee
--- /dev/null
+++ b/3rdparty/caffe/docs/development.md
@@ -0,0 +1,120 @@
+---
+title: Developing and Contributing
+---
+# Development and Contributing
+
+Caffe is developed with active participation of the community.
+The [BAIR](http://bair.berkeley.edu/)/BVLC brewers welcome all contributions!
+
+The exact details of contributions are recorded by versioning and cited in our [acknowledgements](http://caffe.berkeleyvision.org/#acknowledgements).
+This method is impartial and always up-to-date.
+
+## License
+
+Caffe is licensed under the terms in [LICENSE](https://github.com/BVLC/caffe/blob/master/LICENSE). By contributing to the project, you agree to the license and copyright terms therein and release your contribution under these terms.
+
+## Copyright
+
+Caffe uses a shared copyright model: each contributor holds copyright over their contributions to Caffe. The project versioning records all such contribution and copyright details.
+
+If a contributor wants to further mark their specific copyright on a particular contribution, they should indicate their copyright solely in the commit message of the change when it is committed. Do not include copyright notices in files for this purpose.
+
+### Documentation
+
+This website, written with [Jekyll](http://jekyllrb.com/), acts as the official Caffe documentation -- simply run `scripts/build_docs.sh` and view the website at `http://0.0.0.0:4000`.
+
+We prefer tutorials and examples to be documented close to where they live, in `readme.md` files.
+The `build_docs.sh` script gathers all `examples/**/readme.md` and `examples/*.ipynb` files, and makes a table of contents.
+To be included in the docs, the readme files must be annotated with [YAML front-matter](http://jekyllrb.com/docs/frontmatter/), including the flag `include_in_docs: true`.
+Similarly for IPython notebooks: simply include `"include_in_docs": true` in the `"metadata"` JSON field.
+
+Other docs, such as installation guides, are written in the `docs` directory and manually linked to from the `index.md` page.
+
+We strive to provide lots of usage examples, and to document all code in docstrings.
+We absolutely appreciate any contribution to this effort!
+
+### Versioning
+
+The `master` branch receives all new development including community contributions.
+We try to keep it in a reliable state, but it is the bleeding edge, and things do get broken every now and then.
+BAIR maintainers will periodically make releases by marking stable checkpoints as tags and maintenance branches. [Past releases](https://github.com/BVLC/caffe/releases) are catalogued online.
+
+#### Issues & Pull Request Protocol
+
+Post [Issues](https://github.com/BVLC/caffe/issues) to propose features, report [bugs], and discuss framework code.
+Large-scale development work is guided by [milestones], which are sets of Issues selected for bundling as releases.
+
+Please note that since the core developers are largely researchers, we may work on a feature in isolation for some time before releasing it to the community, so as to claim honest academic contribution.
+We do release things as soon as a reasonable technical report may be written, and we still aim to inform the community of ongoing development through Github Issues.
+
+**When you are ready to develop a feature or fixing a bug, follow this protocol**:
+
+- Develop in [feature branches] with descriptive names. Branch off of the latest `master`.
+- Bring your work up-to-date by [rebasing] onto the latest `master` when done.
+(Groom your changes by [interactive rebase], if you'd like.)
+- [Pull request] your contribution to `BVLC/caffe`'s `master` branch for discussion and review.
+ - Make PRs *as soon as development begins*, to let discussion guide development.
+ - A PR is only ready for merge review when it is a fast-forward merge, and all code is documented, linted, and tested -- that means your PR must include tests!
+- When the PR satisfies the above properties, use comments to request maintainer review.
+
+The following is a poetic presentation of the protocol in code form.
+
+#### [Shelhamer's](https://github.com/shelhamer) “life of a branch in four acts”
+
+Make the `feature` branch off of the latest `bvlc/master`
+
+ git checkout master
+ git pull upstream master
+ git checkout -b feature
+ # do your work, make commits
+
+Prepare to merge by rebasing your branch on the latest `bvlc/master`
+
+ # make sure master is fresh
+ git checkout master
+ git pull upstream master
+ # rebase your branch on the tip of master
+ git checkout feature
+ git rebase master
+
+Push your branch to pull request it into `BVLC/caffe:master`
+
+ git push origin feature
+ # ...make pull request to master...
+
+Now make a pull request! You can do this from the command line (`git pull-request -b master`) if you install [hub](https://github.com/github/hub). Hub has many other magical uses.
+
+The pull request of `feature` into `master` will be a clean merge. Applause.
+
+[bugs]: https://github.com/BVLC/caffe/issues?labels=bug&page=1&state=open
+[milestones]: https://github.com/BVLC/caffe/issues?milestone=1
+[Pull request]: https://help.github.com/articles/using-pull-requests
+[interactive rebase]: https://help.github.com/articles/interactive-rebase
+[rebasing]: http://git-scm.com/book/en/Git-Branching-Rebasing
+[feature branches]: https://www.atlassian.com/git/workflows#!workflow-feature-branch
+
+**Historical note**: Caffe once relied on a two branch `master` and `dev` workflow.
+PRs from this time are still open but these will be merged into `master` or closed.
+
+### Testing
+
+Run `make runtest` to check the project tests. New code requires new tests. Pull requests that fail tests will not be accepted.
+
+The `gtest` framework we use provides many additional options, which you can access by running the test binaries directly. One of the more useful options is `--gtest_filter`, which allows you to filter tests by name:
+
+ # run all tests with CPU in the name
+ build/test/test_all.testbin --gtest_filter='*CPU*'
+
+ # run all tests without GPU in the name (note the leading minus sign)
+ build/test/test_all.testbin --gtest_filter=-'*GPU*'
+
+To get a list of all options `googletest` provides, simply pass the `--help` flag:
+
+ build/test/test_all.testbin --help
+
+### Style
+
+- **Run `make lint` to check C++ code.**
+- Wrap lines at 80 chars.
+- Follow [Google C++ style](http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml) and [Google python style](http://google-styleguide.googlecode.com/svn/trunk/pyguide.html) + [PEP 8](http://legacy.python.org/dev/peps/pep-0008/).
+- Remember that “a foolish consistency is the hobgoblin of little minds,” so use your best judgement to write the clearest code for your particular case.
diff --git a/3rdparty/caffe/docs/images/GitHub-Mark-64px.png b/3rdparty/caffe/docs/images/GitHub-Mark-64px.png
new file mode 100644
index 0000000000000000000000000000000000000000..182a1a3f734fc1b7d712c68b04c29bad9460d6cd
GIT binary patch
literal 2625
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
+
+## Documentation
+
+- [DIY Deep Learning for Vision with Caffe](https://docs.google.com/presentation/d/1UeKXVgRvvxg9OUdh_UiC5G71UMscNPlvArsWER41PsU/edit#slide=id.p) and [Caffe in a Day](https://docs.google.com/presentation/d/1HxGdeq8MPktHaPb-rlmYYQ723iWzq9ur6Gjo71YiG0Y/edit#slide=id.gc2fcdcce7_216_0)
+Tutorial presentation of the framework and a full-day crash course.
+- [Tutorial Documentation](/tutorial)
+Practical guide and framework reference.
+- [arXiv / ACM MM '14 paper](http://arxiv.org/abs/1408.5093)
+A 4-page report for the ACM Multimedia Open Source competition (arXiv:1408.5093v1).
+- [Installation instructions](/installation.html)
+Tested on Ubuntu, Red Hat, OS X.
+* [Model Zoo](/model_zoo.html)
+BAIR suggests a standard distribution format for Caffe models, and provides trained models.
+* [Developing & Contributing](/development.html)
+Guidelines for development and contributing to Caffe.
+* [API Documentation](/doxygen/annotated.html)
+Developer documentation automagically generated from code comments.
+* [Benchmarking](https://docs.google.com/spreadsheets/d/1Yp4rqHpT7mKxOPbpzYeUfEFLnELDAgxSSBQKp5uKDGQ/edit#gid=0)
+Comparison of inference and learning for different networks and GPUs.
+
+### Notebook Examples
+
+{% assign notebooks = site.pages | where:'category','notebook' | sort: 'priority' %}
+{% for page in notebooks %}
+-
+{% endfor %}
+
+### Command Line Examples
+
+{% assign examples = site.pages | where:'category','example' | sort: 'priority' %}
+{% for page in examples %}
+-
+{% endfor %}
+
+## Citing Caffe
+
+Please cite Caffe in your publications if it helps your research:
+
+ @article{jia2014caffe,
+ Author = {Jia, Yangqing and Shelhamer, Evan and Donahue, Jeff and Karayev, Sergey and Long, Jonathan and Girshick, Ross and Guadarrama, Sergio and Darrell, Trevor},
+ Journal = {arXiv preprint arXiv:1408.5093},
+ Title = {Caffe: Convolutional Architecture for Fast Feature Embedding},
+ Year = {2014}
+ }
+
+If you do publish a paper where Caffe helped your research, we encourage you to cite the framework for tracking by [Google Scholar](https://scholar.google.com/citations?view_op=view_citation&hl=en&citation_for_view=-ltRSM0AAAAJ:u5HHmVD_uO8C).
+
+## Contacting Us
+
+Join the [caffe-users group](https://groups.google.com/forum/#!forum/caffe-users) to ask questions and discuss methods and models. This is where we talk about usage, installation, and applications.
+
+Framework development discussions and thorough bug reports are collected on [Issues](https://github.com/BVLC/caffe/issues).
+
+## Acknowledgements
+
+The BAIR Caffe developers would like to thank NVIDIA for GPU donation, A9 and Amazon Web Services for a research grant in support of Caffe development and reproducible research in deep learning, and BAIR PI [Trevor Darrell](http://www.eecs.berkeley.edu/~trevor/) for guidance.
+
+The BAIR members who have contributed to Caffe are (alphabetical by first name):
+[Carl Doersch](http://www.carldoersch.com/), [Eric Tzeng](https://github.com/erictzeng), [Evan Shelhamer](http://imaginarynumber.net/), [Jeff Donahue](http://jeffdonahue.com/), [Jon Long](https://github.com/longjon), [Philipp Krähenbühl](http://www.philkr.net/), [Ronghang Hu](http://ronghanghu.com/), [Ross Girshick](http://www.cs.berkeley.edu/~rbg/), [Sergey Karayev](http://sergeykarayev.com/), [Sergio Guadarrama](http://www.eecs.berkeley.edu/~sguada/), [Takuya Narihira](https://github.com/tnarihi), and [Yangqing Jia](http://daggerfs.com/).
+
+The open-source community plays an important and growing role in Caffe's development.
+Check out the Github [project pulse](https://github.com/BVLC/caffe/pulse) for recent activity and the [contributors](https://github.com/BVLC/caffe/graphs/contributors) for the full list.
+
+We sincerely appreciate your interest and contributions!
+If you'd like to contribute, please read the [developing & contributing](development.html) guide.
+
+Yangqing would like to give a personal thanks to the NVIDIA Academic program for providing GPUs, [Oriol Vinyals](http://www1.icsi.berkeley.edu/~vinyals/) for discussions along the journey, and BAIR PI [Trevor Darrell](http://www.eecs.berkeley.edu/~trevor/) for advice.
diff --git a/3rdparty/caffe/docs/install_apt.md b/3rdparty/caffe/docs/install_apt.md
new file mode 100644
index 00000000..ee2cd287
--- /dev/null
+++ b/3rdparty/caffe/docs/install_apt.md
@@ -0,0 +1,55 @@
+---
+title: "Installation: Ubuntu"
+---
+
+# Ubuntu Installation
+
+**General dependencies**
+
+ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
+ sudo apt-get install --no-install-recommends libboost-all-dev
+
+**CUDA**: Install by `apt-get` or the NVIDIA `.run` package.
+The NVIDIA package tends to follow more recent library and driver versions, but the installation is more manual.
+If installing from packages, install the library and latest driver separately; the driver bundled with the library is usually out-of-date.
+This can be skipped for CPU-only installation.
+
+**BLAS**: install ATLAS by `sudo apt-get install libatlas-base-dev` or install OpenBLAS by `sudo apt-get install libopenblas-dev` or MKL for better CPU performance.
+
+**Python** (optional): if you use the default Python you will need to `sudo apt-get install` the `python-dev` package to have the Python headers for building the pycaffe interface.
+
+**Compatibility notes, 16.04**
+
+CUDA 8 is required on Ubuntu 16.04.
+
+**Remaining dependencies, 14.04**
+
+Everything is packaged in 14.04.
+
+ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
+
+**Remaining dependencies, 12.04**
+
+These dependencies need manual installation in 12.04.
+
+ # glog
+ wget https://github.com/google/glog/archive/v0.3.3.tar.gz
+ tar zxvf v0.3.3.tar.gz
+ cd glog-0.3.3
+ ./configure
+ make && make install
+ # gflags
+ wget https://github.com/schuhschuh/gflags/archive/master.zip
+ unzip master.zip
+ cd gflags-master
+ mkdir build && cd build
+ export CXXFLAGS="-fPIC" && cmake .. && make VERBOSE=1
+ make && make install
+ # lmdb
+ git clone https://github.com/LMDB/lmdb
+ cd lmdb/libraries/liblmdb
+ make && make install
+
+Note that glog does not compile with the most recent gflags version (2.1), so before that is resolved you will need to build with glog first.
+
+Continue with [compilation](installation.html#compilation).
diff --git a/3rdparty/caffe/docs/install_apt_debian.md b/3rdparty/caffe/docs/install_apt_debian.md
new file mode 100644
index 00000000..65fe7092
--- /dev/null
+++ b/3rdparty/caffe/docs/install_apt_debian.md
@@ -0,0 +1,161 @@
+---
+title: "Installation: Debian"
+---
+
+# Debian Installation
+
+Caffe packages are available for several Debian versions, as shown in the
+following chart:
+
+```
+Your Distro | CPU_ONLY | CUDA | Alias
+----------------+------------+--------+-------------------
+Debian/stable | ✘ | ✘ | Debian Jessie
+Debian/testing | ✔ | ✔ | Debian Stretch/Sid
+Debian/unstable | ✔ | ✔ | Debian Sid
+```
+
+* `✘ ` You should take a look at [Ubuntu installation instruction](install_apt.html).
+
+* `✔ ` You can install caffe with a single command line following this guide.
+
+Last update: 2017-02-01
+
+## Binary installation with APT
+
+Apart from the installation methods based on source, Debian/unstable
+and Debian/testing users can install pre-compiled Caffe packages from
+the official archive.
+
+Make sure that your `/etc/apt/sources.list` contains `contrib` and `non-free`
+sections if you want to install the CUDA version, for instance:
+
+```
+deb http://ftp2.cn.debian.org/debian sid main contrib non-free
+```
+
+Then we update APT cache and directly install Caffe. Note, the cpu version and
+the cuda version cannot coexist.
+
+```
+$ sudo apt update
+$ sudo apt install [ caffe-cpu | caffe-cuda ]
+$ caffe # command line interface working
+$ python3 -c 'import caffe; print(caffe.__path__)' # python3 interface working
+```
+
+These Caffe packages should work for you out of box.
+
+#### Customizing caffe packages
+
+Some users may need to customize the Caffe package. The way to customize
+the package is beyond this guide. Here is only a brief guide of producing
+the customized `.deb` packages.
+
+Make sure that there is a `dec-src` source in your `/etc/apt/sources.list`,
+for instance:
+
+```
+deb http://ftp2.cn.debian.org/debian sid main contrib non-free
+deb-src http://ftp2.cn.debian.org/debian sid main contrib non-free
+```
+
+Then we build caffe deb files with the following commands:
+
+```
+$ sudo apt update
+$ sudo apt install build-essential debhelper devscripts # standard package building tools
+$ sudo apt build-dep [ caffe-cpu | caffe-cuda ] # the most elegant way to pull caffe build dependencies
+$ apt source [ caffe-cpu | caffe-cuda ] # download the source tarball and extract
+$ cd caffe-XXXX
+[ ... optional, customizing caffe code/build ... ]
+$ dch --local "Modified XXX" # bump package version and write changelog
+$ debuild -B -j4 # build caffe with 4 parallel jobs (similar to make -j4)
+[ ... building ...]
+$ debc # optional, if you want to check the package contents
+$ sudo debi # optional, install the generated packages
+$ ls ../ # optional, you will see the resulting packages
+```
+
+It is a BUG if the package failed to build without any change.
+The changelog will be installed at e.g. `/usr/share/doc/caffe-cpu/changelog.Debian.gz`.
+
+## Source installation
+
+Source installation under Debian/unstable and Debian/testing is similar to that of Ubuntu, but
+here is a more elegant way to pull caffe build dependencies:
+
+```
+$ sudo apt build-dep [ caffe-cpu | caffe-cuda ]
+```
+
+Note, this requires a `deb-src` entry in your `/etc/apt/sources.list`.
+
+#### Compiler Combinations
+
+Some users may find their favorate compiler doesn't work with CUDA.
+
+```
+CXX compiler | CUDA 7.5 | CUDA 8.0 |
+-------------+------------+------------+-
+GCC-7 | ? | ? |
+GCC-6 | ✘ | ✘ |
+GCC-5 | ✔ [1] | ✔ |
+CLANG-4.0 | ? | ? |
+CLANG-3.9 | ✘ | ✘ |
+CLANG-3.8 | ? | ✔ |
+```
+
+`[1]` CUDA 7.5 's `host_config.h` must be patched before working with GCC-5.
+
+BTW, please forget the GCC-4.X series, since its `libstdc++` ABI is not compatible with GCC-5's.
+You may encounter failure linking GCC-4.X object files against GCC-5 libraries.
+(See https://wiki.debian.org/GCC5 )
+
+## Notes
+
+* Consider re-compiling OpenBLAS locally with optimization flags for sake of
+performance. This is highly recommended for any kind of production use, including
+academic research.
+
+* If you are installing `caffe-cuda`, APT will automatically pull some of the
+CUDA packages and the nvidia driver packages. Please be careful if you have
+manually installed or hacked nvidia driver or CUDA toolkit or any other
+related stuff, because in this case APT may fail.
+
+* Additionally, a manpage (`man caffe`) and a bash complementation script
+(`caffe `, `caffe train `) are provided.
+Both of the two files are still not merged into caffe master.
+
+* The python interface is Python 3 version: `python3-caffe-{cpu,cuda}`.
+No plan to support python2.
+
+* If you encountered any problem related to the packaging system (e.g. failed to install `caffe-*`),
+please report bug to Debian via Debian's bug tracking system. See https://www.debian.org/Bugs/ .
+Patches and suggestions are also welcome.
+
+## FAQ
+
+* where is caffe-cudnn?
+
+CUDNN library seems not redistributable currently. If you really want the
+caffe-cudnn deb packages, the workaround is to install cudnn by yourself,
+and hack the packaging scripts, then build your customized package.
+
+* I installed the CPU version. How can I switch to the CUDA version?
+
+`sudo apt install caffe-cuda`, apt's dependency resolver is smart enough to deal with this.
+
+* Where are the examples, the models and other documentation stuff?
+
+```
+$ sudo apt install caffe-doc
+$ dpkg -L caffe-doc
+```
+
+* Where can I find the Debian package status?
+
+```
+https://tracker.debian.org/pkg/caffe (for the CPU_ONLY version)
+https://tracker.debian.org/pkg/caffe-contrib (for the CUDA version)
+```
diff --git a/3rdparty/caffe/docs/install_osx.md b/3rdparty/caffe/docs/install_osx.md
new file mode 100644
index 00000000..a2da82f0
--- /dev/null
+++ b/3rdparty/caffe/docs/install_osx.md
@@ -0,0 +1,128 @@
+---
+title: "Installation: OS X"
+---
+
+# OS X Installation
+
+We highly recommend using the [Homebrew](http://brew.sh/) package manager.
+Ideally you could start from a clean `/usr/local` to avoid conflicts.
+In the following, we assume that you're using Anaconda Python and Homebrew.
+
+**CUDA**: Install via the NVIDIA package that includes both CUDA and the bundled driver. **CUDA 7 is strongly suggested.** Older CUDA require `libstdc++` while clang++ is the default compiler and `libc++` the default standard library on OS X 10.9+. This disagreement makes it necessary to change the compilation settings for each of the dependencies. This is prone to error.
+
+**Library Path**: We find that everything compiles successfully if `$LD_LIBRARY_PATH` is not set at all, and `$DYLD_FALLBACK_LIBRARY_PATH` is set to provide CUDA, Python, and other relevant libraries (e.g. `/usr/local/cuda/lib:$HOME/anaconda/lib:/usr/local/lib:/usr/lib`).
+In other `ENV` settings, things may not work as expected.
+
+**General dependencies**
+
+ brew install -vd snappy leveldb gflags glog szip lmdb
+ # need the homebrew science source for OpenCV and hdf5
+ brew tap homebrew/science
+ brew install hdf5 opencv
+
+If using Anaconda Python, a modification to the OpenCV formula might be needed
+Do `brew edit opencv` and change the lines that look like the two lines below to exactly the two lines below.
+
+ -DPYTHON_LIBRARY=#{py_prefix}/lib/libpython2.7.dylib
+ -DPYTHON_INCLUDE_DIR=#{py_prefix}/include/python2.7
+
+If using Anaconda Python, HDF5 is bundled and the `hdf5` formula can be skipped.
+
+**Remaining dependencies, with / without Python**
+
+ # with Python pycaffe needs dependencies built from source
+ brew install --build-from-source --with-python -vd protobuf
+ brew install --build-from-source -vd boost boost-python
+ # without Python the usual installation suffices
+ brew install protobuf boost
+
+**BLAS**: already installed as the [Accelerate / vecLib Framework](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man7/Accelerate.7.html). OpenBLAS and MKL are alternatives for faster CPU computation.
+
+**Python** (optional): Anaconda is the preferred Python.
+If you decide against it, please use Homebrew.
+Check that Caffe and dependencies are linking against the same, desired Python.
+
+Continue with [compilation](installation.html#compilation).
+
+## libstdc++ installation
+
+This route is not for the faint of heart.
+For OS X 10.10 and 10.9 you should install CUDA 7 and follow the instructions above.
+If that is not an option, take a deep breath and carry on.
+
+In OS X 10.9+, clang++ is the default C++ compiler and uses `libc++` as the standard library.
+However, NVIDIA CUDA (even version 6.0) currently links only with `libstdc++`.
+This makes it necessary to change the compilation settings for each of the dependencies.
+
+We do this by modifying the Homebrew formulae before installing any packages.
+Make sure that Homebrew doesn't install any software dependencies in the background; all packages must be linked to `libstdc++`.
+
+The prerequisite Homebrew formulae are
+
+ boost snappy leveldb protobuf gflags glog szip lmdb homebrew/science/opencv
+
+For each of these formulas, `brew edit FORMULA`, and add the ENV definitions as shown:
+
+ def install
+ # ADD THE FOLLOWING:
+ ENV.append "CXXFLAGS", "-stdlib=libstdc++"
+ ENV.append "CFLAGS", "-stdlib=libstdc++"
+ ENV.append "LDFLAGS", "-stdlib=libstdc++ -lstdc++"
+ # The following is necessary because libtool likes to strip LDFLAGS:
+ ENV["CXX"] = "/usr/bin/clang++ -stdlib=libstdc++"
+ ...
+
+To edit the formulae in turn, run
+
+ for x in snappy leveldb protobuf gflags glog szip boost boost-python lmdb homebrew/science/opencv; do brew edit $x; done
+
+After this, run
+
+ for x in snappy leveldb gflags glog szip lmdb homebrew/science/opencv; do brew uninstall $x; brew install --build-from-source -vd $x; done
+ brew uninstall protobuf; brew install --build-from-source --with-python -vd protobuf
+ brew install --build-from-source -vd boost boost-python
+
+If this is not done exactly right then linking errors will trouble you.
+
+**Homebrew versioning** that Homebrew maintains itself as a separate git repository and making the above `brew edit FORMULA` changes will change files in your local copy of homebrew's master branch. By default, this will prevent you from updating Homebrew using `brew update`, as you will get an error message like the following:
+
+ $ brew update
+ error: Your local changes to the following files would be overwritten by merge:
+ Library/Formula/lmdb.rb
+ Please, commit your changes or stash them before you can merge.
+ Aborting
+ Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master
+
+One solution is to commit your changes to a separate Homebrew branch, run `brew update`, and rebase your changes onto the updated master. You'll have to do this both for the main Homebrew repository in `/usr/local/` and the Homebrew science repository that contains OpenCV in `/usr/local/Library/Taps/homebrew/homebrew-science`, as follows:
+
+ cd /usr/local
+ git checkout -b caffe
+ git add .
+ git commit -m "Update Caffe dependencies to use libstdc++"
+ cd /usr/local/Library/Taps/homebrew/homebrew-science
+ git checkout -b caffe
+ git add .
+ git commit -m "Update Caffe dependencies"
+
+Then, whenever you want to update homebrew, switch back to the master branches, do the update, rebase the caffe branches onto master and fix any conflicts:
+
+ # Switch batch to homebrew master branches
+ cd /usr/local
+ git checkout master
+ cd /usr/local/Library/Taps/homebrew/homebrew-science
+ git checkout master
+
+ # Update homebrew; hopefully this works without errors!
+ brew update
+
+ # Switch back to the caffe branches with the formulae that you modified earlier
+ cd /usr/local
+ git rebase master caffe
+ # Fix any merge conflicts and commit to caffe branch
+ cd /usr/local/Library/Taps/homebrew/homebrew-science
+ git rebase master caffe
+ # Fix any merge conflicts and commit to caffe branch
+
+ # Done!
+
+At this point, you should be running the latest Homebrew packages and your Caffe-related modifications will remain in place.
diff --git a/3rdparty/caffe/docs/install_yum.md b/3rdparty/caffe/docs/install_yum.md
new file mode 100644
index 00000000..842fbd64
--- /dev/null
+++ b/3rdparty/caffe/docs/install_yum.md
@@ -0,0 +1,45 @@
+---
+title: "Installation: RHEL / Fedora / CentOS"
+---
+
+# RHEL / Fedora / CentOS Installation
+
+**General dependencies**
+
+ sudo yum install protobuf-devel leveldb-devel snappy-devel opencv-devel boost-devel hdf5-devel
+
+**Remaining dependencies, recent OS**
+
+ sudo yum install gflags-devel glog-devel lmdb-devel
+
+**Remaining dependencies, if not found**
+
+ # glog
+ wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/google-glog/glog-0.3.3.tar.gz
+ tar zxvf glog-0.3.3.tar.gz
+ cd glog-0.3.3
+ ./configure
+ make && make install
+ # gflags
+ wget https://github.com/schuhschuh/gflags/archive/master.zip
+ unzip master.zip
+ cd gflags-master
+ mkdir build && cd build
+ export CXXFLAGS="-fPIC" && cmake .. && make VERBOSE=1
+ make && make install
+ # lmdb
+ git clone https://github.com/LMDB/lmdb
+ cd lmdb/libraries/liblmdb
+ make && make install
+
+Note that glog does not compile with the most recent gflags version (2.1), so before that is resolved you will need to build with glog first.
+
+**CUDA**: Install via the NVIDIA package instead of `yum` to be certain of the library and driver versions.
+Install the library and latest driver separately; the driver bundled with the library is usually out-of-date.
+ + CentOS/RHEL/Fedora:
+
+**BLAS**: install ATLAS by `sudo yum install atlas-devel` or install OpenBLAS or MKL for better CPU performance. For the Makefile build, uncomment and set `BLAS_LIB` accordingly as ATLAS is usually installed under `/usr/lib[64]/atlas`).
+
+**Python** (optional): if you use the default Python you will need to `sudo yum install` the `python-devel` package to have the Python headers for building the pycaffe wrapper.
+
+Continue with [compilation](installation.html#compilation).
diff --git a/3rdparty/caffe/docs/installation.md b/3rdparty/caffe/docs/installation.md
new file mode 100644
index 00000000..42f1d0ce
--- /dev/null
+++ b/3rdparty/caffe/docs/installation.md
@@ -0,0 +1,146 @@
+---
+title: Installation
+---
+
+# Installation
+
+Prior to installing, have a glance through this guide and take note of the details for your platform.
+We install and run Caffe on Ubuntu 16.04–12.04, OS X 10.11–10.8, and through Docker and AWS.
+The official Makefile and `Makefile.config` build are complemented by a [community CMake build](#cmake-build).
+
+**Step-by-step Instructions**:
+
+- [Docker setup](https://github.com/BVLC/caffe/tree/master/docker) *out-of-the-box brewing*
+- [Ubuntu installation](install_apt.html) *the standard platform*
+- [Debian installation](install_apt_debian.html) *install caffe with a single command*
+- [OS X installation](install_osx.html)
+- [RHEL / CentOS / Fedora installation](install_yum.html)
+- [Windows](https://github.com/BVLC/caffe/tree/windows) *see the Windows branch led by Guillaume Dumont*
+- [OpenCL](https://github.com/BVLC/caffe/tree/opencl) *see the OpenCL branch led by Fabian Tschopp*
+- [AWS AMI](https://github.com/bitfusionio/amis/tree/master/awsmrkt-bfboost-ubuntu14-cuda75-caffe) *pre-configured for AWS*
+
+**Overview**:
+
+- [Prerequisites](#prerequisites)
+- [Compilation](#compilation)
+- [Hardware](#hardware)
+
+When updating Caffe, it's best to `make clean` before re-compiling.
+
+## Prerequisites
+
+Caffe has several dependencies:
+
+* [CUDA](https://developer.nvidia.com/cuda-zone) is required for GPU mode.
+ * library version 7+ and the latest driver version are recommended, but 6.* is fine too
+ * 5.5, and 5.0 are compatible but considered legacy
+* [BLAS](http://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms) via ATLAS, MKL, or OpenBLAS.
+* [Boost](http://www.boost.org/) >= 1.55
+* `protobuf`, `glog`, `gflags`, `hdf5`
+
+Optional dependencies:
+
+* [OpenCV](http://opencv.org/) >= 2.4 including 3.0
+* IO libraries: `lmdb`, `leveldb` (note: leveldb requires `snappy`)
+* cuDNN for GPU acceleration (v6)
+
+Pycaffe and Matcaffe interfaces have their own natural needs.
+
+* For Python Caffe: `Python 2.7` or `Python 3.3+`, `numpy (>= 1.7)`, boost-provided `boost.python`
+* For MATLAB Caffe: MATLAB with the `mex` compiler.
+
+**cuDNN Caffe**: for fastest operation Caffe is accelerated by drop-in integration of [NVIDIA cuDNN](https://developer.nvidia.com/cudnn). To speed up your Caffe models, install cuDNN then uncomment the `USE_CUDNN := 1` flag in `Makefile.config` when installing Caffe. Acceleration is automatic. The current version is cuDNN v6; older versions are supported in older Caffe.
+
+**CPU-only Caffe**: for cold-brewed CPU-only Caffe uncomment the `CPU_ONLY := 1` flag in `Makefile.config` to configure and build Caffe without CUDA. This is helpful for cloud or cluster deployment.
+
+### CUDA and BLAS
+
+Caffe requires the CUDA `nvcc` compiler to compile its GPU code and CUDA driver for GPU operation.
+To install CUDA, go to the [NVIDIA CUDA website](https://developer.nvidia.com/cuda-downloads) and follow installation instructions there. Install the library and the latest standalone driver separately; the driver bundled with the library is usually out-of-date. **Warning!** The 331.* CUDA driver series has a critical performance issue: do not use it.
+
+For best performance, Caffe can be accelerated by [NVIDIA cuDNN](https://developer.nvidia.com/cudnn). Register for free at the cuDNN site, install it, then continue with these installation instructions. To compile with cuDNN set the `USE_CUDNN := 1` flag set in your `Makefile.config`.
+
+Caffe requires BLAS as the backend of its matrix and vector computations.
+There are several implementations of this library. The choice is yours:
+
+* [ATLAS](http://math-atlas.sourceforge.net/): free, open source, and so the default for Caffe.
+* [Intel MKL](http://software.intel.com/en-us/intel-mkl): commercial and optimized for Intel CPUs, with [free](https://registrationcenter.intel.com/en/forms/?productid=2558) licenses.
+ 1. Install MKL.
+ 2. Set up MKL environment (Details: [Linux](https://software.intel.com/en-us/node/528499), [OS X](https://software.intel.com/en-us/node/528659)). Example: *source /opt/intel/mkl/bin/mklvars.sh intel64*
+ 3. Set `BLAS := mkl` in `Makefile.config`
+* [OpenBLAS](http://www.openblas.net/): free and open source; this optimized and parallel BLAS could require more effort to install, although it might offer a speedup.
+ 1. Install OpenBLAS
+ 2. Set `BLAS := open` in `Makefile.config`
+
+### Python and/or MATLAB Caffe (optional)
+
+#### Python
+
+The main requirements are `numpy` and `boost.python` (provided by boost). `pandas` is useful too and needed for some examples.
+
+You can install the dependencies with
+
+ for req in $(cat requirements.txt); do pip install $req; done
+
+but we suggest first installing the [Anaconda](https://store.continuum.io/cshop/anaconda/) Python distribution, which provides most of the necessary packages, as well as the `hdf5` library dependency.
+
+To import the `caffe` Python module after completing the installation, add the module directory to your `$PYTHONPATH` by `export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH` or the like. You should not import the module in the `caffe/python/caffe` directory!
+
+*Caffe's Python interface works with Python 2.7. Python 3.3+ should work out of the box without protobuf support. For protobuf support please install protobuf 3.0 alpha (https://developers.google.com/protocol-buffers/). Earlier Pythons are your own adventure.*
+
+#### MATLAB
+
+Install MATLAB, and make sure that its `mex` is in your `$PATH`.
+
+*Caffe's MATLAB interface works with versions 2015a, 2014a/b, 2013a/b, and 2012b.*
+
+## Compilation
+
+Caffe can be compiled with either Make or CMake. Make is officially supported while CMake is supported by the community.
+
+### Compilation with Make
+
+Configure the build by copying and modifying the example `Makefile.config` for your setup. The defaults should work, but uncomment the relevant lines if using Anaconda Python.
+
+ cp Makefile.config.example Makefile.config
+ # Adjust Makefile.config (for example, if using Anaconda Python, or if cuDNN is desired)
+ make all
+ make test
+ make runtest
+
+- For CPU & GPU accelerated Caffe, no changes are needed.
+- For cuDNN acceleration using NVIDIA's proprietary cuDNN software, uncomment the `USE_CUDNN := 1` switch in `Makefile.config`. cuDNN is sometimes but not always faster than Caffe's GPU acceleration.
+- For CPU-only Caffe, uncomment `CPU_ONLY := 1` in `Makefile.config`.
+
+To compile the Python and MATLAB wrappers do `make pycaffe` and `make matcaffe` respectively.
+Be sure to set your MATLAB and Python paths in `Makefile.config` first!
+
+**Distribution**: run `make distribute` to create a `distribute` directory with all the Caffe headers, compiled libraries, binaries, etc. needed for distribution to other machines.
+
+**Speed**: for a faster build, compile in parallel by doing `make all -j8` where 8 is the number of parallel threads for compilation (a good choice for the number of threads is the number of cores in your machine).
+
+Now that you have installed Caffe, check out the [MNIST tutorial](gathered/examples/mnist.html) and the [reference ImageNet model tutorial](gathered/examples/imagenet.html).
+
+### CMake Build
+
+In lieu of manually editing `Makefile.config` to configure the build, Caffe offers an unofficial CMake build thanks to @Nerei, @akosiorek, and other members of the community. It requires CMake version >= 2.8.7.
+The basic steps are as follows:
+
+ mkdir build
+ cd build
+ cmake ..
+ make all
+ make install
+ make runtest
+
+See [PR #1667](https://github.com/BVLC/caffe/pull/1667) for options and details.
+
+## Hardware
+
+**Laboratory Tested Hardware**: Berkeley Vision runs Caffe with Titan Xs, K80s, GTX 980s, K40s, K20s, Titans, and GTX 770s including models at ImageNet/ILSVRC scale. We have not encountered any trouble in-house with devices with CUDA capability >= 3.0. All reported hardware issues thus-far have been due to GPU configuration, overheating, and the like.
+
+**CUDA compute capability**: devices with compute capability <= 2.0 may have to reduce CUDA thread numbers and batch sizes due to hardware constraints. Brew with caution; we recommend compute capability >= 3.0.
+
+Once installed, check your times against our [reference performance numbers](performance_hardware.html) to make sure everything is configured properly.
+
+Ask hardware questions on the [caffe-users group](https://groups.google.com/forum/#!forum/caffe-users).
diff --git a/3rdparty/caffe/docs/model_zoo.md b/3rdparty/caffe/docs/model_zoo.md
new file mode 100644
index 00000000..3f77e825
--- /dev/null
+++ b/3rdparty/caffe/docs/model_zoo.md
@@ -0,0 +1,72 @@
+---
+title: Model Zoo
+---
+# Caffe Model Zoo
+
+Lots of researchers and engineers have made Caffe models for different tasks with all kinds of architectures and data: check out the [model zoo](https://github.com/BVLC/caffe/wiki/Model-Zoo)!
+These models are learned and applied for problems ranging from simple regression, to large-scale visual classification, to Siamese networks for image similarity, to speech and robotics applications.
+
+To help share these models, we introduce the model zoo framework:
+
+- A standard format for packaging Caffe model info.
+- Tools to upload/download model info to/from Github Gists, and to download trained `.caffemodel` binaries.
+- A central wiki page for sharing model info Gists.
+
+## Where to get trained models
+
+First of all, we bundle BAIR-trained models for unrestricted, out of the box use.
+
+See the [BAIR model license](#bair-model-license) for details.
+Each one of these can be downloaded by running `scripts/download_model_binary.py ` where `` is specified below:
+
+- **BAIR Reference CaffeNet** in `models/bvlc_reference_caffenet`: AlexNet trained on ILSVRC 2012, with a minor variation from the version as described in [ImageNet classification with deep convolutional neural networks](http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks) by Krizhevsky et al. in NIPS 2012. (Trained by Jeff Donahue @jeffdonahue)
+- **BAIR AlexNet** in `models/bvlc_alexnet`: AlexNet trained on ILSVRC 2012, almost exactly as described in [ImageNet classification with deep convolutional neural networks](http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks) by Krizhevsky et al. in NIPS 2012. (Trained by Evan Shelhamer @shelhamer)
+- **BAIR Reference R-CNN ILSVRC-2013** in `models/bvlc_reference_rcnn_ilsvrc13`: pure Caffe implementation of [R-CNN](https://github.com/rbgirshick/rcnn) as described by Girshick et al. in CVPR 2014. (Trained by Ross Girshick @rbgirshick)
+- **BAIR GoogLeNet** in `models/bvlc_googlenet`: GoogLeNet trained on ILSVRC 2012, almost exactly as described in [Going Deeper with Convolutions](http://arxiv.org/abs/1409.4842) by Szegedy et al. in ILSVRC 2014. (Trained by Sergio Guadarrama @sguada)
+
+**Community models** made by Caffe users are posted to a publicly editable [model zoo wiki page](https://github.com/BVLC/caffe/wiki/Model-Zoo).
+These models are subject to conditions of their respective authors such as citation and license.
+Thank you for sharing your models!
+
+## Model info format
+
+A caffe model is distributed as a directory containing:
+
+- Solver/model prototxt(s)
+- `readme.md` containing
+ - YAML frontmatter
+ - Caffe version used to train this model (tagged release or commit hash).
+ - [optional] file URL and SHA1 of the trained `.caffemodel`.
+ - [optional] github gist id.
+ - Information about what data the model was trained on, modeling choices, etc.
+ - License information.
+- [optional] Other helpful scripts.
+
+This simple format can be handled through bundled scripts or manually if need be.
+
+### Hosting model info
+
+Github Gist is a good format for model info distribution because it can contain multiple files, is versionable, and has in-browser syntax highlighting and markdown rendering.
+
+`scripts/upload_model_to_gist.sh ` uploads non-binary files in the model directory as a Github Gist and prints the Gist ID. If `gist_id` is already part of the `/readme.md` frontmatter, then updates existing Gist.
+
+Try doing `scripts/upload_model_to_gist.sh models/bvlc_alexnet` to test the uploading (don't forget to delete the uploaded gist afterward).
+
+Downloading model info is done just as easily with `scripts/download_model_from_gist.sh `.
+
+### Hosting trained models
+
+It is up to the user where to host the `.caffemodel` file.
+We host our BAIR-provided models on our own server.
+Dropbox also works fine (tip: make sure that `?dl=1` is appended to the end of the URL).
+
+`scripts/download_model_binary.py ` downloads the `.caffemodel` from the URL specified in the `/readme.md` frontmatter and confirms SHA1.
+
+## BAIR model license
+
+The Caffe models bundled by the BAIR are released for unrestricted use.
+
+These models are trained on data from the [ImageNet project](http://www.image-net.org/) and training data includes internet photos that may be subject to copyright.
+
+Our present understanding as researchers is that there is no restriction placed on the open release of these learned model weights, since none of the original images are distributed in whole or in part.
+To the extent that the interpretation arises that weights are derivative works of the original copyright holder and they assert such a copyright, UC Berkeley makes no representations as to what use is allowed other than to consider our present release in the spirit of fair use in the academic mission of the university to disseminate knowledge and tools as broadly as possible without restriction.
diff --git a/3rdparty/caffe/docs/multigpu.md b/3rdparty/caffe/docs/multigpu.md
new file mode 100644
index 00000000..e04ebb0b
--- /dev/null
+++ b/3rdparty/caffe/docs/multigpu.md
@@ -0,0 +1,26 @@
+---
+title: Multi-GPU Usage, Hardware Configuration Assumptions, and Performance
+---
+
+# Multi-GPU Usage
+
+Currently Multi-GPU is only supported via the C/C++ paths and only for training.
+
+The GPUs to be used for training can be set with the "-gpu" flag on the command line to the 'caffe' tool. e.g. "build/tools/caffe train --solver=models/bvlc_alexnet/solver.prototxt --gpu=0,1" will train on GPUs 0 and 1.
+
+**NOTE**: each GPU runs the batchsize specified in your train_val.prototxt. So if you go from 1 GPU to 2 GPU, your effective batchsize will double. e.g. if your train_val.prototxt specified a batchsize of 256, if you run 2 GPUs your effective batch size is now 512. So you need to adjust the batchsize when running multiple GPUs and/or adjust your solver params, specifically learning rate.
+
+# Hardware Configuration Assumptions
+
+The current implementation uses a tree reduction strategy. e.g. if there are 4 GPUs in the system, 0:1, 2:3 will exchange gradients, then 0:2 (top of the tree) will exchange gradients, 0 will calculate
+updated model, 0\-\>2, and then 0\-\>1, 2\-\>3.
+
+For best performance, P2P DMA access between devices is needed. Without P2P access, for example crossing PCIe root complex, data is copied through host and effective exchange bandwidth is greatly reduced.
+
+Current implementation has a "soft" assumption that the devices being used are homogeneous. In practice, any devices of the same general class should work together, but performance and total size is limited by the smallest device being used. e.g. if you combine a TitanX and a GTX980, performance will be limited by the 980. Mixing vastly different levels of boards, e.g. Kepler and Fermi, is not supported.
+
+"nvidia-smi topo -m" will show you the connectivity matrix. You can do P2P through PCIe bridges, but not across socket level links at this time, e.g. across CPU sockets on a multi-socket motherboard.
+
+# Scaling Performance
+
+Performance is **heavily** dependent on the PCIe topology of the system, the configuration of the neural network you are training, and the speed of each of the layers. Systems like the DIGITS DevBox have an optimized PCIe topology (X99-E WS chipset). In general, scaling on 2 GPUs tends to be ~1.8X on average for networks like AlexNet, CaffeNet, VGG, GoogleNet. 4 GPUs begins to have falloff in scaling. Generally with "weak scaling" where the batchsize increases with the number of GPUs you will see 3.5x scaling or so. With "strong scaling", the system can become communication bound, especially with layer performance optimizations like those in [cuDNNv3](http://nvidia.com/cudnn), and you will likely see closer to mid 2.x scaling in performance. Networks that have heavy computation compared to the number of parameters tend to have the best scaling performance.
diff --git a/3rdparty/caffe/docs/stylesheets/pygment_trac.css b/3rdparty/caffe/docs/stylesheets/pygment_trac.css
new file mode 100644
index 00000000..c6a6452d
--- /dev/null
+++ b/3rdparty/caffe/docs/stylesheets/pygment_trac.css
@@ -0,0 +1,69 @@
+.highlight { background: #ffffff; }
+.highlight .c { color: #999988; font-style: italic } /* Comment */
+.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+.highlight .k { font-weight: bold } /* Keyword */
+.highlight .o { font-weight: bold } /* Operator */
+.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
+.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
+.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #aa0000 } /* Generic.Error */
+.highlight .gh { color: #999999 } /* Generic.Heading */
+.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
+.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #555555 } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold; } /* Generic.Subheading */
+.highlight .gt { color: #aa0000 } /* Generic.Traceback */
+.highlight .kc { font-weight: bold } /* Keyword.Constant */
+.highlight .kd { font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
+.highlight .m { color: #009999 } /* Literal.Number */
+.highlight .s { color: #d14 } /* Literal.String */
+.highlight .na { color: #008080 } /* Name.Attribute */
+.highlight .nb { color: #0086B3 } /* Name.Builtin */
+.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
+.highlight .no { color: #008080 } /* Name.Constant */
+.highlight .ni { color: #800080 } /* Name.Entity */
+.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
+.highlight .nn { color: #555555 } /* Name.Namespace */
+.highlight .nt { color: #000080 } /* Name.Tag */
+.highlight .nv { color: #008080 } /* Name.Variable */
+.highlight .ow { font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mf { color: #009999 } /* Literal.Number.Float */
+.highlight .mh { color: #009999 } /* Literal.Number.Hex */
+.highlight .mi { color: #009999 } /* Literal.Number.Integer */
+.highlight .mo { color: #009999 } /* Literal.Number.Oct */
+.highlight .sb { color: #d14 } /* Literal.String.Backtick */
+.highlight .sc { color: #d14 } /* Literal.String.Char */
+.highlight .sd { color: #d14 } /* Literal.String.Doc */
+.highlight .s2 { color: #d14 } /* Literal.String.Double */
+.highlight .se { color: #d14 } /* Literal.String.Escape */
+.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
+.highlight .si { color: #d14 } /* Literal.String.Interpol */
+.highlight .sx { color: #d14 } /* Literal.String.Other */
+.highlight .sr { color: #009926 } /* Literal.String.Regex */
+.highlight .s1 { color: #d14 } /* Literal.String.Single */
+.highlight .ss { color: #990073 } /* Literal.String.Symbol */
+.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #008080 } /* Name.Variable.Class */
+.highlight .vg { color: #008080 } /* Name.Variable.Global */
+.highlight .vi { color: #008080 } /* Name.Variable.Instance */
+.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
+
+.type-csharp .highlight .k { color: #0000FF }
+.type-csharp .highlight .kt { color: #0000FF }
+.type-csharp .highlight .nf { color: #000000; font-weight: normal }
+.type-csharp .highlight .nc { color: #2B91AF }
+.type-csharp .highlight .nn { color: #000000 }
+.type-csharp .highlight .s { color: #A31515 }
+.type-csharp .highlight .sc { color: #A31515 }
diff --git a/3rdparty/caffe/docs/stylesheets/reset.css b/3rdparty/caffe/docs/stylesheets/reset.css
new file mode 100644
index 00000000..6020b26f
--- /dev/null
+++ b/3rdparty/caffe/docs/stylesheets/reset.css
@@ -0,0 +1,21 @@
+/* MeyerWeb Reset */
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font: inherit;
+ vertical-align: baseline;
+}
diff --git a/3rdparty/caffe/docs/stylesheets/styles.css b/3rdparty/caffe/docs/stylesheets/styles.css
new file mode 100644
index 00000000..2dbedb8a
--- /dev/null
+++ b/3rdparty/caffe/docs/stylesheets/styles.css
@@ -0,0 +1,348 @@
+@import url(http://fonts.googleapis.com/css?family=PT+Serif|Open+Sans:600,400);
+
+body {
+ padding:10px 50px 0 0;
+ font-family: 'Open Sans', sans-serif;
+ font-size: 14px;
+ color: #232323;
+ background-color: #FBFAF7;
+ margin: 0;
+ line-height: 1.5rem;
+ -webkit-font-smoothing: antialiased;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ color:#232323;
+ margin:36px 0 10px;
+}
+
+p, ul, ol, table, dl {
+ margin:0 0 22px;
+}
+
+h1, h2, h3 {
+ font-family: 'PT Serif', serif;
+ line-height:1.3;
+ font-weight: normal;
+ display: block;
+ border-bottom: 1px solid #ccc;
+ padding-bottom: 5px;
+}
+
+h1 {
+ font-size: 30px;
+}
+
+h2 {
+ font-size: 24px;
+}
+
+h3 {
+ font-size: 18px;
+}
+
+h4, h5, h6 {
+ font-family: 'PT Serif', serif;
+ font-weight: 700;
+}
+
+a {
+ color:#C30000;
+ text-decoration:none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a small {
+ font-size: 12px;
+}
+
+em {
+ font-style: italic;
+}
+
+strong {
+ font-weight:700;
+}
+
+ul {
+ padding-left: 25px;
+}
+
+ol {
+ list-style: decimal;
+ padding-left: 20px;
+}
+
+blockquote {
+ margin: 0;
+ padding: 0 0 0 20px;
+ font-style: italic;
+}
+
+dl, dt, dd, dl p {
+ font-color: #444;
+}
+
+dl dt {
+ font-weight: bold;
+}
+
+dl dd {
+ padding-left: 20px;
+ font-style: italic;
+}
+
+dl p {
+ padding-left: 20px;
+ font-style: italic;
+}
+
+hr {
+ border:0;
+ background:#ccc;
+ height:1px;
+ margin:0 0 24px;
+}
+
+/* Images */
+
+img {
+ position: relative;
+ margin: 0 auto;
+ max-width: 650px;
+ padding: 5px;
+ margin: 10px 0 32px 0;
+ border: 1px solid #ccc;
+}
+
+p img {
+ display: inline;
+ margin: 0;
+ padding: 0;
+ vertical-align: middle;
+ text-align: center;
+ border: none;
+}
+
+/* Code blocks */
+code, pre {
+ font-family: monospace;
+ color:#000;
+ font-size:12px;
+ line-height: 14px;
+}
+
+pre {
+ padding: 6px 12px;
+ background: #FDFEFB;
+ border-radius:4px;
+ border:1px solid #D7D8C8;
+ overflow: auto;
+ white-space: pre-wrap;
+ margin-bottom: 16px;
+}
+
+
+/* Tables */
+table {
+ width:100%;
+}
+
+table {
+ border: 1px solid #ccc;
+ margin-bottom: 32px;
+ text-align: left;
+ }
+
+th {
+ font-family: 'Open Sans', sans-serif;
+ font-size: 18px;
+ font-weight: normal;
+ padding: 10px;
+ background: #232323;
+ color: #FDFEFB;
+ }
+
+td {
+ padding: 10px;
+ background: #ccc;
+ }
+
+
+/* Wrapper */
+.wrapper {
+ width:960px;
+}
+
+
+/* Header */
+
+header {
+ width:170px;
+ float:left;
+ position:fixed;
+ padding: 12px 25px 22px 50px;
+ margin: 24px 25px 0 0;
+}
+
+p.header {
+ font-size: 14px;
+}
+
+h1.header {
+ font-size: 30px;
+ font-weight: 300;
+ line-height: 1.3em;
+ margin-top: 0;
+}
+
+a.name {
+ white-space: nowrap;
+}
+
+header ul {
+ list-style:none;
+ padding:0;
+}
+
+header li {
+ list-style-type: none;
+ width:132px;
+ height:15px;
+ margin-bottom: 12px;
+ line-height: 1em;
+ padding: 6px 6px 6px 7px;
+ background: #c30000;
+ border-radius:4px;
+ border:1px solid #555;
+}
+
+header li:hover {
+ background: #dd0000;
+}
+
+a.buttons {
+ color: #fff;
+ text-decoration: none;
+ font-weight: normal;
+ padding: 2px 2px 2px 22px;
+ height: 30px;
+}
+
+a.github {
+ background: url(/images/GitHub-Mark-64px.png) no-repeat center left;
+ background-size: 15%;
+}
+
+/* Section - for main page content */
+
+section {
+ width:650px;
+ float:right;
+ padding-bottom:50px;
+}
+
+p.footnote {
+ font-size: 12px;
+}
+
+
+/* Footer */
+
+footer {
+ width:170px;
+ float:left;
+ position:fixed;
+ bottom:10px;
+ padding-left: 50px;
+}
+
+@media print, screen and (max-width: 960px) {
+
+ div.wrapper {
+ width:auto;
+ margin:0;
+ }
+
+ header, section, footer {
+ float:none;
+ position:static;
+ width:auto;
+ }
+
+ footer {
+ border-top: 1px solid #ccc;
+ margin:0 84px 0 50px;
+ padding:0;
+ }
+
+ header {
+ padding-right:320px;
+ }
+
+ section {
+ padding:20px 84px 20px 50px;
+ margin:0 0 20px;
+ }
+
+ header a small {
+ display:inline;
+ }
+
+ header ul {
+ position:absolute;
+ right:130px;
+ top:84px;
+ }
+}
+
+@media print, screen and (max-width: 720px) {
+ body {
+ word-wrap:break-word;
+ }
+
+ header {
+ padding:10px 20px 0;
+ margin-right: 0;
+ }
+
+ section {
+ padding:10px 0 10px 20px;
+ margin:0 0 30px;
+ }
+
+ footer {
+ margin: 0 0 0 30px;
+ }
+
+ header ul, header p.view {
+ position:static;
+ }
+}
+
+@media print, screen and (max-width: 480px) {
+
+ header ul li.download {
+ display:none;
+ }
+
+ footer {
+ margin: 0 0 0 20px;
+ }
+
+ footer a{
+ display:block;
+ }
+
+}
+
+@media print {
+ body {
+ padding:0.4in;
+ font-size:12pt;
+ color:#444;
+ }
+}
diff --git a/3rdparty/caffe/docs/tutorial/convolution.md b/3rdparty/caffe/docs/tutorial/convolution.md
new file mode 100644
index 00000000..a02fe4ef
--- /dev/null
+++ b/3rdparty/caffe/docs/tutorial/convolution.md
@@ -0,0 +1,13 @@
+---
+title: Convolution
+---
+# Caffeinated Convolution
+
+The Caffe strategy for convolution is to reduce the problem to matrix-matrix multiplication.
+This linear algebra computation is highly-tuned in BLAS libraries and efficiently computed on GPU devices.
+
+For more details read Yangqing's [Convolution in Caffe: a memo](https://github.com/Yangqing/caffe/wiki/Convolution-in-Caffe:-a-memo).
+
+As it turns out, this same reduction was independently explored in the context of conv. nets by
+
+> K. Chellapilla, S. Puri, P. Simard, et al. High performance convolutional neural networks for document processing. In Tenth International Workshop on Frontiers in Handwriting Recognition, 2006.
diff --git a/3rdparty/caffe/docs/tutorial/data.md b/3rdparty/caffe/docs/tutorial/data.md
new file mode 100644
index 00000000..3bf7d932
--- /dev/null
+++ b/3rdparty/caffe/docs/tutorial/data.md
@@ -0,0 +1,78 @@
+---
+title: Data
+---
+# Data: Ins and Outs
+
+Data flows through Caffe as [Blobs](net_layer_blob.html#blob-storage-and-communication).
+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
+
+ layer {
+ name: "mnist"
+ # Data layer loads leveldb or lmdb storage DBs for high-throughput.
+ type: "Data"
+ # the 1st top is the data itself: the name is only convention
+ top: "data"
+ # the 2nd top is the ground truth: the name is only convention
+ top: "label"
+ # the Data layer configuration
+ data_param {
+ # path to the DB
+ source: "examples/mnist/mnist_train_lmdb"
+ # type of DB: LEVELDB or LMDB (LMDB supports concurrent reads)
+ backend: LMDB
+ # batch processing improves efficiency.
+ batch_size: 64
+ }
+ # common data transformations
+ transform_param {
+ # feature scaling coefficient: this maps the [0, 255] MNIST data to [0, 1]
+ scale: 0.00390625
+ }
+ }
+
+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.
+
+ layer {
+ name: "data"
+ type: "Data"
+ [...]
+ transform_param {
+ scale: 0.1
+ mean_file_size: mean.binaryproto
+ # for images in particular horizontal mirroring and random cropping
+ # can be done as simple data augmentations.
+ mirror: 1 # 1 = on, 0 = off
+ # crop a `crop_size` x `crop_size` patch:
+ # - at random during training
+ # - from the center during testing
+ crop_size: 227
+ }
+ }
+
+**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](layers.html#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.
diff --git a/3rdparty/caffe/docs/tutorial/fig/.gitignore b/3rdparty/caffe/docs/tutorial/fig/.gitignore
new file mode 100644
index 00000000..e69de29b
diff --git a/3rdparty/caffe/docs/tutorial/fig/backward.jpg b/3rdparty/caffe/docs/tutorial/fig/backward.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..906b080c975881dbb5bd598b3f0824c7a63014aa
GIT binary patch
literal 105017
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