Intel® Distribution of OpenVINO™ Toolkit
Community assistance about the Intel® Distribution of OpenVINO™ toolkit, OpenCV, and all aspects of computer vision-related on Intel® platforms.
6489 Discussions

Is there a tutorial or documentation for running custom tensorflow network in movidius ?

idata
Employee
3,096 Views

Hello,

 

I am trying to run facenet (Inception Resnet V1 on movidius). Please point me towards any tutorial as to how to start compiling for tensorflow. I tried mvCCompile on mnist softmax.py example from the tensorflow website and got the following error. Please help. I am also attaching the softmax.py which I used to create a frozen graph.

 

mvNCCompile mnist_output/mnist_default.meta -in=input -s12 -o=mnist_graph -on=output mvNCCompile v02.00, Copyright @ Movidius Ltd 2016 /usr/local/lib/python3.5/dist-packages/tensorflow/python/util/tf_inspect.py:45: DeprecationWarning: inspect.getargspec() is deprecated, use inspect.signature() instead if d.decorator_argspec is not None), _inspect.getargspec(target)) [Error 34] Setup Error: Values for input contain placeholder. Pass an absolute value.

 

softmax.py code below:

 

from __future__ import absolute_import from __future__ import division from __future__ import print_function import argparse import sys import tempfile from tensorflow.examples.tutorials.mnist import input_data import tensorflow as tf FLAGS = None def deepnn(x): """deepnn builds the graph for a deep net for classifying digits. Args: x: an input tensor with the dimensions (N_examples, 784), where 784 is the number of pixels in a standard MNIST image. Returns: A tuple (y, keep_prob). y is a tensor of shape (N_examples, 10), with values equal to the logits of classifying the digit into one of 10 classes (the digits 0-9). keep_prob is a scalar placeholder for the probability of dropout. """ # Reshape to use within a convolutional neural net. # Last dimension is for "features" - there is only one here, since images are # grayscale -- it would be 3 for an RGB image, 4 for RGBA, etc. with tf.name_scope('reshape'): x_image = tf.reshape(x, [-1, 28, 28, 1]) # First convolutional layer - maps one grayscale image to 32 feature maps. with tf.name_scope('conv1'): W_conv1 = weight_variable([5, 5, 1, 32]) b_conv1 = bias_variable([32]) h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) # Pooling layer - downsamples by 2X. with tf.name_scope('pool1'): h_pool1 = max_pool_2x2(h_conv1) # Second convolutional layer -- maps 32 feature maps to 64. with tf.name_scope('conv2'): W_conv2 = weight_variable([5, 5, 32, 64]) b_conv2 = bias_variable([64]) h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2) # Second pooling layer. with tf.name_scope('pool2'): h_pool2 = max_pool_2x2(h_conv2) # Fully connected layer 1 -- after 2 round of downsampling, our 28x28 image # is down to 7x7x64 feature maps -- maps this to 1024 features. with tf.name_scope('fc1'): W_fc1 = weight_variable([7 * 7 * 64, 1024]) b_fc1 = bias_variable([1024]) h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64]) h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1) # Dropout - controls the complexity of the model, prevents co-adaptation of # features. with tf.name_scope('dropout'): keep_prob = tf.placeholder(tf.float32) h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) # Map the 1024 features to 10 classes, one for each digit with tf.name_scope('fc2'): W_fc2 = weight_variable([1024, 10]) b_fc2 = bias_variable([10]) y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2 return y_conv, keep_prob def conv2d(x, W): """conv2d returns a 2d convolution layer with full stride.""" return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') def max_pool_2x2(x): """max_pool_2x2 downsamples a feature map by 2X.""" return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') def weight_variable(shape): """weight_variable generates a weight variable of a given shape.""" initial = tf.truncated_normal(shape, stddev=0.1) return tf.Variable(initial) def bias_variable(shape): """bias_variable generates a bias variable of a given shape.""" initial = tf.constant(0.1, shape=shape) return tf.Variable(initial) def main(_): # Import data mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True) # Create the model x = tf.placeholder(tf.float32, [None, 784], name ="input") # Define loss and optimizer y_ = tf.placeholder(tf.float32, [None, 10], name = "output") # Build the graph for the deep net y_conv, keep_prob = deepnn(x) with tf.name_scope('loss'): cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv) cross_entropy = tf.reduce_mean(cross_entropy) with tf.name_scope('adam_optimizer'): train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy) with tf.name_scope('accuracy'): correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1)) correct_prediction = tf.cast(correct_prediction, tf.float32) accuracy = tf.reduce_mean(correct_prediction) graph_location = tempfile.mkdtemp() print('Saving graph to: %s' % graph_location) train_writer = tf.summary.FileWriter(graph_location) train_writer.add_graph(tf.get_default_graph()) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for i in range(20000): batch = mnist.train.next_batch(50) if i % 100 == 0: train_accuracy = accuracy.eval(feed_dict={ x: batch[0], y_: batch[1], keep_prob: 1.0}) print('step %d, training accuracy %g' % (i, train_accuracy)) train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5}) saver = tf.train.Saver(tf.global_variables()) saver.save(sess, "mnist_output/"+'mnist_default') print('test accuracy %g' % accuracy.eval(feed_dict={ x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0})) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--data_dir', type=str, default='/tmp/tensorflow/mnist/input_data', help='Directory for storing input data') FLAGS, unparsed = parser.parse_known_args() tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
0 Kudos
42 Replies
idata
Employee
1,042 Views

Please don't start the tutorial/explanation from tensorflow slim module. Start from reading/loading the check point file.

0 Kudos
idata
Employee
1,042 Views

+1

0 Kudos
idata
Employee
1,042 Views

AshwinVijayakumar ,

 

any news regarding this question? I would also very much like an answer.
0 Kudos
idata
Employee
1,042 Views

So, what I have to do is train the network and save the graph, then run the movidius compiler that generates a new graph in the ncs format and finally use the API to evaluate an input data ?.

 

The last post was on November 21, has a new tutorial or documentation of how to train your own network been published? For example MNIST?
0 Kudos
idata
Employee
1,042 Views

waiting for this.

0 Kudos
idata
Employee
1,042 Views

Also waiting for this workflow for converting a custom-trained tensorflow model into Movidius graph. My understanding is that the example script that is provided in https://movidius.github.io/ncsdk/TensorFlow.html works for the case of creating a model, with an image tensor placeholder input and final output layer that are compatible with movidius. The model is then initialized with variables from a checkpoint and re-saved, so it can be recompiled with mvNCCompile. But when using a model that was already custom-trained from a checkpoint e.g. the model zoo downloads, there does not seem to be a one-to-one mapping of the original model variables, and variable scoping has some extra prefixes that are not correctly mapped if using init_from_checkpoint(). So it would be nice to see a clear example of how to go from a tensorflow frozen graph to a movidius graph. Thanks.

0 Kudos
idata
Employee
1,042 Views

Waiting for it too!

0 Kudos
idata
Employee
1,042 Views

waiting

0 Kudos
idata
Employee
1,042 Views

the only i check into the forum now is to see if there has been an update on this topic

0 Kudos
idata
Employee
1,042 Views

+1

0 Kudos
idata
Employee
1,042 Views

Hello, I've been working on something similar to this, but changing the gray scale format of MNIST to an RGB format, to use it with the chip. but I get error 34:

 

[Error 34] Setup Error: Values for input contain placeholder. Pass an absolute value.

 

What do you mean with "absolute value"?

 

What is the correct format to declare the input and output tensors?

 

I searched the Internet for the solution and I can not find it. I've been in this for two weeks. I have not found any developer that has been able to run their own Tensorflow program and share their code. Please upload an example code with a simple program, train the network, save the model and then upload it to the NCS.

 

It is the minimum of documentation that should exist!!
0 Kudos
idata
Employee
1,042 Views

I have been trying to get a Tensorflow ENet segmentation model to work on the NCS, but I keep running into issues such as '[Error 5] Toolkit Error: Stage Details Not Supported: RealDiv'. Is there any comprehensive list of supported tensorflow operations somewhere?

 

So far, I have had similar errors with the following operations(tf._):

 

~~_ div (elemwise division => RealDiv)~~

 

     

  • abs
  •  

  • log
  •  

  • pow
  •  

  • greater
  •  

  • reciprocal
  •  

  • gather_nd
  •  

 

Also a weird error where broadcasting did not work and I had to use tf.expand_dims() before multiplying alpha for PReLU layer.

 

~~The [Error 5] is preventing me from doing division (tf.div() becomes RealDiv), which breaks Spatial Dropout . Adding support for some of the basic math operations listed would be really nice. ~~

 

I might start a new thread after looking around some more if nobody here has a list which ops are supported. Also, how do we make feature requests? :tongue:

 

Edit: I updated to version 11, and the div/RealDiv issue seems to have been addressed. I still have not tested other operations, so my question of a list still stands.

0 Kudos
idata
Employee
1,042 Views

Are we getting abandoned? So frustrated :/

0 Kudos
idata
Employee
1,042 Views

@notbadday @shadySource At the moment, we're working on adding support for these layers and more. Thank you for your patience while we work to add support.

0 Kudos
idata
Employee
1,042 Views
0 Kudos
idata
Employee
1,042 Views

waiting -_-

0 Kudos
idata
Employee
1,042 Views

Still waiting. The only thing there is loading Caffe models. Is that really more popular than Tensorflow?

0 Kudos
idata
Employee
1,042 Views

@ruze @antoniocappiello There is a document on the NCS doc site that details some general guidelines for compiling a Tensorflow network @ https://movidius.github.io/ncsdk/tf_compile_guidance.html.

0 Kudos
idata
Employee
1,042 Views

@ruze, @antoniocappiello, @notbadday, this might serve as a good reference - https://ncsforum.movidius.com/discussion/comment/1579/#Comment_1579

0 Kudos
idata
Employee
1,028 Views

@sjbozzo, if you are trying to get MNIST running on NCS, check out this example:

 

MNIST example: https://github.com/ashwinvijayakumar/ncappzoo/tree/mnist/tensorflow/mnist

0 Kudos
idata
Employee
1,028 Views

Is it published @AshwinVijayakumar ?

0 Kudos
Reply