Description
Hello,
I've experienced these two issues when using crepe and spleeter libraries together, specifically when trying to call crepe.predict method after calling separate method of spleeter.
Here is a code in Google Colab:
!pip install crepe
!pip install spleeter
from spleeter.separator import Separator
from spleeter.audio.adapter import AudioAdapter
separator = Separator('spleeter:4stems')
audio_loader = AudioAdapter.default()
srate = 44100
audio1, _ = audio_loader.load('audio1.wav', sample_rate = srate)
audio2, _ = audio_loader.load('audio2.wav', sample_rate = srate)
separation = separator.separate(audio1)
import crepe
times1, freqs1, confidence1, activation1 = crepe.predict(audio1, srate, viterbi=True)
The output is following:
RuntimeError Traceback (most recent call last)
...
----> 2 times1, freqs1, confidence1, activation1 = crepe.predict(audio1, srate, viterbi=True)
4 frames
/usr/local/lib/python3.10/dist-packages/tensorflow/python/framework/ops.py in _check_not_finalized(self)
3321 """
3322 if self._finalized:
-> 3323 raise RuntimeError("Graph is finalized and cannot be modified.")
3324
3325 def _add_op(self, op, op_name):RuntimeError: Graph is finalized and cannot be modified.
To avoid this, we can write the following commands instead of the last string:
import tensorflow as tf
with tf.Graph().as_default():
times1, freqs1, confidence1, activation1 = crepe.predict(audio1, srate, viterbi=True)
In this case the prediction will be performed without errors.
But if we try to do another prediction after that, for example:
with tf.Graph().as_default():
times2, freqs2, confidence2, activation2 = crepe.predict(audio2, srate, viterbi=True)
then we'll get the following error:
InvalidArgumentError Traceback (most recent call last)
in <cell line: 1>()
1 with tf.Graph().as_default():
----> 2 times2, freqs2, confidence2, activation2 = crepe.predict(audio2, srate, viterbi=True)8 frames
/usr/local/lib/python3.10/dist-packages/tensorflow/python/client/session.py in init(self, session, callable_options)
1469 compat.as_bytes(callable_options.SerializeToString()))
1470 try:
-> 1471 self._handle = tf_session.TF_SessionMakeCallable(
1472 session._session, options_ptr)
1473 finally:InvalidArgumentError: Tensor input:0, specified in either feed_devices or fetch_devices was not found in the Graph
To avoid this, we must call predict method for both files inside the same "with" section:
with tf.Graph().as_default():
times1, freqs1, confidence1, activation1 = crepe.predict(audio1, srate, viterbi=True)
times2, freqs2, confidence2, activation2 = crepe.predict(audio2, srate, viterbi=True)
But sometimes it is impossible.
The following versions were used:
- python 3.10
- crepe 0.0.15
- spleeter 2.4.0
- tensorflow 2.9.3