It looks like you're new here. If you want to get involved, click one of these buttons!

Sign InIt looks like you're new here. If you want to get involved, click one of these buttons!

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)
```

## Comments

40 Commentssorted by Votes Date Added4Vote UpVote DownPlease don't start the tutorial/explanation from tensorflow slim module. Start from reading/loading the check point file.

2Vote UpVote Down@aboggaram we are writing an article about this, and I expect to publish it sometime next week, will let you know as soon as it goes LIVE.

2Vote UpVote Down@AshwinVijayakumar : Where exactly is the example for custom tensor flow network in the blog? I am having a custom object detection tensor flow .meta file. I want to run that on Movidius neural stick.

I am using following command:

mvNCCompile -s 12 models/model.meta -in=input_1 -on=conv2_1/bias

and I am getting the following error:

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

2Vote UpVote DownI also look forward to the blog post. Any update on how to compile a tf network using mvNCCompile is highly appreciated as well.

1Vote UpVote Down@ramana.rachakonda I have gone through that tutorial and followed the exact same steps but still ending up with the error given mnist example. The documentation given here is not sufficient. @AshwinVijayakumar and Intel team, can you please provide a solid example to compile a custom network rather than those from the tf.contrib.slim module? Thanks a lot,

Achyut

1Vote UpVote Down+1

1Vote UpVote DownAshwinVijayakumar ,

any news regarding this question? I would also very much like an answer.

1Vote UpVote DownAlso 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.

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

1Vote UpVote DownI 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?

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.

1Vote UpVote Down@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

0Vote UpVote DownPlease look at this page https://movidius.github.io/ncsdk/TensorFlow.html especially the section "Save Session with graph and checkpoint information".

Looks like you need to do something like this to save the session with specific values for input placeholders such as image size etc.

0Vote UpVote Down@aboggaram ,

i am also getting same error, please let me know if you find the solution.

my detail question is here

https://stackoverflow.com/questions/47012711/how-to-test-custom-created-model-of-tensorflow-on-movidius

0Vote UpVote Down@Tome_at_Intel Please help me here. Thanks

0Vote UpVote DownAwesome, thanks so much!

0Vote UpVote Down@AshwinVijayakumar When can we expect the article?

0Vote UpVote DownWaiting for it too!

0Vote UpVote DownSimilarly interested in this article.

0Vote UpVote DownAlso waiting for this..

0Vote UpVote DownI'm very interested in this topic,too.

0Vote UpVote DownHi everyone, I am running a little behind on putting this article together. I was tied up putting the first 2 articles on https://movidius.github.io/blog/, please watch out for the tensorflow article on this blog site.

0Vote UpVote DownWill you be at CES if so whats the booth number?

0Vote UpVote Down@AshwinVijayakumar i am wondering about multiple feature support, it can be built by us somehow or overcome this?

0Vote UpVote Down@chicagobob123 , We will be at the Intel NTG, Movidius Group booth - https://ces18.mapyourshow.com/7_0/exhibitor/exhibitor-details.cfm?ExhID=T0007775

0Vote UpVote Down@GoldenWings, not sure I understand. Can you please clarify what you mean by 'multiple feature support'?

0Vote UpVote Down@AshwinVijayakumar i mean multiple input currently the sdk supports single input i was wondering if there is away to ocercome this

0Vote UpVote DownAlso waiting for this.

0Vote UpVote DownSo, 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?

0Vote UpVote Downwaiting for this.

0Vote UpVote DownWaiting for it too!