TACO icon indicating copy to clipboard operation
TACO copied to clipboard

Testing Trained Weights

Open ElliotEckholm opened this issue 4 years ago • 11 comments

Currently trying to test the trained weights that were already provided, but getting an error.

I downloaded the taco_10_3.zip, placed the split data and .h5 in the mentioned directories.

Then ran this command: python3 detector.py test --dataset=../data --model=./models/logs/mask_rcnn_taco_0100.h5 --round 3 --class_map=./taco_config/map_3.csv

This is the error:

Traceback (most recent call last): File "detector.py", line 283, in <module> model.load_weights(model_path, by_name=True) File "/Users/ellioteckholm/Documents/AI/Pre_trained_TACO/detector/model.py", line 2088, in load_weights topology.load_weights_from_hdf5_group_by_name(f, layers) File "/usr/local/lib/python3.7/site-packages/keras/engine/topology.py", line 3479, in load_weights_from_hdf5_group_by_name K.batch_set_value(weight_value_tuples) File "/usr/local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 2372, in batch_set_value assign_op = x.assign(assign_placeholder) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/ops/variables.py", line 2067, in assign self._variable, value, use_locking=use_locking, name=name) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/ops/state_ops.py", line 227, in assign validate_shape=validate_shape) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/ops/gen_state_ops.py", line 66, in assign use_locking=use_locking, name=name) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/op_def_library.py", line 794, in _apply_op_helper op_def=op_def) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/util/deprecation.py", line 507, in new_func return func(*args, **kwargs) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 3357, in create_op attrs, op_def, compute_device) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 3426, in _create_op_internal op_def=op_def) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 1770, in __init__ control_input_ops) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 1610, in _create_c_op raise ValueError(str(e)) ValueError: Dimension 1 in both shapes must be equal, but are 16 and 44. Shapes are [1024,16] and [1024,44]. for 'Assign_376' (op: 'Assign') with input shapes: [1024,16], [1024,44].

ElliotEckholm avatar May 25 '20 00:05 ElliotEckholm

Getting the same error. After some research, it might be because the weights were trained using an older version of Keras or TensorFlow. Currently trying to generate new weights to try to solve this.

Any help is greatly appreciated.

alexweininger avatar Oct 26 '20 16:10 alexweininger

What version are you using? I trained the weights using:

  • tensorflow 1.9.0
  • keras 2.16

pedropro avatar Oct 27 '20 23:10 pedropro

I actually was able to get it working when I manually installed Python 3.5, Keras 2.0.8, and Tensorflow 1.3.0.

alexweininger avatar Oct 30 '20 04:10 alexweininger

I tried "Python 3.5, Keras 2.0.8, and Tensorflow 1.3.0" setting, but failed, yielding "tensorflow has no attribute math".

emjay73 avatar Oct 27 '21 13:10 emjay73

Currently trying to test the trained weights that were already provided, but getting an error.

I downloaded the taco_10_3.zip, placed the split data and .h5 in the mentioned directories.

Then ran this command: python3 detector.py test --dataset=../data --model=./models/logs/mask_rcnn_taco_0100.h5 --round 3 --class_map=./taco_config/map_3.csv

This is the error:

Traceback (most recent call last): File "detector.py", line 283, in <module> model.load_weights(model_path, by_name=True) File "/Users/ellioteckholm/Documents/AI/Pre_trained_TACO/detector/model.py", line 2088, in load_weights topology.load_weights_from_hdf5_group_by_name(f, layers) File "/usr/local/lib/python3.7/site-packages/keras/engine/topology.py", line 3479, in load_weights_from_hdf5_group_by_name K.batch_set_value(weight_value_tuples) File "/usr/local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 2372, in batch_set_value assign_op = x.assign(assign_placeholder) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/ops/variables.py", line 2067, in assign self._variable, value, use_locking=use_locking, name=name) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/ops/state_ops.py", line 227, in assign validate_shape=validate_shape) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/ops/gen_state_ops.py", line 66, in assign use_locking=use_locking, name=name) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/op_def_library.py", line 794, in _apply_op_helper op_def=op_def) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/util/deprecation.py", line 507, in new_func return func(*args, **kwargs) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 3357, in create_op attrs, op_def, compute_device) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 3426, in _create_op_internal op_def=op_def) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 1770, in __init__ control_input_ops) File "/usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 1610, in _create_c_op raise ValueError(str(e)) ValueError: Dimension 1 in both shapes must be equal, but are 16 and 44. Shapes are [1024,16] and [1024,44]. for 'Assign_376' (op: 'Assign') with input shapes: [1024,16], [1024,44].

Firstly, I think you should use --class_map=./taco_config/map_10.csv instead of map_3.csv Secondly, based on detector.py, I think we should copy the .h5 file to the models/ dir, but not models/logs/

Anyway, just as you did, I downloaded the taco_10_3.zip, placed the split data and .h5 in the mentioned directories. And I installed TensorFlow1.9.0 and Keras 2.1.6, but when running: python detector.py test --dataset=../data --model=./models/mask_rcnn_taco_0100.h5 --round 3 --class_map=./taco_config/map_10.csv I got this error message: `Traceback (most recent call last): File "D:\MVproject\ceshi\01GarbageTACO\venv\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in from tensorflow.python.pywrap_tensorflow_internal import * File "D:\MVproject\ceshi\01GarbageTACO\venv\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 35, in _pywrap_tensorflow_internal = swig_import_helper() File "D:\MVproject\ceshi\01GarbageTACO\venv\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 30, in swig_import_helper _mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description) File "C:\Python37\lib\imp.py", line 242, in load_module return load_dynamic(name, filename, file) File "C:\Python37\lib\imp.py", line 342, in load_dynamic return _load(spec) ImportError: DLL load failed: can not find module。

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "detector.py", line 48, in from dataset import Taco File "D:\MVproject\ceshi\01GarbageTACO\TACO-master\detector\dataset.py", line 11, in import utils File "D:\MVproject\ceshi\01GarbageTACO\TACO-master\detector\utils.py", line 19, in import tensorflow as tf File "D:\MVproject\ceshi\01GarbageTACO\venv\lib\site-packages\tensorflow_init_.py", line 22, in from tensorflow.python import pywrap_tensorflow # pylint: disable=unused-import File "D:\MVproject\ceshi\01GarbageTACO\venv\lib\site-packages\tensorflow\python_init_.py", line 49, in from tensorflow.python import pywrap_tensorflow File "D:\MVproject\ceshi\01GarbageTACO\venv\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 74, in raise ImportError(msg) ImportError: Traceback (most recent call last): File "D:\MVproject\ceshi\01GarbageTACO\venv\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in from tensorflow.python.pywrap_tensorflow_internal import * File "D:\MVproject\ceshi\01GarbageTACO\venv\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 35, in _pywrap_tensorflow_internal = swig_import_helper() File "D:\MVproject\ceshi\01GarbageTACO\venv\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 30, in swig_import_helper _mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description) File "C:\Python37\lib\imp.py", line 242, in load_module return load_dynamic(name, filename, file) File "C:\Python37\lib\imp.py", line 342, in load_dynamic return _load(spec) ImportError: DLL load failed: can not find module。

Failed to load the native TensorFlow runtime.

See https://www.tensorflow.org/install/install_sources#common_installation_problems

for some common reasons and solutions. Include the entire stack trace above this error message when asking for help. `

I'm really stacked here, anyone could help please? Thanks

Taichipeace avatar Nov 22 '21 16:11 Taichipeace

I tried "Python 3.5, Keras 2.0.8, and Tensorflow 1.3.0" setting, but failed, yielding "tensorflow has no attribute math".

use 'tf.divide' instead of 'tf.math.divide' source: https://stackoverflow.com/questions/68673846/attributeerror-module-tensorflow-has-no-attribute-div

farcaz avatar Nov 26 '21 04:11 farcaz

I tried "Python 3.5, Keras 2.0.8, and Tensorflow 1.3.0" setting, but failed, yielding "tensorflow has no attribute math".

use 'tf.divide' instead of 'tf.math.divide' source: https://stackoverflow.com/questions/68673846/attributeerror-module-tensorflow-has-no-attribute-div

Worked for me. FYI, I then got an assertion error in model.py, "assert model_name = in dir_names". For me this was due to the .DS_File messing up next(os.walk(self.model_dir). Created a new assertion taking files from os.walk

GDICK14 avatar Feb 25 '22 05:02 GDICK14

I tried "Python 3.5, Keras 2.0.8, and Tensorflow 1.3.0" setting, but failed, yielding "tensorflow has no attribute math".

use 'tf.divide' instead of 'tf.math.divide' source: https://stackoverflow.com/questions/68673846/attributeerror-module-tensorflow-has-no-attribute-div

Worked for me. FYI, I then got an assertion error in model.py, "assert model_name = in dir_names". For me this was due to the .DS_File messing up next(os.walk(self.model_dir). Created a new assertion taking files from os.walk

I am getting the same error not able to make it work. Can you please help me with this error and what changes you made?

rishabh0282 avatar Apr 28 '22 16:04 rishabh0282

I tried "Python 3.5, Keras 2.0.8, and Tensorflow 1.3.0" setting, but failed, yielding "tensorflow has no attribute math".

use 'tf.divide' instead of 'tf.math.divide' source: https://stackoverflow.com/questions/68673846/attributeerror-module-tensorflow-has-no-attribute-div

Worked for me. FYI, I then got an assertion error in model.py, "assert model_name = in dir_names". For me this was due to the .DS_File messing up next(os.walk(self.model_dir). Created a new assertion taking files from os.walk

I am getting the same error not able to make it work. Can you please help me with this error and what changes you made?

Just download these versions: Keras 2.0.8 Tensorflow 1.15.0 But after download I changed file in this list because it gave me some errors with decode('utf-8') so I deleted it. Try it out

PoltoraninKE avatar May 08 '22 06:05 PoltoraninKE

The following environment works for me:

  • Ubuntu 20.04
  • Python 3.7.13
  • tensorflow 1.15.0
  • Keras 2.0.8

And manually patch keras encoding/decoding issue:

--- /home/user/anaconda3/envs/taco37/lib/python3.7/site-packages/keras/engine/topology.py  2022-09-20 13:33:37 +0000
+++ /home/user/anaconda3/envs/taco37/lib/python3.7/site-packages/keras/engine/topology.py  2022-09-20 13:33:37 +0000
@@ -3111,11 +3111,11 @@
             and weights file.
     """
     if 'keras_version' in f.attrs:
-        original_keras_version = f.attrs['keras_version']#.decode('utf8')
+        original_keras_version = f.attrs['keras_version'].decode('utf8')
     else:
         original_keras_version = '1'
     if 'backend' in f.attrs:
-        original_backend = f.attrs['backend']#.decode('utf8')
+        original_backend = f.attrs['backend'].decode('utf8')
     else:
         original_backend = None

Patch the detector so it won't use checkpoints:

index f96510e..7bcfadc 100644
--- a/detector/detector.py
+++ b/detector/detector.py
@@ -286,7 +286,10 @@ if __name__ == '__main__':
         # Start from ImageNet trained weights
         model_path = model.get_imagenet_weights()
     else:
-        _, model_path = model.get_last_checkpoint(args.model)
+        #_, model_path = model.get_last_checkpoint(args.model)
+        model_path = str(__import__("pathlib").Path(args.model).absolute())
+
+

Finally, set environment variable so protobuf can work with pure Python implementation:

export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python

BookGin avatar Sep 28 '22 14:09 BookGin

Does anyone have a fork that works on modern-ish versions?

rgaufman avatar May 10 '23 18:05 rgaufman