GithubHelp home page GithubHelp logo

deep-music's Introduction

Deep Music

Objective

Music recognition and generation using deep learning.

Project structure / design:

The project currently has three components, which exist as standalone packages:

  1. Preprocessing - convert NSynth audio .wav files to spectrograms with audiolib.
  2. Training - train a Convolutional Neural Network to classify instrument spectrograms with PyTorch.
  3. Serving - serve the classifier as a RESTful API with flask and gunicorn.

Each package:

  • Is callable from the command-line and has configurable parameters. For example, preprocessing is called with:
python -m preprocessing.task
   --data_dir path/to/import/raw/data \
   --job_dir path/to/export/processed/data \
   --filters_dir path/to/import/instrument/filters \
   --config $config \
   --instruments '["keyboard_acoustic", "guitar_acoustic"]'
  • Contains a JSON file of run configurations for reproducibility. For example, this preprocessing config file:

    • Gets parsed as $config in the above preprocessing example.
    • Gets exported by the training stage, so that the data used for training can be reproduced.
  • Contains shell scripts to run the package locally, with docker, and to deploy the docker image to cloud with a specific configuration ID. Example training scripts

Roadmap

  1. Instrument recognition (current):

    • Instrument classification from single note audio
    • Instrument detection from multiple note audio (songs)
  2. Genre recognition:

    • Genre classification from songs
  3. Music generation:

    • Instrument note generation
    • Musical piece generation
    • Song generation

deep-music's People

Contributors

julianferry avatar

Watchers

James Cloos avatar  avatar

deep-music's Issues

Move preprocessing to Apache Beam / Dataflow

Preprocessing currently converts all of the data in batch. However, this has a few configuration options and will probably need to be run multiple times with various parameters. It may be better to convert the preprocessing package to process only a single file or a subset of files, based on an input argument.

This would integrate well with Apache Beam, which would allow:

  • Running preprocessing only on the required files
  • Parallelisation (core feature)
  • Leverage multiple CPUs (gcloud Dataflow)
  • Simplified tracking of preprocessing configs

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.