Add dataset

This commit is contained in:
Kacper Donat 2020-05-26 20:48:12 +02:00
parent 965839ee00
commit 7c2485ce9b
85 changed files with 81 additions and 1 deletions

7
.gitignore vendored
View File

@ -139,3 +139,10 @@ cython_debug/
# Generated docs
*.pdf
/dataset/wav/
!/dataset/wav/.gitkeep
/dataset/processed/
!/dataset/processed/.gitkeep
/dataset/manifest.csv
/eval/

View File

@ -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

View File

@ -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.

BIN
dataset/midi/chp_op18.mid Normal file

Binary file not shown.

BIN
dataset/midi/chp_op31.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p1.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p10.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p11.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p12.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p13.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p14.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p15.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p16.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p17.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p18.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p19.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p2.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p20.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p21.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p22.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p23.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p24.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p3.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p4.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p5.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p6.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p7.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p8.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn-p9.mid Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
dataset/midi/chpn_op23.mid Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
dataset/midi/chpn_op53.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn_op66.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn_op7_1.mid Normal file

Binary file not shown.

BIN
dataset/midi/chpn_op7_2.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_311_1.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_311_2.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_311_3.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_330_1.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_330_2.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_330_3.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_331_1.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_331_2.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_331_3.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_332_1.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_332_2.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_332_3.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_333_1.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_333_2.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_333_3.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_545_1.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_545_2.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_545_3.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_570_1.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_570_2.mid Normal file

Binary file not shown.

BIN
dataset/midi/mz_570_3.mid Normal file

Binary file not shown.

BIN
dataset/midi/ty_april.mid Normal file

Binary file not shown.

BIN
dataset/midi/ty_august.mid Normal file

Binary file not shown.

Binary file not shown.

BIN
dataset/midi/ty_februar.mid Normal file

Binary file not shown.

BIN
dataset/midi/ty_januar.mid Normal file

Binary file not shown.

BIN
dataset/midi/ty_juli.mid Normal file

Binary file not shown.

BIN
dataset/midi/ty_juni.mid Normal file

Binary file not shown.

BIN
dataset/midi/ty_maerz.mid Normal file

Binary file not shown.

BIN
dataset/midi/ty_mai.mid Normal file

Binary file not shown.

Binary file not shown.

BIN
dataset/midi/ty_oktober.mid Normal file

Binary file not shown.

Binary file not shown.

44
prepare_dataset.py Normal file
View File

@ -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)