Giter Club home page Giter Club logo

fb-caffe-exts's Introduction

fb-caffe-exts

fb-caffe-exts is a collection of extensions developed at FB while using Caffe in (mainly) production scenarios.

predictor/

A simple C++ library that wraps the common pattern of running a caffe::Net in multiple threads while sharing weights. It also provides a slightly more convenient usage API for the inference case.

#include "caffe/predictor/Predictor.h"

// In your setup phase
predictor_ = Predictor::paths(FLAGS_prototxt_path,
      FLAGS_weights_path, FLAGS_optimization);

// When calling in a worker thread
static thread_local caffe::Blob<float> input_blob;
input_blob.set_cpu_data(input_data); // avoid the copy.
const auto& output_blobs = predictor_->forward({&input_blob});
return output_blobs[FLAGS_output_layer_name];

Of note is the predictor/Optimize.{h,cpp}, which optimizes memory usage by automatically reusing the intermediate activations when this is safe. This reduces the amount of memory required for intermediate activations by around 50% for AlexNet-style models, and around 75% for GoogLeNet-style models.

We can plot each set of activations in the topological ordering of the network, with a unique color for each reused activation buffer, with the height of the blob proportional to the size of the buffer.

For example, in an AlexNet-like model, the allocation looks like

./doc/caffenet.png

A corresponding allocation for GoogLeNet looks like

./doc/googlenet.png

The idea is essentially linear scan register allocation. We

  • compute a set of “live ranges” for each caffe::SyncedMemory (due to sharing, we can’t do this at a caffe::Blob level)
  • compute a set of live intervals, and schedule each caffe::SyncedMemory in a non-overlapping fashion onto each live interval
  • allocate a canonical caffe::SyncedMemory buffer for each live interval
  • Update the blob internal pointers to point to the canonical buffer

Depending on the model, the buffer reuse can also lead to some non-trivial performance improvements at inference time.

To enable this just pass Predictor::Optimization::MEMORY to the Predictor constructor.

predictor/PooledPredictor{.h,cpp} maintains a thread-pool with thread-local instances of caffe::Net. Calls to PooledPredictor::forward() are added to a folly::MPMCQueue, which are then dequeued by the thread-pool for processing. Calls to forward() are non-blocking and return a folly::Future that will be satisfied when the forward pass job finishes. PooledPredictor also supports running multiple models over the same thread-pool. That is, if you load two models, each thread in the thread-pool will maintain two instances of caffe::Net (one for each model), and the netId param in forward() specifies the model to run. PinnedPooledPredictor is an abstraction over PooledPredictor when used with multiple models to pin the forward() calls to a specific model.

#include "caffe/predictor/PooledPredictor.h"

// In your setup phase
caffe::fb::PooledPredictor::Config config;
config.numThreads_ = 10;
config.optimization_ = caffe::fb::Predictor::Optimization::MEMORY;
config.protoWeightPaths_.emplace_back(FLAGS_prototxt_path,
                                      FLAGS_weights_path);
pooledPredictor_ = caffe::fb::PooledPredictor::makePredictor(config);

// When calling predictor
caffe::fb::PooledPredictor::OutputLayers output_blobs;
pooledPredictor_->forward({&input_blob}, &output_blobs)
  .then([&] {
    const auto& output_blob = outputs_blobs[FLAGS_output_layer_name];
    // Do something with output_blob
  });

torch2caffe/

A library for converting pre-trained Torch models to the equivalent Caffe models.

torch_layers.lua describes the set of layers that we can automatically convert, and test.lua shows some examples of more complex models being converted end to end.

For example, complex CNNs (GoogLeNet, etc), deep LSTMs (created in nngraph), models with tricky parallel/split connectivity structures (Natural Language Processing (almost) from Scratch), etc.

This can be invoked as

∴ th torch2caffe/torch2caffe.lua --help
--input (default "") Input model file
--preprocessing (default "") Preprocess the model
--prototxt (default "") Output prototxt model file
--caffemodel (default "") Output model weights file
--format (default "lua") Format: lua | luathrift
--input-tensor (default "") (Optional) Predefined input tensor
--verify (default "") (Optional) Verify existing
<input_dims...> (number) Input dimensions (e.g. 10N x 3C x 227H x 227W)

This works by

  • (optionally) preprocessing the model provided in --input, (folding BatchNormalization layers into the preceding layer, etc),
  • walking the Torch module graph of the model provide in --input,
  • converting it to the equivalent Caffe module graph,
  • copying the weights into the Caffe model,
  • Running some test inputs (of size input_dims...) through both models and verifying the outputs are identical.

conversions/

A simple CLI tool for running some simple Caffe network transformations.

∴ python conversions.py vision --help
Usage: conversions.py vision [OPTIONS]

Options:
  --prototxt TEXT           [required]
  --caffemodel TEXT         [required]
  --output-prototxt TEXT    [required]
  --output-caffemodel TEXT  [required]
  --help                    Show this message and exit.

The main usage at the moment is automating the Net Surgery notebook.

Building and Installing

As you might expect, this library depends on an up-to-date BVLC Caffe installation.

The additional dependencies are

  • The C++ libraries require folly.
  • The Python conversions libraries requires click.

You can drop the C++ components into an existing Caffe installation. We’ll update the repo with an example modification to an existing Makefile.config and a CMake based solution.

Contact

Feel free to open issues on this repo for requests/bugs, or contact Andrew Tulloch directly.

fb-caffe-exts's People

Contributors

103yiran avatar ajtulloch avatar flarnie avatar viswanathgs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fb-caffe-exts's Issues

error using torch2caffe

Hi, The code I use for convert the torch model to caffemodel is:
th torch2caffe/torch2caffe.lua --input /home/xiao/Documents/convNet-direct/torch-impl/sceneLabeling-own/results-own2model-full-singlescale/model.net --prototxt test.prototxt --caffemodel test.caffemodel 715 3 240 320

The error I received is this
Traceback (most recent call last):
File "/home/xiao/Documents/fb-caffe-exts-master/torch2caffe/caffe_layers.py", line 278, in convert
return convertertypename
File "/home/xiao/Documents/fb-caffe-exts-master/torch2caffe/caffe_layers.py", line 123, in spatial_convolution
bias = torch_layer["bias"]
KeyError: u'bias'
/home/xiao/torch/install/bin/luajit: ./torch2caffe/lib.lua:162: Python error: opaque ref: call
Traceback (most recent call last):
File "/home/xiao/Documents/fb-caffe-exts-master/torch2caffe/lib_py.py", line 135, in finalize
opts)
File "/home/xiao/Documents/fb-caffe-exts-master/torch2caffe/caffe_builder.py", line 27, in to_caffe
opts, layer.typename, layer.torch_layer)
File "/home/xiao/Documents/fb-caffe-exts-master/torch2caffe/caffe_layers.py", line 278, in convert
return convertertypename
File "/home/xiao/Documents/fb-caffe-exts-master/torch2caffe/caffe_layers.py", line 123, in spatial_convolution
bias = torch_layer["bias"]
KeyError: u'bias'

stack traceback:
[C]: in function 'finalize'
./torch2caffe/lib.lua:162: in function 'convert'
./torch2caffe/lib.lua:168: in function 'main'
torch2caffe/torch2caffe.lua:23: in main chunk
[C]: in function 'dofile'
...xiao/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:131: in main chunk
[C]: at 0x00406670

Is it something wrong with the bias or what?Thank you

torch2caffe with multi input

I don't know how to invoke the torch2caffe.lua when it comes to multi inputs. My GAN based network has 2 inputs, image and a vector.How can I do this?

Unknown layer type: nn.SpatialFullConvolution

Hi. When I am converting a torch model having some deconvolution layer(nn.SpatialFullConvolution ) is is giving error Unknown layer type: nn.SpatialFullConvolution.. How to modify the code to generate the caffe version of model having deconvolution layer ???

thanks

How to use predictor

I had search all of the issues about usage of predictor,but not ideas of how to use it.
the things i had tried:
i had install folly success in ubuntu14.04 with gcc-4.9.3 and boost-1.65.1.
and then , push all *.h into [caffe_root]/include, *.cpp into [caffe_root]/src/caffe/,
and then, set set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") into CMakeLists.txt,
and then, set folly\double-conversion 's include directory and lib directory.
but last,when I building the caffe,I alse got error:"error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options"
and error in folly like this:"include/folly/Portability.h:39:1: error: expected unqualified-id before 'using' using integral_max = std::integral_constant<I, (A < B) ? B : A>;"
could you show how to build caffe with predictor ?
thanks.

[Predictor][Compile Error][OSX] Undefined symbol for architecture x86_64, clang: error: linker command failed with exit code 1

Hi, I tried to implement the predictor into caffe, but can't go through the compilation.
OS: OSX High Sierra 10.13.3 (17D47)
CPU-ONLY

My procedure:

  1. Copy the predictor directory into $CAFFE_ROOT/src/caffe/.
  2. Install folly into default path by: brew install folly
  3. Add line set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -stdlib=libc++") to CMakeLists.txt
  4. mkdir build & cd build & cmake .. & make all

Then I get the following quuuuite long error info. It seems like something wrong with Folly and GoogleTest?

[  1%] Built target caffeproto
[  3%] Linking CXX shared library ../../lib/libcaffe.dylib
Undefined symbols for architecture x86_64:
  "folly::closeNoInt(int)", referenced from:
      caffe::fb::PooledPredictorTest::getConfig(bool) in PooledPredictorTest.cpp.o
      caffe::fb::PredictorTest_Performance_Test::TestBody() in PredictorTest.cpp.o
      caffe::fb::PredictorTest_ConsistentAcrossThreads_Test::TestBody() in PredictorTest.cpp.o
  "folly::try_detail::throwUsingUninitializedTry()", referenced from:
      folly::Future<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >::get() in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>, false>(caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>, false>(caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
  "folly::WaitOptions::Defaults::spin_max", referenced from:
      void folly::futures::detail::waitImpl<folly::Future<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >, std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >(folly::Future<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >&) in PooledPredictorTest.cpp.o
  "folly::cold_detail::ColdClass::ColdClass()", referenced from:
      std::__1::enable_if<!(std::is_same<folly::Range<char const*>, int>::value), int>::type folly::to<int>(folly::Range<char const*>) in Optimize.cpp.o
      folly::Expected<folly::Unit, folly::ConversionCode> folly::expected_detail::expected_detail_ExpectedHelper::ExpectedHelper::thenOrThrow_<folly::expected_detail::ExpectedStorage<folly::Range<char const*>, folly::ConversionCode, (folly::expected_detail::StorageType)1>&, folly::detail::CheckTrailingSpace, std::__1::enable_if<!(std::is_same<folly::Range<char const*>, int>::value), int>::type folly::to<int>(folly::Range<char const*>)::'lambda'(folly::ConversionCode), folly::Expected<folly::Unit, folly::ConversionCode>, void, false, 0>(int&&, folly::detail::CheckTrailingSpace&&, std::__1::enable_if<!(std::is_same<folly::Range<char const*>, int>::value), int>::type folly::to<int>(folly::Range<char const*>)::'lambda'(folly::ConversionCode)&&) in Optimize.cpp.o
  "folly::throwNoState()", referenced from:
      caffe::fb::PooledPredictor::enqueueJob(std::__1::function<void (caffe::Net<float>*)>&&, unsigned int) in PooledPredictor.cpp.o
      std::__1::enable_if<std::is_same<folly::Unit, folly::Unit>::value, void>::type folly::Promise<folly::Unit>::setValue<folly::Unit>() in PooledPredictor.cpp.o
      caffe::fb::PooledPredictorTest_Correctness_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody() in PooledPredictorTest.cpp.o
      folly::Future<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >::get() in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>, false>(caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      folly::Promise<folly::Unit>::setException(folly::exception_wrapper) in PooledPredictorTest.cpp.o
      ...
  "folly::InlineExecutor::instance()", referenced from:
      caffe::fb::PooledPredictor::enqueueJob(std::__1::function<void (caffe::Net<float>*)>&&, unsigned int) in PooledPredictor.cpp.o
      folly::Future<std::__1::vector<folly::Try<std::__1::iterator_traits<std::__1::__wrap_iter<folly::Future<folly::Unit>*> >::value_type::value_type>, std::__1::allocator<std::__1::iterator_traits<std::__1::__wrap_iter<folly::Future<folly::Unit>*> >::value_type::value_type> > > folly::collectAll<std::__1::__wrap_iter<folly::Future<folly::Unit>*> >(std::__1::__wrap_iter<folly::Future<folly::Unit>*>, std::__1::__wrap_iter<folly::Future<folly::Unit>*>) in PooledPredictorTest.cpp.o
  "folly::RequestContext::setContext(std::__1::shared_ptr<folly::RequestContext>)", referenced from:
      folly::futures::detail::Core<folly::Unit>::doCallback() in PooledPredictor.cpp.o
      folly::futures::detail::Core<folly::Unit>::doCallback()::'lambda'()::operator()() in PooledPredictor.cpp.o
      folly::futures::detail::Core<folly::Unit>::doCallback()::'lambda0'()::operator()() in PooledPredictor.cpp.o
      folly::RequestContextScopeGuard::~RequestContextScopeGuard() in PooledPredictor.cpp.o
      folly::futures::detail::Core<folly::Unit>::doCallback() in PooledPredictorTest.cpp.o
      folly::futures::detail::Core<folly::Unit>::doCallback()::'lambda'()::operator()() in PooledPredictorTest.cpp.o
      folly::futures::detail::Core<folly::Unit>::doCallback()::'lambda0'()::operator()() in PooledPredictorTest.cpp.o
      ...
  "folly::RequestContext::getStaticContext()", referenced from:
      bool folly::futures::detail::FSM<folly::futures::detail::State>::updateState<void folly::futures::detail::Core<folly::Unit>::setCallback<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>, false>(caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>)::'lambda'(folly::Try<folly::Unit>&&)>(caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0&&)::'lambda'()>(folly::futures::detail::State, folly::futures::detail::State, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0 const&) in PooledPredictorTest.cpp.o
      bool folly::futures::detail::FSM<folly::futures::detail::State>::updateState<void folly::futures::detail::Core<folly::Unit>::setCallback<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>, false>(caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>)::'lambda'(folly::Try<folly::Unit>&&)::operator()(folly::Try<folly::Unit>&&)::'lambda'(folly::Try<folly::Unit>&&)>(caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0&&)::'lambda'()>(folly::futures::detail::State, folly::futures::detail::State, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0 const&) in PooledPredictorTest.cpp.o
      bool folly::futures::detail::FSM<folly::futures::detail::State>::updateState<void folly::futures::detail::Core<folly::Unit>::setCallback<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>, false>(caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>)::'lambda'(folly::Try<folly::Unit>&&)>(caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2&&)::'lambda'()>(folly::futures::detail::State, folly::futures::detail::State, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2 const&) in PooledPredictorTest.cpp.o
      bool folly::futures::detail::FSM<folly::futures::detail::State>::updateState<void folly::futures::detail::Core<folly::Unit>::setCallback<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>, false>(caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>)::'lambda'(folly::Try<folly::Unit>&&)::operator()(folly::Try<folly::Unit>&&)::'lambda'(folly::Try<folly::Unit>&&)>(caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2&&)::'lambda'()>(folly::futures::detail::State, folly::futures::detail::State, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2 const&) in PooledPredictorTest.cpp.o
      bool folly::futures::detail::FSM<folly::futures::detail::State>::updateState<void folly::futures::detail::Core<folly::Unit>::setCallback<void folly::mapSetCallback<folly::Unit, std::__1::__wrap_iter<folly::Future<folly::Unit>*>, folly::Future<std::__1::vector<folly::Try<std::__1::iterator_traits<std::__1::__wrap_iter<folly::Future<folly::Unit>*> >::value_type::value_type>, std::__1::allocator<std::__1::iterator_traits<std::__1::__wrap_iter<folly::Future<folly::Unit>*> >::value_type::value_type> > > folly::collectAll<std::__1::__wrap_iter<folly::Future<folly::Unit>*> >(std::__1::__wrap_iter<folly::Future<folly::Unit>*>, std::__1::__wrap_iter<folly::Future<folly::Unit>*>)::'lambda'(unsigned long, folly::Try<folly::Unit>&&)>(std::__1::__wrap_iter<folly::Future<folly::Unit>*>, folly::Future<std::__1::vector<folly::Try<std::__1::iterator_traits<std::__1::__wrap_iter<folly::Future<folly::Unit>*> >::value_type::value_type>, std::__1::allocator<std::__1::iterator_traits<std::__1::__wrap_iter<folly::Future<folly::Unit>*> >::value_type::value_type> > > folly::collectAll<std::__1::__wrap_iter<folly::Future<folly::Unit>*> >(std::__1::__wrap_iter<folly::Future<folly::Unit>*>, std::__1::__wrap_iter<folly::Future<folly::Unit>*>)::'lambda'(unsigned long, folly::Try<folly::Unit>&&), folly::Future<std::__1::vector<folly::Try<std::__1::iterator_traits<std::__1::__wrap_iter<folly::Future<folly::Unit>*> >::value_type::value_type>, std::__1::allocator<std::__1::iterator_traits<std::__1::__wrap_iter<folly::Future<folly::Unit>*> >::value_type::value_type> > > folly::collectAll<std::__1::__wrap_iter<folly::Future<folly::Unit>*> >(std::__1::__wrap_iter<folly::Future<folly::Unit>*>, std::__1::__wrap_iter<folly::Future<folly::Unit>*>)::'lambda'(unsigned long, folly::Try<folly::Unit>&&))::'lambda'(folly::Try<folly::Unit>)>(std::__1::__wrap_iter<folly::Future<folly::Unit>*>&&)::'lambda'()>(folly::futures::detail::State, folly::futures::detail::State, std::__1::__wrap_iter<folly::Future<folly::Unit>*> const&) in PooledPredictorTest.cpp.o
      bool folly::futures::detail::FSM<folly::futures::detail::State>::updateState<void folly::futures::detail::Core<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >::setCallback<void folly::futures::detail::waitImpl<folly::Future<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >, std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >(folly::Future<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >&)::'lambda'(folly::Try<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > > const&)>(folly::Future<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >&&)::'lambda'()>(folly::futures::detail::State, folly::futures::detail::State, folly::Future<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > > const&) in PooledPredictorTest.cpp.o
  "folly::expected_detail::throwBadExpectedAccess()", referenced from:
      std::__1::enable_if<!(std::is_same<folly::Range<char const*>, int>::value), int>::type folly::to<int>(folly::Range<char const*>)::'lambda0'(folly::ConversionCode)::operator()(folly::ConversionCode) const in Optimize.cpp.o
  "folly::throwNoExecutor()", referenced from:
      folly::SemiFuture<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >::via(folly::Executor*, signed char) in PooledPredictorTest.cpp.o
  "folly::exception_wrapper::ExceptionPtr::ops_", referenced from:
      folly::futures::detail::Core<folly::Unit>::doCallback() in PooledPredictor.cpp.o
      folly::exception_wrapper::InPlace<folly::BrokenPromise>::get_exception_ptr_(folly::exception_wrapper const*) in PooledPredictor.cpp.o
      folly::futures::detail::Core<folly::Unit>::doCallback() in PooledPredictorTest.cpp.o
      folly::futures::detail::Core<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >::doCallback() in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>, false>(caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      folly::exception_wrapper::InPlace<folly::BrokenPromise>::get_exception_ptr_(folly::exception_wrapper const*) in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>, false>(caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      ...
  "folly::exception_wrapper::onNoExceptionError(char const*)", referenced from:
      folly::exception_wrapper::throw_exception() const in PooledPredictorTest.cpp.o
  "folly::exception_wrapper::uninit_", referenced from:
      folly::futures::detail::Core<folly::Unit>::doCallback() in PooledPredictor.cpp.o
      folly::Optional<folly::Try<folly::Unit> >::assign(folly::Try<folly::Unit>&&) in PooledPredictor.cpp.o
      folly::futures::detail::Core<folly::Unit>::detachPromise() in PooledPredictor.cpp.o
      folly::exception_wrapper::InPlace<folly::BrokenPromise>::move_(folly::exception_wrapper*, folly::exception_wrapper*) in PooledPredictor.cpp.o
      folly::exception_wrapper::InPlace<folly::BrokenPromise>::delete_(folly::exception_wrapper*) in PooledPredictor.cpp.o
      folly::futures::detail::Core<folly::Unit>::doCallback() in PooledPredictorTest.cpp.o
      folly::Optional<folly::Try<folly::Unit> >::assign(folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      ...
  "folly::exception_wrapper::exception_wrapper(std::exception_ptr)", referenced from:
      folly::futures::detail::Core<folly::Unit>::doCallback() in PooledPredictor.cpp.o
      folly::futures::detail::Core<folly::Unit>::doCallback() in PooledPredictorTest.cpp.o
      folly::futures::detail::Core<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >::doCallback() in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>, false>(caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>, false>(caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
  "folly::throwBadFormatArg(char const*)", referenced from:
      void folly::BaseFormatter<folly::Formatter<false, long long const&, long long const&>, false, long long const&, long long const&>::operator()<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)>(std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
      void folly::format_value::formatString<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)>(folly::Range<char const*>, folly::FormatArg&, std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)&) in Optimize.cpp.o
      void folly::BaseFormatter<folly::Formatter<false, unsigned long&, unsigned long&, double>, false, unsigned long&, unsigned long&, double>::operator()<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)>(std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
      void folly::format_value::formatString<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)>(folly::Range<char const*>, folly::FormatArg&, std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)&) in Optimize.cpp.o
  "folly::throwBadFormatArg(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      void folly::FormatArg::error<char const (&) [31]>(char const (&&&) [31]) const in Optimize.cpp.o
      void folly::FormatArg::error<char const (&) [21]>(char const (&&&) [21]) const in Optimize.cpp.o
      void folly::FormatArg::error<char const (&) [14]>(char const (&&&) [14]) const in Optimize.cpp.o
      void folly::FormatArg::error<char const (&) [55]>(char const (&&&) [55]) const in Optimize.cpp.o
      void folly::FormatArg::error<char const (&) [34], unsigned long&>(char const (&&&) [34], unsigned long&&&) const in Optimize.cpp.o
      void folly::FormatArg::error<char const (&) [36]>(char const (&&&) [36]) const in Optimize.cpp.o
      void folly::FormatArg::error<char const (&) [20], char&, char const (&) [2]>(char const (&&&) [20], char&&&, char const (&&&) [2]) const in Optimize.cpp.o
      ...
  "folly::threadlocal_detail::StaticMetaBase::destroy(folly::threadlocal_detail::StaticMetaBase::EntryID*)", referenced from:
      folly::ThreadLocal<bool, void, void>::~ThreadLocal() in PooledPredictor.cpp.o
      folly::ThreadLocal<std::__1::vector<std::__1::unique_ptr<caffe::Net<float>, std::__1::default_delete<caffe::Net<float> > >, std::__1::allocator<std::__1::unique_ptr<caffe::Net<float>, std::__1::default_delete<caffe::Net<float> > > > >, void, void>::~ThreadLocal() in PooledPredictor.cpp.o
      caffe::fb::Predictor::Predictor(caffe::NetParameter const&, caffe::NetParameter const&, caffe::fb::Predictor::Optimization, bool) in Predictor.cpp.o
      caffe::fb::Predictor::Predictor(caffe::NetParameter const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, caffe::fb::Predictor::Optimization, bool) in Predictor.cpp.o
      caffe::fb::PredictorTest_Performance_Test::TestBody() in PredictorTest.cpp.o
      caffe::fb::PredictorTest_ConsistentAcrossThreads_Test::TestBody() in PredictorTest.cpp.o
  "folly::threadlocal_detail::StaticMetaBase::reserve(folly::threadlocal_detail::StaticMetaBase::EntryID*)", referenced from:
      folly::ThreadLocalPtr<std::__1::vector<std::__1::unique_ptr<caffe::Net<float>, std::__1::default_delete<caffe::Net<float> > >, std::__1::allocator<std::__1::unique_ptr<caffe::Net<float>, std::__1::default_delete<caffe::Net<float> > > > >, void, void>::get() const in PooledPredictor.cpp.o
      folly::ThreadLocalPtr<std::__1::vector<std::__1::unique_ptr<caffe::Net<float>, std::__1::default_delete<caffe::Net<float> > >, std::__1::allocator<std::__1::unique_ptr<caffe::Net<float>, std::__1::default_delete<caffe::Net<float> > > > >, void, void>::reset(std::__1::vector<std::__1::unique_ptr<caffe::Net<float>, std::__1::default_delete<caffe::Net<float> > >, std::__1::allocator<std::__1::unique_ptr<caffe::Net<float>, std::__1::default_delete<caffe::Net<float> > > > >*) in PooledPredictor.cpp.o
      folly::ThreadLocalPtr<bool, void, void>::get() const in PooledPredictor.cpp.o
      folly::ThreadLocalPtr<bool, void, void>::reset(bool*) in PooledPredictor.cpp.o
      folly::ThreadLocalPtr<caffe::Net<float>, void, void>::get() const in Predictor.cpp.o
      folly::ThreadLocalPtr<caffe::Net<float>, void, void>::reset(caffe::Net<float>*) in Predictor.cpp.o
  "folly::threadlocal_detail::StaticMetaBase::StaticMetaBase(folly::threadlocal_detail::ThreadEntry* (*)(), bool)", referenced from:
      folly::threadlocal_detail::StaticMeta<void, void>::StaticMeta() in PooledPredictor.cpp.o
      folly::threadlocal_detail::StaticMeta<void, void>::StaticMeta() in Predictor.cpp.o
      folly::threadlocal_detail::StaticMeta<void, void>::StaticMeta() in PredictorTest.cpp.o
  "folly::makeConversionError(folly::ConversionCode, folly::Range<char const*>)", referenced from:
      folly::Expected<folly::Unit, folly::ConversionCode> folly::expected_detail::expected_detail_ExpectedHelper::ExpectedHelper::thenOrThrow_<folly::expected_detail::ExpectedStorage<folly::Range<char const*>, folly::ConversionCode, (folly::expected_detail::StorageType)1>&, folly::detail::CheckTrailingSpace, std::__1::enable_if<!(std::is_same<folly::Range<char const*>, int>::value), int>::type folly::to<int>(folly::Range<char const*>)::'lambda'(folly::ConversionCode), folly::Expected<folly::Unit, folly::ConversionCode>, void, false, 0>(int&&, folly::detail::CheckTrailingSpace&&, std::__1::enable_if<!(std::is_same<folly::Range<char const*>, int>::value), int>::type folly::to<int>(folly::Range<char const*>)::'lambda'(folly::ConversionCode)&&) in Optimize.cpp.o
      std::__1::enable_if<!(std::is_same<folly::Range<char const*>, int>::value), int>::type folly::to<int>(folly::Range<char const*>)::'lambda0'(folly::ConversionCode)::operator()(folly::ConversionCode) const in Optimize.cpp.o
  "folly::throwFutureNotReady()", referenced from:
      folly::Future<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >::get() in PooledPredictorTest.cpp.o
  "folly::throwFutureAlreadyRetrieved()", referenced from:
      folly::Future<std::__1::vector<folly::Try<std::__1::iterator_traits<std::__1::__wrap_iter<folly::Future<folly::Unit>*> >::value_type::value_type>, std::__1::allocator<std::__1::iterator_traits<std::__1::__wrap_iter<folly::Future<folly::Unit>*> >::value_type::value_type> > > folly::collectAll<std::__1::__wrap_iter<folly::Future<folly::Unit>*> >(std::__1::__wrap_iter<folly::Future<folly::Unit>*>, std::__1::__wrap_iter<folly::Future<folly::Unit>*>) in PooledPredictorTest.cpp.o
  "folly::throwPromiseAlreadySatisfied()", referenced from:
      std::__1::enable_if<std::is_same<folly::Unit, folly::Unit>::value, void>::type folly::Promise<folly::Unit>::setValue<folly::Unit>() in PooledPredictor.cpp.o
      folly::Promise<folly::Unit>::setException(folly::exception_wrapper) in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>, false>(caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>)::'lambda'(folly::Try<folly::Unit>&&)::operator()(folly::Try<folly::Unit>&&)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>, false>(caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>)::'lambda'(folly::Try<folly::Unit>&&)::operator()(folly::Try<folly::Unit>&&)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      void folly::Promise<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >::setValue<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >(std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > >&&) in PooledPredictorTest.cpp.o
  "folly::Future<folly::Unit>::get()", referenced from:
      caffe::fb::PooledPredictorTest_Correctness_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody() in PooledPredictorTest.cpp.o
      void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, caffe::fb::PooledPredictorTest_Threading_Test::TestBody()::$_1> >(void*) in PooledPredictorTest.cpp.o
  "folly::Future<folly::Unit>::Future(folly::Future<folly::Unit>&&)", referenced from:
      caffe::fb::PooledPredictorMultiNetTest_Correctness_Test::TestBody() in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>, false>(caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>, false>(caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      void std::__1::vector<folly::Future<folly::Unit>, std::__1::allocator<folly::Future<folly::Unit> > >::__push_back_slow_path<folly::Future<folly::Unit> >(folly::Future<folly::Unit>&&) in PooledPredictorTest.cpp.o
  "folly::detail::MemoryIdler::unmapUnusedStack(unsigned long)", referenced from:
      bool folly::detail::MemoryIdler::futexWaitPreIdle<std::__1::atomic, std::__1::chrono::time_point<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >(folly::detail::FutexResult&, folly::detail::Futex<std::__1::atomic>&, unsigned int, std::__1::chrono::time_point<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > > const&, unsigned int, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> >, unsigned long, float) in PooledPredictorTest.cpp.o
  "folly::detail::MemoryIdler::defaultIdleTimeout", referenced from:
      bool folly::Baton<true, std::__1::atomic>::tryWaitSlow<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >(std::__1::chrono::time_point<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > > const&, folly::WaitOptions const&) in PooledPredictorTest.cpp.o
  "folly::detail::MemoryIdler::flushLocalMallocCaches()", referenced from:
      bool folly::detail::MemoryIdler::futexWaitPreIdle<std::__1::atomic, std::__1::chrono::time_point<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >(folly::detail::FutexResult&, folly::detail::Futex<std::__1::atomic>&, unsigned int, std::__1::chrono::time_point<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > > const&, unsigned int, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> >, unsigned long, float) in PooledPredictorTest.cpp.o
  "folly::detail::formatOctal", referenced from:
      void folly::FormatValue<long long, void>::doFormat<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)>(folly::FormatArg&, std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
      void folly::FormatValue<unsigned long, void>::doFormat<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)>(folly::FormatArg&, std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
  "folly::detail::formatBinary", referenced from:
      void folly::FormatValue<long long, void>::doFormat<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)>(folly::FormatArg&, std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
      void folly::FormatValue<unsigned long, void>::doFormat<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)>(folly::FormatArg&, std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
  "folly::detail::formatHexLower", referenced from:
      void folly::FormatValue<long long, void>::doFormat<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)>(folly::FormatArg&, std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
      void folly::FormatValue<unsigned long, void>::doFormat<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)>(folly::FormatArg&, std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
  "folly::detail::formatHexUpper", referenced from:
      void folly::FormatValue<long long, void>::doFormat<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)>(folly::FormatArg&, std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
      void folly::FormatValue<unsigned long, void>::doFormat<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)>(folly::FormatArg&, std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
  "folly::Expected<int, folly::ConversionCode> folly::detail::str_to_integral<int>(folly::Range<char const*>*)", referenced from:
      std::__1::enable_if<!(std::is_same<folly::Range<char const*>, int>::value), int>::type folly::to<int>(folly::Range<char const*>) in Optimize.cpp.o
  "folly::detail::StaticSingletonManager::instance()", referenced from:
      folly::ThreadLocal<bool, void, void>::~ThreadLocal() in PooledPredictor.cpp.o
      folly::ThreadLocal<std::__1::vector<std::__1::unique_ptr<caffe::Net<float>, std::__1::default_delete<caffe::Net<float> > >, std::__1::allocator<std::__1::unique_ptr<caffe::Net<float>, std::__1::default_delete<caffe::Net<float> > > > >, void, void>::~ThreadLocal() in PooledPredictor.cpp.o
      folly::threadlocal_detail::StaticMeta<void, void>::getThreadEntrySlow() in PooledPredictor.cpp.o
      folly::threadlocal_detail::StaticMeta<void, void>::preFork() in PooledPredictor.cpp.o
      folly::threadlocal_detail::StaticMeta<void, void>::onForkParent() in PooledPredictor.cpp.o
      folly::threadlocal_detail::StaticMeta<void, void>::onForkChild() in PooledPredictor.cpp.o
      folly::ThreadLocalPtr<std::__1::vector<std::__1::unique_ptr<caffe::Net<float>, std::__1::default_delete<caffe::Net<float> > >, std::__1::allocator<std::__1::unique_ptr<caffe::Net<float>, std::__1::default_delete<caffe::Net<float> > > > >, void, void>::get() const in PooledPredictor.cpp.o
      ...
  "folly::detail::insertThousandsGroupingUnsafe(char*, char**)", referenced from:
      void folly::FormatValue<long long, void>::doFormat<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)>(folly::FormatArg&, std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
      void folly::FormatValue<unsigned long, void>::doFormat<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)>(folly::FormatArg&, std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
  "folly::detail::throw_optional_empty_exception()", referenced from:
      folly::futures::detail::Core<folly::Unit>::doCallback() in PooledPredictor.cpp.o
      folly::futures::detail::Core<folly::Unit>::doCallback()::'lambda'()::operator()() in PooledPredictor.cpp.o
      folly::futures::detail::Core<folly::Unit>::doCallback()::'lambda0'()::operator()() in PooledPredictor.cpp.o
      folly::Future<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >::get() in PooledPredictorTest.cpp.o
      folly::futures::detail::Core<folly::Unit>::doCallback() in PooledPredictorTest.cpp.o
      folly::futures::detail::Core<folly::Unit>::doCallback()::'lambda'()::operator()() in PooledPredictorTest.cpp.o
      folly::futures::detail::Core<folly::Unit>::doCallback()::'lambda0'()::operator()() in PooledPredictorTest.cpp.o
      ...
  "folly::detail::Futex<std::__1::atomic>::futexWaitImpl(unsigned int, std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000l> > > const*, std::__1::chrono::time_point<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > > const*, unsigned int)", referenced from:
      folly::detail::TurnSequencer<std::__1::atomic>::TryWaitResult folly::detail::TurnSequencer<std::__1::atomic>::tryWaitForTurn<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >(unsigned int, std::__1::atomic<unsigned int>&, bool, std::__1::chrono::time_point<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > > const*) in PooledPredictor.cpp.o
      bool folly::Baton<true, std::__1::atomic>::tryWaitSlow<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >(std::__1::chrono::time_point<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > > const&, folly::WaitOptions const&) in PooledPredictorTest.cpp.o
      bool folly::detail::MemoryIdler::futexWaitPreIdle<std::__1::atomic, std::__1::chrono::time_point<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >(folly::detail::FutexResult&, folly::detail::Futex<std::__1::atomic>&, unsigned int, std::__1::chrono::time_point<std::__1::chrono::steady_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > > const&, unsigned int, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> >, unsigned long, float) in PooledPredictorTest.cpp.o
  "folly::detail::Futex<std::__1::atomic>::futexWake(int, unsigned int)", referenced from:
      caffe::fb::PooledPredictor::enqueueJob(std::__1::function<void (caffe::Net<float>*)>&&, unsigned int) in PooledPredictor.cpp.o
      void folly::detail::MPMCQueueBase<folly::MPMCQueue<std::__1::unique_ptr<caffe::fb::PooledPredictor::Job, std::__1::default_delete<caffe::fb::PooledPredictor::Job> >, std::__1::atomic, false> >::enqueueWithTicketBase<std::nullptr_t>(unsigned long long, folly::detail::SingleElementQueue<std::__1::unique_ptr<caffe::fb::PooledPredictor::Job, std::__1::default_delete<caffe::fb::PooledPredictor::Job> >, std::__1::atomic>*, unsigned long, int, std::nullptr_t&&) in PooledPredictor.cpp.o
      folly::detail::SingleElementQueue<std::__1::unique_ptr<caffe::fb::PooledPredictor::Job, std::__1::default_delete<caffe::fb::PooledPredictor::Job> >, std::__1::atomic>::dequeueImpl(unsigned int, std::__1::atomic<unsigned int>&, bool, std::__1::unique_ptr<caffe::fb::PooledPredictor::Job, std::__1::default_delete<caffe::fb::PooledPredictor::Job> >&, folly::detail::SingleElementQueue<std::__1::unique_ptr<caffe::fb::PooledPredictor::Job, std::__1::default_delete<caffe::fb::PooledPredictor::Job> >, std::__1::atomic>::ImplByRelocation) in PooledPredictor.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >&&)>::callSmall<void folly::futures::detail::waitImpl<folly::Future<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >, std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >(folly::Future<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >&)::'lambda'(folly::Try<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > > const&)>(folly::detail::function::Data&, folly::Try<std::__1::vector<folly::Try<folly::Unit>, std::__1::allocator<folly::Try<folly::Unit> > > >&&) in PooledPredictorTest.cpp.o
  "folly::detail::AtFork::registerHandler(void*, folly::Function<void ()>, folly::Function<void ()>, folly::Function<void ()>)", referenced from:
      folly::threadlocal_detail::StaticMeta<void, void>::StaticMeta() in PooledPredictor.cpp.o
      folly::threadlocal_detail::StaticMeta<void, void>::StaticMeta() in Predictor.cpp.o
      folly::threadlocal_detail::StaticMeta<void, void>::StaticMeta() in PredictorTest.cpp.o
  "folly::readFull(int, void*, unsigned long)", referenced from:
      bool folly::readFile<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, unsigned long) in PooledPredictorTest.cpp.o
      bool folly::readFile<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, unsigned long) in PredictorTest.cpp.o
  "folly::FormatArg::initSlow()", referenced from:
      void folly::BaseFormatter<folly::Formatter<false, long long const&, long long const&>, false, long long const&, long long const&>::operator()<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)>(std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
      void folly::BaseFormatter<folly::Formatter<false, unsigned long&, unsigned long&, double>, false, unsigned long&, unsigned long&, double>::operator()<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)>(std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
  "folly::openNoInt(char const*, int, unsigned short)", referenced from:
      caffe::fb::PooledPredictorTest::getConfig(bool) in PooledPredictorTest.cpp.o
      caffe::fb::PredictorTest_Performance_Test::TestBody() in PredictorTest.cpp.o
      caffe::fb::PredictorTest_ConsistentAcrossThreads_Test::TestBody() in PredictorTest.cpp.o
  "testing::AssertionSuccess()", referenced from:
      caffe::fb::PooledPredictorTest_Correctness_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_Threading_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody() in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>, false>(caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>, false>(caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      caffe::fb::PredictorTest_ConsistentAcrossThreads_Test::TestBody() in PredictorTest.cpp.o
      void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, caffe::fb::PredictorTest_ConsistentAcrossThreads_Test::TestBody()::$_0> >(void*) in PredictorTest.cpp.o
      ...
  "testing::Test::SetUp()", referenced from:
      vtable for caffe::fb::PredictorTest_Performance_Test in PredictorTest.cpp.o
      vtable for caffe::fb::PredictorTest_ConsistentAcrossThreads_Test in PredictorTest.cpp.o
  "testing::Test::TearDown()", referenced from:
      vtable for caffe::fb::PooledPredictorTest_Correctness_Test in PooledPredictorTest.cpp.o
      vtable for caffe::fb::PooledPredictorTest_Threading_Test in PooledPredictorTest.cpp.o
      vtable for caffe::fb::PooledPredictorTest_InlineScheduling_Test in PooledPredictorTest.cpp.o
      vtable for caffe::fb::PooledPredictorMultiNetTest_Correctness_Test in PooledPredictorTest.cpp.o
      vtable for caffe::fb::PooledPredictorTest in PooledPredictorTest.cpp.o
      vtable for caffe::fb::PooledPredictorMultiNetTest in PooledPredictorTest.cpp.o
      vtable for caffe::fb::PredictorTest_Performance_Test in PredictorTest.cpp.o
      ...
  "testing::Test::Test()", referenced from:
      testing::internal::ParameterizedTestFactory<caffe::fb::PooledPredictorTest_Correctness_Test>::CreateTest() in PooledPredictorTest.cpp.o
      testing::internal::ParameterizedTestFactory<caffe::fb::PooledPredictorTest_Threading_Test>::CreateTest() in PooledPredictorTest.cpp.o
      testing::internal::ParameterizedTestFactory<caffe::fb::PooledPredictorTest_InlineScheduling_Test>::CreateTest() in PooledPredictorTest.cpp.o
      testing::internal::ParameterizedTestFactory<caffe::fb::PooledPredictorMultiNetTest_Correctness_Test>::CreateTest() in PooledPredictorTest.cpp.o
      testing::internal::ParameterizedTestFactory<caffe::fb::PredictorTest_Performance_Test>::CreateTest() in PredictorTest.cpp.o
      testing::internal::ParameterizedTestFactory<caffe::fb::PredictorTest_ConsistentAcrossThreads_Test>::CreateTest() in PredictorTest.cpp.o
  "testing::Test::~Test()", referenced from:
      caffe::fb::PooledPredictorTest_Correctness_Test::~PooledPredictorTest_Correctness_Test() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_Correctness_Test::~PooledPredictorTest_Correctness_Test() in PooledPredictorTest.cpp.o
      non-virtual thunk to caffe::fb::PooledPredictorTest_Correctness_Test::~PooledPredictorTest_Correctness_Test() in PooledPredictorTest.cpp.o
      non-virtual thunk to caffe::fb::PooledPredictorTest_Correctness_Test::~PooledPredictorTest_Correctness_Test() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_Threading_Test::~PooledPredictorTest_Threading_Test() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_Threading_Test::~PooledPredictorTest_Threading_Test() in PooledPredictorTest.cpp.o
      non-virtual thunk to caffe::fb::PooledPredictorTest_Threading_Test::~PooledPredictorTest_Threading_Test() in PooledPredictorTest.cpp.o
      ...
  "testing::Message::Message()", referenced from:
      caffe::fb::PooledPredictorTest_Correctness_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_Threading_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::gtest_ModelsPooledPredictorTest_EvalGenerateName_(testing::TestParamInfo<std::__1::tuple<caffe::fb::InputType, caffe::fb::ModelSpec, int, caffe::fb::Predictor::Optimization> > const&) in PooledPredictorTest.cpp.o
      caffe::fb::gtest_ThreadsPooledPredictorTest_EvalGenerateName_(testing::TestParamInfo<std::__1::tuple<caffe::fb::InputType, caffe::fb::ModelSpec, int, caffe::fb::Predictor::Optimization> > const&) in PooledPredictorTest.cpp.o
      caffe::fb::gtest_MemoryPooledPredictorTest_EvalGenerateName_(testing::TestParamInfo<std::__1::tuple<caffe::fb::InputType, caffe::fb::ModelSpec, int, caffe::fb::Predictor::Optimization> > const&) in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorMultiNetTest_Correctness_Test::TestBody() in PooledPredictorTest.cpp.o
      ...
  "testing::UnitTest::GetInstance()", referenced from:
      caffe::fb::PooledPredictorTest_Correctness_Test::AddToRegistry() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_Threading_Test::AddToRegistry() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_InlineScheduling_Test::AddToRegistry() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorMultiNetTest_Correctness_Test::AddToRegistry() in PooledPredictorTest.cpp.o
      __GLOBAL__sub_I_PooledPredictorTest.cpp in PooledPredictorTest.cpp.o
      caffe::fb::PredictorTest_Performance_Test::AddToRegistry() in PredictorTest.cpp.o
      caffe::fb::PredictorTest_ConsistentAcrossThreads_Test::AddToRegistry() in PredictorTest.cpp.o
      ...
  "testing::UnitTest::parameterized_test_registry()", referenced from:
      caffe::fb::PooledPredictorTest_Correctness_Test::AddToRegistry() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_Threading_Test::AddToRegistry() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_InlineScheduling_Test::AddToRegistry() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorMultiNetTest_Correctness_Test::AddToRegistry() in PooledPredictorTest.cpp.o
      __GLOBAL__sub_I_PooledPredictorTest.cpp in PooledPredictorTest.cpp.o
      caffe::fb::PredictorTest_Performance_Test::AddToRegistry() in PredictorTest.cpp.o
      caffe::fb::PredictorTest_ConsistentAcrossThreads_Test::AddToRegistry() in PredictorTest.cpp.o
      ...
  "testing::internal::AssertHelper::AssertHelper(testing::TestPartResult::Type, char const*, int, char const*)", referenced from:
      caffe::fb::PooledPredictorTest_Correctness_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_Threading_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorMultiNetTest_Correctness_Test::TestBody() in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>, false>(caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, caffe::fb::PooledPredictorTest_Threading_Test::TestBody()::$_1> >(void*) in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>, false>(caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      ...
  "testing::internal::AssertHelper::~AssertHelper()", referenced from:
      caffe::fb::PooledPredictorTest_Correctness_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_Threading_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorMultiNetTest_Correctness_Test::TestBody() in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>, false>(caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, caffe::fb::PooledPredictorTest_Threading_Test::TestBody()::$_1> >(void*) in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>, false>(caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      ...
  "testing::internal::g_linked_ptr_mutex", referenced from:
      caffe::fb::gtest_ModelsPooledPredictorTest_EvalGenerator_() in PooledPredictorTest.cpp.o
      caffe::fb::gtest_ThreadsPooledPredictorTest_EvalGenerator_() in PooledPredictorTest.cpp.o
      caffe::fb::gtest_MemoryPooledPredictorTest_EvalGenerator_() in PooledPredictorTest.cpp.o
      caffe::fb::gtest_ThreadsPooledPredictorMultiNetTest_EvalGenerator_() in PooledPredictorTest.cpp.o
      testing::internal::ParameterizedTestCaseInfo<caffe::fb::PooledPredictorTest>::AddTestPattern(char const*, char const*, testing::internal::TestMetaFactoryBase<std::__1::tuple<caffe::fb::InputType, caffe::fb::ModelSpec, int, caffe::fb::Predictor::Optimization> >*) in PooledPredictorTest.cpp.o
      testing::internal::linked_ptr<testing::internal::ParameterizedTestCaseInfo<caffe::fb::PooledPredictorTest>::TestInfo>::~linked_ptr() in PooledPredictorTest.cpp.o
      void std::__1::vector<testing::internal::linked_ptr<testing::internal::ParameterizedTestCaseInfo<caffe::fb::PooledPredictorTest>::TestInfo>, std::__1::allocator<testing::internal::linked_ptr<testing::internal::ParameterizedTestCaseInfo<caffe::fb::PooledPredictorTest>::TestInfo> > >::__push_back_slow_path<testing::internal::linked_ptr<testing::internal::ParameterizedTestCaseInfo<caffe::fb::PooledPredictorTest>::TestInfo> >(testing::internal::linked_ptr<testing::internal::ParameterizedTestCaseInfo<caffe::fb::PooledPredictorTest>::TestInfo>&&) in PooledPredictorTest.cpp.o
      ...
  "testing::internal::DoubleNearPredFormat(char const*, char const*, char const*, double, double, double)", referenced from:
      caffe::fb::PooledPredictorTest_Correctness_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorMultiNetTest_Correctness_Test::TestBody() in PooledPredictorTest.cpp.o
      void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, caffe::fb::PooledPredictorTest_Threading_Test::TestBody()::$_1> >(void*) in PooledPredictorTest.cpp.o
      caffe::fb::PredictorTest_ConsistentAcrossThreads_Test::TestBody() in PredictorTest.cpp.o
      void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, caffe::fb::PredictorTest_ConsistentAcrossThreads_Test::TestBody()::$_0> >(void*) in PredictorTest.cpp.o
  "testing::internal::MakeAndRegisterTestInfo(char const*, char const*, char const*, char const*, testing::internal::CodeLocation, void const*, void (*)(), void (*)(), testing::internal::TestFactoryBase*)", referenced from:
      testing::internal::ParameterizedTestCaseInfo<caffe::fb::PooledPredictorTest>::RegisterTests() in PooledPredictorTest.cpp.o
      testing::internal::ParameterizedTestCaseInfo<caffe::fb::PooledPredictorMultiNetTest>::RegisterTests() in PooledPredictorTest.cpp.o
      testing::internal::ParameterizedTestCaseInfo<caffe::fb::PredictorTest>::RegisterTests() in PredictorTest.cpp.o
  "testing::internal::ReportInvalidTestCaseType(char const*, testing::internal::CodeLocation)", referenced from:
      testing::internal::ParameterizedTestCaseInfo<caffe::fb::PooledPredictorTest>* testing::internal::ParameterizedTestCaseRegistry::GetTestCasePatternHolder<caffe::fb::PooledPredictorTest>(char const*, testing::internal::CodeLocation) in PooledPredictorTest.cpp.o
      testing::internal::ParameterizedTestCaseInfo<caffe::fb::PooledPredictorMultiNetTest>* testing::internal::ParameterizedTestCaseRegistry::GetTestCasePatternHolder<caffe::fb::PooledPredictorMultiNetTest>(char const*, testing::internal::CodeLocation) in PooledPredictorTest.cpp.o
      testing::internal::ParameterizedTestCaseInfo<caffe::fb::PredictorTest>* testing::internal::ParameterizedTestCaseRegistry::GetTestCasePatternHolder<caffe::fb::PredictorTest>(char const*, testing::internal::CodeLocation) in PredictorTest.cpp.o
  "testing::internal::IsTrue(bool)", referenced from:
      caffe::fb::PooledPredictorTest_Correctness_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_Threading_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::gtest_ModelsPooledPredictorTest_EvalGenerateName_(testing::TestParamInfo<std::__1::tuple<caffe::fb::InputType, caffe::fb::ModelSpec, int, caffe::fb::Predictor::Optimization> > const&) in PooledPredictorTest.cpp.o
      caffe::fb::gtest_ThreadsPooledPredictorTest_EvalGenerateName_(testing::TestParamInfo<std::__1::tuple<caffe::fb::InputType, caffe::fb::ModelSpec, int, caffe::fb::Predictor::Optimization> > const&) in PooledPredictorTest.cpp.o
      caffe::fb::gtest_MemoryPooledPredictorTest_EvalGenerateName_(testing::TestParamInfo<std::__1::tuple<caffe::fb::InputType, caffe::fb::ModelSpec, int, caffe::fb::Predictor::Optimization> > const&) in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorMultiNetTest_Correctness_Test::TestBody() in PooledPredictorTest.cpp.o
      ...
  "testing::internal::GTestLog::GTestLog(testing::internal::GTestLogSeverity, char const*, int)", referenced from:
      testing::internal::MutexBase::Lock() in PooledPredictorTest.cpp.o
      testing::internal::MutexBase::Unlock() in PooledPredictorTest.cpp.o
      testing::internal::ValuesInIteratorRangeGenerator<caffe::fb::ModelSpec>::Iterator::Equals(testing::internal::ParamIteratorInterface<caffe::fb::ModelSpec> const&) const in PooledPredictorTest.cpp.o
      testing::internal::ValuesInIteratorRangeGenerator<caffe::fb::ModelSpec>::Iterator const* testing::internal::CheckedDowncastToActualType<testing::internal::ValuesInIteratorRangeGenerator<caffe::fb::ModelSpec>::Iterator const, testing::internal::ParamIteratorInterface<caffe::fb::ModelSpec> const>(testing::internal::ParamIteratorInterface<caffe::fb::ModelSpec> const*) in PooledPredictorTest.cpp.o
      testing::internal::ValuesInIteratorRangeGenerator<caffe::fb::InputType>::Iterator::Equals(testing::internal::ParamIteratorInterface<caffe::fb::InputType> const&) const in PooledPredictorTest.cpp.o
      testing::internal::ValuesInIteratorRangeGenerator<caffe::fb::InputType>::Iterator const* testing::internal::CheckedDowncastToActualType<testing::internal::ValuesInIteratorRangeGenerator<caffe::fb::InputType>::Iterator const, testing::internal::ParamIteratorInterface<caffe::fb::InputType> const>(testing::internal::ParamIteratorInterface<caffe::fb::InputType> const*) in PooledPredictorTest.cpp.o
      testing::internal::ValuesInIteratorRangeGenerator<int>::Iterator::Equals(testing::internal::ParamIteratorInterface<int> const&) const in PooledPredictorTest.cpp.o
      ...
  "testing::internal::GTestLog::~GTestLog()", referenced from:
      testing::internal::MutexBase::Lock() in PooledPredictorTest.cpp.o
      testing::internal::MutexBase::Unlock() in PooledPredictorTest.cpp.o
      testing::internal::ValuesInIteratorRangeGenerator<caffe::fb::ModelSpec>::Iterator::Equals(testing::internal::ParamIteratorInterface<caffe::fb::ModelSpec> const&) const in PooledPredictorTest.cpp.o
      testing::internal::ValuesInIteratorRangeGenerator<caffe::fb::ModelSpec>::Iterator const* testing::internal::CheckedDowncastToActualType<testing::internal::ValuesInIteratorRangeGenerator<caffe::fb::ModelSpec>::Iterator const, testing::internal::ParamIteratorInterface<caffe::fb::ModelSpec> const>(testing::internal::ParamIteratorInterface<caffe::fb::ModelSpec> const*) in PooledPredictorTest.cpp.o
      testing::internal::ValuesInIteratorRangeGenerator<caffe::fb::InputType>::Iterator::Equals(testing::internal::ParamIteratorInterface<caffe::fb::InputType> const&) const in PooledPredictorTest.cpp.o
      testing::internal::ValuesInIteratorRangeGenerator<caffe::fb::InputType>::Iterator const* testing::internal::CheckedDowncastToActualType<testing::internal::ValuesInIteratorRangeGenerator<caffe::fb::InputType>::Iterator const, testing::internal::ParamIteratorInterface<caffe::fb::InputType> const>(testing::internal::ParamIteratorInterface<caffe::fb::InputType> const*) in PooledPredictorTest.cpp.o
      testing::internal::ValuesInIteratorRangeGenerator<int>::Iterator::Equals(testing::internal::ParamIteratorInterface<int> const&) const in PooledPredictorTest.cpp.o
      ...
  "testing::internal::EqFailure(char const*, char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool)", referenced from:
      testing::AssertionResult testing::internal::CmpHelperEQFailure<std::__1::atomic<unsigned int>, int>(char const*, char const*, std::__1::atomic<unsigned int> const&, int const&) in PooledPredictorTest.cpp.o
      testing::AssertionResult testing::internal::CmpHelperEQFailure<int, unsigned long>(char const*, char const*, int const&, unsigned long const&) in PredictorTest.cpp.o
  "testing::internal2::PrintBytesInObjectTo(unsigned char const*, unsigned long, std::__1::basic_ostream<char, std::__1::char_traits<char> >*)", referenced from:
      std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > testing::PrintToString<std::__1::tuple<caffe::fb::InputType, caffe::fb::ModelSpec, int, caffe::fb::Predictor::Optimization> >(std::__1::tuple<caffe::fb::InputType, caffe::fb::ModelSpec, int, caffe::fb::Predictor::Optimization> const&) in PooledPredictorTest.cpp.o
      void testing::internal::DefaultPrintTo<std::__1::vector<caffe::fb::ModelSpec, std::__1::allocator<caffe::fb::ModelSpec> > >(testing::internal::WrapPrinterType<(testing::internal::DefaultPrinterType)0>, std::__1::vector<caffe::fb::ModelSpec, std::__1::allocator<caffe::fb::ModelSpec> > const&, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) in PooledPredictorTest.cpp.o
      std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > testing::PrintToString<std::__1::tuple<caffe::fb::InputType, caffe::fb::Predictor::Optimization, caffe::fb::ModelSpec> >(std::__1::tuple<caffe::fb::InputType, caffe::fb::Predictor::Optimization, caffe::fb::ModelSpec> const&) in PredictorTest.cpp.o
  "folly::FormatValue<double, void>::formatHelper(folly::basic_fbstring<char, std::__1::char_traits<char>, std::__1::allocator<char>, folly::fbstring_core<char> >&, int&, folly::FormatArg&) const", referenced from:
      void folly::FormatValue<double, void>::format<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)>(folly::FormatArg&, std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
  "folly::FormatArg::validate(folly::FormatArg::Type) const", referenced from:
      void folly::BaseFormatter<folly::Formatter<false, long long const&, long long const&>, false, long long const&, long long const&>::operator()<std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)>(std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, long long const&, long long const&>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, long long const&, long long const&> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
      std::__1::enable_if<(0ul) < (folly::BaseFormatter<folly::Formatter<false, unsigned long&, unsigned long&, double>, false, unsigned long&, unsigned long&, double>::valueCount), void>::type folly::BaseFormatter<folly::Formatter<false, unsigned long&, unsigned long&, double>, false, unsigned long&, unsigned long&, double>::doFormatFrom<0ul, std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)>(unsigned long, folly::FormatArg&, std::__1::basic_ostream<char, std::__1::char_traits<char> >& folly::operator<<<false, unsigned long&, unsigned long&, double>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, folly::Formatter<false, unsigned long&, unsigned long&, double> const&)::'lambda'(folly::Range<char const*>)&) const in Optimize.cpp.o
  "testing::Message::GetString() const", referenced from:
      caffe::fb::gtest_ModelsPooledPredictorTest_EvalGenerateName_(testing::TestParamInfo<std::__1::tuple<caffe::fb::InputType, caffe::fb::ModelSpec, int, caffe::fb::Predictor::Optimization> > const&) in PooledPredictorTest.cpp.o
      caffe::fb::gtest_ThreadsPooledPredictorTest_EvalGenerateName_(testing::TestParamInfo<std::__1::tuple<caffe::fb::InputType, caffe::fb::ModelSpec, int, caffe::fb::Predictor::Optimization> > const&) in PooledPredictorTest.cpp.o
      caffe::fb::gtest_MemoryPooledPredictorTest_EvalGenerateName_(testing::TestParamInfo<std::__1::tuple<caffe::fb::InputType, caffe::fb::ModelSpec, int, caffe::fb::Predictor::Optimization> > const&) in PooledPredictorTest.cpp.o
      caffe::fb::gtest_ThreadsPooledPredictorMultiNetTest_EvalGenerateName_(testing::TestParamInfo<std::__1::tuple<std::__1::vector<caffe::fb::ModelSpec, std::__1::allocator<caffe::fb::ModelSpec> >, int> > const&) in PooledPredictorTest.cpp.o
      testing::internal::ParameterizedTestCaseInfo<caffe::fb::PooledPredictorTest>::RegisterTests() in PooledPredictorTest.cpp.o
      testing::internal::ParameterizedTestCaseInfo<caffe::fb::PooledPredictorMultiNetTest>::RegisterTests() in PooledPredictorTest.cpp.o
      caffe::fb::gtest_PROTOPredictorTest_EvalGenerateName_(testing::TestParamInfo<std::__1::tuple<caffe::fb::InputType, caffe::fb::Predictor::Optimization, caffe::fb::ModelSpec> > const&) in PredictorTest.cpp.o
      ...
  "testing::internal::AssertHelper::operator=(testing::Message const&) const", referenced from:
      caffe::fb::PooledPredictorTest_Correctness_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_Threading_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody() in PooledPredictorTest.cpp.o
      caffe::fb::PooledPredictorMultiNetTest_Correctness_Test::TestBody() in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>, false>(caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_Correctness_Test::TestBody()::$_0>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, caffe::fb::PooledPredictorTest_Threading_Test::TestBody()::$_1> >(void*) in PooledPredictorTest.cpp.o
      void folly::detail::function::FunctionTraits<void (folly::Try<folly::Unit>&&)>::callSmall<std::__1::enable_if<folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::ReturnsFuture::value, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>::Return>::type folly::futures::detail::FutureBase<folly::Unit>::thenImplementation<caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2, folly::futures::detail::callableResult<folly::Unit, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>, false>(caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2&&, folly::futures::detail::argResult<false, caffe::fb::PooledPredictorTest_InlineScheduling_Test::TestBody()::$_2>)::'lambda'(folly::Try<folly::Unit>&&)>(folly::detail::function::Data&, folly::Try<folly::Unit>&&) in PooledPredictorTest.cpp.o
      ...
  "typeinfo for testing::Test", referenced from:
      typeinfo for testing::TestWithParam<std::__1::tuple<caffe::fb::InputType, caffe::fb::ModelSpec, int, caffe::fb::Predictor::Optimization> > in PooledPredictorTest.cpp.o
      typeinfo for testing::TestWithParam<std::__1::tuple<std::__1::vector<caffe::fb::ModelSpec, std::__1::allocator<caffe::fb::ModelSpec> >, int> > in PooledPredictorTest.cpp.o
      typeinfo for testing::TestWithParam<std::__1::tuple<caffe::fb::InputType, caffe::fb::Predictor::Optimization, caffe::fb::ModelSpec> > in PredictorTest.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [lib/libcaffe.1.0.0.dylib] Error 1
make[1]: *** [src/caffe/CMakeFiles/caffe.dir/all] Error 2
make: *** [all] Error 2

Has anyone encountered this issue? Any idea will be welcome.

Thanks,

torch2caffe convertor

Has anyone really managed to convert a torch model to caffe ?

Can anyone please provide all the necessary steps to run the torch2caffe library properly?

I keep getting the same error (like many other users).

module 'fb.python' not found:No LuaRocks module found for fb.python
	no field package.preload['fb.python']
	no file '/home/sandbox/.luarocks/share/lua/5.1/fb/python.lua'
	no file '/home/sandbox/.luarocks/share/lua/5.1/fb/python/init.lua'
	no file '/home/sandbox/torch/install/share/lua/5.1/fb/python.lua'
	no file '/home/sandbox/torch/install/share/lua/5.1/fb/python/init.lua'
	no file './fb/python.lua'
	no file '/home/sandbox/torch/install/share/luajit-2.1.0-beta1/fb/python.lua'
	no file '/usr/local/share/lua/5.1/fb/python.lua'
	no file '/usr/local/share/lua/5.1/fb/python/init.lua'
	no file '/home/sandbox/.luarocks/lib/lua/5.1/fb/python.so'
	no file '/home/sandbox/torch/install/lib/lua/5.1/fb/python.so'
	no file '/home/sandbox/torch/install/lib/fb/python.so'
	no file './fb/python.so'
	no file '/usr/local/lib/lua/5.1/fb/python.so'
	no file '/usr/local/lib/lua/5.1/loadall.so'
	no file '/home/sandbox/.luarocks/lib/lua/5.1/fb.so'
	no file '/home/sandbox/torch/install/lib/lua/5.1/fb.so'
	no file '/home/sandbox/torch/install/lib/fb.so'
	no file './fb.so'
	no file '/usr/local/lib/lua/5.1/fb.so'
	no file '/usr/local/lib/lua/5.1/loadall.so'
stack traceback:
	[C]: in function 'error'
	/home/sandbox/torch/install/share/lua/5.1/trepl/init.lua:389: in function 'require'
	torch2caffe/torch2caffe.lua:9: in main chunk
	[C]: in function 'dofile'
	...dbox/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:150: in main chunk
	[C]: at 0x00405d50

I have tried everything mentioned in #23 & #16

So if anyone has succeeded in converting a model please let me know.

issues building torch2caffe

How do i build torch2caffe ? I have installed all the dependencies . However the first few line of torch2caffe.lua says require "torch2caffe.lib" which was not there in the repo and there were no instructions to build.

google test err

ubuntu 16.04
folly 0.57.0
caffe 9.0
cudnn 7.1.5
allways appear in Memory/PooledPredictorTest.Correctness/5 !!!!!
Excuse me, what is the recommended version of folly?

[----------] 24 tests from Memory/PooledPredictorTest
[ RUN ] Memory/PooledPredictorTest.Correctness/0
[ OK ] Memory/PooledPredictorTest.Correctness/0 (3126 ms)
[ RUN ] Memory/PooledPredictorTest.Correctness/1
[ OK ] Memory/PooledPredictorTest.Correctness/1 (5396 ms)
[ RUN ] Memory/PooledPredictorTest.Correctness/2
[ OK ] Memory/PooledPredictorTest.Correctness/2 (3139 ms)
[ RUN ] Memory/PooledPredictorTest.Correctness/3
[ OK ] Memory/PooledPredictorTest.Correctness/3 (7579 ms)
[ RUN ] Memory/PooledPredictorTest.Correctness/4
[ OK ] Memory/PooledPredictorTest.Correctness/4 (6677 ms)
[ RUN ] Memory/PooledPredictorTest.Correctness/5
WARNING: Logging before InitGoogleLogging() is written to STDERR
F0226 04:24:52.339993 20778 split_layer.cpp:18] Check failed: top[i] != bottom[0] (0x7f14108fc0 vs. 0x7f14108fc0) Split Layer does not allow in-place computation.

Failed test using GoogLeNet

[ FAILED ] P/PredictorTest.ConsistentAcrossThreads/7, where GetParam() = (4-byte object <01-00 00-00>, 0, 184-byte object <D0-C9 F3-54 1A-02 00-00 20-CD F4-54 1A-02 00-00 CD-CD CD-CD CD-CD CD-CD 4E-00 00-00 00-00 00-00 5F-00 00-00 00-00 00-00 20-CF F3-54 1A-02 00-00 80-36 EC-54 1A-02 00-00 CD-CD CD-CD CD-CD CD-CD ... 70-72 6F-62 00-CD CD-CD CD-CD CD-CD CD-CD CD-CD 04-00 00-00 00-00 00-00 0F-00 00-00 00-00 00-00 F0-C2 F3-54 1A-02 00-00 20-C0 F3-54 1A-02 00-00 30-C0 F3-54 1A-02 00-00 30-C0 F3-54 1A-02 00-00>) (21357 ms)
[----------] 8 tests from P/PredictorTest (194039 ms total)

[----------] Global test environment tear-down
[==========] 8 tests from 1 test case ran. (194044 ms total)
[ PASSED ] 4 tests.
[ FAILED ] 4 tests, listed below:
[ FAILED ] P/PredictorTest.ConsistentAcrossThreads/4, where GetParam() = (4-byte object <01-00 00-00>, 1, 184-byte object <D0-C9 F3-54 1A-02 00-00 20-CD F4-54 1A-02 00-00 CD-CD CD-CD CD-CD CD-CD 57-00 00-00 00-00 00-00 5F-00 00-00 00-00 00-00 20-CF F3-54 1A-02 00-00 80-36 EC-54 1A-02 00-00 CD-CD CD-CD CD-CD CD-CD ... 70-72 6F-62 00-CD CD-CD CD-CD CD-CD CD-CD CD-CD 04-00 00-00 00-00 00-00 0F-00 00-00 00-00 00-00 F0-C2 F3-54 1A-02 00-00 20-C0 F3-54 1A-02 00-00 30-C0 F3-54 1A-02 00-00 30-C0 F3-54 1A-02 00-00>)
[ FAILED ] P/PredictorTest.ConsistentAcrossThreads/5, where GetParam() = (4-byte object <01-00 00-00>, 1, 184-byte object <D0-C9 F3-54 1A-02 00-00 20-CD F4-54 1A-02 00-00 CD-CD CD-CD CD-CD CD-CD 4E-00 00-00 00-00 00-00 5F-00 00-00 00-00 00-00 20-CF F3-54 1A-02 00-00 80-36 EC-54 1A-02 00-00 CD-CD CD-CD CD-CD CD-CD ... 70-72 6F-62 00-CD CD-CD CD-CD CD-CD CD-CD CD-CD 04-00 00-00 00-00 00-00 0F-00 00-00 00-00 00-00 F0-C2 F3-54 1A-02 00-00 20-C0 F3-54 1A-02 00-00 30-C0 F3-54 1A-02 00-00 30-C0 F3-54 1A-02 00-00>)
[ FAILED ] P/PredictorTest.ConsistentAcrossThreads/6, where GetParam() = (4-byte object <01-00 00-00>, 0, 184-byte object <D0-C9 F3-54 1A-02 00-00 20-CD F4-54 1A-02 00-00 CD-CD CD-CD CD-CD CD-CD 57-00 00-00 00-00 00-00 5F-00 00-00 00-00 00-00 20-CF F3-54 1A-02 00-00 80-36 EC-54 1A-02 00-00 CD-CD CD-CD CD-CD CD-CD ... 70-72 6F-62 00-CD CD-CD CD-CD CD-CD CD-CD CD-CD 04-00 00-00 00-00 00-00 0F-00 00-00 00-00 00-00 F0-C2 F3-54 1A-02 00-00 20-C0 F3-54 1A-02 00-00 30-C0 F3-54 1A-02 00-00 30-C0 F3-54 1A-02 00-00>)
[ FAILED ] P/PredictorTest.ConsistentAcrossThreads/7, where GetParam() = (4-byte object <01-00 00-00>, 0, 184-byte object <D0-C9 F3-54 1A-02 00-00 20-CD F4-54 1A-02 00-00 CD-CD CD-CD CD-CD CD-CD 4E-00 00-00 00-00 00-00 5F-00 00-00 00-00 00-00 20-CF F3-54 1A-02 00-00 80-36 EC-54 1A-02 00-00 CD-CD CD-CD CD-CD CD-CD ... 70-72 6F-62 00-CD CD-CD CD-CD CD-CD CD-CD CD-CD 04-00 00-00 00-00 00-00 0F-00 00-00 00-00 00-00 F0-C2 F3-54 1A-02 00-00 20-C0 F3-54 1A-02 00-00 30-C0 F3-54 1A-02 00-00 30-C0 F3-54 1A-02 00-00>)

4 FAILED TESTS

torch2caffe.lua unknown Torch class <DenseCapModel>

When trying to convert a Torch7 model to a caffemodel format, I get the following error:

ubuntu@ip-Address:~/fb-caffe-exts$ th torch2caffe/torch2caffe.lua --input densecap-pretrained-vgg16.t7 --caffemodel densecap-pretrained-vgg16.caffemodel --prototxt densecap-pretrained-vgg16.prototxt
libdc1394 error: Failed to initialize libdc1394
libdc1394 error: Failed to initialize libdc1394
libdc1394 error: Failed to initialize libdc1394
libdc1394 error: Failed to initialize libdc1394
libdc1394 error: Failed to initialize libdc1394
libdc1394 error: Failed to initialize libdc1394
libdc1394 error: Failed to initialize libdc1394
libdc1394 error: Failed to initialize libdc1394
libdc1394 error: Failed to initialize libdc1394
libdc1394 error: Failed to initialize libdc1394
Opts: {
  prototxt = "densecap-pretrained-vgg16.prototxt",
  format = "lua",
  input = "densecap-pretrained-vgg16.t7",
  caffemodel = "densecap-pretrained-vgg16.caffemodel",
  preprocessing = "",
  input_dims = {
    0
  },
  verify = "",
  input_tensor = ""
}
/home/ubuntu/torch/install/bin/luajit: /home/ubuntu/torch/install/share/lua/5.1/torch/File.lua:343: unknown Torch class <DenseCapModel>
stack traceback:
        [C]: in function 'error'
        /home/ubuntu/torch/install/share/lua/5.1/torch/File.lua:343: in function 'readObject'
        /home/ubuntu/torch/install/share/lua/5.1/torch/File.lua:369: in function 'readObject'
        /home/ubuntu/torch/install/share/lua/5.1/torch/File.lua:409: in function 'load'
        ./torch2caffe/lib.lua:185: in function 'main'
        torch2caffe/torch2caffe.lua:23: in main chunk
        [C]: in function 'dofile'
        ...untu/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:145: in main chunk
        [C]: at 0x00406670
ubuntu@ip-Address:~/fb-caffe-exts$

I am trying to convert a model from this repository: https://github.com/jcjohnson/densecap

Direct download link to the model: http://cs.stanford.edu/people/jcjohns/densecap/densecap-pretrained-vgg16.t7.zip

SplitLayer problem

Hi,

The memory optimizer works great for basic VGG but I have an error when sharing the results of the final layer between some new ones: a SplitLayer is created and an error is thrown saying "Layer does not allow in-place computation.". From the looks of it the optimizer tried to use the same blob for the input and the output blobs of the SplitLayer. From the code it is not clear how the SplitLayer case is handled. Do I need to add a special case in the optimizer to look for split Layers and adapt the LiveRanges accordingly?

Thanks,

module 'fb.python' not found:No LuaRocks module found for fb.python

I didnt have errors while installing fblualib with install_all.sh, but have this error while runing torch2caffe.lua

/home/compvis/torch/install/bin/luajit: /home/compvis/torch/install/share/lua/5.1/trepl/init.lua:384: /home/compvis/torch/install/share/lua/5.1/trepl/init.lua:384: module 'fb.python' not found:No LuaRocks module found for fb.python
no field package.preload['fb.python']
no file '/home/compvis/.luarocks/share/lua/5.1/fb/python.lua'
no file '/home/compvis/.luarocks/share/lua/5.1/fb/python/init.lua'
no file '/home/compvis/torch/install/share/lua/5.1/fb/python.lua'
no file '/home/compvis/torch/install/share/lua/5.1/fb/python/init.lua'
no file './fb/python.lua'
no file '/home/compvis/torch/install/share/luajit-2.1.0-beta1/fb/python.lua'
no file '/usr/local/share/lua/5.1/fb/python.lua'
no file '/usr/local/share/lua/5.1/fb/python/init.lua'
no file '/home/compvis/.luarocks/lib/lua/5.1/fb/python.so'
no file '/home/compvis/torch/install/lib/lua/5.1/fb/python.so'
no file '/home/compvis/torch/install/lib/fb/python.so'
no file './fb/python.so'
no file '/usr/local/lib/lua/5.1/fb/python.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
no file '/home/compvis/.luarocks/lib/lua/5.1/fb.so'
no file '/home/compvis/torch/install/lib/lua/5.1/fb.so'
no file '/home/compvis/torch/install/lib/fb.so'
no file './fb.so'
no file '/usr/local/lib/lua/5.1/fb.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
stack traceback:
[C]: in function 'error'
/home/compvis/torch/install/share/lua/5.1/trepl/init.lua:384: in function 'require'
torch2caffe/torch2caffe.lua:9: in main chunk
[C]: in function 'dofile'
...pvis/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:145: in main chunk
[C]: at 0x00406670

Error while building thpp

when I try to install a thpp with luarocks or manually, it shows following error message.
I think that it is a sync issue related with torch...

Scanning dependencies of target thpp [ 7%] Building CXX object CMakeFiles/thpp.dir/Storage.cpp.o [ 14%] Building CXX object CMakeFiles/thpp.dir/StorageSerialization.cpp.o [ 21%] Building CXX object CMakeFiles/thpp.dir/detail/StorageDefs.cpp.o [ 28%] Building CXX object CMakeFiles/thpp.dir/TensorSerialization.cpp.o In file included from thpp/detail/TensorGeneric.h:1:0, from /home/kangdongh/torch/install/include/TH/THGenerateFloatTypes.h:10, from /home/kangdongh/torch/install/include/TH/THGenerateAllTypes.h:10, from /tmp/luarocks_fbpython-0.1-2-5251/fblualib/thpp/thpp/../thpp/detail/Tensor.h:30, from /tmp/luarocks_fbpython-0.1-2-5251/fblualib/thpp/thpp/../thpp/Tensor.h:16, from /tmp/luarocks_fbpython-0.1-2-5251/fblualib/thpp/thpp/TensorSerialization.cpp:11: /tmp/luarocks_fbpython-0.1-2-5251/fblualib/thpp/thpp/../thpp/detail/TensorGeneric.h: In static member function ??static void thpp::detail::TensorOps<thpp::Tensor<float> >::_max(THFloatTensor*, THLongTensor*, THFloatTensor*, int)??: /tmp/luarocks_fbpython-0.1-2-5251/fblualib/thpp/thpp/../thpp/detail/TensorGeneric.h:191:50: error: too few arguments to function ??void THFloatTensor_max(THFloatTensor*, THLongTensor*, THFloatTensor*, int, int)??
....

I tried installing related libraries w/ 2016.12.12 version, it also failed
Since there is no way to downgrade torch version, I give up solving this issue...

some questions about PooledPredictor

Hi,
when i read the source code of PooledPredictor, in the function PooledPredictor::startPredictorThread, i noticed a commit about GPU mode:
// We tried adding weight sharing between nets on the same GPU,
// which resulted in sporadic NaN outputs of cuDNN (R5) layers.
// Removing weight sharing immediately solved this problem.
it looks like we cannot share trained layers at the GPU mode with cuDNN. Does this problem solved now, when i use cuDNN v5.1?
thanks

fb.python not found

when running th convert.lua:

/home/nn/torch/install/bin/lua: /home/nn/torch/install/share/lua/5.2/trepl/init.lua:389: /home/nn/torch/install/share/lua/5.2/trepl/init.lua:389: module 'fb.python' not found:No LuaRocks module found for fb.python
no field package.preload['fb.python']
no file '/home/nn/.luarocks/share/lua/5.2/fb/python.lua'
no file '/home/nn/.luarocks/share/lua/5.2/fb/python/init.lua'
no file '/home/nn/torch/install/share/lua/5.2/fb/python.lua'
no file '/home/nn/torch/install/share/lua/5.2/fb/python/init.lua'
no file '/home/nn/.luarocks/share/lua/5.1/fb/python.lua'
no file '/home/nn/.luarocks/share/lua/5.1/fb/python/init.lua'
no file '/home/nn/torch/install/share/lua/5.1/fb/python.lua'
no file '/home/nn/torch/install/share/lua/5.1/fb/python/init.lua'
no file './fb/python.lua'
no file '/home/nn/torch/install/share/luajit-2.1.0-beta1/fb/python.lua'
no file '/usr/local/share/lua/5.1/fb/python.lua'
no file '/usr/local/share/lua/5.1/fb/python/init.lua'
no file '/home/nn/.luarocks/lib/lua/5.2/fb/python.so'
no file '/home/nn/torch/install/lib/lua/5.2/fb/python.so'
no file '/home/nn/torch/install/lib/fb/python.so'
no file '/home/nn/.luarocks/lib/lua/5.1/fb/python.so'
no file '/home/nn/torch/install/lib/lua/5.1/fb/python.so'
no file './fb/python.so'
no file '/usr/local/lib/lua/5.1/fb/python.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
no file '/home/nn/.luarocks/lib/lua/5.2/fb.so'
no file '/home/nn/torch/install/lib/lua/5.2/fb.so'
no file '/home/nn/torch/install/lib/fb.so'
no file '/home/nn/.luarocks/lib/lua/5.1/fb.so'
no file '/home/nn/torch/install/lib/lua/5.1/fb.so'
no file './fb.so'
no file '/usr/local/lib/lua/5.1/fb.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
stack traceback:
[C]: in function 'error'
/home/nn/torch/install/share/lua/5.2/trepl/init.lua:389: in function 'require'
convert.lua:5: in main chunk
[C]: in function 'dofile'
...e/nn/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:150: in main chunk
[C]: in ?

"attempt to index upvalue 't2c' (a nil value)"

I'm trying to convert a torch model, but it breaks with this error:

th torch2caffe/torch2caffe.lua --input "/root/crnn/model/crnn_demo/crnn_demo_model.t7"  64 1 32 100
	Opts: %s	{
	  input_dims = {
		64,
		1,
		32,
		100
	  },
	  format = "lua",
	  input = "/root/crnn/model/crnn_demo/crnn_demo_model.t7",
	  caffemodel = "",
	  preprocessing = "",
	  prototxt = "",
	  verify = "",
	  input_tensor = ""
	}	
	Parsed opts: %s	{
	  input_dims = {
		64,
		1,
		32,
		100
	  },
	  inputs = {
		{
		  name = "data",
		  input_dims = {
			64,
			1,
			32,
			100
		  }
		}
	  },
	  input = "/root/crnn/model/crnn_demo/crnn_demo_model.t7",
	  format = "lua",
	  preprocessing = "",
	  verify = "",
	  prototxt = "",
	  caffemodel = ""
	}	
	Running with model: 	
	{
	  parameters : 
		{
		  1 : CudaTensor - size: 64x1x3x3
		  2 : CudaTensor - size: 64
		  3 : CudaTensor - size: 128x64x3x3
		  4 : CudaTensor - size: 128
		  5 : CudaTensor - size: 256x128x3x3
		  6 : CudaTensor - size: 256
		  7 : CudaTensor - size: 256
		  8 : CudaTensor - size: 256
		  9 : CudaTensor - size: 256x256x3x3
		  10 : CudaTensor - size: 256
		  11 : CudaTensor - size: 512x256x3x3
		  12 : CudaTensor - size: 512
		  13 : CudaTensor - size: 512
		  14 : CudaTensor - size: 512
		  15 : CudaTensor - size: 512x512x3x3
		  16 : CudaTensor - size: 512
		  17 : CudaTensor - size: 512x512x2x2
		  18 : CudaTensor - size: 512
		  19 : CudaTensor - size: 512
		  20 : CudaTensor - size: 512
		  21 : CudaTensor - size: 1024x512
		  22 : CudaTensor - size: 1024
		  23 : CudaTensor - size: 1024x256
		  24 : CudaTensor - size: 1024
		  25 : CudaTensor - size: 1024x512
		  26 : CudaTensor - size: 1024
		  27 : CudaTensor - size: 1024x256
		  28 : CudaTensor - size: 1024
		  29 : CudaTensor - size: 256x256
		  30 : CudaTensor - size: 256
		  31 : CudaTensor - size: 256x256
		  32 : CudaTensor - size: 256
		  33 : CudaTensor - size: 1024x256
		  34 : CudaTensor - size: 1024
		  35 : CudaTensor - size: 1024x256
		  36 : CudaTensor - size: 1024
		  37 : CudaTensor - size: 1024x256
		  38 : CudaTensor - size: 1024
		  39 : CudaTensor - size: 1024x256
		  40 : CudaTensor - size: 1024
		  41 : CudaTensor - size: 37x256
		  42 : CudaTensor - size: 37
		  43 : CudaTensor - size: 37x256
		  44 : CudaTensor - size: 37
		}
	  bnVars : 
		{
		  1 : CudaTensor - size: 256
		  2 : CudaTensor - size: 256
		  3 : CudaTensor - size: 512
		  4 : CudaTensor - size: 512
		  5 : CudaTensor - size: 512
		  6 : CudaTensor - size: 512
		}
	}
	/root/torch/install/bin/luajit: ./torch2caffe/lib.lua:158: attempt to index upvalue 't2c' (a nil value)
	stack traceback:
		./torch2caffe/lib.lua:158: in function 'convert'
		./torch2caffe/lib.lua:168: in function 'main'
		torch2caffe/torch2caffe.lua:23: in main chunk
		[C]: in function 'dofile'
		/root/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:145: in main chunk
		[C]: at 0x00406670

Seems like in torch2caffe/lib.lua, the lib_py.py that is added as a requirement in line 19 is a nil value in function M.convert(), which I don't understand, because if this is a scope issue, isn't declaring it as a local variable at the beginning of the function going to ensure that it is seen in the rest of the body?

error in using torch2caffe

I get an error: cannot open /fb-caffe-exts/torch2caffe/torch2caffe.lib/init.lua: No such file or directory when running th test.lua. Could anyone tell me the possible problems?

Using torch2caffe

I've done

git clone  https://github.com/facebook/fb-caffe-exts.git
cd fb-caffe-exts

exported paths like that to my system

export LD_PRELOAD=/path/to/libcaffe.so
export PYTHONPATH=$PYTHONPATH:/path/to/caffe/python/:/path/to/fb-caffe-exts/

then

th torch2caffe/torch2caffe.lua --help

and it all failed:

/home/user/torch/install/bin/luajit: /home/user/torch/install/share/lua/5.1/trepl/init.lua:384: /home/user/torch/install/share/lua/5.1/trepl/init.lua:384: module 'fb.python' not found:No LuaRocks module found for fb.python
    no field package.preload['fb.python']
    no file '/home/user/.luarocks/share/lua/5.1/fb/python.lua'
    no file '/home/user/.luarocks/share/lua/5.1/fb/python/init.lua'
    no file '/home/user/torch/install/share/lua/5.1/fb/python.lua'
    no file '/home/user/torch/install/share/lua/5.1/fb/python/init.lua'
    no file './fb/python.lua'
    no file '/home/user/torch/install/share/luajit-2.1.0-beta1/fb/python.lua'
    no file '/usr/local/share/lua/5.1/fb/python.lua'
    no file '/usr/local/share/lua/5.1/fb/python/init.lua'
    no file '/home/user/.luarocks/lib/lua/5.1/fb/python.so'
    no file '/home/user/torch/install/lib/lua/5.1/fb/python.so'
    no file '/home/user/torch/install/lib/fb/python.so'
    no file './fb/python.so'
    no file '/usr/local/lib/lua/5.1/fb/python.so'
    no file '/usr/local/lib/lua/5.1/loadall.so'
    no file '/home/user/.luarocks/lib/lua/5.1/fb.so'
    no file '/home/user/torch/install/lib/lua/5.1/fb.so'
    no file '/home/user/torch/install/lib/fb.so'
    no file './fb.so'
    no file '/usr/local/lib/lua/5.1/fb.so'
    no file '/usr/local/lib/lua/5.1/loadall.so'
stack traceback:
    [C]: in function 'error'
    /home/user/torch/install/share/lua/5.1/trepl/init.lua:384: in function 'require'
    torch2caffe/torch2caffe.lua:9: in main chunk
    [C]: in function 'dofile'
    ...user/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:145: in main chunk
    [C]: at 0x00406670


I want to convert torch to caffe model. How can I prepare this soft to do that? Smth to install or what?

python import error

Similar to issue #2 and issue #3. I'm having python importing errors like follows:

th torch2caffe/torch2caffe.lua
ImportError: No module named torch2caffe.lib_py

However, having a init.py file (which is present in the current repo) doesn't prevent these errors, and also it doesn't work to try to import from torch2caffe folder. Messing around with the PYTHONPATH also doesn't help..

If I run python and import it in the following way, all works perfectly:
import torch2caffe.lib_py

But doing that through the lua code gives the import error:
py.import('torch2caffe.lib_py')

If multiple models are used in one program, what is the behavior of the program?

The file "Predictor.h" contains the following statement:
folly::ThreadLocalPtr <caffe::Net> predictors_;
and it is a member of the class Predictor, if I have multiple Predictor instance, what will happen?

Say, I want to use both GoogLeNet and CaffeNet in one program, then combine the scores of these two models. Both of the models are called in multiple threads, what would happen?

eg:
predictor_1 = folly::make_uniquecaffe::fb::Predictor(FLAGS_prototxt_path_1,
FLAGS_weights_path_1);
predictor_2 = folly::make_uniquecaffe::fb::Predictor(FLAGS_prototxt_path_2,
FLAGS_weights_path_2);
and the thread function is as follows:
void thread_func()
{
...
// When calling in a worker thread
caffe::Blob input_blob;
input_blob.set_cpu_data(input_data); // avoid the copy.
const auto& output_blobs_1 = predictor_1->forward({&input_blob});
const auto& output_blobs_2 = predictor_2->forward({&input_blob});
...
}

What is the behavior of the above code?

Thanks a lot!

Some questions about using Predictor

Hi all,

I'm interested in using Predictor in Caffe. However I have following questions about its usage:

  • Can it be used in training phase so as to reduce memory consumption? If not, is there a convenient way to do so?
  • When using Predictor, should I replace all "Net" class with "Predictor" class in my code? Is there a more concrete example?

Thanks in advance!

Exception on converting caffe.FBThreshold

Hello, I am using torch2caffe to convert DeepSEA multitask cnn network into caffe, however I encounter this exception below, saying: 'LayerParameter' object has no attribute 'fbthreshold_param'.
The complete error message is as follow:

nn.Sequential {
input -> (1) -> (2) -> (3) -> (4) -> (5) -> (6) -> (7) -> (8) -> (9) -> (10) -> (11) -> (12) -> (13) -> (14) -> (15) -> (16) -> output: nn.SpatialConvolutionMM(4 -> 320, 1x8, 1,1)
(2): nn.Threshold
(3): nn.SpatialMaxPooling(1x4, 1,4)
(4): nn.Dropout(0.200000)
(5): nn.SpatialConvolutionMM(320 -> 480, 1x8, 1,1)
(6): nn.Threshold
(7): nn.SpatialMaxPooling(1x4, 1,4)
(8): nn.Dropout(0.200000)
(9): nn.SpatialConvolutionMM(480 -> 960, 1x8, 1,1)
(10): nn.Threshold
(11): nn.Dropout(0.500000)
(12): nn.Reshape(50880)
(13): nn.Linear(50880 -> 925)
(14): nn.Threshold
(15): nn.Linear(925 -> 919)
(16): nn.SoftMax
}
INFO:torch2caffe.lib_py:added layer caffe.SpatialConvolution_0: bottom=[data], top=[caffe.SpatialConvolution_0]
INFO:torch2caffe.lib_py:added layer caffe.FBThreshold_1: bottom=[caffe.SpatialConvolution_0], top=[caffe.SpatialConvolution_0]
INFO:torch2caffe.lib_py:added layer caffe.Pooling_2: bottom=[caffe.SpatialConvolution_0], top=[caffe.Pooling_2]
INFO:torch2caffe.lib_py:added layer caffe.Dropout_3: bottom=[caffe.Pooling_2], top=[caffe.Pooling_2]
INFO:torch2caffe.lib_py:added layer caffe.SpatialConvolution_4: bottom=[caffe.Pooling_2], top=[caffe.SpatialConvolution_4]
INFO:torch2caffe.lib_py:added layer caffe.FBThreshold_5: bottom=[caffe.SpatialConvolution_4], top=[caffe.SpatialConvolution_4]
INFO:torch2caffe.lib_py:added layer caffe.Pooling_6: bottom=[caffe.SpatialConvolution_4], top=[caffe.Pooling_6]
INFO:torch2caffe.lib_py:added layer caffe.Dropout_7: bottom=[caffe.Pooling_6], top=[caffe.Pooling_6]
INFO:torch2caffe.lib_py:added layer caffe.SpatialConvolution_8: bottom=[caffe.Pooling_6], top=[caffe.SpatialConvolution_8]
INFO:torch2caffe.lib_py:added layer caffe.FBThreshold_9: bottom=[caffe.SpatialConvolution_8], top=[caffe.SpatialConvolution_8]
INFO:torch2caffe.lib_py:added layer caffe.Dropout_10: bottom=[caffe.SpatialConvolution_8], top=[caffe.SpatialConvolution_8]
INFO:torch2caffe.lib_py:added layer caffe.Flatten_11: bottom=[caffe.SpatialConvolution_8], top=[caffe.Flatten_11]
INFO:torch2caffe.lib_py:added layer caffe.InnerProduct_12: bottom=[caffe.Flatten_11], top=[caffe.InnerProduct_12]
INFO:torch2caffe.lib_py:added layer caffe.FBThreshold_13: bottom=[caffe.InnerProduct_12], top=[caffe.InnerProduct_12]
INFO:torch2caffe.lib_py:added layer caffe.InnerProduct_14: bottom=[caffe.InnerProduct_12], top=[caffe.InnerProduct_14]
INFO:torch2caffe.lib_py:added layer caffe.Softmax_15: bottom=[caffe.InnerProduct_14], top=[caffe.InnerProduct_14]
ERROR:torch2caffe.caffe_layers:Exception on converting caffe.FBThreshold, {'_type': 'torch.FloatTensor', 'val': 1e-06, 'gradInput': array([[[[ 0.00000000e+00],
[ 0.00000000e+00],
[ 0.00000000e+00],
......
[ 0.00000000e+00]]]], dtype=float32), 'train': False, 'threshold': 0.0, 'output': array([[[[ 9.99999997e-07],
[ 9.99999997e-07],
[ 9.99999997e-07],
......
[ 9.99999997e-07]]]], dtype=float32)}
Traceback (most recent call last):
File "/root/fb-caffe-exts/torch2caffe/caffe_layers.py", line 278, in convert
return convertertypename
File "/root/fb-caffe-exts/torch2caffe/caffe_layers.py", line 186, in fbthreshold
layer.fbthreshold_param.threshold = torch_layer["threshold"]
AttributeError: 'LayerParameter' object has no attribute 'fbthreshold_param'
/root/torch/install/bin/luajit: /root/torch/install/share/lua/5.1/torch2caffe/lib.lua:163: Python error: opaque ref: call
Traceback (most recent call last):
File "/root/fb-caffe-exts/torch2caffe/lib_py.py", line 135, in finalize
opts)
File "/root/fb-caffe-exts/torch2caffe/caffe_builder.py", line 27, in to_caffe
opts, layer.typename, layer.torch_layer)
File "/root/fb-caffe-exts/torch2caffe/caffe_layers.py", line 278, in convert
return convertertypename
File "/root/fb-caffe-exts/torch2caffe/caffe_layers.py", line 186, in fbthreshold
layer.fbthreshold_param.threshold = torch_layer["threshold"]
AttributeError: 'LayerParameter' object has no attribute 'fbthreshold_param'

stack traceback:
[C]: in function 'finalize'
/root/torch/install/share/lua/5.1/torch2caffe/lib.lua:163: in function 'convert'
/root/torch/install/share/lua/5.1/torch2caffe/lib.lua:169: in function 'main'
fb-caffe-exts/torch2caffe/torch2caffe.lua:23: in main chunk
[C]: in function 'dofile'
/root/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:145: in main chunk
[C]: at 0x00406670

I would appreciate it if your could help me figure out what's wrong here. Thanks in advance.

Unknown layer type: table

Hi,

Trying to convert deepdesc .t7 net from https://github.com/etrulls/deepdesc-release
After countless efforts, I ran into an issue I couldn't solve:
Apparently the network model has a layer type "table" which is not implemented in Caffe?
Unfortunately, I'm not familiar with Torch, so I can't inspect this 'table' layer.

The model is here:
https://github.com/etrulls/deepdesc-release/blob/master/models/CNN3_p8_n8_split4_073000.t7

Any help will be appreciated.
Working on Ubuntu 16.04.

Error in test.lua

Hi,

I am trying to run th torch2caffe/test.lua. It seems to be failing with following error.

I0303 14:42:44.412389 146 layer_factory.hpp:77] Creating layer caffe.LogSoftmax_2 F0303 14:42:44.412438 146 layer_factory.hpp:81] Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type: LogSoftmax (known types: AbsVal, Accuracy, ArgMax, BNLL, BatchNorm, BatchReindex, Bias, Concat, ContrastiveLoss, Convolution, Data, Deconvolution, Dropout, DummyData, ELU, Eltwise, Embed, EuclideanLoss, Exp, Filter, Flatten, HDF5Data, HDF5Output, HingeLoss, Im2col, ImageData, InfogainLoss, InnerProduct, Input, LRN, Log, MVN, MemoryData, MultinomialLogisticLoss, PReLU, Pooling, Power, ReLU, Reduction, Reshape, SPP, Scale, Sigmoid, SigmoidCrossEntropyLoss, Silence, Slice, Softmax, SoftmaxWithLoss, Split, TanH, Threshold, Tile, WindowData)

Any suggestions as to whats going wrong?

Issue with running torch2caffe/torch2caffe.lua

Hi,

Thanks for providing an open torch2caffe conversion tool. I encountered the following error when I executed torch2caffe.lua:

th torch2caffe/torch2caffe.lua --help                                                                                                                       
/home/vimal/torch/install/bin/luajit: /home/vimal/torch/install/share/lua/5.1/trepl/init.lua:383: ./torch2caffe/lib.lua:19: Python error: import
ImportError: No module named torch2caffe.lib_py

stack traceback:
        [C]: in function 'error'
        /home/vimal/torch/install/share/lua/5.1/trepl/init.lua:383: in function 'require'
        torch2caffe/torch2caffe.lua:9: in main chunk
        [C]: in function 'dofile'
        ...imal/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:145: in main chunk
        [C]: at 0x00406670

Any idea what I might be missing in my set-up? I tried to add an init.py but that's leading me to a completely different error

/home/vimal/torch/install/bin/luajit: /home/vimal/torch/install/share/lua/5.1/trepl/init.lua:383: ./torch2caffe/lib.lua:19: Python error: import
Traceback (most recent call last):
  File "/home/vimal/work/fb-caffe-exts/torch2caffe/lib_py.py", line 17, in <module>
    import caffe
  File "/home/vimal/work/gh-caffe/python/caffe/__init__.py", line 1, in <module>
    from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver
  File "/home/vimal/work/gh-caffe/python/caffe/pycaffe.py", line 13, in <module>
    from ._caffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, \
ImportError: dlopen: cannot load any more object with static TLS

stack traceback:
        [C]: in function 'error'
        /home/vimal/torch/install/share/lua/5.1/trepl/init.lua:383: in function 'require'
        torch2caffe/torch2caffe.lua:9: in main chunk
        [C]: in function 'dofile'
        ...imal/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:145: in main chunk
        [C]: at 0x00406670

Any help is greatly appreciated! Thanks.

Optimizing advantage since cuDNN 5.1?

Since the class 'optimize' has been written, a new version of cuDNN has come out (cuDNN v5 and cuDNN v5.1).
I think cuDNN does the similar trick, that it tries to optimize the memory behavier of the deep neural networks. So, my question is, is there still an advantage compared to cuDNN v.5.1 ?
Thank you in advance!

is nn.gModule for input not valid?

I have a CNN model and call forward() method.

model = torch.load("./mymodel.net")
input = torch.load("./input.bin")
out =  model:forward(input)

When I pass it to torch2caffe.lua, it complains that is a unknown Torch class <nn.gModule>.
Is it illegal use?

$ th torch2caffe/torch2caffe.lua --input <path>/mymodel.net
Opts: %s	{
  prototxt = "",
  format = "lua",
  input = "<path>/mymodel.net",
  caffemodel = "",
  preprocessing = "",
  input_dims = {
    0
  },
  verify = "",
  input_tensor = ""
}	
<mypath>/torch/install/bin/luajit: ...<mypath>/torch/install/share/lua/5.1/torch/File.lua:343: unknown Torch class <nn.gModule>
stack traceback:

run error

Hi, buddy
When i run

th torch2caffe/torch2caffe.lua --input /home/byx/openface2016/openface/models/openface/nn4.v1.t7 --prototxt nn4_small2.protptxt --caffemodel nn4_small2.caffemodel 10 3 96 96
i meet a problem:

INFO:torch2caffe.lib_py:added layer caffe.SpatialConvolution_0: bottom=[data], top=[caffe.SpatialConvolution_0]
/home/byx/torch/install/bin/luajit: ./torch2caffe/torch_layers.lua:40: Python error: opaque ref: call
Traceback (most recent call last):
File "/home/byx/Downloads/fb-caffe-exts-master/torch2caffe/lib_py.py", line 73, in add_layer
bottom_edges = [int(bottom_edge) for bottom_edge in list(bottom_edges)]
TypeError: 'NoneType' object is not iterable

stack traceback:
[C]: in function 'add_layer'
./torch2caffe/torch_layers.lua:40: in function 'add'
./torch2caffe/torch_layers.lua:81: in function 'add'
./torch2caffe/lib.lua:161: in function 'convert'
./torch2caffe/lib.lua:168: in function 'main'
torch2caffe/torch2caffe.lua:24: in main chunk
[C]: in function 'dofile'
.../byx/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:145: in main chunk
[C]: at 0x00406670


and i don't know how to firgure it out, i need your help, please.

How to use predictor in batch ?

I want to extract features in batch with predictor, but it always says:
Check failed: input_blobs.size() == predictor->input_blobs().size() (50 vs. 1)
batch = 50
Is it default input data size is 1 ?

Shape mismatch while loading caffe model

Hi, I'm trying to convert simple torch network to caffe using yours torch2caffe.lua. Converting completed successfull, but while script trying to load caffe model, it crashes with shape mismatch error. I do not really understand how this error appears and what am I doing wrong.

Torch model:

nn.Sequential {
(1): nn.SpatialConvolution(3 -> 8, 3x3)
(2): nn.ReLU
(3): nn.SpatialMaxPooling(2x2, 1,1)
(4): nn.SpatialConvolution(8 -> 16, 3x3)
(5): nn.ReLU
(6): nn.SpatialMaxPooling(2x2, 2,2)
(7): nn.SpatialConvolution(16 -> 16, 3x3)
(8): nn.ReLU
(9): nn.SpatialMaxPooling(2x2, 2,2)
(10): nn.SpatialConvolution(16 -> 16, 3x3)
(11): nn.ReLU
(12): nn.SpatialMaxPooling(2x2, 2,2)
(13): nn.Reshape(16)
(14): nn.Linear(16 -> 8)
(15): nn.Linear(8 -> 4)
(16): nn.Linear(4 -> 1)
}

Error:

Cannot copy param 0 weights from layer 'caffe.InnerProduct_13'; shape mismatch. Source param shape is 8 16 (128); target param shape is 8 11664 (93312). To learn this layer's parameters from scratch rather than copying from a saved net, rename the layer.
*** Check failure stack trace: ***
Aborted (core dumped)

All three files attached.
torch2caffe.zip


I found error, it was my mistake, delete, please.

Usage of predictor

Hi,

I want to optimize my model using predictor, but I am not sure how to use the provided code?
Is there any guidance or example how to use it?
I need to drag and drop the files in src and include folders in caffe and then rebuild it, right? What are the next steps?

Where can I include python bindings, that I can use it with python (pycaffe)?
For example something like this:

...
net = predictor(caffe.Net('net_with_data_layer.prototxt', 'weights.caffemodel'))
net.forward() 
...

I am thankful for any hints!

Issues building on Ubuntu 14.04LTS

Hi,

I am trying to rebuild this on Ubuntu 14.04 LTS but am having issues running the build.sh script.

It terminates with this message:

++ echo 'Installing TH++'
Installing TH++
++ echo

++ cd /tmp/fblualib-build.ToJQjz/thpp/thpp
++ ./build.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1582 100 1582 0 0 4777 0 --:--:-- --:--:-- --:--:-- 4779
Invalid gtest-1.7.0.zip file

Previously, when I tried to run th torch2caffe/torch2caffe.lua --help, I got

/home/vkee/torch/install/bin/luajit: /home/vkee/torch/install/share/lua/5.1/trepl/init.lua:384: /home/vkee/torch/install/share/lua/5.1/trepl/init.lua:384: module 'fbtorch' not found:No LuaRocks module found for fbtorch
no field package.preload['fbtorch']
no file '/home/vkee/.luarocks/share/lua/5.1/fbtorch.lua'
no file '/home/vkee/.luarocks/share/lua/5.1/fbtorch/init.lua'
no file '/home/vkee/torch/install/share/lua/5.1/fbtorch.lua'
no file '/home/vkee/torch/install/share/lua/5.1/fbtorch/init.lua'
no file './fbtorch.lua'
no file '/home/vkee/torch/install/share/luajit-2.1.0-beta1/fbtorch.lua'
no file '/usr/local/share/lua/5.1/fbtorch.lua'
no file '/usr/local/share/lua/5.1/fbtorch/init.lua'
no file '/home/vkee/.luarocks/lib/lua/5.1/fbtorch.so'
no file '/home/vkee/torch/install/lib/lua/5.1/fbtorch.so'
no file '/home/vkee/torch/install/lib/fbtorch.so'
no file './fbtorch.so'
no file '/usr/local/lib/lua/5.1/fbtorch.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
stack traceback:
[C]: in function 'error'
/home/vkee/torch/install/share/lua/5.1/trepl/init.lua:384: in function 'require'
torch2caffe/torch2caffe.lua:9: in main chunk
[C]: in function 'dofile'
...vkee/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:145: in main chunk
[C]: at 0x00406670

python errors

I've got two problems trying to use torch2caffe, one is in the beginning when I run

th torch2caffe/torch2caffe.lua

I have

ImportError: No module named torch2caffe.lib_py

no matter how I mess with PYTHONPATH

Then, if I just modify it to work from torch2caffe folder I've got more interesting:

Traceback (most recent call last):
  File "/opt/rocks/fb-caffe-exts/torch2caffe/lib_py.py", line 17, in <module>
    import caffe
  File "/opt/caffe/python/caffe/__init__.py", line 1, in <module>
    from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver
  File "/opt/caffe/python/caffe/pycaffe.py", line 13, in <module>
    from ._caffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, \
ImportError: dlopen: cannot load any more object with static TLS

any ideas? thanks

torch2caffe Exception on converting caffe.Pooling

I tried to convert a really simple mnist pretrained torch model that I found here. When I use it like this

th torch2caffe/torch2caffe.lua --input ~/net.t7 --prototxt test.proto --caffemodel test.caffe 1 1 28 28

I get this error

AttributeError: 'PoolingParameter' object has not attribute 'torch_pooling'

Am I doing something wrong? Or is there something in the torch model that is not convertable for some reason?

Build error for layers

I have a model containing nn.Inception (nn.DepthConcat), nn.SpatialCrossMapLRN, nn.SpatialBatchNormalization. I get an error when trying to convert the mode:

F0222 11:17:01.507189 23675 torch_layers.lua:275] Unknown layer type: nn.SpatialCrossMapLRN, known types: nn.View, nn.Tanh, FixedLookupTable, nn.Parallel$, nn.Concat$, nn.LogSoftMax, nn.SpatialBatchNormalization, nn.JoinTable, nn.Threshold, nn.LSTM, nn.Dropout, nn.Reshape, nn.SpatialCrossMapLRNs, nn.LookupTable, nn.Linear, nn.DataParallel, nn.SpatialConvolution$, nn.Mean, nn.ConcatTable, nn.SpatialConvolutionMM, nn.TemporalConvolution, nn.SpatialMaxPooling, nn.SoftMax, nn.SpatialAveragePooling, nn.Sequential, nn.LogSumExp, nn.Sum, nn.ReLU, nn.ParallelTable$
*** Check failure stack trace: ***
    @     0x7ff0a20445cd  google::LogMessage::Fail()
    @     0x7ff0a2046433  google::LogMessage::SendToLog()
    @     0x7ff0a204415b  google::LogMessage::Flush()
    @     0x7ff0a2044379  google::LogMessage::~LogMessage()
    @     0x7ff08bd3cda2  luaLog
    @           0x479939  lj_vm_ffi_call
    @           0x44c189  lj_ccall_func
    @           0x44e15f  lj_cf_ffi_meta___call
    @           0x47797a  lj_BC_FUNCC
    @           0x466ca1  lj_cf_dofile
    @           0x47797a  lj_BC_FUNCC
    @           0x4659ad  lua_pcall
    @           0x40686f  pmain
    @           0x47797a  lj_BC_FUNCC
    @           0x465a27  lua_cpcall
    @           0x404544  main
    @     0x7ff0a6e5d830  __libc_start_main
    @           0x404619  _start
    @              (nil)  (unknown)
Aborted (core dumped)

May support be added for these layers?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.