71

I am trying to train my own custom object detector using Tensorflow Object-Detection-API

I installed the tensorflow using "pip install tensorflow" in my google compute engine. Then I followed all the instructions on this site: https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/training.html

When I try to use train.py I am getting this error message:

Traceback (most recent call last): File "train.py", line 49, in from object_detection.builders import dataset_builder File "/usr/local/lib/python3.6/dist-packages/object_detection-0.1->py3.6.egg/object_detection/builders/dataset_builder.py", line 27, in from object_detection.data_decoders import tf_example_decoder File "/usr/local/lib/python3.6/dist-packages/object_detection-0.1-py3.6.egg/object_detection/data_decoders/tf_example_decoder.py", line 27, in slim_example_decoder = tf.contrib.slim.tfexample_decoder AttributeError: module 'tensorflow' has no attribute 'contrib'

Also I am getting different results when I try to learn version of tensorflow.

python3 -c 'import tensorflow as tf; print(tf.version)' : 2.0.0-dev20190422

and when I use

pip3 show tensorflow:

Name: tensorflow Version: 1.13.1 Summary: TensorFlow is an open source machine learning framework for everyone. Home-page: https://www.tensorflow.org/ Author: Google Inc. Author-email: [email protected] License: Apache 2.0 Location: /usr/local/lib/python3.6/dist-packages Requires: gast, astor, absl-py, tensorflow-estimator, keras-preprocessing, grpcio, six, keras-applications, wheel, numpy, tensorboard, protobuf, termcolor Required-by:

    sudo python3 train.py --logtostderr --train_dir=training/ -- 
    pipeline_config_path=training/ssd_inception_v2_coco.config

What should I do to solve this problem? I couldn't find anything about this error message except this: tensorflow 'module' object has no attribute 'contrib'

1
  • 4
    Can you please post a solution to this problem if you get it? I am still struggling. Commented Jan 20, 2020 at 17:08

12 Answers 12

43

tf.contrib has moved out of TF starting TF 2.0 alpha.
Take a look at these tf 2.0 release notes https://github.com/tensorflow/tensorflow/releases/tag/v2.0.0-alpha0
You can upgrade your TF 1.x code to TF 2.x using the tf_upgrade_v2 script https://www.tensorflow.org/alpha/guide/upgrade

Sign up to request clarification or add additional context in comments.

4 Comments

thanks a lot, I read tf 2.0 release notes, train.py still using contrib, it still not updated. I will use model_main.py
so I AM using model_main.py on a similar project... but I am still getting the same error... model_main contains references that end up referencing tf.contrib (from object_detection import model_lib -> from object_detection import eval_util -> slim = tf.contrib.slim) ... model_main references model_lib and model_lib references eval_util, which references tf.contrib.slim ... how do I resolve this?
@eerick - facing the same issue got any solution?
My solution ended up being to run TF version 1.14 and everything works after that.
17

One easy way is you can pass your code written in TensorFlow 1.x to the below code to automatically upgrade it to TensorFlow 2.x.

$tf_upgrade_v2 \
--intree my_project/ \
--outtree my_project_v2/ \
--reportfile report.txt

The above code will replace all the commands which are deprecated in 2.x with the onces that are actually working in 2.x. And then you can run your code in TensorFlow 2.x.

In case if it throws an error and is unable to convert the complete code and then don't panic. Please open the "report.txt" file that is generated by the above code. In this file, you will find commands that are deprecated and their alternative commands that can be used in TensorFlow 2.x.

Taadaa, just replace the commands that are throwing errors with the new ones.

Example:

If the command in TensorFlow 1.x is:

tf.contrib

Then the same command in Tensorflow 2.x is:

tf.compat.v1.estimator

In the above example replace "tf.contrib" with "tf.compat.v1.estimator" and that should solve the problem.

4 Comments

This raises an error: module 'tensorflow_estimator.python.estimator.api._v1.estimator' has no attribute 'layers' because the old behavior was: tf.contrib.layers.
@Ibrahim.H how did you solve that layers issues?
@Ben I'm not if I had that issue specifically, neither I solved it, but in of the working examples, I used the v1 old compatible API using import tensorflow.compat.v1 as tf_v1; tf_v1.disable_v2_behavior(), use this if you want to disable the v2 API, it may still work with current version.
I had a tf.contrib.lookup and replacing it with tf.compat.v1.estimator.lookup failed. There's no lookup in tf.compat.v1.estimator
13

This issue might be helpful for you, it explains how to achieve TPUStrategy, a popular functionality of tf.contrib in TF<2.0.

So, in TF 1.X you could do the following:

resolver = tf.contrib.cluster_resolver.TPUClusterResolver('grpc://' + os.environ['COLAB_TPU_ADDR'])
tf.contrib.distribute.initialize_tpu_system(resolver)
strategy = tf.contrib.distribute.TPUStrategy(resolver)

And in TF>2.0, where tf.contrib is deprecated, you achieve the same by:

tf.config.experimental_connect_to_host('grpc://' + os.environ['COLAB_TPU_ADDR'])
resolver = tf.distribute.cluster_resolver.TPUClusterResolver('grpc://' + os.environ['COLAB_TPU_ADDR'])
tf.tpu.experimental.initialize_tpu_system(resolver)
strategy = tf.distribute.experimental.TPUStrategy(resolver) 

2 Comments

@NeStack, is there something similar for use in R?
@SqueakyBeak I am not coding in R, so I am unaware of analogies for it, sorry
5

I used google colab to run my models and everything was perfect untill i used inline tesorboard. With tensorboard inline, I had the same issue of "Module 'tensorflow' has no attribute 'contrib'".

It was able to run training when rebuild and reinstall the model using setup.py(research folder) after initialising tensorboard.

2 Comments

It will be great if you can write steps.
" %tensorflow_version 1.x " -- run this code in a separate cell at the top of google colab, your old code will work like a charm
3

I used tensorflow 1.8 to train my model and there is no problem for now. Tensorflow 2.0 alpha is not suitable with object detection API

Comments

3

I'm using Google Colab as well. A comment suggested to put

%tensorflow_version 1.x

in the first (code) cell, and it worked!

1 Comment

ValueError: Tensorflow 1 is unsupported in Colab.
1

If you want to use tf.contrib, you need to now copy and paste the source code from github into your script/notebook. It's annoying and doesn't always work. But that's the only workaround I've found. For example, if you wanted to use tf.contrib.opt.AdamWOptimizer, you have to copy and paste from here. https://github.com/tensorflow/tensorflow/blob/590d6eef7e91a6a7392c8ffffb7b58f2e0c8bc6b/tensorflow/contrib/opt/python/training/weight_decay_optimizers.py#L32

Comments

1

I face the same error and solve it by install python version 3.7 then i can install tensorflow 1.15 and it work.

Comments

1

I used tensorflow==2.9 but tensorflow-probability==0.6.0 so I met this error too. tensorflow-probability==0.6.0 seems to be compatible with tf 1

this is solution: pip install tensorflow_probability==0.12.2

This version of TensorFlow Probability requires TensorFlow version >= 2.3

if there are still some errors pip install tensorflow_probability==0.17.0

Comments

0

For instance change from tf.contrib.layers.xavier_initializer()

to tf.compat.v1.initializers.glorot_uniform()

and tf.Variable to tf.compat.v1.get_variable

Also

import tensorflow as tf
tf.compat.v1.disable_v2_behavior()

may help.

Comments

0

It looks like you are trying to use the tf.contrib module in TensorFlow. However, the contrib module was deprecated in TensorFlow 2.0 and is no longer available.

Suggested Change

interpreter=tf.lite.Interpreter(model_path="yolov8n_saved_model/yolov8n_float32.tflite")

Comments

-6

For me it worked using the latest release of tensorflow: pip install tensorflow==2.2.0

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.