Why can’t I load model weights with tensorflow 2.3.1 following a setup to the letter for Deep-Orientation

I’m trying to get the out of the box deep-orientation implementation to work, but no matter how I try playing with the path or the extension of the weight files provided by the authors, it fails to load weights.

I followed the installation instructions, upgraded to tensorflow 2.3.1 to eliminate an error, and tried calling the very first inference command, but I receive the error below.

Command:

python inference.py beyer_mod_relu ../trained_networks/beyer_mod_relu__depth__126x48__biternion__0_030000__1/weights_valid_0268.hdf5 ../nicr_rgb_d_orientation_data_set_examples/small_patches --input_type depth --input_preprocessing standardize --input_height 126 --input_width 48 --output_type biternion --n_samples 1 --cpu

Error:

File "h5py/h5f.pyx", line 88, in h5py.h5f.open
OSError: Unable to open file (unable to open file: name = '../trained_networks/beyer_mod_relu__depth__126x48__biternion__0_030000__1/weights_valid_0268.hdf5', errno = 2, error message = 'No such file or directory', flags = 0, o_flags = 0)

Renaming the .hdf5.index extension to .hdf5 only produces the following, which is my expected behaviour.

OSError: Unable to open file (file signature not found)

If I call your inference command but change the file path from ./weights_valid_0268.hdf5 to ./weights_valid_0268.hdf5.index, I get:

AssertionError: Some objects had attributes which were not restored:

Ending with:

... array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
dtype=float32)>: ['main_7_bn/gamma'] <tf.Variable 'main_7_bn/beta:0' shape=(64,) dtype=float32, 
numpy= array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
 dtype=float32)>: ['main_7_bn/beta'] <tf.Variable 'main_7_bn/moving_mean:0' shape=(64,) dtype=float32, 
numpy= array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
dtype=float32)>: ['main_7_bn/moving_mean'] <tf.Variable 'main_7_bn/moving_variance:0' shape=(64,) dtype=float32, 
numpy= array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
dtype=float32)>: ['main_7_bn/moving_variance'] <tf.Variable 'output_2_dense/kernel:0' shape=(1280, 512) dtype=float32, numpy= array([[-0.02094965, 0.00852388, 0.04496232, ..., -0.04092743, -0.00846734, 0.04431263], [-0.02963931, -0.00313668, -0.03170427, ..., 0.01056307, 0.02062347, 0.04777423], [-0.05013105, -0.04554755, 0.00523922, ..., -0.0110755 , -0.01836499, -0.0455405 ], ..., [ 0.04707136, 0.02085339, -0.04872413, ..., -0.02858642, 0.04993968, 0.04699553], [ 0.01117366, -0.04784052, 0.00033194, ..., -0.05630704, -0.01801144, -0.05361051], [ 0.02260477, 0.00736987, -0.00476652, ..., 0.03626809, -0.02438066, 0.01097741]], dtype=float32)>: ['output_2_dense/kernel'] <tf.Variable 'output_2_dense/bias:0' shape=(512,) dtype=float32, 
numpy= array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], 
dtype=float32)>: ['output_2_dense/bias'] <tf.Variable 'output_3_dense_and_act/kernel:0' shape=(512, 2) dtype=float32, numpy= array([[ 0.01091592, 0.03015607], [ 0.00483519, 0.0001103 ], [ 0.00558881, -0.00509168], ..., [-0.0032148 , 0.00910777], [-0.00394375, 0.0050278 ], 
[-0.00027625, -0.00843583]], dtype=float32)>: ['output_3_dense_and_act/kernel'] <tf.Variable 'output_3_dense_and_act/bias:0' shape=(2,) dtype=float32, numpy=array([0., 0.], dtype=float32)>: ['output_3_dense_and_act/bias']

I got the sense that the way the project saved its model was through checkpoints based on the .data and .index extensions of the files in the weights folder. But when I use the checkpoint folder reading option described by tensorflow (latest = tf.train.latest_checkpoint(checkpoint_dir)). But when I try calling the code with that added line and just the folder as an input for the model, I receive the error below.

Weight loading lines:

checkpoint = tf.train.latest_checkpoint(weights_filepath)
model.load_weights(checkpoint)

Command:

python inference.py beyer_mod_relu ../trained_networks/beyer_mod_relu__depth__126x48__biternion__0_030000__1 ../nicr_rgb_d_orientation_data_set_examples/small_patches --input_type depth --input_preprocessing standardize --input_height 126 --input_width 48 --output_type biternion --n_samples 1 --cpu

Error:

AttributeError: 'NoneType' object has no attribute 'endswith'

Please let me know if you have any ideas.

Answer

The weights file extensions should be changed from .hdf5.index and .hdf5.data . . . to just .index and .data . . ..

The call for inference should then be modified accordingly to exclude the .hdf5 part, so e.g.

python inference.py beyer_mod_relu ../trained_networks/beyer_mod_relu__depth__126x48__biternion__0_030000__1/weights_valid_0268 ../nicr_rgb_d_orientation_data_set_examples/small_patches --input_type depth --input_preprocessing standardize --input_height 126 --input_width 48 --output_type biternion --n_samples 1 --cpu

should work.

Leave a Reply

Your email address will not be published. Required fields are marked *