spotify / basic-pitch

A lightweight yet powerful audio-to-MIDI converter with pitch bend detection
https://basicpitch.io
Apache License 2.0
3.5k stars 275 forks source link

'add_slot' failing in Windows 11 installation #117

Closed pdduggan closed 7 months ago

pdduggan commented 8 months ago

Here is my output. I would appreciate any help in getting the tool working.

'_UserObject' object has no attribute 'add_slot'
Traceback (most recent call last):
  File "F:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\basic_pitch\predict.py", line 132, in main
    predict_and_save(
  File "F:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\basic_pitch\inference.py", line 383, in predict_and_save
    model = saved_model.load(str(model_path))
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "F:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\tensorflow\python\saved_model\load.py", line 912, in load
    result = load_partial(export_dir, None, tags, options)["root"]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "F:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\tensorflow\python\saved_model\load.py", line 1042, in load_partial
    loader = Loader(object_graph_proto, saved_model_proto, export_dir,
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "F:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\tensorflow\python\saved_model\load.py", line 223, in __init__
    self._load_all()
  File "F:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\tensorflow\python\saved_model\load.py", line 320, in _load_all
    self._load_nodes()
  File "F:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\tensorflow\python\saved_model\load.py", line 529, in _load_nodes
    slot_variable = optimizer_object.add_slot(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: '_UserObject' object has no attribute 'add_slot'

Thanks

drubinstein commented 8 months ago

Hi. This is a problem we discovered recently as well. It's due to the tensorflow 2.16 release where keras 3 is now used for the saved model format. Currently the main branch has tensorflow pinned to <2.16 which should work until we push the new minor release (once we're sure there are no bugs in main).

Dragonfore commented 8 months ago

Hi @pdduggan ,

In the future, it is better to provide at least the following specifications as this can be a few possible issues. A few examples of what should be provided is (but exclusively)

A few things that I have previously considered when setting this (or other Machine Learning projects is the following) OS: Windows 11 - Command Line Terminal VIA VSCode CPU & GPU: AMD Ryzen 5 PRO 7540U + AMD Radeon 740M Graphics (CPU-only, GPU disabled) Python Version: 3.10.11 through Pyenv PIP Versions: (tensorflow-cpu<2.11 basic-pitch setuptools) -> installations required Package Version

absl-py 2.1.0 asttokens 2.4.1 astunparse 1.6.3 audioread 3.0.1 basic-pitch 0.2.6 cachetools 5.3.3 certifi 2024.2.2 cffi 1.16.0 charset-normalizer 3.3.2 colorama 0.4.6 comm 0.2.2 debugpy 1.8.1 decorator 5.1.1 dm-tree 0.1.8 exceptiongroup 1.2.0 executing 2.0.1 flatbuffers 24.3.7 future 1.0.0 gast 0.4.0 google-auth 2.28.2 google-auth-oauthlib 0.4.6 google-pasta 0.2.0 grpcio 1.62.1 h5py 3.10.0 idna 3.6 ipykernel 6.29.3 ipython 8.22.2 jedi 0.19.1 joblib 1.3.2 jupyter_client 8.6.1 jupyter_core 5.7.2 keras 2.10.0 keras-nightly 3.1.0.dev2024031503 Keras-Preprocessing 1.1.2 lazy_loader 0.3 libclang 16.0.6 librosa 0.10.1 llvmlite 0.42.0 Markdown 3.6 markdown-it-py 3.0.0 MarkupSafe 2.1.5 matplotlib-inline 0.1.6 mdurl 0.1.2 mido 1.3.2 mir-eval 0.7 ml-dtypes 0.3.2 msgpack 1.0.8 namex 0.0.7 nest-asyncio 1.6.0 numba 0.59.0 numpy 1.23.5 oauthlib 3.2.2 opt-einsum 3.3.0 packaging 23.2 parso 0.8.3 pip 23.0.1 platformdirs 4.2.0 pooch 1.8.1 pretty-midi 0.2.10 prompt-toolkit 3.0.43 protobuf 3.19.6 psutil 5.9.8 pure-eval 0.2.2 pyasn1 0.5.1 pyasn1-modules 0.3.0 pycparser 2.21 Pygments 2.17.2 python-dateutil 2.9.0.post0 pywin32 306 pyzmq 25.1.2 requests 2.31.0 requests-oauthlib 1.4.0 resampy 0.4.3 rich 13.7.1 rsa 4.9 scikit-learn 1.4.1.post1 scipy 1.12.0 setuptools 65.5.0 six 1.16.0 soundfile 0.12.1 soxr 0.3.7 stack-data 0.6.3 tb-nightly 2.17.0a20240315 tensorboard 2.10.1 tensorboard-data-server 0.6.1 tensorboard-plugin-wit 1.8.1 tensorflow-cpu 2.10.1 tensorflow-directml-plugin 0.2.0.dev221020 tensorflow-estimator 2.10.0 tensorflow-intel 2.10.1 tensorflow-io-gcs-filesystem 0.31.0 termcolor 2.4.0 tf-nightly 2.17.0.dev20240306 tf_nightly_intel 2.17.0.dev20240306 threadpoolctl 3.3.0 tornado 6.4 traitlets 5.14.2 typing_extensions 4.10.0 urllib3 2.2.1 wcwidth 0.2.13 Werkzeug 3.0.1 wheel 0.43.0 wrapt 1.16.0 Other information: Jupyter on Visual Studio Code Insiders (Daily build)

Here are a few steps I took to solve it:

# Uses Spotify Open-Source Basic Pitch audio-to-midi conversion
from basic_pitch.inference import predict
from basic_pitch import ICASSP_2022_MODEL_PATH
from os.path import join as pathjoin
from os import sep
import tensorflow as tf

# Set variables
input_file_path = pathjoin("C:" + sep, "repo", "JupyterNotebooks", "cached_data", "blob_data", "nuvoleBianche.mp3")
output_file_path = pathjoin("C:" + sep, "repo", "JupyterNotebooks", "cached_data", "processed_data", "")

# Check version and load model (used as workaround in Windows)
print(tf.__version__)
tf.config.set_visible_devices([], "GPU")
basic_pitch_model = tf.saved_model.load(ICASSP_2022_MODEL_PATH)

# Perform prediction
(model_output, midi_data, note_events) = predict(
    input_file_path,
    basic_pitch_model,
)

# Do something with the data
print(note_events)
Dragonfore commented 8 months ago

@drubinstein I would recommend that this issue is set to closed based on the initial description and may be re-opened once the author provides more information or goes through the necessary steps based on input I provided.

drubinstein commented 8 months ago

Hi @Dragonfore . I'm gonna keep the issue open until he responds. I'm fairly confident the issue is with tensorflow 2.16.1 (released last week) as I ran into this error earlier this week when working on and merging #100.

Regardless, there's no reason to be a stickler here and close and reopen the issue. He provided enough detail to get started and I could always ask for more e.g. how he's invoking it. What could be useful is an issue template and I can make one or base one off of what you wrote. Thanks for your comments.

FYI your packages may have a slight conflict given that they install tensorflow-cpu<2.11 and tf-nightly 2.17.

Dragonfore commented 8 months ago

Hi @drubinstein Thanks for the FYI on the package conflicts! I do think that an issue template would be beneficial if you have some time or I might be able to create a PR to do this sometime in the next week or so.

Sorry about the recommendation to close, I should have waited until after a response was provided as there was a reasonable amount of detail. After re-reading, I did come across as a stickler, my goal only goal was trying to help out for the reporting of possible issues. I'll keep that in mind for the future.

Additionally, @pdduggan if you have any other questions please feel free to provide more info and sorry for one of my previous comment about closing prematurely.

whythomedia commented 8 months ago

I had the same issue and rolling back from tensorflow 2.16 to 2.15 fixed the problem for me.

I'm on OSX using python 3.11

drubinstein commented 7 months ago

Until I can find a way to reserialize the model or find what transitive dependency is breaking model loading, I've pinned tensorflow to <2.15.1. I hope this doesn't impede any of your work.