diff --git a/.gitignore b/.gitignore index 3e952f0..0fcc7c9 100644 --- a/.gitignore +++ b/.gitignore @@ -139,3 +139,10 @@ cython_debug/ # Generated docs *.pdf + +/dataset/wav/ +!/dataset/wav/.gitkeep +/dataset/processed/ +!/dataset/processed/.gitkeep +/dataset/manifest.csv +/eval/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 51cce77..70e3216 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,4 +17,7 @@ RUN curl https://raw.githubusercontent.com/tensorflow/magenta/master/magenta/too sed 's/sudo //' -i /tmp/magenta-install.sh && \ bash --login /tmp/magenta-install.sh +# install fluidsynth for MIDI to WAV conversion +RUN apt-get install fluidsynth fluid-soundfont-gm --no-install-recommends + RUN echo "conda activate magenta" >> /root/.bashrc diff --git a/README.md b/README.md index 0be0dc9..acb8d0f 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,34 @@ $ make image # wywołuje docker build . --tag transcription:latest W ten sposób zostanie zbudowany obraz `transcription:latest`. Teraz możemy go wykorzystać: ``` -$ docker run -v "$(pwd):/root/experiment" -it transcription:latest +$ docker run -v "$(pwd):/root/experiment" -p 6006:6006 -it transcription:latest ``` W ten sposób powinniśmy znaleźć się wewnątrz kontenera z skonfigurowanym środowiskiem i pobranym checkpointem. Katalog w którym się znajdujemy powinien być zamontowany w obrazie jako `~/experiment`. + +## Dataset +Pliki midi zaczerpnięte z http://www.piano-midi.de/midi_files.htm stworzone przez Bernda Kruegera, udostępniane na licencji CC BY-SA 3.0. + +Do przygotowania datasetu z załączonych plików `midi` należy skorzystać ze skryptu `prepare_dataset`. Pomoc i opis argumentów można uzyskać z pomocą argumentu `-h`. + +Przykładowe wywołanie: +``` +python prepare_dataset.py -n 5 +``` + +Wygeneruje dataset z pierwszych 5 plików midi w folderze `./dataset/midi`. + +Następnie należy przygotować dataset do działania z siecią: +``` +python /opt/conda/envs/magenta/lib/python3.7/site-packages/magenta/models/onsets_frames_transcription/onsets_frames_transcription_create_tfrecords.py --csv="./dataset/manifest.csv" --output_directory="./dataset/processed" --wav_dir="./dataset/wav" --midi_dir="./dataset/midi" --expected_splits="test" +``` + +Niestety, w tej wersji jest błąd przez co alias `onsets_frames_transcription_create_tfrecords` nie działa i trzeba się ratować pełną ścieżką. + +Konwersję i testy możemy przeprowadzić komendą: +``` +onsets_frames_transcription_infer --model_dir="${MODEL_DIR}" --output_dir="./eval/" --examples_path=./dataset/processed/test.tfrecord* --hparams="use_cudnn=false" --preprocess_examples=True +``` + +Parametr `--hparams="use_cudnn=false"` można pominąć jeżeli dysponujemy GPU z CUDA. \ No newline at end of file diff --git a/dataset/midi/chp_op18.mid b/dataset/midi/chp_op18.mid new file mode 100644 index 0000000..df9efad Binary files /dev/null and b/dataset/midi/chp_op18.mid differ diff --git a/dataset/midi/chp_op31.mid b/dataset/midi/chp_op31.mid new file mode 100644 index 0000000..76a6fc4 Binary files /dev/null and b/dataset/midi/chp_op31.mid differ diff --git a/dataset/midi/chpn-p1.mid b/dataset/midi/chpn-p1.mid new file mode 100644 index 0000000..e3d6798 Binary files /dev/null and b/dataset/midi/chpn-p1.mid differ diff --git a/dataset/midi/chpn-p10.mid b/dataset/midi/chpn-p10.mid new file mode 100644 index 0000000..9ad5854 Binary files /dev/null and b/dataset/midi/chpn-p10.mid differ diff --git a/dataset/midi/chpn-p11.mid b/dataset/midi/chpn-p11.mid new file mode 100644 index 0000000..4b386df Binary files /dev/null and b/dataset/midi/chpn-p11.mid differ diff --git a/dataset/midi/chpn-p12.mid b/dataset/midi/chpn-p12.mid new file mode 100644 index 0000000..a125ad5 Binary files /dev/null and b/dataset/midi/chpn-p12.mid differ diff --git a/dataset/midi/chpn-p13.mid b/dataset/midi/chpn-p13.mid new file mode 100644 index 0000000..0fa9354 Binary files /dev/null and b/dataset/midi/chpn-p13.mid differ diff --git a/dataset/midi/chpn-p14.mid b/dataset/midi/chpn-p14.mid new file mode 100644 index 0000000..e9fc7fa Binary files /dev/null and b/dataset/midi/chpn-p14.mid differ diff --git a/dataset/midi/chpn-p15.mid b/dataset/midi/chpn-p15.mid new file mode 100644 index 0000000..0110702 Binary files /dev/null and b/dataset/midi/chpn-p15.mid differ diff --git a/dataset/midi/chpn-p16.mid b/dataset/midi/chpn-p16.mid new file mode 100644 index 0000000..a3e9e5f Binary files /dev/null and b/dataset/midi/chpn-p16.mid differ diff --git a/dataset/midi/chpn-p17.mid b/dataset/midi/chpn-p17.mid new file mode 100644 index 0000000..a873e47 Binary files /dev/null and b/dataset/midi/chpn-p17.mid differ diff --git a/dataset/midi/chpn-p18.mid b/dataset/midi/chpn-p18.mid new file mode 100644 index 0000000..4db6bc6 Binary files /dev/null and b/dataset/midi/chpn-p18.mid differ diff --git a/dataset/midi/chpn-p19.mid b/dataset/midi/chpn-p19.mid new file mode 100644 index 0000000..e7b247d Binary files /dev/null and b/dataset/midi/chpn-p19.mid differ diff --git a/dataset/midi/chpn-p2.mid b/dataset/midi/chpn-p2.mid new file mode 100644 index 0000000..1d8ed24 Binary files /dev/null and b/dataset/midi/chpn-p2.mid differ diff --git a/dataset/midi/chpn-p20.mid b/dataset/midi/chpn-p20.mid new file mode 100644 index 0000000..3eb7d06 Binary files /dev/null and b/dataset/midi/chpn-p20.mid differ diff --git a/dataset/midi/chpn-p21.mid b/dataset/midi/chpn-p21.mid new file mode 100644 index 0000000..71e9c36 Binary files /dev/null and b/dataset/midi/chpn-p21.mid differ diff --git a/dataset/midi/chpn-p22.mid b/dataset/midi/chpn-p22.mid new file mode 100644 index 0000000..bf55bf8 Binary files /dev/null and b/dataset/midi/chpn-p22.mid differ diff --git a/dataset/midi/chpn-p23.mid b/dataset/midi/chpn-p23.mid new file mode 100644 index 0000000..d247455 Binary files /dev/null and b/dataset/midi/chpn-p23.mid differ diff --git a/dataset/midi/chpn-p24.mid b/dataset/midi/chpn-p24.mid new file mode 100644 index 0000000..5dcaaf2 Binary files /dev/null and b/dataset/midi/chpn-p24.mid differ diff --git a/dataset/midi/chpn-p3.mid b/dataset/midi/chpn-p3.mid new file mode 100644 index 0000000..fea1143 Binary files /dev/null and b/dataset/midi/chpn-p3.mid differ diff --git a/dataset/midi/chpn-p4.mid b/dataset/midi/chpn-p4.mid new file mode 100644 index 0000000..d18c713 Binary files /dev/null and b/dataset/midi/chpn-p4.mid differ diff --git a/dataset/midi/chpn-p5.mid b/dataset/midi/chpn-p5.mid new file mode 100644 index 0000000..14da4ac Binary files /dev/null and b/dataset/midi/chpn-p5.mid differ diff --git a/dataset/midi/chpn-p6.mid b/dataset/midi/chpn-p6.mid new file mode 100644 index 0000000..a96998c Binary files /dev/null and b/dataset/midi/chpn-p6.mid differ diff --git a/dataset/midi/chpn-p7.mid b/dataset/midi/chpn-p7.mid new file mode 100644 index 0000000..cad3fca Binary files /dev/null and b/dataset/midi/chpn-p7.mid differ diff --git a/dataset/midi/chpn-p8.mid b/dataset/midi/chpn-p8.mid new file mode 100644 index 0000000..3060a2e Binary files /dev/null and b/dataset/midi/chpn-p8.mid differ diff --git a/dataset/midi/chpn-p9.mid b/dataset/midi/chpn-p9.mid new file mode 100644 index 0000000..e09f09a Binary files /dev/null and b/dataset/midi/chpn-p9.mid differ diff --git a/dataset/midi/chpn_op10_e01.mid b/dataset/midi/chpn_op10_e01.mid new file mode 100644 index 0000000..5d97980 Binary files /dev/null and b/dataset/midi/chpn_op10_e01.mid differ diff --git a/dataset/midi/chpn_op10_e05.mid b/dataset/midi/chpn_op10_e05.mid new file mode 100644 index 0000000..0d0f7b6 Binary files /dev/null and b/dataset/midi/chpn_op10_e05.mid differ diff --git a/dataset/midi/chpn_op10_e12.mid b/dataset/midi/chpn_op10_e12.mid new file mode 100644 index 0000000..5448203 Binary files /dev/null and b/dataset/midi/chpn_op10_e12.mid differ diff --git a/dataset/midi/chpn_op23.mid b/dataset/midi/chpn_op23.mid new file mode 100644 index 0000000..d9cfec7 Binary files /dev/null and b/dataset/midi/chpn_op23.mid differ diff --git a/dataset/midi/chpn_op25_e1.mid b/dataset/midi/chpn_op25_e1.mid new file mode 100644 index 0000000..8ec7da2 Binary files /dev/null and b/dataset/midi/chpn_op25_e1.mid differ diff --git a/dataset/midi/chpn_op25_e11.mid b/dataset/midi/chpn_op25_e11.mid new file mode 100644 index 0000000..261f6f6 Binary files /dev/null and b/dataset/midi/chpn_op25_e11.mid differ diff --git a/dataset/midi/chpn_op25_e12.mid b/dataset/midi/chpn_op25_e12.mid new file mode 100644 index 0000000..2e427aa Binary files /dev/null and b/dataset/midi/chpn_op25_e12.mid differ diff --git a/dataset/midi/chpn_op25_e2.mid b/dataset/midi/chpn_op25_e2.mid new file mode 100644 index 0000000..564d29d Binary files /dev/null and b/dataset/midi/chpn_op25_e2.mid differ diff --git a/dataset/midi/chpn_op25_e3.mid b/dataset/midi/chpn_op25_e3.mid new file mode 100644 index 0000000..a17da9c Binary files /dev/null and b/dataset/midi/chpn_op25_e3.mid differ diff --git a/dataset/midi/chpn_op25_e4.mid b/dataset/midi/chpn_op25_e4.mid new file mode 100644 index 0000000..305011d Binary files /dev/null and b/dataset/midi/chpn_op25_e4.mid differ diff --git a/dataset/midi/chpn_op27_1.mid b/dataset/midi/chpn_op27_1.mid new file mode 100644 index 0000000..d6607b7 Binary files /dev/null and b/dataset/midi/chpn_op27_1.mid differ diff --git a/dataset/midi/chpn_op27_2.mid b/dataset/midi/chpn_op27_2.mid new file mode 100644 index 0000000..0287012 Binary files /dev/null and b/dataset/midi/chpn_op27_2.mid differ diff --git a/dataset/midi/chpn_op33_2.mid b/dataset/midi/chpn_op33_2.mid new file mode 100644 index 0000000..e25a1e5 Binary files /dev/null and b/dataset/midi/chpn_op33_2.mid differ diff --git a/dataset/midi/chpn_op33_4.mid b/dataset/midi/chpn_op33_4.mid new file mode 100644 index 0000000..158dec0 Binary files /dev/null and b/dataset/midi/chpn_op33_4.mid differ diff --git a/dataset/midi/chpn_op35_1.mid b/dataset/midi/chpn_op35_1.mid new file mode 100644 index 0000000..300577a Binary files /dev/null and b/dataset/midi/chpn_op35_1.mid differ diff --git a/dataset/midi/chpn_op35_2.mid b/dataset/midi/chpn_op35_2.mid new file mode 100644 index 0000000..6fbc6ec Binary files /dev/null and b/dataset/midi/chpn_op35_2.mid differ diff --git a/dataset/midi/chpn_op35_3.mid b/dataset/midi/chpn_op35_3.mid new file mode 100644 index 0000000..d2e1f02 Binary files /dev/null and b/dataset/midi/chpn_op35_3.mid differ diff --git a/dataset/midi/chpn_op35_4.mid b/dataset/midi/chpn_op35_4.mid new file mode 100644 index 0000000..ec66b37 Binary files /dev/null and b/dataset/midi/chpn_op35_4.mid differ diff --git a/dataset/midi/chpn_op53.mid b/dataset/midi/chpn_op53.mid new file mode 100644 index 0000000..a32ac5f Binary files /dev/null and b/dataset/midi/chpn_op53.mid differ diff --git a/dataset/midi/chpn_op66.mid b/dataset/midi/chpn_op66.mid new file mode 100644 index 0000000..de8a018 Binary files /dev/null and b/dataset/midi/chpn_op66.mid differ diff --git a/dataset/midi/chpn_op7_1.mid b/dataset/midi/chpn_op7_1.mid new file mode 100644 index 0000000..739bada Binary files /dev/null and b/dataset/midi/chpn_op7_1.mid differ diff --git a/dataset/midi/chpn_op7_2.mid b/dataset/midi/chpn_op7_2.mid new file mode 100644 index 0000000..5fc9f9c Binary files /dev/null and b/dataset/midi/chpn_op7_2.mid differ diff --git a/dataset/midi/mz_311_1.mid b/dataset/midi/mz_311_1.mid new file mode 100644 index 0000000..b5f74cb Binary files /dev/null and b/dataset/midi/mz_311_1.mid differ diff --git a/dataset/midi/mz_311_2.mid b/dataset/midi/mz_311_2.mid new file mode 100644 index 0000000..c890038 Binary files /dev/null and b/dataset/midi/mz_311_2.mid differ diff --git a/dataset/midi/mz_311_3.mid b/dataset/midi/mz_311_3.mid new file mode 100644 index 0000000..f14135a Binary files /dev/null and b/dataset/midi/mz_311_3.mid differ diff --git a/dataset/midi/mz_330_1.mid b/dataset/midi/mz_330_1.mid new file mode 100644 index 0000000..70fcc67 Binary files /dev/null and b/dataset/midi/mz_330_1.mid differ diff --git a/dataset/midi/mz_330_2.mid b/dataset/midi/mz_330_2.mid new file mode 100644 index 0000000..1499cc0 Binary files /dev/null and b/dataset/midi/mz_330_2.mid differ diff --git a/dataset/midi/mz_330_3.mid b/dataset/midi/mz_330_3.mid new file mode 100644 index 0000000..38c929a Binary files /dev/null and b/dataset/midi/mz_330_3.mid differ diff --git a/dataset/midi/mz_331_1.mid b/dataset/midi/mz_331_1.mid new file mode 100644 index 0000000..81edeaf Binary files /dev/null and b/dataset/midi/mz_331_1.mid differ diff --git a/dataset/midi/mz_331_2.mid b/dataset/midi/mz_331_2.mid new file mode 100644 index 0000000..eb1ba7a Binary files /dev/null and b/dataset/midi/mz_331_2.mid differ diff --git a/dataset/midi/mz_331_3.mid b/dataset/midi/mz_331_3.mid new file mode 100644 index 0000000..403fc89 Binary files /dev/null and b/dataset/midi/mz_331_3.mid differ diff --git a/dataset/midi/mz_332_1.mid b/dataset/midi/mz_332_1.mid new file mode 100644 index 0000000..0dc2d8b Binary files /dev/null and b/dataset/midi/mz_332_1.mid differ diff --git a/dataset/midi/mz_332_2.mid b/dataset/midi/mz_332_2.mid new file mode 100644 index 0000000..5910360 Binary files /dev/null and b/dataset/midi/mz_332_2.mid differ diff --git a/dataset/midi/mz_332_3.mid b/dataset/midi/mz_332_3.mid new file mode 100644 index 0000000..a351b1c Binary files /dev/null and b/dataset/midi/mz_332_3.mid differ diff --git a/dataset/midi/mz_333_1.mid b/dataset/midi/mz_333_1.mid new file mode 100644 index 0000000..c4b5d74 Binary files /dev/null and b/dataset/midi/mz_333_1.mid differ diff --git a/dataset/midi/mz_333_2.mid b/dataset/midi/mz_333_2.mid new file mode 100644 index 0000000..df3d6fe Binary files /dev/null and b/dataset/midi/mz_333_2.mid differ diff --git a/dataset/midi/mz_333_3.mid b/dataset/midi/mz_333_3.mid new file mode 100644 index 0000000..de036dc Binary files /dev/null and b/dataset/midi/mz_333_3.mid differ diff --git a/dataset/midi/mz_545_1.mid b/dataset/midi/mz_545_1.mid new file mode 100644 index 0000000..924e6c6 Binary files /dev/null and b/dataset/midi/mz_545_1.mid differ diff --git a/dataset/midi/mz_545_2.mid b/dataset/midi/mz_545_2.mid new file mode 100644 index 0000000..4240968 Binary files /dev/null and b/dataset/midi/mz_545_2.mid differ diff --git a/dataset/midi/mz_545_3.mid b/dataset/midi/mz_545_3.mid new file mode 100644 index 0000000..57aa8f2 Binary files /dev/null and b/dataset/midi/mz_545_3.mid differ diff --git a/dataset/midi/mz_570_1.mid b/dataset/midi/mz_570_1.mid new file mode 100644 index 0000000..40f8bbe Binary files /dev/null and b/dataset/midi/mz_570_1.mid differ diff --git a/dataset/midi/mz_570_2.mid b/dataset/midi/mz_570_2.mid new file mode 100644 index 0000000..105458a Binary files /dev/null and b/dataset/midi/mz_570_2.mid differ diff --git a/dataset/midi/mz_570_3.mid b/dataset/midi/mz_570_3.mid new file mode 100644 index 0000000..f454d83 Binary files /dev/null and b/dataset/midi/mz_570_3.mid differ diff --git a/dataset/midi/ty_april.mid b/dataset/midi/ty_april.mid new file mode 100644 index 0000000..d43addb Binary files /dev/null and b/dataset/midi/ty_april.mid differ diff --git a/dataset/midi/ty_august.mid b/dataset/midi/ty_august.mid new file mode 100644 index 0000000..5a96120 Binary files /dev/null and b/dataset/midi/ty_august.mid differ diff --git a/dataset/midi/ty_dezember.mid b/dataset/midi/ty_dezember.mid new file mode 100644 index 0000000..9083f55 Binary files /dev/null and b/dataset/midi/ty_dezember.mid differ diff --git a/dataset/midi/ty_februar.mid b/dataset/midi/ty_februar.mid new file mode 100644 index 0000000..e02033b Binary files /dev/null and b/dataset/midi/ty_februar.mid differ diff --git a/dataset/midi/ty_januar.mid b/dataset/midi/ty_januar.mid new file mode 100644 index 0000000..eedd335 Binary files /dev/null and b/dataset/midi/ty_januar.mid differ diff --git a/dataset/midi/ty_juli.mid b/dataset/midi/ty_juli.mid new file mode 100644 index 0000000..76e7d64 Binary files /dev/null and b/dataset/midi/ty_juli.mid differ diff --git a/dataset/midi/ty_juni.mid b/dataset/midi/ty_juni.mid new file mode 100644 index 0000000..38c2c64 Binary files /dev/null and b/dataset/midi/ty_juni.mid differ diff --git a/dataset/midi/ty_maerz.mid b/dataset/midi/ty_maerz.mid new file mode 100644 index 0000000..22c4162 Binary files /dev/null and b/dataset/midi/ty_maerz.mid differ diff --git a/dataset/midi/ty_mai.mid b/dataset/midi/ty_mai.mid new file mode 100644 index 0000000..36c8f3d Binary files /dev/null and b/dataset/midi/ty_mai.mid differ diff --git a/dataset/midi/ty_november.mid b/dataset/midi/ty_november.mid new file mode 100644 index 0000000..0164437 Binary files /dev/null and b/dataset/midi/ty_november.mid differ diff --git a/dataset/midi/ty_oktober.mid b/dataset/midi/ty_oktober.mid new file mode 100644 index 0000000..762b011 Binary files /dev/null and b/dataset/midi/ty_oktober.mid differ diff --git a/dataset/midi/ty_september.mid b/dataset/midi/ty_september.mid new file mode 100644 index 0000000..7e7d77a Binary files /dev/null and b/dataset/midi/ty_september.mid differ diff --git a/prepare_dataset.py b/prepare_dataset.py new file mode 100644 index 0000000..371ed01 --- /dev/null +++ b/prepare_dataset.py @@ -0,0 +1,44 @@ +from glob import glob +from argparse import ArgumentParser +from os import system, path +import csv + + +parser = ArgumentParser(description="Prepare dataset from midi files for later use in onsets and frames.") +parser.add_argument('--dry', '-d', dest='dry', action='store_true', help="Dry run, print commands instead of executing them") +parser.add_argument('--no-convert', '-m', dest='no_convert', action='store_true', help="Only create manifest.") +parser.add_argument('--soundfont', '-f', default='/usr/share/sounds/sf2/FluidR3_GM.sf2', help="Path to soundfont.") +parser.add_argument('-n', type=int, help="Max midi files to process") + +args = parser.parse_args() + +execute = print if args.dry else system + +processed = 0 +if not args.no_convert: + for midi in glob("dataset/midi/*.mid"): + wav = midi.replace('.mid', '.wav').replace('/midi/', '/wav/') + + processed = processed + 1 + if 'n' in args and processed > args.n: + break + + if path.isfile(wav): + continue + + print(f"Converting {midi} to {wav}") + execute(f"fluidsynth -nli -r 48000 -T wav -F {wav} {args.soundfont} {midi} > /dev/null") + + +manifest = [] +for wav in glob("dataset/wav/*.wav"): + midi = wav.replace('.wav', '.mid').replace('/wav/', '/midi/') + + if path.isfile(midi): + manifest.append((path.basename(wav), path.basename(midi), 'test')) + + +with open('dataset/manifest.csv', 'w') as manifest_file: + writer = csv.writer(manifest_file) + writer.writerow(('audio_filename', 'midi_filename', 'split')) + writer.writerows(manifest) \ No newline at end of file